发 帖  
原厂入驻New

[经验] 【DFRobot TinkerNode NB-IoT 物联网开发板试用连载】使用Modbus读取外部设备数据

2020-8-18 13:05:43  2016
分享
0
使用Modbus读取外部设备数据
1.  ModbusMaster库安装
采用Modbus-RTU接口读取外部传感器设备数据是工业环境中较为常用的一种手段。Arduino系统中提供第三方的库,ModbusMaster,可以让我们的系统以主机的身份读取外部设备寄存器内容。
如上图所示,我们点击“Arduino”菜单,进入“Install Libray”->“Communication”下。
如上图所示,选中字母“M”,就会看到“ModbusMaster”,我们选中最高版本2.0.1后,系统会自动安装这个库。
2.  使用串口介绍
我这里准备测试串口或rs485接口的Modbus通讯,因此,在开始使用Modbus前,我先介绍一下我准备使用的串口。ESP32系统集成了3个串口,这里测试时使用了串口
这个串口被引到开发板连接器上了,在Arduino中,这个串口定义为Serial2 。
3.  ModbusMaster使用介绍
这里以读取保持寄存器为例。
我们首先要引用库的头文件:
    #include <ModbusMaster.h>
然后我们可以定义一个ModbusMaster节点:
    ModbusMaster node;
初始化串口和ModbusMaster节点:
    Serial2.begin(9600);
    node.begin(1, Serial2);
读取保持寄存器:
   result =node.readHoldingRegisters(HOLD_STARTADDR, HOLD_LENGTH);
   IF (result ==node.ku8MBSuccess)
   {
       Serial.println("readHoldingRegisterssuccess");
       for (uint8_t i = 0; i< HOLD_LENGTH; i++)
       {
          hold_register =node.getResponseBuffer(i);
          Serial.printf("R%d= %04x\n", i, hold_register );
       }
   }
   else
   {
       Serial.println("readHoldingRegistersfault");
   }
如果最为RS485通讯,我们还必须为库提供收发切换功能,通过设置回调函数的方式,将切换引脚控制提供给库文件。
//Callbacks allow us to configure the RS485 transceiver correctly
node.preTransmission(preTransmission);
node.postTransmission(postTransmission);
4.  实际测试结果
为了达到实际的测试效果,这里采用一个ModbusSlave模拟器,在windows上部署一个辅机。
我们看到保持寄存器的起始地址为40001,实际读取地址为0x40000。这里假设读取5个保持寄存器,把寄存器内容分别设置为1-5。
当我们编译并烧录程序到开发板后,可以看到系统打印的内容和我们在Modbus辅机中设置的内容相同,我们还可以动态的改变辅机内容,这里的打印内容同样跟随改变。
辅机数据读取完成。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

只有小组成员才能发言,加入小组>>

1641个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /8 下一条

快速回复 返回顶部 返回列表