This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
sdk:dio2modbustcp [2015/05/12 09:46] fachet |
sdk:dio2modbustcp [2018/01/24 15:53] (current) juraschek |
||
---|---|---|---|
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) { // write commands | switch (cmd) { // write commands | ||
Line 80: | Line 92: | ||
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]; | ||
Line 94: | Line 106: | ||
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"); | ||
Line 100: | Line 112: | ||
"bits", mkarray(nb_dio_get("out1"), nb_dio_get("out2")), | "bits", mkarray(nb_dio_get("out1"), nb_dio_get("out2")), | ||
"ibits", mkarray(nb_dio_get("in1"), nb_dio_get("in2")), | "ibits", mkarray(nb_dio_get("in1"), nb_dio_get("in2")), | ||
- | "regs", mkarray(), | + | "regs", mkarray(0,0), |
"iregs", mkarray((int)syst.TEMPERATURE, (int)wwan.MOBILE1_RSRP) | "iregs", mkarray((int)syst.TEMPERATURE, (int)wwan.MOBILE1_RSRP) | ||
); | ); |