Modbus Master-Slave library for Arduino
- Войдите на сайт для отправки комментариев
Коллеги,
использую на ATMega 168pa библиотеку Modbus Master-Slave library for Arduino https://github.com/smarmengol/Modbus-Master-Slave-for-Arduino. Модуль на ATMega используется, как slave, для работы с расширителем GPIO MCP23017, измерения температур, АЦП. В общем, нагружен под завязку. У меня создалось впечатление, что эта библиотека Modbus не доработана. К примеру, в функции getRxBuffer() возможно выход за границы массива:
int8_t Modbus::getRxBuffer() { boolean bBuffOverflow = false; if (u8txenpin > 1) digitalWrite( u8txenpin, LOW ); u8BufferSize = 0; while ( port->available() ) { au8Buffer[ u8BufferSize ] = port->read(); u8BufferSize ++; if (u8BufferSize >= MAX_BUFFER) bBuffOverflow = true; } u16InCnt++; if (bBuffOverflow) { u16errCnt++; return ERR_BUFF_OVERFLOW; } return u8BufferSize; }
Небольшое исправление, правда, позволит это избежать:
while ( port->available() ) { au8Buffer[ u8BufferSize ] = port->read(); u8BufferSize ++; if (u8BufferSize >= MAX_BUFFER) bBuffOverflow = true; // sergek if (bBuffOverflow) { u16errCnt++; return ERR_BUFF_OVERFLOW; } }
Еще в комментариях к setTimeOut() написано, что "The time-out timer is reset each time that there is a successful communication between Master and Slave. It works for both.", но мне не удалось найти, как этот таймаут работает в слейве. А вам?
Коллеги, есть в этой библиотеке еще косяки? А может, посоветуете что-то другое, более надежное?
Дело в том, что на шине RS485 у нас подключено несколько таких устройств на ATMega (до десятка) и создается впечатление, что не везде она работает стабильно.
Конкретно с этой либой дело не имел. но в целом давно понял, что библиотеки для ардуино пишут все кому не лень, в том числе нередко тупые новички. Белиберды на гитхабе полно. Так что пока вы сами тщательно не протестируете библиотеку и не "вылижите" ее код - использовать либу в серьезном проекте не стоит.
С вами согласен, но я надеюсь, что за 6 лет существования библиотеки кто-то поимел опыт и поделится...
С вами согласен, но я надеюсь, что за 6 лет существования библиотеки кто-то поимел опыт и поделится...
на самом деле. если исходник 6 лет не менялся - либо библиотека так хороша :), что в ней нечего исправлять, либо за эти годы ей просто никто не пользовался
библиотеки для ардуино пишут все кому не лень, в том числе нередко тупые новички.
Согласен. Я всегда так делаю. :)
на самом деле. если исходник 6 лет не менялся - либо библиотека так хороша :), что в ней нечего исправлять, либо за эти годы ей просто никто не пользовался
Так ведь менялся - 10 месяцев назад. Автор выкинул часть шелухи, она стала меньше весить. Значит, сам-то он, как минимум, использует ее.
Все зависит от проекта где это юзается. Это одна из самых не плохих библиотек на гитхабе. Но она очень кривая :) Писатель о модбасе имеет очень слабое представление. Уйма упрощений. Куча несовместимости со стандартом. Если я не ошибаюсь , то она требует размещать адреса последовательно. В целом, если для себя - терпимо. Если хотя бы полу профессиональное устройство, или планируете сопрягать его с панелями или PLС-шками, сразу в топку, с этой точки зрения библиотека просто мусор.
Там даже работа с уартами такая дебильная, просто жесть !
Вы удивитесь, но библиотека работает в большом проекте :) Масштаб - десяток зданий размером с пол-футбольного поля, примерно 70-80 модулей на производственную площадку, всего более тысячи контролируемых параметров. Соответствие стандарту меня особо не беспокоит - мне достаточно пары функций 03, 06. Но заглянул в исходники и неприятно удивился)) В общем, в планах - доработка под себя.
Не вижу ничего удивительного. Видимо не большой трафик, порофи устройств нет. Я не сказал, что она не рабочая, я лишь сказал, что это фуфло с точки зрения модбас.