Beispiel
Modbus Datenerfassung
In pvbaddon/daemons/modbus/client/ finden Sie einen Daemon für Modbus, der mit Hilfe einer INI-Datei parametriert wird. Mit USE_SOCKET=0 wird Modbus RTU über eine serielle Schnittstelle ausgewählt. Mit USE_SOCKET=1 würden Sie, Modbus TCP auswählen. Unter [CYCLES] definieren Sie, was Sie vom Modbus lesen wollen. In diesen Beispielen lesen alle Zyklen von Slave 1 ab Adresse 0. Wir lesen jeweils 10, 8, 2 und 2 Datenelemente.
example.ini
# ini file for modbus_client # # USE_SOCKET := 1 | 0 # if 0 then USE_TTY # DEBUG := 1 | 0 # BAUDRATE := 300 | # 600 | # 1200 | # 1800 | # 2400 | # 4800 | # 9600 | # 19200 | # 38400 | # 57600 | # 115200 # STOPBITS := 1 | 2 # PARITY := NONE | ODD | EVEN # PROTOCOL := RTU | ASCII # CYCLE:= , # name := coilStatus(slave,adr) | # inputStatus(slave,adr) | # holdingRegisters(slave,adr) | # inputRegisters(slave,adr) # CYCLETIME in milliseconds # SHARED_MEMORY_SIZE must be equal to SHARED_MEMORY_SIZE of pvserver # MAX_NAME_LENGTH is maximum length of variable name in shared memory # [GLOBAL] USE_SOCKET=0 DEBUG=1 CYCLETIME=1000 N_POLL_SLAVE=5 # number of cycles a slave will not be polled when it fails [SOCKET] IP=192.168.1.100 PORT=502 [TTY] DEVICENAME=/dev/ttyUSB0 BAUDRATE=9600 RTSCTS=1 STOPBITS=1 PARITY=NONE PROTOCOL=RTU [RLLIB] MAX_NAME_LENGTH=30 SHARED_MEMORY=/srv/automation/shm/modbus1.shm SHARED_MEMORY_SIZE=65536 MAILBOX=/srv/automation/mbx/modbus1.mbx [CYCLES] NUM_CYCLES=4 CYCLE1=10,inputStatus(1,0) CYCLE2=8,coilStatus(1,0) CYCLE3=2,holdingRegisters(1,0) CYCLE4=2,inputRegisters(1,0)
Modbus register map
Innerhalb rlModbus werden alle Daten-Adressen in den Modbus Datenpaketen auf 0 bezogen. Das erste Datenelement ist unter Adresse 0 verfügbar.
0xxxx Read/Write Discrete Outputs or Coils. 1xxxx Read Discrete Inputs. 3xxxx Read Input Registers. 4xxxx Read/Write Output or Holding Registers.
Coil/Register Numbers |
Data Addresses |
Type | Table Name |
1-9999 |
0000 to 270E |
Read-Write | Discrete Output Coils |
10001-19999 |
0000 to 270E |
Read-Only | Discrete Input Contacts |
30001-39999 |
0000 to 270E | Read-Only | Analog Input Registers |
40001-49999 |
0000 to 270E | Read-Write | Analog Output Holding Registers |
Creating multiple "modbusdaemon" from within pvdevelop
(Der Patch von Nestor Levi Palomeque ist inzwischen in den Binärpaketen enthalten)
Das Erzeugen von "modbusdaemon" in pvdevelop verhält sich so wie zuvor, aber nun gibt es 2 zusätzliche Schaltflächen: "Open" und "New", um mehrere Modbus Verbindungen anlegen zu können. Das hat den Vorteil, dass mehrere Modbus TCP Verbindungen mit jeweils einem eigenen "shared memory" und "mailbox" angelegt werden können.
Siehe auch auf youtube:
Testing multiple modbusdaemon (Modbus TCP) in PVBrowser 1/2.
Testing multiple modbusdaemon (Modbus TCP) in PVBrowser 2/2.