为什么从Modbus Slave软件到arduino的第一个读数带有框和问号(乱码?)>

问题描述 投票:0回答:1

我正在开发一个GUI来监视Schneider Electric EM6436电表的负载。 Arduino(主)从电表(从站)请求功率读数。正在使用Modbus RTU协议。The image is of the result on serial monitor

作为模拟的一部分,IAM使用Modbus从属软件充当Schneider仪表。我已经使用RS485到USB连接器从EM获取数据。 RS485的引脚借助MAX485连接到arduino。以下是从地址0x40001读取值的代码(arduino uno)。该库是arduino Modbus Master库。

#include <ModbusMaster.h>               //Library for using ModbusMaster

#define MAX485_DE      3
#define MAX485_RE_NEG  2

ModbusMaster node;                    //object node for class ModbusMaster

void preTransmission()            //Function for setting stste of Pins DE & RE of RS-485
{
  digitalWrite(MAX485_RE_NEG, 1);             
  digitalWrite(MAX485_DE, 1);
}

void postTransmission()
{
  digitalWrite(MAX485_RE_NEG, 0);
  digitalWrite(MAX485_DE, 0);
}

void setup()
{
  pinMode(MAX485_RE_NEG, OUTPUT);
  pinMode(MAX485_DE, OUTPUT);

  digitalWrite(MAX485_RE_NEG, 0);
  digitalWrite(MAX485_DE, 0);

  Serial.begin(9600); 

  node.begin(1, Serial);            //Slave ID as 1
  node.preTransmission(preTransmission);         //Callback for configuring RS-485 Transreceiver correctly
  node.postTransmission(postTransmission);

}



void loop()
{
  int data;
  int result=node.readHoldingRegisters(0x40001,2);

  if(result==node.ku8MBSuccess)
  {
    for(int i=0;i<2;i++)
    {
    data=node.getResponseBuffer(i);
    Serial.println(data);
    }
  }
}

这些值正在传输并在串行监视器上打印,但是与第一个值一起,正在打印一些乱码。Iam在下面附加结果图像。值是该地址中的读数。

谁能告诉我为什么要打印出来。

我正在开发一个GUI来监视Schneider Electric EM6436电表的负载。 Arduino(主)从电表(从站)请求功率读数。正在使用Modbus RTU协议。作为...

arduino modbus
1个回答
0
投票

您得到解决方案了吗?我也有类似的问题。

© www.soinside.com 2019 - 2024. All rights reserved.