How Can We Help?

Print

Unterroutine: Modbus Master RTU für Read Holding Registers, Read Input Registers und Write Holding Registers

 

Diese Modbus Master Subroutine ist sehr nützlich, wenn Sie unsere unglaubliche ACE PLC zum Lesen oder Schreiben in einem Modbus RTU Slave Gerät verwenden möchten.

Wenn Sie die ACE SPS an einen Frequenzumrichter, einen intelligenten Sensor, ein einfaches Display, Remote I/O oder sogar eine ACE SPS anschließen möchten!

Diese Subroutine ermöglicht es Ihnen:

  • Lesen von Holding-Registern – Funktionscode 03
  • Lesen von Eingangsregistern – Funktionscode 04
  • Schreiben von Holding-Registern – Funktionscode 06

Sie können die Subroutine mit dem Beispiel hierherunterladen .

Achtung, dieser Modbus Master ist nicht so schnell wie ein nativer Modbus Master. Sehen Sie sich dieses Video an, um eine Vorstellung zu bekommen.
Wir fragen 8 Modbus-Slave-Temperatursensoren über das RS485-Netzwerk ab. (ACE-1430)

Wie funktioniert das Unterprogramm Modbus Master?

Ihre ACE SPS muss als Typ = „Custom“ serielle Schnittstelle konfiguriert sein.

Importieren Sie in Ihr Projekt die 2 Unterprogramme über die Schaltfläche „Add Subroutine“:

  • MBCRC16
  • ModbusMaster

Definieren Sie Ihre Modbus-Anforderungen zum Lesen und Schreiben von Daten. Es ist sehr wichtig, dass Sie zuerst die Daten lesen und dann die anderen schreiben.

In unserem Beispiel wollen wir diese Modbus-Register lesen und schreiben:

Nummer “ n “ der Modbus-Anfrage Slave-ID des Modbus-Slave-Geräts
SlaveID[n]
Lesen oder Schreiben im Register ?
FunktionsCode[n]
Adresse im Modbus-Register ?
Register[n]
[0] 01 03 (Lesen von Holding-Registern) 00
[1] 01 03 (Lesen von Halteregistern) 01
[2] 01 06 (Schreiben von Holding-Registern) 02 (In unserem Beispiel schreiben wir 65432)
[3] 01 06 (Schreiben von Holding Registern) 03 (In unserem Beispiel schreiben wir in den Tag „ValueMove“)

Wir verwenden ein Array mit „n“ Elementen für jeden Parameter

Richten Sie diese Tags ein:

  • FunctionCode, ui8, ist Array, 16 (16, wenn Sie bis zu 16 Werte im Modus-Register lesen/schreiben wollen)
  • SlaveID, ui8, ist ein Array, 16
  • Register, ui16, ist Array, 16
  • Daten, ui16, ist Array, 16

Wenn Sie zum Beispiel nur 3 Register lesen/schreiben müssen, können Sie das Array von 16 auf 3 anpassen.

Nun können Sie Ihr Array mit den 3 Werten für jede Modbus-Anfrage vervollständigen:

Wir beginnen mit n = 0

  • SlaveID[0] = 01
  • FunktionsCode[0] = 03
  • Register[0] = 00

und weiter… n = 1

  • SlaveID[1] = 01
  • FunktionsCode[1] = 03
  • Register[1] = 01

< ! > Wichtig: Die letzte Zeile muss SlaveID[n 1] = 00 sein, in unserem Beispiel SlaveID[4] = 00
Damit wird dem Modbus-Master-Unterprogramm mitgeteilt, dass es keine weiteren Register mehr zu lesen gibt! Das ist das Ende! Wir fangen wieder von vorne an (n=0)!

Und fügen Sie jetzt einfach das Unterprogramm ModbusMaster hinzu!

Sie müssen dieses Unterprogramm bei jedem SPS-Zyklus aufrufen.

Sie erhalten Ihre Daten in der Datei Data[n] array.

Wenn Sie die Schreibfunktion verwenden, vergessen Sie nicht, den Wert einzugeben. In unserem Beispiel schreiben wir 65432 in Data [2] und den Wert eines anderen „ValueMove“-Tags in Data [3].