Programmazione.it v6.4
Ciao, per farti riconoscere devi fare il login. Non ti sei ancora iscritto? Che aspetti, registrati adesso!
Info Pubblicit� Collabora Autori Sottoscrizioni Preferiti Bozze Scheda personale Privacy Archivio Libri Corsi per principianti Forum
Il Modbus per Intel Edison
Scritto da Matthias Hahn il 02-05-2016 ore 02:38
Il Modbus un famoso protocollo utilizzato ad esempio nei sistemi di automazione industriale o negli impianti domotici. Pu funzionare su strati fisici come le porte seriali (RS232, oppure RS485) o ethernet (TCP o UDP).
Con il modbus per Intel(R) Edison potrai facilmente utilizzare il WiFi, o il seriale (RS232) disponibili direttamente sulla piattaforma.

BIBLIOTECHE PYTHON
Su Linux trovi tantissime biblioteche come ad esempio:
  • C/C++: es. libmodbus
  • Node: es. il wrapper libmodbus "modbus"
  • Python: es. pymodbus

INSTALLAZIONE
  • libmodbus: avvia dallinizio o installa il pacchetto (ad es. da repo.opkg e clicca su opkg install libmodbus)
  • node modbus: "npm install modbus"
  • pymodbus: pip install pymodbus" (puoi scaricare pip per es. da repo.opkg)

TEST
Per il test utilizziamo pymodbus) che presenta gi dei campioni per client e server.

Innanzitutto bisogna aggiungere il pacchetto "pyserial" digitando:
  1. pip install pyserial

Per testare il seriale utilizziamo due efficaci schede Intel(R) Edison Arduino. I led TX and RX sono incrociati, cio IO 0 da ogni scheda passa a IO 1 dellaltra scheda. Per testare linstallazione ricorriamo ad un server sincrono, leggermente modificato su una scheda, e un client sincrono sullaltra scheda.

Per le modifiche al server:
  1. # run the server you want
  2. # Tcp:
  3. #StartTcpServer(context, identity=identity, address=("localhost", 5020))
  4. # Udp:
  5. # StartUdpServer(context, identity=identity, address=("localhost", 502))
  6. # Ascii:
  7. #StartSerialServer(context, identity=identity, port='/dev/pts/3', timeout=1)
  8. # RTU:
  9. import mraa, serial as s
  10. mraa.Uart(0)
  11. StartSerialServer(context, identity, port='/dev/ttyMFD1', stopbits=s.STOPBITS_ONE, bytesize=s.EIGHTBITS, baudrate=115200, parity=s.PARITY_NONE)

Per il client:
  1. [...]
  2. #    client = ModbusClient('localhost', retries=3, retry_on_empty=True)
  3. #client = ModbusClient('localhost', port=502)
  4. #client = ModbusClient(method='ascii', port='/dev/pts/2', timeout=1)
  5. #client = ModbusClient(method='rtu', port='/dev/pts/2', timeout=1)
  6. import mraa, serial as s
  7. mraa.Uart(0)
  8. client = ModbusClient(method='rtu', port='/dev/ttyMFD1', stopbits=1, bytesize=8, baudrate=115200, parity=s.PARITY_NONE)
  9. client.connect()
  10. [...]

La porta seriale impostata tramite MRAA. Successivamente il modbus pu accedere al /dev/ttyMFD1 (vedi ad es. Using Serialx on Edison).
Se tutto installato correttamente, dovresti visionare dei messaggi modbus proveninti dal client.

TCP/IP su Ethernet (es. WiFi)
Per testare il modbus su Ethernet, utilizziamo gli esempi di server asincrono e client asincrono, anche in questo caso con piccole modifiche. Il server caratterizzato dal proprio indirizzo IPv4 xxx.xxx.xxx.xxx e una porta (in questo caso 5020).
  1. [...]
  2. StartTcpServer(context, identity=identity, address=("xxx.xxx.xxx.xxx", 5020))

E lo stesso per il client.
  1. [...]
  2. defer = protocol.ClientCreator(reactor, ModbusClientProtocol).connectTCP("xxx.xxx.xxx.xxx", 5020)
  3. defer.addCallback(beginAsynchronousTest)
  4. reactor.run()

