Доброго времени суток! Пишу 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.
Здравствуйте, plastictown, Вы писали:
P>При при многократном вызове modbus_set_slave с одинаковым аргументом такой задержки нет, т.е. она появляется только в случае, когда номер слейва реально меняется.
Ищет в системе EEPROM, чтобы сохранить туда новый номер