libmodbus: modbus_mapping_new () не работает правильно? - PullRequest
0 голосов
/ 21 октября 2018

Я написал свой собственный ведомый Modbus на основе примера (unit-test-server.c) из библиотеки libmodbus (v3.1.4).Однако, это не работает из-за проблемы, которую я не знаю, как решить: функция modbus_mapping_new (), кажется, выделяет память для неправильных данных ?!

Это то, что я делаю, и согласно документации это должно выделять память для 7 регистров хранения:

mb_mapping = modbus_mapping_new(0, 0, 7, 0);

На самом деле происходит следующее:

enter image description here

printf("NB_BITS = %d\nSTART_BITS = %d\nNB_INPUT_BITS = %d\nSTART_INPUT_BITS = %d\nNB_INPUT_REGISTERS = %d\nSTART_INPUT_REGISTERS = %d\nNB_REGISTERS = %d\nSTART_REGISTERS = %d\n", mb_mapping->nb_bits, mb_mapping->start_bits, mb_mapping->nb_input_bits, mb_mapping->start_input_bits, mb_mapping->nb_input_registers, mb_mapping->start_input_registers, mb_mapping->nb_registers, mb_mapping->start_registers); // DEBUG OUTPUT

^^ Это все значения, которые можно установить в структуре modbus_mapping_t .

Если здесь есть кто-нибудь, кто знаком с библиотекой libmodbus: я неправильно понимаю документацию или что здесь происходит?

Сейчас я получаю SegFault, потому что modbus_mapping_new () не выделил память для 7с регистрами, в которые я пишу.

1 Ответ

0 голосов
/ 22 октября 2018

Я просто запускаю свою программу на своем MacBook, и все отлично работает!modbus_mapping_new () выделяет память для регистров (в данном случае 500), и мастера Modbus извлекают правильные значения из моего ведомого.

enter image description here

Я предполагаю, чтоозначает, что у кода есть проблема с архитектурой процессора Nvidia Jetson TX2, на которой я изначально запускаю свой код ?!Как мне решить эту проблему так, чтобы он также мог корректно работать на Jetson?

Как ни странно, у меня точно такой же код работал на Jetson один раз, несколько месяцев назад.Я понятия не имею, что могло бы измениться ...

[Редактировать]

Я наконец понял: каким-то образом версии libmodbus, похоже, перепутали.В то время как переменная LIBMODBUS_VERSION_STRING содержала «3.1.4», последняя версия, также была установлена ​​libmodbus 3.0.6 через источники пакетов Ubuntu.Я удалил последний из системы и переустановил libmodbus 3.1.4 из официального репозитория git.Теперь все работает отлично.

...