|
|
  |
FreeModbus |
|
|
|
Feb 3 2011, 09:18
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(andrewlekar @ Feb 3 2011, 12:13)  Что происходит то? Как побороть? Как обычно. Включить все модули в проект или в пути поиска, если свой мэйкфайл. У меня так сделано: Код ... MODULES += modbus MODULES += modbus/RTU MODULES += modbus/Port MODULES += modbus/Functions MODULES += modbus/system
...
SRCDIRS = $(PROJECT_ROOT)/ SRCDIRS += $(addprefix $(PROJECT_ROOT)/,$(MODULES))
#INCLUDES = -I$(PROJECT_ROOT)/ INCLUDES = $(addprefix -I$(PROJECT_ROOT)/,$(MODULES))
CSRC = $(wildcard $(addsuffix /*.c,$(SRCDIRS))) CPPSRC = $(wildcard $(addsuffix /*.cpp,$(SRCDIRS))) ASRC = $(wildcard $(addsuffix /*.s,$(SRCDIRS))) Ну и не забыть подключить: Код /* ----------------------- Modbus includes ----------------------------------*/ #include "../modbus/include/mb.h" #include "../modbus/include/mbport.h" #include "../modbus/port/port.h"
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Feb 3 2011, 10:16
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(andrewlekar @ Feb 3 2011, 12:59)  Ничего не пойму - сколько на си пишу, такого безобразия не встречал. Нет там никакого безобразия, библиотека сделана очень чётко и грамотно. Подключается буквально в три шага, в документации расписано. Возьмите для начала готовый пример. Чтобы не гадать, выкладывайте, что именно не получается и какие ошибки.
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Feb 3 2011, 10:40
|
Знающий
   
Группа: Участник
Сообщений: 837
Регистрация: 8-02-07
Пользователь №: 25 163

|
Ну вот, стало сильно лучше. Помогло волшебное добавление именно в таком порядке Код /* ----------------------- Modbus includes ----------------------------------*/ #include "../modbus/include/mb.h" #include "../modbus/include/mbport.h" #include "../modbus/port/port.h" Причем добавление во все без исключения модули модбаса - иначе нет-нет да поругивалось.
|
|
|
|
|
Feb 24 2011, 07:44
|
Частый гость
 
Группа: Свой
Сообщений: 120
Регистрация: 21-08-06
Из: СПб
Пользователь №: 19 701

|
Цитата(andrewlekar @ Feb 3 2011, 12:59)  версию модбаса использовал 1.3 - может с 1.5 лучше покатит. Собирал недавно проект ModbusTCP на Freemodbus 1.5 - с заголовками такой фигни не было, зато обнаружился другой небольшой глючок: не для всех функций корректно вычислялась длина возвращаемого пакета. Для большинства modbus-мастеров это не принципиально (там длина в пакете двух местах присутствует), но товарищ делал мастера на питоне под линуксом и у него мастер, собранный из готовой библиотеки, ругался на некорректность данных.
|
|
|
|
|
Mar 2 2011, 21:45
|
Знающий
   
Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447

|
При сборке проекта были ошибки линкера, пока не подключил #include "mbfunc.h" в некоторых модулях. Проект скомпилировал в IAR v.5.50.0. Безуспешно пытаюсь запустить freemodbus-v1.5. Пробую на разных контроллерах (сейчас на Меге324P 20MHz). Код int main( void ) { eMBErrorCode eStatus;
eStatus = eMBInit( MB_RTU, 0x01, 0, 9600UL, MB_PAR_NONE );
__enable_interrupt();
/* Enable the Modbus Protocol Stack. */ eStatus = eMBEnable( );
for(;; ) { ( void )eMBPoll( );
/* Here we simply count the number of poll cycles. */ usRegInputBuf[0]++; } На запрос чтения одного регистра по адресу 1000 отвечает ошибкой. В чем может быть проблема?
|
|
|
|
|
Mar 2 2011, 22:15
|
Частый гость
 
Группа: Свой
Сообщений: 120
Регистрация: 21-08-06
Из: СПб
Пользователь №: 19 701

|
Цитата(alux @ Mar 3 2011, 00:45)  На запрос чтения одного регистра по адресу 1000 отвечает ошибкой. В чем может быть проблема? В возвращаемом пакете что передаёт? Там ведь пусть небогатая , но есть информация об ошибке.
|
|
|
|
|
Mar 3 2011, 06:31
|
Знающий
   
Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447

|
Код 01 83 02 C0 Это ответ на запрос чтения (код 0x03) с устройства №1 одного регистра по адресу 1000. Почему, никак не могу понять? Проект компилируется, правда в IARе, без ошибок.
|
|
|
|
|
Mar 3 2011, 07:28
|
Частый гость
 
Группа: Свой
Сообщений: 120
Регистрация: 21-08-06
Из: СПб
Пользователь №: 19 701

|
Цитата(alux @ Mar 3 2011, 09:31)  То есть возвращает код ошибки - 2. А это означает (см. рисунок), что вы пытаетесь прочитать несуществующий регистр. Обработчик у вас этот адрес обрабатывает?
Эскизы прикрепленных изображений
|
|
|
|
|
Mar 3 2011, 07:44
|
Знающий
   
Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447

|
Это из примера freemodbus Код #define REG_INPUT_START 1000 #define REG_INPUT_NREGS 4
static USHORT usRegInputStart = REG_INPUT_START; static USHORT usRegInputBuf[REG_INPUT_NREGS]; Со стороны мастера (ПК) периодически даю запрос на чтение: Код wError = mb.ReadOutputRegisters(1, 1000, 1, wTempData); //адр. устройства, адрес считывания, кол-во считываемых регистров, буфер Так где я не прав?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|