esp8266 Modbus 示例回调程序获取值

问题描述

我正在尝试从 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 (将#修改为@)