Arduino Modbus RTU Ответ по серийному? - PullRequest
0 голосов
/ 27 апреля 2019

Я занимаюсь разработкой проекта, в котором мне нужно прочитать данные регистров холдинга. Я проверяю все, используя этот http://www.freemodbus.com/, и он работает, и получаю правильный ответ. При попытке с разработанной программой я не получаю правильный ответ.

Ответ программного обеспечения: 0x01 0x03 0x04 0x1a 0xa0 0x42 0x48 0xcd 0x9f Ответ Arduino: 0x01 0x04 0x83 0x43 0xff 0xff 0xff 0xff 0xff

обратите внимание, что в ответе Arduino нет 0x03 после 0x01. Я не знаю, почему это происходит, может кто-нибудь помочь мне с этим.

пожалуйста, найдите прикрепленный код Arduino ниже.

static union
  {
    unsigned long a;
    byte b[4];
    float f;

  }vr;


void readregister(unsigned int address)
{
  byte rxbuf[]={0,0,0,0,0,0,0,0,0,0,0};
  byte data[] = {0x01,0x03,0x00,0xab,0x00,0x02,0xb5,0xeb};
  Serial3.flush();
  for(int i=0;i<8;i++)
  {
    Serial3.write(data[i]);
  }
  delay(250);
  while(Serial3.available()>0)
  {
    for(int v=0; v<=10;v++)
    {
      rxbuf[v]=Serial3.read();
      Serial.println(rxbuf[v],HEX);
    }
  }
  Serial3.flush();
  vr.b[3]=rxbuf[3];
  vr.b[2]=rxbuf[2];
  vr.b[1]=rxbuf[5];
  vr.b[0]=rxbuf[4];


}
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  Serial3.begin(9600,SERIAL_8E1);
}

void loop() {
  // put your main code here, to run repeatedly:
   readregister(99);
  Serial.print("\n");

  delay(3000);
}

1 Ответ

0 голосов
/ 01 мая 2019

Да, я думаю, вы получаете код ошибки 4 с устройства. Смотри http://www.simplymodbus.ca/exceptions.htm

В этой строке, где вы готовите свой запрос:

байтовые данные [] = {0x01,0x03,0x00,0xab, 0x00,0x02,0xb5,0xeb};

Вы говорите, устройство 1, функция 3, 0x00 - это пробел, затем зарегистрируйте адрес 0xAB. Не уверен насчет дополнительного нуля, затем длины 2, а затем CRC. Поэтому я голосую за то, что либо CRC неправильный, либо дополнительный ноль неправильный.

Кроме того, обратите внимание, что по какой-то причине происходит сбой Modbus без причины, даже если вы все делаете правильно, поэтому повторите попытку через несколько секунд и посмотрите, что произойдет

...