реклама на сайте
подробности

 
 
> FreeModbus
andrewlekar
сообщение Feb 3 2011, 09:13
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 837
Регистрация: 8-02-07
Пользователь №: 25 163



Кто-нибудь использовал такую штуку? Пробую скомпилировать - какая-то лабуда в заголовках. Ругается, что то одного определения не видит, то другого. Что происходит то? Как побороть?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
yanvasiij
сообщение Apr 22 2014, 11:29
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 321
Регистрация: 23-12-11
Из: Уфа
Пользователь №: 69 041



Люди, я может чего не понимаю, но получается следующее: отправкой исходящих пакетов занимается функция pxMBFrameCBTransmitterEmpty(), которая по-сути переадресована в случае с протоколом modbus RTU на функцию xMBRTUTransmitFSM(). А поскольку эта функция вызывается из прерывания по окончанию отправки, то выходит, чтобы стек ответил на входящий запрос от мастера, нужно после того как входящий запрос был распарсен, нужно "пинуть" стек и один раз вызвать xMBRTUTransmitFSM(). Я добавил этот вызов в функции eMBRTUSend() в файле mbrtu.c. Когда я так сделал стек заработал.
CODE

eMBRTUSend( UCHAR ucSlaveAddress, const UCHAR * pucFrame, USHORT usLength )
{
eMBErrorCode eStatus = MB_ENOERR;
USHORT usCRC16;

ENTER_CRITICAL_SECTION( );

/* Check if the receiver is still in idle state. If not we where to
* slow with processing the received frame and the master sent another
* frame on the network. We have to abort sending the frame.
*/
if( eRcvState == STATE_RX_IDLE )
{
/* First byte before the Modbus-PDU is the slave address. */
pucSndBufferCur = ( UCHAR * ) pucFrame - 1;
usSndBufferCount = 1;

/* Now copy the Modbus-PDU into the Modbus-Serial-Line-PDU. */
pucSndBufferCur[MB_SER_PDU_ADDR_OFF] = ucSlaveAddress;
usSndBufferCount += usLength;

/* Calculate CRC16 checksum for Modbus-Serial-Line-PDU. */
usCRC16 = usMBCRC16( ( UCHAR * ) pucSndBufferCur, usSndBufferCount );
ucRTUBuf[usSndBufferCount++] = ( UCHAR )( usCRC16 & 0xFF );
ucRTUBuf[usSndBufferCount++] = ( UCHAR )( usCRC16 >> 8 );

/* Activate the transmitter. */
eSndState = STATE_TX_XMIT;
vMBPortSerialEnable( FALSE, TRUE );
fledGreen();


/**
* ВОТ ЭТО Я ДОБАВИЛ, ЧТОБЫ ПИНУТЬ СТЕК !
*/

xMBRTUTransmitFSM();





}
else
{
eStatus = MB_EIO;
}
EXIT_CRITICAL_SECTION( );
return eStatus;
}


