` 使用Modbus读取外部设备数据 1. ModbusMaster库安装采用Modbus-RTU接口读取外部传感器设备数据是工业环境中较为常用的一种手段。Arduino系统中提供第三方的库,ModbusMaster,可以让我们的系统以主机的身份读取外部设备寄存器内容。 如上图所示,我们点击“Arduino”菜单,进入“Install Libray”->“Communica tion”下。 如上图所示,选中字母“M”,就会看到“ModbusMaster”,我们选中最高版本2.0.1后,系统会自动安装这个库。 2. 使用串口介绍我这里准备测试串口或RS485接口的Modbus通讯,因此,在开始使用Modbus前,我先介绍一下我准备使用的串口。ESP32系统集成了3个串口,这里测试时使用了串口 这个串口被引到 开发板的连接器上了,在Arduino中,这个串口定义为Serial2 。 3. ModbusMaster使用介绍这里以读取保持寄存器为例。 我们首先要引用库的头文件: #include 然后我们可以定义一个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
", 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辅机中设置的内容相同,我们还可以动态的改变辅机内容,这里的打印内容同样跟随改变。 辅机数据读取完成。 `
|