Modbus Master-Slave library for Arduino

sergek
sergek аватар
Offline
Зарегистрирован: 05.04.2020

Коллеги,
использую на 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 (до десятка) и создается впечатление, что не везде она работает стабильно.

b707
Offline
Зарегистрирован: 26.05.2017

Конкретно с этой либой дело не имел. но в целом давно понял, что библиотеки для ардуино пишут все кому не лень, в том числе нередко тупые новички. Белиберды на гитхабе полно. Так что пока вы сами тщательно не протестируете библиотеку и не "вылижите" ее код - использовать либу в серьезном проекте не стоит.

sergek
sergek аватар
Offline
Зарегистрирован: 05.04.2020

С вами согласен, но я надеюсь, что за 6 лет существования библиотеки кто-то поимел опыт и поделится...

b707
Offline
Зарегистрирован: 26.05.2017

sergek пишет:

С вами согласен, но я надеюсь, что за 6 лет существования библиотеки кто-то поимел опыт и поделится...

на самом деле. если исходник 6 лет не менялся - либо библиотека так хороша :), что в ней нечего исправлять, либо за эти годы ей просто никто не пользовался

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

b707 пишет:

библиотеки для ардуино пишут все кому не лень, в том числе нередко тупые новички. 

Согласен. Я всегда так делаю. :) 

sergek
sergek аватар
Offline
Зарегистрирован: 05.04.2020

b707 пишет:

на самом деле. если исходник 6 лет не менялся - либо библиотека так хороша :), что в ней нечего исправлять, либо за эти годы ей просто никто не пользовался

Так ведь менялся - 10 месяцев назад. Автор выкинул часть шелухи, она стала меньше весить. Значит, сам-то он, как минимум, использует ее.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Все зависит от проекта где это юзается. Это одна из самых не плохих библиотек на гитхабе. Но она очень кривая :) Писатель о модбасе имеет очень слабое представление. Уйма упрощений. Куча несовместимости со стандартом. Если я не ошибаюсь , то она требует размещать адреса последовательно. В целом, если для себя - терпимо. Если хотя бы полу профессиональное устройство, или планируете сопрягать его с панелями или PLС-шками, сразу в топку, с этой точки зрения библиотека просто мусор. 

Там даже работа с уартами такая дебильная, просто жесть !

sergek
sergek аватар
Offline
Зарегистрирован: 05.04.2020

Вы удивитесь, но библиотека работает в большом проекте :) Масштаб - десяток зданий размером с пол-футбольного поля, примерно 70-80 модулей на производственную площадку, всего более тысячи контролируемых параметров. Соответствие стандарту меня особо не беспокоит - мне достаточно пары функций 03, 06. Но заглянул в исходники и неприятно удивился)) В общем, в планах - доработка под себя.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Не вижу ничего удивительного. Видимо не большой трафик, порофи устройств нет. Я не сказал, что она не рабочая, я лишь сказал, что это фуфло с точки зрения модбас.