Module – Ethernet LAN Netwerk ENC28J60 – Modbus TCP/IP Slave
Hardware: Ethernet ENC28J60 module
Het is mogelijk om een Modbus TCP/IP Slave te maken met deze ENC28J60 module, hieronder een voorbeeld.
Voorbeeld waarde in register zetten met ARDUINO-MODBUS en ETHERCARD bibliotheek
Wat heb je nodig?
– arduino-modbus bibliotheek
– Ethercard bibliotheek
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
#include <EtherCard.h> #include <Modbus.h> #include <ModbusIP_ENC28J60.h> //Modbus Registers Offsets (0-9999) const int SENSOR_IREG = 0; //Used Pins const int sensorPin = A0; //ModbusIP object ModbusIP mb; long ts; void setup() { // The media access control (ethernet hardware) address for the shield byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // The IP address for the shield byte ip[] = { 192, 168, 2, 28 }; //Config Modbus IP mb.config(mac, ip); // Add SENSOR_IREG register - Use addIreg() for analog Inputs mb.addHreg(SENSOR_IREG); ts = millis(); } void loop() { //Call once inside loop() - all magic here mb.task(); //Read each two seconds if (millis() > ts + 2000) { ts = millis(); //Setting raw value (0-1024) mb.Hreg(SENSOR_IREG, analogRead(sensorPin)); } } |
Voorbeeld uitlezen van register met Python op Raspberry Pi
Wat heb je nodig?
1 2 3 4 5 6 7 |
#!/usr/bin/env python from pyModbusTCP.client import ModbusClient client = ModbusClient(host="192.168.2.28", port=502, auto_open=True, auto_close=True, timeout=10) data = client.read_holding_registers(0, 1) # FUNCTIE 03 - Lees register 0 (1 byte lang) print "Waarde register: ", data[0] client.close() |
Voorbeeld LED schakelen met registerwaarde en ARDUINO-MODBUS en ETHERCARD bibliotheek
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
#include <EtherCard.h> #include <Modbus.h> #include <ModbusIP_ENC28J60.h> //Modbus Registers Offsets (0-9999) const int SENSOR_REG = 0; //Used Pins const int sensorPin = A0; const int ledPin = 8; //ModbusIP object ModbusIP mb; long ts; void setup() { pinMode(ledPin, OUTPUT); // The media access control (ethernet hardware) address for the shield byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // The IP address for the shield byte ip[] = { 192, 168, 2, 28 }; //Config Modbus IP mb.config(mac, ip); // Add SENSOR_IREG register - Use addIreg() for analog Inputs mb.addHreg(SENSOR_REG); ts = millis(); } void loop() { //Call once inside loop() - all magic here mb.task(); //Read each two seconds if (mb.Hreg(SENSOR_REG) >= 100) { digitalWrite(ledPin, HIGH); } if (mb.Hreg(SENSOR_REG) < 100) { digitalWrite(ledPin, LOW); } } |
Voorbeeld schrijven naar register met Python op Raspberry Pi
Wat heb je nodig?
1 2 3 4 5 6 7 8 |
#!/usr/bin/env python from pyModbusTCP.client import ModbusClient client = ModbusClient(host="192.168.2.28", port=502, auto_open=True, auto_close=True, timeout=10) client.write_single_register(0, 200) # FUNCTIE 06 - Schrijven (enkele register) data = client.read_holding_registers(0, 1) # FUNCTIE 03 - Lees register 0 (1 byte lang) print "Waarde register: ", data[0] client.close() |