Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
sdk:dio2modbustcp [2015/05/12 09:44] fachetsdk:dio2modbustcp [2015/05/13 14:28] fachet
Line 3: Line 3:
 /* DESC: This script can be used to access to the digital I/Os via Modbus TCP /* DESC: This script can be used to access to the digital I/Os via Modbus TCP
  * Copyright (C) 2015 NetModule AG, Switzerland  * Copyright (C) 2015 NetModule AG, Switzerland
- supports Read Coil Status (FC01)Read Input Status (FC02) and Force Single Coil (FC05)+ * 
 +   Commands:    
 +     Read Coil Status (FC01) 
 +     Read Input Status (FC02) 
 +     Read Input Register (FC04) 
 +     Force Single Coil (FC05) 
 +     Write Multiple Coils (FC15) 
 +        
    Mapping:     Mapping: 
      Coil status(digital I/O): 1=out1, 2=out2      Coil status(digital I/O): 1=out1, 2=out2
      Input satus(digital In): 1=in1, 2=in2        Input satus(digital In): 1=in1, 2=in2  
      Input register : 1=temperature 2=mobile 1 rsrp      Input register : 1=temperature 2=mobile 1 rsrp
 + *
  */  */
  
Line 33: Line 41:
     break;         break;    
     }     }
-    return ret;+  return ret;
 } }
  
Line 48: Line 56:
   exit(3);    exit(3); 
  
 +
 cfd = -1;  cfd = -1; 
 for(;;) { for(;;) {
Line 63: Line 72:
     }     }
   }   }
 +  
   if ((r = nb_modbus_receive(cfd)) == NULL) {   if ((r = nb_modbus_receive(cfd)) == NULL) {
     printf("Unable to receive request (%s)\n", nb_modbus_last_error());     printf("Unable to receive request (%s)\n", nb_modbus_last_error());
Line 70: Line 80:
     continue;     continue;
   }    } 
 +  
   if (r[6] != SLAVEID)   if (r[6] != SLAVEID)
     continue; // not for us      continue; // not for us 
 +  
   cmd = r[7]; // command   cmd = r[7]; // command
-  switch (cmd) { +  switch (cmd) { // write commands 
-    case 1: // read coil status +
-    case 2: // read input status +
-      break; // no write action, only reply needed+
     case 5: // write to a single coil     case 5: // write to a single coil
       addr = r[8]<<8 + r[9];       addr = r[8]<<8 + r[9];
       data = r[10]<<8 + r[11];       data = r[10]<<8 + r[11];
-    if (set_io(addr, data) == -1) +      if (set_io(addr, data) == -1) 
-    continue; // error+        continue; // error
       break;       break;
-    case 15: +    case 15: // write to multiple coils 
-    addr = r[8]<<8 + r[9]; +      addr = r[8]<<8 + r[9]; 
-    cnt = r[10]<<8 + r[11];+      cnt = r[10]<<8 + r[11];
       for (i = 0; i < cnt; i ++)       for (i = 0; i < cnt; i ++)
         if (set_io(addr+i, (int) (r[13+i/8] & 1<<(i%256))) == -1)         if (set_io(addr+i, (int) (r[13+i/8] & 1<<(i%256))) == -1)
Line 96: Line 105:
     case 2: // read input status     case 2: // read input status
     case 5: // write to a single coil     case 5: // write to a single coil
-  case 4: // read input register +    case 4: // read input register 
-  case 15: // write to multiple coil +    case 15: // write to multiple coils 
-    syst = nb_status("system"); +      syst = nb_status("system"); 
-    wwan = nb_status("wwan");+      wwan = nb_status("wwan");
       resp = mkstruct(       resp = mkstruct(
         "bits", mkarray(nb_dio_get("out1"), nb_dio_get("out2")),         "bits", mkarray(nb_dio_get("out1"), nb_dio_get("out2")),
Line 116: Line 125:
   }   }
 }    }   
-/* not reached */</code>+/* not reached */ 
 +</code>