Ние поддържаме Modbus RTU/ASCII със сериен и TCP интерфейси. Основния Modbus клас е rlModbus . Изберете "Daemon->Modbus" от pvbuilder, за да създадете Modbus демон, след което редактирайте малкия INI файл, който описва какво да се чете от Modbus.
Можете да използвате rlModbusClient в pvserver, за да комуникирате с Modbus.
Modbus се поддържа от много устройства, а дори устройството да не го поддържа, има възможност да използвате "преходник".
Изберете менюто "rllib->uncomment modbus" в pvbuilder, за да използвате Modbus.
Modbus демо
typedef struct // (todo: define your data structure here) { char s[6]; // switches } DATA; static int slotInit(PARAM *p, DATA *d) { if(p == NULL || d == NULL) return -1; memset(d,0,sizeof(DATA)); d->s[0] = -1; d->s[1] = -1; d->s[2] = -1; d->s[3] = -1; d->s[4] = -1; d->s[5] = -1; return 0; } static int slotNullEvent(PARAM *p, DATA *d) { if(p == NULL || d == NULL) return -1; int i,val; for(i=0; i<6; i++) { val = modbus.readBit(0,i+4); // the first 4 bits are outputs if(d->s[i] != val) { if(val == 1) pvSetTablePixmap(p,table1,0,i,"icon_green.bmp"); else pvSetTablePixmap(p,table1,0,i,"icon_red.bmp"); d->s[i] = val; } } return 0; } static int slotTableTextEvent(PARAM *p, int id, DATA *d, int x, int y, const char *text) { if(p == NULL || id == 0 || d == NULL || x < -1000 || y < -1000 || text == NULL) return -1; if(i == table1 && x == 1) { int val; sscanf(text,"%d",&val); modbus.writeSingleCoil(1,y,val); } return 0; }