Anche in questo caso se tutto installato correttamente, si dovrebbero vedere dei messaggi modbus dal client che arrivano al server come mostrato di seguito.
  1. # python AsynchronousServerExample.py
  2. INFO:pymodbus.server.async:Starting Modbus TCP Server on 192.168.178.72:5020
  3. DEBUG:pymodbus.server.async:Client Connected [IPv4Address(TCP, '192.168.178.72', 5020)]
  4. DEBUG:pymodbus.server.async:0x0 0x1 0x0 0x0 0x0 0x6 0x0 0x5 0x0 0x1 0xff 0x0 0x0 0x2 0x0 0x0 0x0 0x6 0x0 0x1 0x0 0x1 0x0 0x1 0x0 0x3 0x0 0x0 0x0 0x8 0x0 0xf 0x0 0x1 0x0 0x8 0x1 0xff 0x0 0x4 0x0 0x0 0x0 0x6 0x0 0x1 0x0 0x1 0x0 0x8 0x0 0x5 0x0 0x0 0x0 0x8 0x0 0xf 0x0 0x1 0x0 0x8 0x1 0x0 0x0 0x6 0x0 0x0 0x0 0x6 0x0 0x2 0x0 0x1 0x0 0x8 0x0 0x7 0x0 0x0 0x0 0x6 0x0 0x6 0x0 0x1 0x0 0xa 0x0 0x8 0x0 0x0 0x0 0x6 0x0 0x3 0x0 0x1 0x0 0x1 0x0 0x9 0x0 0x0 0x0 0x17 0x0 0x10 0x0 0x1 0x0 0x8 0x10 0x0 0xa 0x0 0xa 0x0 0xa 0x0 0xa 0x0 0xa 0x0 0xa 0x0 0xa 0x0 0xa 0x0 0xa 0x0 0x0 0x0 0x6 0x0 0x4 0x0 0x1 0x0 0x8 0x0 0xb 0x0 0x0 0x0 0x1b 0x0 0x17 0x0 0x1 0x0 0x8 0x0 0x1 0x0 0x8 0x10 0x0 0x14 0x0 0x14 0x0 0x14 0x0 0x14 0x0 0x14 0x0 0x14 0x0 0x14 0x0 0x14 0x0 0xc 0x0 0x0 0x0 0x6 0x0 0x4 0x0 0x1 0x0 0x8
  5. DEBUG:pymodbus.transaction:0x0 0x1 0x0 0x0 0x0 0x6 0x0 0x5 0x0 0x1 0xff 0x0 0x0 0x2 0x0 0x0 0x0 0x6 0x0 0x1 0x0 0x1 0x0 0x1 0x0 0x3 0x0 0x0 0x0 0x8 0x0 0xf 0x0 0x1 0x0 0x8 0x1 0xff 0x0 0x4 0x0 0x0 0x0 0x6 0x0 0x1 0x0 0x1 0x0 0x8 0x0 0x5 0x0 0x0 0x0 0x8 0x0 0xf 0x0 0x1 0x0 0x8 0x1 0x0 0x0 0x6 0x0 0x0 0x0 0x6 0x0 0x2 0x0 0x1 0x0 0x8 0x0 0x7 0x0 0x0 0x0 0x6 0x0 0x6 0x0 0x1 0x0 0xa 0x0 0x8 0x0 0x0 0x0 0x6 0x0 0x3 0x0 0x1 0x0 0x1 0x0 0x9 0x0 0x0 0x0 0x17 0x0 0x10 0x0 0x1 0x0 0x8 0x10 0x0 0xa 0x0 0xa 0x0 0xa 0x0 0xa 0x0 0xa 0x0 0xa 0x0 0xa 0x0 0xa 0x0 0xa 0x0 0x0 0x0 0x6 0x0 0x4 0x0 0x1 0x0 0x8 0x0 0xb 0x0 0x0 0x0 0x1b 0x0 0x17 0x0 0x1 0x0 0x8 0x0 0x1 0x0 0x8 0x10 0x0 0x14 0x0 0x14 0x0 0x14 0x0 0x14 0x0 0x14 0x0 0x14 0x0 0x14 0x0 0x14 0x0 0xc 0x0 0x0 0x0 0x6 0x0 0x4 0x0 0x1 0x0 0x8
  6. DEBUG:pymodbus.factory:Factory Request[5]
  7. DEBUG:pymodbus.datastore.context:validate[5] 2:1
  8. DEBUG:pymodbus.datastore.context:setValues[5] 2:1
  9. DEBUG:pymodbus.datastore.context:getValues[5] 2:1
  10. DEBUG:pymodbus.server.async:send: 00010000000600050001ff00
  11. DEBUG:pymodbus.factory:Factory Request[1]
  12. DEBUG:pymodbus.datastore.context:validate[1] 2:1
  13. DEBUG:pymodbus.datastore.context:getValues[1] 2:1
  14. DEBUG:pymodbus.server.async:send: 00020000000400010101

Con questo dovreste essere in grado di comunicare sulla seriale o via ethernet con dispositivi modbus.

Per maggiori informazioni su Intel Edison leggi la guida Edison Getting Started, oppure consulta il forum. Scopri gli altri tool di sviluppo disponibili per IoT sulla Intel IoT Developer Zone.

RIFERIMENTI
Intel Edison Board Getting Started Guide
Intel Tech Community Forum
Intel IoT Dev Zone
Server asincrono
Server sincrono
repo.opkg
Modbus
Precedente: Come eseguire Yocto Linux OS in una macchina virtuale
Copyright Programmazione.it™ 1999-2017. Alcuni diritti riservati. Testata giornalistica iscritta col n. 569 presso il Tribunale di Milano in data 14/10/2002. Pagina generata in 0.2 secondi.