Странное поведение libmodbus
От: plastictown Норвегия  
Дата: 17.04.18 14:59
Оценка:
Доброго времени суток! Пишу modbus-rtu мастера с использованием libmodbus. Тестирую на двух контроллерах на одной линии. Один отвечает за ~10 мс, второй за 15. И вот когда дело доходит до изменения номера слейва (modbus_set_slave), то задержка на этом вызове иногда доходит до 400-500 мс.
vector<uint8_t> data;
modbus_set_slave(ctx, 2);
int r1 = modbus_read_bits(ctx, 20, 10, data.data());
modbus_set_slave(iface.get_context(), 1);
int r2 = modbus_read_bits(ctx, 20, 10, data.data());

При при многократном вызове modbus_set_slave с одинаковым аргументом такой задержки нет, т.е. она появляется только в случае, когда номер слейва реально меняется. Мне непонятно такое поведение, а также непонятно, следит ли библиотека за обращениями к контексту из разных потоков, потому как я долго реализовывал защиту от одновременного обращения нескольких потоков к одному контексту и будет обидно узнать, что все это уже реализовано
Всем заранее спасибо за интересные и полезные ответы
ЗЫ: система: Ubuntu 17.10 x86.
libmodbus
Re: Странное поведение libmodbus
От: Mihas  
Дата: 08.06.18 09:25
Оценка:
Здравствуйте, plastictown, Вы писали:

P>При при многократном вызове modbus_set_slave с одинаковым аргументом такой задержки нет, т.е. она появляется только в случае, когда номер слейва реально меняется.

Ищет в системе EEPROM, чтобы сохранить туда новый номер
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.