🔌 Modbus RS485 & Gestione Convertitori USB

Il protocollo Modbus RS485 è uno standard di comunicazione seriale nato per i PLC, molto diffuso in ambito industriale e presente in numerosissime apparecchiature: schede I/O, sensori di temperatura e umidità, contatori di energia e altre periferiche. Tramite comuni convertitori USB–seriale è possibile interfacciare questi dispositivi con il NUC.

Nel nostro sistema, la gestione del protocollo Modbus è affidata completamente a Node-RED, rendendo superflui strumenti esterni o software dedicati.

⚠️ Il Problema: Assegnazione Dinamica delle Porte USB

Quando si utilizzano più convertitori seriali per la lettura di diversi dispositivi (es. contatori di energia), può accadere che le porte USB non vengano sempre assegnate allo stesso dispositivo dopo un riavvio del sistema (ttyUSB0 potrebbe diventare ttyUSB1 e viceversa).

Per evitare questo problema, è possibile configurare ogni convertitore in modo statico sfruttando i parametri idVendor e idProduct per creare una regola udev personalizzata. In questo modo ogni convertitore avrà sempre un nome univoco e stabile.

🛠️ Configurazione delle Regole udev

1. Ricerca dei parametri del convertitore USB

Per identificare i codici univoci del tuo convertitore collegato alla porta di sistema (dove * identifica il numero della porta USB), esegui il comando:

udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB*)


đź’ˇ Nota: Dall'output del comando, cerca all'interno dell'elenco le righe relative al dispositivo corrispondenti a ATTRS{idVendor} e ATTRS{idProduct} (ad esempio idVendor=="10c4" e idProduct=="ea60"): ti serviranno tra poco per creare la regola personalizzata.

2. Creazione della regola personalizzata

Crea o modifica il file di configurazione delle regole udev:

sudo nano /etc/udev/rules.d/99-usbserial.rules


Aggiungi le righe per associare i tuoi convertitori ai nomi prescelti (sostituisci i valori con quelli reali rilevati al punto precedente):

ACTION=="add", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", SYMLINK+="qeed485"

ACTION=="add", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", SYMLINK+="eastron485"


3. Verifica dell'associazione

Dopo aver riavviato il sistema, puoi verificare che i link simbolici puntino correttamente ai dispositivi seriali con i comandi:

ls -l /dev/qeed485

ls -l /dev/eastron485


🔑 Gestione dei Permessi USB

Un altro problema comune riguarda i permessi di accesso alle porte seriali da parte dei container o dei servizi. Per risolverlo definitivamente, sono stati impostati due cron job in Webmin che automatizzano l'assegnazione dei permessi corretti ad ogni riavvio del sistema tramite i comandi:

sudo chmod 666 /dev/ttyUSB0

sudo chmod 666 /dev/ttyUSB1