Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: freeMODBUS переделка под мастер
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > GNU/OpenSource средства разработки
Цырен
Народ помогите!

Если вы смогли победить freeModbus, помогите пож. и мне. Нужно переделать код freeMODBUS 1.5 под мастера для Mega64. Код как слэйв работает отлично (RTU).
Потом решил посмотреть что шлет прибор и воспользовался функцией peMBFrameSendCur(...). Включил на компе снифер (Free Serial Port Monitor).
Код
eMBErrorCode
eMBPoll( void )
{
    static UCHAR   *ucMBFrame;
    static USHORT   usLength;
    eMBErrorCode    eStatus = MB_ENOERR;
    eMBEventType    eEvent;
    
    /* Check if the protocol stack is ready. */
    if( eMBState != STATE_ENABLED )
    {
        return MB_EILLSTATE;
    }
    
    ucMBFrame[0] = 0x11;
    usLength = 1; // Длина сообщения PDU - без адреса(1 байт) и CRC16(2 байта)
    
    eStatus = peMBFrameSendCur( 1, ucMBFrame, usLength );
    
    while(!( (xMBPortEventGet( &eEvent ) == TRUE) && (eEvent == EV_FRAME_SENT) )){};
}


Прибор шлет FF 21 00 01 вместо положенных 01 11 C0 2C.
Скорость, паритет, стоп-биты установил верно.
Может я неправильно использую функцию? Подскажите.
Спс.
MrYuran
Цитата
Может я неправильно использую функцию?

Думаю, что да. Ибо в моём понимании eMBPoll() используется для обработки принятого пакета и выполнения каких-то действий по результату.
Отправку мастер-пакета имхо, нужно делать отдельной функцией, а eMBPoll() переделать по минимуму (убрать отсылку ответного пакета, добавить анализ принятого пакета на предмет соответствия отправленному)
Цырен
Спасибо, учту.
Но сейчас мне бы понять почему функция отправки посылает мусор, а не то что было задано.
Было предположение о неверной работе с памятью... но мимо.
ZAA
Цитата(Цырен @ Jun 30 2008, 12:51) *
Народ помогите!

Если вы смогли победить freeModbus, помогите пож. и мне. Нужно переделать код freeMODBUS 1.5 под мастера для Mega64. Код как слэйв работает отлично (RTU).
Потом решил посмотреть что шлет прибор и воспользовался функцией peMBFrameSendCur(...). Включил на компе снифер (Free Serial Port Monitor).

Прибор шлет FF 21 00 01 вместо положенных 01 11 C0 2C.
Скорость, паритет, стоп-биты установил верно.
Может я неправильно использую функцию? Подскажите.
Спс.


Здравствуйте, коллега!
Долго мучилась с этим FreeModbusом!!! Весь формум заполонила. В результате пришла к выводу, что лучше писать самой с нуля (ну почти с нуля).
А ф-ию (SendCur) эту тоже сначала пробовала применять, но она завязана на прием. Там используется тот же массив, что и при приеме байт. Да ещё двойные указатели. В общем просто так ей байты не отправить. Плюс у меня ещё и контролер вис после отправки одного байта.

Короче, переписала все заново, пользуясь принципом Freemodbusа - суть та же, только все упрощено под мой контроллер, и названия поменяла. А то глаза рябит от их переобозначений.

Завтра приду на работу - отошлю Вам результаты своей работы (режим мастера). Надеюсь поможет smile.gif УДАЧИ!!!

P.S - сегодня даже удалось связь с девайсом-слэйвом (МВА8 овеновским) установитьи проверить протокольчик!!!

P.P.S. - большое спасибо ещё раз всем, кто меня консультировал, а в особенности aaarrr!
Цырен
Буду с нетерпением ждать.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.