How Can We Help?

Print

Subroutine: Master Modbus RTU per lettura registri di mantenimento, lettura registri di ingresso e scrittura registri di mantenimento

 

Questa subroutine Modbus Master è molto utile se si desidera utilizzare il nostro incredibile PLC ACE per leggere o scrivere in un dispositivo Modbus RTU Slave.

Se si desidera collegare il PLC ACE a un variatore di frequenza, a un sensore intelligente, a un semplice display, a un I/O remoto o persino a un PLC ACE!

Questa subroutine consente di:

  • Leggere i registri di mantenimento – Codice funzione 03
  • Leggere i registri di ingresso – Codice funzione 04
  • Scrivere i registri di mantenimento – Codice funzione 06

È possibile scaricare la subroutine con il relativo esempio qui.

Attenzione, questo Modbus Master non è veloce come un Modbus Master nativo. Guardate questo video per farvi un’idea.
Eseguiamo il polling di 8 sensori di temperatura slave Modbus sulla rete RS485. (ACE-1430)

Come funziona la subroutine Modbus Master?

Il PLC ACE deve essere configurato come porta seriale Type = “Custom”.

Importare nel progetto le 2 subroutine tramite il pulsante “Aggiungi subroutine”:

  • MBCRC16
  • ModbusMaster

Definire le richieste Modbus per leggere e scrivere i dati. È molto importante leggere prima i dati e poi scrivere gli altri.

Nel nostro esempio, vogliamo leggere e scrivere questi registri Modbus:

Numero ” n ” della richiesta Modbus Slave ID del dispositivo Modbus Slave
SlaveID[n]
Leggere o scrivere nel registro?
CodiceFunzione[n]
Indirizzo nel registro Modbus ?
Registro[n]
[0] 01 03 (lettura dei registri di mantenimento) 00
[1] 01 03 (lettura dei registri di mantenimento) 01
[2] 01 06 (scrittura dei registri di mantenimento) 02 (nel nostro esempio scriviamo 65432)
[3] 01 06 (scrittura dei registri di mantenimento) 03 (Nel nostro esempio scriviamo il tag “ValueMove”)

Utilizziamo un array di “n” elementi per ogni parametro

Impostare questi tag:

  • FunctionCode, ui8, è un array, 16 (16 se si desidera leggere/scrivere fino a 16 valori nel registro Modus)
  • SlaveID, ui8, è un array, 16
  • Register, ui16, è un array, 16
  • Dati, ui16, è un array, 16

Se, ad esempio, si dispone di soli 3 registri da leggere/scrivere, è possibile modificare l’array da 16 a 3.

Ora è possibile completare l’array con i 3 valori per ciascuna richiesta Modbus:

Iniziamo con n = 0

  • SlaveID[0] = 01
  • CodiceFunzione[0] = 03
  • Registro[0] = 00

e poi… n = 1

  • SlaveID[1] = 01
  • FunctionCode[1] = 03
  • Registro[1] = 01

< ! > Importante: l’ultima riga deve essere SlaveID[n 1] = 00, nel nostro esempio SlaveID[4] = 00
Questo serve ad avvisare la subroutine Modbus Master che non ci sono più registri da leggere! È la fine! Si riparte dall’inizio (n=0)!

E aggiungere ora la subroutine ModbusMaster!

Questa subroutine deve essere chiamata a ogni ciclo del PLC.

I dati verranno recuperati nel campo Dati[n] .

Se si utilizza la funzione di scrittura, non bisogna dimenticare di inserire il valore. Nel nostro esempio, scriviamo 65432 in Dati [2] [2] e il valore di un altro tag “ValueMove” in Data [3] [3].