Modbus e PHP

Sono alle prese da diversi giorni con un problema da risolvere per un nuovo progetto che porterò avanti nei prossimi mesi. Dopo aver sbattuto un po’ la testa sul Modbus, il protocollo di comunicazione dei PLC, sono alla ricerca di una soluzione che mi permetta di effettuare chiamate ad uno slave da ambiente PHP. Il risultato della chiamata Modbus quindi deve essere disponibile direttamente nel codice PHP.

Le diverse soluzioni che sto analizzando sono:

  1. Scrivere un’estensione per PHP che, grazie ad una libreria Libmodbus, possa effettuare chiamate direttamente dal codice PHP
  2. Utilizzare un Gateway Modbus TCP/IP- RTU. In pratica dal codice PHP potrei effettuare una chiamata al gateway tramite socket. Il gateway a sua volta gestirebbe la chiamata al device via Modbus e restituirebbe i dati alla mia procedura PHP.
  3. Utilizzare un software open source tipo SCADA. Ad esempio Likindoy o OpenSCADA.

La soluzione migliore, in termini di sviluppo, come sempre deve essere la più semplice da implementare e manutenere. Al momento sono orientato sulla 1, la 2 ho problemi a compilarla e la 3 l’ho parcheggiata in attesa di testarla.
Vi farò sapere…

Aggiornamento del 03/01/2011

Avendo ricevuto richieste di maggiori dettagli sull’estensione ho deciso di rilasciarla sotto licenza GPL v2, si sa mai che qualche altro sviluppatore si unisca al progetto per migliorarla.

Al momento l’estensione PHP implementa solo una parte delle funzioni Modbus esistenti:

  • Read holding registers (func. 03)
  • Read input registers (func. 04)
  • Write (func. 16, sviluppo terminato ma non testato)

Il tutto è implementato secondo il formato RTU.

Link al progetto su Google Code: Estensione PHP per Modbus – Wiki Reference

Aggiornamento del 11/10/2016

Il progetto è stato spostato su GitHub: https://github.com/Jazzo/PHP-Extension-Modbus

20 pensieri su “Modbus e PHP

  1. maurizio

    Ciao,
    sto anche io valutando l’utilizzo di modbus per creare un demone master-slave.Sei più andato avanti nelle tue sperimentazioni?

    Maurizio

  2. Luca

    ciao Davide.. puoi darmi qualche dettaglio in più sull’estensione PHP per modbus che avete sviluppato?

    grazie.. ciao

  3. Fishwolf

    Ciao, anche io sono interessato e se necessario posso contribuire.
    Hai documentazione o indicazioni per passare dal codice sorgente all’estensione php ?

    Grazie

  4. Fishwolf

    Ciao, grazie della pronta risposta.

    Dalla mia esperienza le estensione php sono .so, dei compilati C.
    Ho scaricato il progetto e il .so non è presente, ne ho trovato un makefile per compilarlo sulla piattaforma in uso.
    Ho letto rapidamente l’articolo di HTML.it che fa’ riferimento a Zend, ma non ho capito come ottenere l’estensione da installare

    Hai delle indicazioni da darmi ?
    Grazie

  5. Mario

    Se può essere di interesse, ho sviluppato un hardware modbus compliant a basso prezzo. Funziona con una libreria che ho scritto in php per l’implementazione in CLI o via Apache.

  6. realtebo

    Ciao !
    Sono sempre felice di vedere un italiano alla ricerca di nuovi strumenti da sviluppare in proprio.

    Vedo che il sorgente è fermo dal 2011.

    E’ ‘pronto’ per essere usato? Ok, è da finire, ma quello un po per volta potrei anche provarci, quello che non so è come si fa a ‘installare’ questa estensione nel mio php sotto apachi o come php-cli

    Puoi guidarmi ?

  7. Davide

    ciao realtebo, nei commenti qui sopra trovi alcune risorse su come installare l’estensione PHP. Ovviamente devi compilare il tutto ma se segui quanto scritto nel mio commento del lunedì, 07 febbraio 2011 – 16:57 non dovresti avere problemi. Eventualmente posta qui eventuali problemi. ciao!

  8. eliafino

    Ciao Davide,
    potresti scrivere come usare le varie funzioni
    modbus_open()
    modbus_read_holding_registers()
    modbus_read_input_registers()
    modbus_close()

    Ad esempio, la funzione modbus_open() mi restituisce che si aspetta 5 parametri… quali e in che ordine?

    Ciao e grazie!!!

  9. eliafino

    Grazie ancora…
    … ho avuto qualche problema iniziale per “tradurre i valuri negativi da HEX a decimale… ma ora è ok.

    L’unica cosa è che ogni tanto saltano fuori due errori -100 e -101 senza restituirmi nessun dato, la cosa è nota?

    Un saluto

  10. Jazzo Autore articolo

    Lo ricevi usando la funzione “Write”?
    Si, è noto da Changes log:
    “Enabled modbus_write (now it’s right but has a little issue: receive -101 crc error)”

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *