Taula de continguts:
- Pas 1: baixeu i inicieu Modbus TCP Slave Simulator
- Pas 2: prepareu l'ordinador per connectar-vos al dispositiu
- Pas 3: prepareu el dispositiu i connecteu-vos-hi
- Pas 4: pengeu la biblioteca principal Modbus
- Pas 5: connecteu-vos a la xarxa
- Pas 6: inicialitzeu la comunicació amb Modbus Slave
- Pas 7: llegir i escriure registres
Vídeo: ESP32 Modbus Master TCP: 7 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:14
En aquesta classe, programareu el processador ESP32 per ser Modbus TCP Master.
Utilitzarem dos dispositius que contenen aquest processador: Moduino ESP32 i Pycom. Tots dos dispositius s’executen a l’entorn MicroPytthon. El nostre Modbus Slave serà un ordinador de PC amb el programari de simulador Modbus en funcionament.
Necessitarà:
- Dispositiu Moduino ESP32 o Moduino Pycom (consulteu aquest lloc web per obtenir més informació sobre el dispositiu Moduino ESP32 i això per comprovar el dispositiu Pycom)
- PC amb sistema operatiu Linux
- Port RS-232 / RS-485 a l’ordinador o convertidor USB a RS-232 / RS-485
Pas 1: baixeu i inicieu Modbus TCP Slave Simulator
Descarregueu el simulador Modbus Slave des de https://www.modbusdriver.com/diagslave.html. A continuació, obriu l’arxiu descarregat i descomprimiu la versió per al sistema operatiu Linux.
Executeu el programa des de la consola amb l'argument -p:
./diagslave -p
és un port on funcionarà el servidor Modbus Slave. Per al protocol Modbus és per defecte 502, però podeu utilitzar-ne un altre.
Als ports Linux inferiors a 1024 no es poden utilitzar els programes executats per un usuari normal (no privilegis d’arrel).
Recordeu quin port feu servir. Aquest valor serà necessari més endavant.
Pas 2: prepareu l'ordinador per connectar-vos al dispositiu
Necessitareu alguns programes per connectar-vos al dispositiu i enviar-hi fitxers.
Instal·leu l'entorn Python i pip (si no el teniu):
apt-get install python3
apt-get install python3-dev curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py" python3 get-pip.py
Instal·leu picocom:
apt-get install picocom
Aquest programa és necessari per connectar-se al dispositiu i executar-hi ordres. Instal·leu mpfshell:
pip instal·lar mpfshell
Aquest programa us permet enviar fitxers al dispositiu.
També podeu instal·lar-lo a les fonts del formulari. Consulteu aquesta pàgina:
Pas 3: prepareu el dispositiu i connecteu-vos-hi
Per connectar el dispositiu Moduino o Pycom al PC, necessiteu un port o convertidor RS-232 / RS-485. Comproveu la versió del dispositiu (quin tipus de port utilitza) i cerqueu el port o convertidor adequat.
- Connecteu el dispositiu a l'ordinador
- A continuació, connecteu-hi la font d'alimentació
Connecteu el dispositiu a l'ordinador i, a continuació, connecteu-hi la font d'alimentació. També podeu connectar un cable Ethernet a Moduino ESP32 (si té aquest port).
La connexió hauria de ser com a les fotos anteriors
Cerca el camí per al port, que s’utilitza per a la connexió del dispositiu. Pot ser, per exemple: / dev / ttyS1, / dev / ttyUSB0.
Per als convertidors USB, la ruta contindrà una paraula USB.
Podeu connectar-vos al dispositiu amb el programa picocom:
picocom / dev / ttyUSB0 -b 115200
L'indicador d'ordres del dispositiu té un aspecte similar a una d'aquestes imatges a continuació.
Moduino ESP32: veure aquí
Moduino Pycom: vegeu aquí
Pas 4: pengeu la biblioteca principal Modbus
github.com/pycom/pycom-modbus/ Per comunicar-vos amb Modbus Slave necessiteu una biblioteca adequada. Les biblioteques de Pycom no són compatibles amb Moduino. Consulteu les instruccions que compleixen el vostre dispositiu.
Tanqueu picocom abans d’enviar fitxers: premeu Ctrl + A i després Ctrl + X tecles.
La biblioteca uModBus per a Moduino ESP32 es basa en la biblioteca pycom-modbus per a Moduino Pycom. Es modifica per funcionar en un dispositiu ESP32 normal. També té mètodes close () addicionals per a classes de connectors.
1) Moduino ESP32
Descarregueu la biblioteca des de https://github.com/techbase123/micropython-modbus. Desempaqueteu l'arxiu i envieu els 4 fitxers al dispositiu Moduino.
Utilitzeu mpfshell per penjar-los. Executeu aquest programa al directori amb aquests fitxers.
Connecteu-vos al dispositiu executant: AQUEST
ttyUSB0 és un nom del port sèrie on es connecta el dispositiu.
Canvieu el directori a / flash / lib amb l'ordre:
cd / flash / lib
Col·loqueu tots els fitxers amb ordres:
posa uModBusConst.py
posa uModBusFunctions.py posa uModBusTCP.py posa uModBusSerial.py
EXEMPLE
A continuació, sortiu de la consola amb l'ordre exit i reinicieu el dispositiu amb el botó Restableix.
2) Pycom Moduino
Baixeu la biblioteca de https://github.com/pycom/pycom-modbus/. Desempaqueteu l’arxiu i envieu el contingut del directori uModbus al dispositiu. Utilitzeu mpfshell per penjar-los. Executeu aquest programa al directori amb aquests fitxers.
Connecteu-vos al dispositiu executant:
obre ttyUSB0
ttyUSB0 és un nom del port sèrie on es connecta el dispositiu.
Canvieu el directori a / flash / lib, creeu el directori uModbus i introduïu-lo amb les ordres següents:
cd / flash / libmd uModbus cd uModbus
Col·loqueu tots els fitxers amb ordres:
posa const.py
put functions.py put tcp.py put serial.py
A continuació, sortiu de la consola amb l'ordre exit i reinicieu el dispositiu amb el botó Restableix.
EXEMPLE
Pas 5: connecteu-vos a la xarxa
Els ordres per establir la connexió difereixen entre Moduino i Pycom.
Connecteu-vos al dispositiu amb picocom per executar les ordres adequades. Podeu connectar el dispositiu Moduino a la xarxa per cable o sense fils. Els exemples següents suposen que la vostra xarxa té un servidor DHCP que funciona.
En un altre cas, el dispositiu no obtindrà l'adreça IP. El servei de Wi-Fi està disponible a tots els Moduino. El port Ethernet és una opció i no tots els dispositius en tenen.
1) Moduino ESP32
Connexió a WiFi
Executeu les ordres següents al dispositiu:
des de la importació de netWiFi netWiFiwifi = netWiFi (netWiFi. WIFI_STA, 'ESSID', 'PASS') wifi.start ()
Substituïu ESSID pel nom de la vostra xarxa WiFi i PASS amb la contrasenya.
Passat el temps després d’executar start (), haureu d’obtenir una adreça IP assignada al vostre dispositiu.
Connexió a xarxa Ethernet
Connecteu el dispositiu a la xarxa per cable amb un cable Ethernet.
A continuació, executeu les ordres següents:
des de la importació netETH netETHeth = netETH () eth.start ()
Passat el temps després d’executar start (), haureu d’obtenir l’adreça IP assignada al vostre dispositiu.
2) Pycom Moduino
Connecteu-vos a WiFi
Executeu les ordres següents al dispositiu:
des de la importació de la xarxa WLANwlan = WLAN (mode = WLAN. STA) nets = wlan.scan () per a xarxa a xarxes: si net.ssid == 'ESSID': imprimir ('S'ha trobat la xarxa!') wlan.connect (net.ssid, auth = (net.sec, 'PASS'), temps d'espera = 5000) mentre no és wlan.isconnected (): machine.idle () print ('La connexió WLAN ha funcionat correctament!')
Substituïu ESSID pel nom de la vostra xarxa WiFi i PASS amb la contrasenya.
Pas 6: inicialitzeu la comunicació amb Modbus Slave
Les biblioteques mestres Modbus són similars per a tots dos dispositius
Varien en inicialització.
1) Inicialitzeu uModBus a Moduino ESP32
Executa:
des de uModBusTCP importeu uModBusTCP com a TCP
2) Inicialitzeu uModBus a Pycom
Executa:
d'importació TCP d'uModbus.tcp
Connexió oberta
A continuació, obriu la connexió amb:
modbus = TCP ('IP', PORT, 60)
on:
- Adreça IP - IP del vostre PC amb el simulador Modbus Slave
- PORT: port de Modbus Slave
- 60 és un temps mort
Si es produeix l'error següent durant l'execució d'ordres de lectura / escriptura: EXEMPLE
executar:
per a Moduino ESP32:
modbus.close ()
per a Moduino Pycom:
modbus._sock.close ()
i després recrear la connexió:
modbus = TCP ('IP', PORT, 60)
Això és important per tancar el sòcol abans de tornar a crear la connexió. El dispositiu ha restringit la quantitat de connexió de sòcol disponible.
Pas 7: llegir i escriure registres
Modbus admet diverses funcions per llegir i escriure registres.
La biblioteca uModBus té un mètode per a cada funció:
- read_coils
- read_discrete_inputs
- read_holding_registers
- read_input_registers
- escriure_sola_bobina
- write_single_register
En primer lloc, permetem escriure alguns valors.
1) Escriure bobines (func: 5)
Escriviu 1 valor a 200 registres des de l'esclau 1:
modbus.write_single_coil (1, 200, 0xFF00)
El primer argument és per a l’identificador d’esclau, en el nostre cas 1.
El segon és el número de registre i el seu és un valor. Per a 1 heu de posar 0xFF00 aquí. Escriviu el registre 0 a 201 des de l'esclau 1:
modbus.write_single_coil (1, 201, 0)
Aquest mètode permet escriure només valors booleans: 0 o 1.
2) Escriure registres (func: 6)
Ara escriviu alguns valors enters a diversos registres.
Escriviu un valor signat 111 per registrar 100 des de l'esclau 1:
modbus.write_single_register (1, 100, 111, cert)
El primer argument és l’identificador d’esclau, el segon número de registre i el tercer és un valor nou. L’últim argument defineix si s’ha d’establir el valor com a número signat. El valor per defecte és True. No cal que ho configureu.
Escriu el valor signat -457 al registre 101 des de l'esclau 1:
modbus.write_single_register (1, 101, -457)
Escriviu un valor no signat de 50 a 100 registres des de l'esclau 3:
modbus.write_single_register (3, 100, 50, fals)
Aquest mètode permet escriure valors enters a un registre únic.
El registre únic pot contenir valors de 16 bits.
El mètode torna True si el valor d’entrada és vàlid i False si no. El valor s'escriu encara que no sigui vàlid (massa gran per registrar-se)
3) Llegiu bobines / entrades discretes
Ara permet llegir valors booleans escrits. Per llegir el registre amb la bobina de lectura de la funció 1, executeu:
modbus.read_coils (slaveId, register, count) [0: count]
Per llegir el registre amb la funció 2 de lectura d'entrada discreta, executeu:
modbus.read_discrete_inputs (slaveId, register, count) [0: count]
on:
- slave-id: identificador de l'esclau virtual (el simulador d'esclaus accepta tots els identificadors vàlids)
- registre - número de registre per llegir
- recompte: quantitat de registres que cal llegir (poseu la quantitat desitjada als dos llocs)
Aquests mètodes retornen matriu amb valors booleans. Cada valor correspon a cada registre.
Es necessita el fragment: [0: count], perquè aquest mètode retorna més valors que count. Torna sempre la quantitat de valors divisible per 8. Els valors addicionals són Fals i no corresponen a cap registre.
Llegiu els nostres valors booleans amb els dos mètodes:
modbus.read_coils (1, 200, 2) [0: 2] modbus.read_discrete_inputs (1, 200, 2) [0: 2]
El resultat serà així: EXEMPLE
True fa referència a 1 valor, False a 0.
4) Llegiu els registres
Ara llegiu els valors dels registres escrits amb 6 funcions.
Per llegir registres amb la funció 3 de lectura de registres, executeu:
modbus.read_holding_registers (slaveId, register, count, signed = True)
Per llegir registres amb la funció 4 llegir registres d'entrada, executeu:
modbus.read_input_registers (slaveId, register, count, signed = True)
on:
- slave-id: identificador de l'esclau virtual
- registre - número de registre per llegir
- recompte: quantitat de registres que cal llegir
- signat: indica si els valors llegits s’han de tractar com a números signats o no. Estat per defecte: cert
El valor de retorn és una tupla amb la quantitat desitjada de registres.
Llegiu els registres establerts al punt anterior:
modbus.read_holding_registers (1, 100, 2, True) modbus.read_input_registers (1, 100, 2, True) modbus.read_holding_registers (3, 100, 1, fals) modbus.read_input_registers (3, 100, 1, fals)
Els resultats haurien de ser semblants a aquesta captura de pantalla: EXEMPLE
A la següent lliçó aprendràs a crear Modbus RTU Master en un dispositiu habilitat per ESP32.
Recomanat:
HMI industrial i Arduinos a MODBUS RTU: 4 passos
HMI industrial i Arduinos a MODBUS RTU: en aquest instructiu descriuré un exemple de comunicació entre un HMI industrial (COOLMAY MT6070H, 150EUROS), un Arduino CLONE DIY (10EUROS) i un Arduino UNO (10EUROS). La xarxa funcionarà sota una proto
Comunicació Modbus TCP entre Arduino i dispositius industrials: 3 passos
Comunicació Modbus TCP entre dispositius Arduino i industrials: una manera industrial de controlar una placa Arduino amb HMI industrial i enllaçar-la a una xarxa industrial amb una comunicació Modbus TCP
Introducció a ESP32 - Instal·lació de plaques ESP32 a Arduino IDE - ESP32 Blink Code: 3 passos
Introducció a ESP32 | Instal·lació de plaques ESP32 a Arduino IDE | ESP32 Blink Code: en aquest instructable veurem com començar a treballar amb esp32 i com instal·lar plaques esp32 a Arduino IDE i programarem esp 32 per executar codi blink amb arduino ide
Connexió TCP / IP a través de GPRS: Com enviar dades al servidor mitjançant el mòdul SIM900A: 4 passos
Connexió TCP / IP a través de GPRS: Com enviar dades al servidor mitjançant el mòdul SIM900A: en aquest tutorial us explicaré com enviar dades al servidor TCP mitjançant el mòdul sim900. També veurem com podem rebre dades del servidor al client (mòdul GSM)
Mesurador PZEM-004 + ESP8266 i plataforma IoT Node-RED i Modbus TCP / IP: 7 passos
Mesurador PZEM-004 + ESP8266 i plataforma IoT Node-RED i Modbus TCP / IP: en aquesta oportunitat integrarem el nostre mesurador de potència activa o consum elèctric, Pzem-004 - Peacefair amb la plataforma d’integració IoT Node-RED utilitzada en tutorials anteriors, utilitzarem un mòdul ESP8266 configurat com esclau Modbus TCP / IP, més endavant