本帖最后由 hbzjt2011 于 2016-12-1 16:55 编辑
Modbus RTU通讯协议因为功能强大,移植方便,通讯简单的优点,广泛用于与工控仪表、PLC、HMI等设备的通讯,为此Arduino也支持其Master和Slave设备的通讯,现在测试Arduino作为从站时读写线圈的功能。
1、硬件连接:
Arduino UNO USB转TTL
RX------------------------TX
TX------------------------RX
GND----------------------GND
使用线圈100的值来控制Arduino D13引脚,也就是板载的LED灯,主站使用PC端的Modbus Poll软件来模拟。
2、代码:#include <Modbus.h>
#include <ModbusSerial.h>
// Modbus Registers Offsets (0-9999)
const int LAMP1_COIL = 100;
// Used Pins
const int ledPin = 13;
// ModbusSerial object
ModbusSerial mb;
void setup() {
// Config Modbus Serial (port, speed, byte format)
mb.config(&Serial, 38400, SERIAL_8N1);
// Set the Slave ID (1-247)
mb.setSlaveId(10);
// Set ledPin mode
pinMode(ledPin, OUTPUT);
// Add LAMP1_COIL register - Use addCoil() for digital outputs
mb.addCoil(LAMP1_COIL);
}
void loop() {
// Call once inside loop() - all magic here
mb.task();
// Attach ledPin to LAMP1_COIL register
digitalWrite(ledPin, mb.Coil(LAMP1_COIL));
}
3、PC端操作:
打开Modbus Poll软件作为主站,设置通讯参数:
设置从站地址和读写线圈地址:
使用05功能码发送ON\OFF状态:
4、展示效果:
|