问题描述
我正在尝试从 Modbus 从机获取寄存器值。 我在 Arduino IDE 中使用 esp8266 和 modbus-esp8266 库。
我的从机注册地址: 40001 40002 40003 40004 40005 40006 40007 40008 40009 40010 40011 40012 40013 40014 40015 40016
我需要阅读 03 READ HOLDIG REGISTER 。 我在这里使用这个例子: 我如何在此过程中获取寄存器值
bool cbWrite(Modbus::ResultCode event,uint16_t transactionId,void* data)
这个例子读取了多个地址,但我不知道如何使用它 请给我样品给我。我怎样才能搬到 到整数变量?
这是我使用的示例:
ModbusRTU ESP8266/ESP32
Read multiple coils from slave device example
(c)2019 Alexander Emelianov (a.m.emelianov@gmail.com)
https://github.com/emelianov/modbus-esp8266
modified 13 May 2020
by brainelectronics
This code is licensed under the BSD New License. See LICENSE.txt for more info.
#include <ModbusRTU.h>
#if defined(ESP8266)
#include <SoftwareSerial.h>
// SoftwareSerial S(D1,D2,false,256);
// receivePin,transmitPin,inverse_logic,bufSize,isrBufSize
// connect RX to D2 (GPIO4,Arduino pin 4),TX to D1 (GPIO5,Arduino pin 4)
SoftwareSerial S(4,5);
#endif
ModbusRTU mb;
bool cbWrite(Modbus::ResultCode event,void* data) {
#ifdef ESP8266
Serial.printf_P("Request result: 0x%02X,Mem: %d\n",event,ESP.getFreeHeap());
#elif ESP32
Serial.printf_P("Request result: 0x%02X,ESP.getFreeHeap());
#else
Serial.print("Request result: 0x");
Serial.print(event,HEX);
#endif
return true;
}
void setup() {
Serial.begin(115200);
#if defined(ESP8266)
S.begin(9600,SWSERIAL_8N1);
mb.begin(&S);
#elif defined(ESP32)
Serial1.begin(9600,SERIAL_8N1);
mb.begin(&Serial1);
#else
Serial1.begin(9600,SERIAL_8N1);
mb.begin(&Serial1);
mb.setBaudrate(9600);
#endif
mb.master();
}
bool coils[20];
void loop() {
if (!mb.slave()) {
mb.readCoil(1,1,coils,20,cbWrite);
}
mb.task();
yield();
}
示例地址是:Link
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)