Почему он сразу не работает?!!
P.S: В указанных выше исходниках у меня НЕ включено прерывание по отправке, сейчас это исправлено.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- andrewlekar   FreeModbus   Feb 3 2011, 09:13
- - MrYuran   Цитата(andrewlekar @ Feb 3 2011, 12:13) Ч...   Feb 3 2011, 09:18
- - andrewlekar   Попробую, хотя вроде все так же делаю. Я версию мо...   Feb 3 2011, 09:59
|- - MrYuran   Цитата(andrewlekar @ Feb 3 2011, 12:59) Н...   Feb 3 2011, 10:16
|- - Dimoza   Цитата(andrewlekar @ Feb 3 2011, 12:59) в...   Feb 24 2011, 07:44
- - andrewlekar   Ну вот, стало сильно лучше. Помогло волшебное доба...   Feb 3 2011, 10:40
|- - MrYuran   Цитата(andrewlekar @ Feb 3 2011, 13:40) П...   Feb 3 2011, 11:25
- - andrewlekar   Пути поиска просто скажут где находится тот или ин...   Feb 3 2011, 11:52
|- - MrYuran   Цитата(andrewlekar @ Feb 3 2011, 14:52) П...   Feb 3 2011, 12:14
- - andrewlekar   А ещё подскажите, где код для мастера искать? В уп...   Feb 4 2011, 08:51
- - alux   При сборке проекта были ошибки линкера, пока не по...   Mar 2 2011, 21:45
|- - Dimoza   Цитата(alux @ Mar 3 2011, 00:45) На запро...   Mar 2 2011, 22:15
- - alux   Код01 83 02 C0 Это ответ на запрос чтения (код 0x0...   Mar 3 2011, 06:31
- - Dimoza   Цитата(alux @ Mar 3 2011, 09:31) Код01 83...   Mar 3 2011, 07:28
- - alux   Это из примера freemodbus Код#define REG_INPUT_STA...   Mar 3 2011, 07:44
|- - MrYuran   Цитата(alux @ Mar 3 2011, 10:44) Так где ...   Mar 3 2011, 08:28
- - Dimoza   В разных реализациях по разному отсчитываются адре...   Mar 3 2011, 08:28
- - alux   Со стороны мастера (ПК) Код//Modbus Functions con...   Mar 3 2011, 08:47
- - MrYuran   Сдаётся мне, вы холдинги хотите прочитать вместо и...   Mar 3 2011, 09:14
- - alux   со стороны мастера изменил запрос на Код 01 04 03...   Mar 3 2011, 09:59
|- - MrYuran   Цитата(alux @ Mar 3 2011, 12:59) но это н...   Mar 3 2011, 10:10
- - Dimoza   Если я ничего не путаю, в ответе должно быть два б...   Mar 3 2011, 10:17
|- - alux   Цитата(Dimoza @ Mar 3 2011, 14:17) в отве...   Mar 3 2011, 10:27
|- - MrYuran   Цитата(alux @ Mar 3 2011, 13:27) А где не...   Mar 4 2011, 09:05
- - alux   Вот ответ автора freemodbus на проблему смещения а...   Mar 4 2011, 22:35
- - Dimoza   Насколько я уяснил это для себя, "по-простому...   Mar 4 2011, 23:00
- - alux   Как правильно передать код ошибки MB_EX_SLAVE_BUSY...   Mar 5 2011, 10:26
|- - MrYuran   Цитата(alux @ Mar 5 2011, 13:26) Я вижу в...   Mar 5 2011, 11:29
- - alux   Еще для полного счастья нужно использовать функции...   Mar 7 2011, 11:47
|- - MrYuran   Цитата(alux @ Mar 7 2011, 14:47) Еще для ...   Mar 7 2011, 16:14
|- - _Pasha   Цитата(alux @ Mar 7 2011, 14:47) Еще для ...   Mar 7 2011, 16:50
- - alux   При использовании функции 0x10 PresetMultipleRegis...   Mar 20 2011, 21:37
- - andrewlekar   Callback написали для этой функции?   Mar 21 2011, 05:29
- - alux   как выяснилось, проблема не в этой функции (0x10),...   Mar 21 2011, 07:09
- - ISK2010   Доброго времени суток! Занимаюсь изучением МК...   Apr 19 2011, 04:45
|- - MrYuran   Цитата(ISK2010 @ Apr 19 2011, 08:45) Не м...   Apr 19 2011, 13:52
- - ISK2010   А как slave должен реагировать на прием пустого AD...   May 13 2011, 13:11
- - yashok   Цитатакоторый адресован ему и имеет правильный CRC...   May 14 2011, 09:03
- - ISK2010   А CRC всех принятых пакетов рассчитывается? Или то...   May 17 2011, 04:40
- - yashok   По хорошему проверка должна идти в следующей очере...   May 17 2011, 05:04
|- - ISK2010   Цитата(yashok @ May 17 2011, 09:04) По хо...   May 17 2011, 05:10
- - yashok   Для простых случаев может и можно не проверять. А...   May 17 2011, 05:17
- - ISK2010   Бесспорно проверка CRC обязательна. Но только для ...   May 17 2011, 05:29
- - yashok   Да согласен Хотя у некторых есть счетчики которые...   May 17 2011, 06:01
- - leshij   Доброго дня всем. Пытаюсь поднять FreeRTOS(7.2)+lw...   Oct 17 2012, 07:26
- - leshij   в sys_mbox_post() убрал цикл, заменил portMAX_DELA...   Oct 18 2012, 06:25
- - leshij   обнаружил, что структура pxQueue не подгружалась п...   Oct 22 2012, 04:37
- - veskon   Помогите реализовать Modbus-slave на базе Atmega32...   Sep 30 2013, 11:02
|- - MrYuran   Цитата(veskon @ Sep 30 2013, 14:02) Помог...   Sep 30 2013, 11:31
|- - Lagman   Цитата(veskon @ Sep 30 2013, 15:02) Помог...   Sep 30 2013, 12:06
||- - veskon   Цитата(Lagman @ Sep 30 2013, 15:06) А мож...   Sep 30 2013, 12:12
||- - Lagman   Цитата(veskon @ Sep 30 2013, 16:12) Спаси...   Sep 30 2013, 13:05
|- - _Pasha   Цитата(veskon @ Sep 30 2013, 14:02) Помог...   Sep 30 2013, 14:06
|- - veskon   Цитата(_Pasha @ Sep 30 2013, 17:06) Дык п...   Sep 30 2013, 14:21
- - _Pasha   Помогать так уж буквально не буду. Почитайте стр.8...   Sep 30 2013, 16:36
|- - veskon   Цитата(_Pasha @ Sep 30 2013, 19:36) Помог...   Oct 1 2013, 06:11
- - yanvasiij   Ребят удалось портировать? Никак не могу разобрать...   Apr 18 2014, 13:01
- - yanvasiij   Вообщем портировать удалось, кажется все по правил...   Apr 22 2014, 05:14
- - Сepгeй   Доброго всем дня. Портирую freemodbus на stm32. Ho...   Mar 24 2015, 06:40
- - smalcom   сколько задаёте, столько и считывается.   Mar 24 2015, 13:04
|- - Сepгeй   Цитата(smalcom @ Mar 24 2015, 16:04) скол...   Mar 24 2015, 13:35
- - smalcom   Цитатаоставшиеся 16 считываются как false хотя име...   Mar 24 2015, 14:55
|- - Сepгeй   Цитата(smalcom @ Mar 24 2015, 17:55) вы р...   Mar 25 2015, 05:42
- - Cruz21   У кого нибудь есть описание реализации Freemodbus ...   Jul 2 2015, 07:35


Reply to this topicStart new topic
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 10:27
Рейтинг@Mail.ru


Страница сгенерированна за 0.01452 секунд с 7
ELECTRONIX ©2004-2016