Wir unterstützen das Modbus RTU/ASCII
Interface mit serieller Schnittstelle und TCP. Die grundlegende Klasse ist rlModbus . Um den Modbus Daemon zu erstellen wählen Sie "Daemon->Modbus" in pvdevelop. Nun können Sie eine kleine INI-Datei editieren, die beschreibt, was von dem Modbus gelesen werden soll.
Innerhalb Ihres pvserver können Sie nun rlModbusClient
nutzen, um mit dem Modbus zu kommunizieren.
Modbus ist für eine Vielzahl von Geräten verfügbar. Sogar, wenn das Gerät Modbus nicht direkt unterstützt, gibt es gute Möglichkeiten über ein Gateway zum Modbus zu verbinden.
Um Modbus zu nutzen, wählen Sie das Menu "rllib->uncomment modbus" in pvdevelop.
Modbus Demo
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; }