libmodbus: невозможно опросить счетчик энергии Modbus, имеющий стоп-бит 2 - PullRequest
0 голосов
/ 15 февраля 2019

Я пытаюсь опросить Schneider Energymeter на наличие четности как нулевой и стоп-бит как 2 с использованием преобразователя RS485 в USB.Я получаю сообщение об ошибке тайм-аута.Но когда я пытаюсь опросить тот же счетчик с четностью, равной none, и стоп-битом, равным 1, я могу получить данные.

Фрагмент кода, который я использую для опроса счетчика, выглядит следующим образом

     ctx = modbus_new_rtu("/dev/ttyUSB0",9600, 'N', 8, 2);
     modbus_set_debug(ctx, TRUE);
      if (modbus_connect(ctx) == -1) {
           printf("Modbus Connection failed: %s", modbus_strerror(errno));
           modbus_free(ctx);
           return -1;
      }
      modbus_set_slave(ctx,2);
      memset(tab_rp_registers, 0, 2 * sizeof(uint16_t));
      rc = modbus_read_registers(ctx,3109,2,tab_rp_registers);
      modbus_close(ctx);
      modbus_free(ctx);
      if (rc != -1) {
      // actions performed

      }
      else {
      free(tab_rp_registers);
      printf("Error str is %s\n",modbus_strerror(errno));
       }

Всегда получаю rc как -1 и ошибка тайм-аута соединения при преобразовании errno.

Я что-то пропустил?

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Устранена проблема с обновлением библиотеки до 3.1.4.

0 голосов
/ 15 февраля 2019

Вы уверены, что биты магазина должны быть равны 2 без четности?В спецификации Modbus указано, что для RTU должно быть 11 бит на символ, что означает, что при использовании без проверки четности должно быть 2 стоповых бита.ОДНАКО, по моему опыту, многие поставщики не придерживаются этого правила.Я взял первое руководство по счетчику энергии, которое смог найти на веб-сайте Schneider:

http://download.schneider -electric.com / files? P_enDocType = Руководство пользователя + p_File_Name = DOCA0005EN-10.pdf & p_Doc_Ref = DOCA0005EN

На стр. 47 есть примечание «число стоповых битов = 1», которое применяется ко всем режимам контроля четности.

...