[UNO] Modbus Slave测试开关灯

[复制链接]
 楼主| hbzjt2011 发表于 2016-12-1 16:53 | 显示全部楼层 |阅读模式
本帖最后由 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软件来模拟。
319427614758224876_编辑.jpg
2、代码:
  1. #include <Modbus.h>
  2. #include <ModbusSerial.h>

  3. // Modbus Registers Offsets (0-9999)
  4. const int LAMP1_COIL = 100;
  5. // Used Pins
  6. const int ledPin = 13;

  7. // ModbusSerial object
  8. ModbusSerial mb;

  9. void setup() {
  10.     // Config Modbus Serial (port, speed, byte format)
  11.     mb.config(&Serial, 38400, SERIAL_8N1);
  12.     // Set the Slave ID (1-247)
  13.     mb.setSlaveId(10);  
  14.    
  15.     // Set ledPin mode
  16.     pinMode(ledPin, OUTPUT);
  17.     // Add LAMP1_COIL register - Use addCoil() for digital outputs
  18.     mb.addCoil(LAMP1_COIL);
  19. }

  20. void loop() {
  21.    // Call once inside loop() - all magic here
  22.    mb.task();
  23.    
  24.    // Attach ledPin to LAMP1_COIL register     
  25.    digitalWrite(ledPin, mb.Coil(LAMP1_COIL));
  26. }

3、PC端操作:
打开Modbus Poll软件作为主站,设置通讯参数:
Screenshot_1.png
设置从站地址和读写线圈地址:
Screenshot_2.png
使用05功能码发送ON\OFF状态:
Screenshot_3.png
4、展示效果:
f278c213952ad32caee0f24cbaf7375b.mp4_1477469105.gif

songchenping 发表于 2016-12-2 08:42 | 显示全部楼层
sh8hd 发表于 2016-12-9 16:46 | 显示全部楼层
huangyunfa 发表于 2019-2-13 15:29 | 显示全部楼层
有做成功的吗?
跃跃欲试。。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:欢迎参与LabVIEW版块的讨论学习! 点我一键即达

256

主题

2827

帖子

44

粉丝
快速回复 在线客服 返回列表 返回顶部