andrewlekar 0 3 февраля, 2011 Опубликовано 3 февраля, 2011 · Жалоба Кто-нибудь использовал такую штуку? Пробую скомпилировать - какая-то лабуда в заголовках. Ругается, что то одного определения не видит, то другого. Что происходит то? Как побороть? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 29 3 февраля, 2011 Опубликовано 3 февраля, 2011 · Жалоба Что происходит то? Как побороть? Как обычно. Включить все модули в проект или в пути поиска, если свой мэйкфайл. У меня так сделано: ... 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" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrewlekar 0 3 февраля, 2011 Опубликовано 3 февраля, 2011 · Жалоба Попробую, хотя вроде все так же делаю. Я версию модбаса использовал 1.3 - может с 1.5 лучше покатит. И ещё, сами модули собрались, а вот в программе пытаюсь использовать их тайпдефы и вызовы из mb.h - ругается на то, что они не объявлены. Ничего не пойму - сколько на си пишу, такого безобразия не встречал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 29 3 февраля, 2011 Опубликовано 3 февраля, 2011 · Жалоба Ничего не пойму - сколько на си пишу, такого безобразия не встречал. Нет там никакого безобразия, библиотека сделана очень чётко и грамотно. Подключается буквально в три шага, в документации расписано. Возьмите для начала готовый пример. Чтобы не гадать, выкладывайте, что именно не получается и какие ошибки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrewlekar 0 3 февраля, 2011 Опубликовано 3 февраля, 2011 · Жалоба Ну вот, стало сильно лучше. Помогло волшебное добавление именно в таком порядке /* ----------------------- Modbus includes ----------------------------------*/ #include "../modbus/include/mb.h" #include "../modbus/include/mbport.h" #include "../modbus/port/port.h" Причем добавление во все без исключения модули модбаса - иначе нет-нет да поругивалось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 29 3 февраля, 2011 Опубликовано 3 февраля, 2011 · Жалоба Причем добавление во все без исключения модули модбаса Это идеологически неправильно... Надо просто пути поиска к этим папкам прописать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrewlekar 0 3 февраля, 2011 Опубликовано 3 февраля, 2011 · Жалоба Пути поиска просто скажут где находится тот или иной заголовочный файл, но добавлять всё равно нужно при помощи #include. Проблема не в путях, а в том, что каждый модуль модбаса хочет именно эту последовательность инклудов. Для меня это оказалось несколько странным. Хотя я не отрицаю, что тут я что-то не понимаю, но до этого успешно добавлял в проект и ucOS, и lwIp, и PolarSSL - такой странной реакции не наблюдал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 29 3 февраля, 2011 Опубликовано 3 февраля, 2011 · Жалоба Проблема не в путях, а в том, что каждый модуль модбаса хочет именно эту последовательность инклудов. Для меня это оказалось несколько странным. Действительно странно... Хотя, может я тоже добавлял, просто не помню. Давно это было, а отлаженная библиотека кочует из проекта в проект без изменений. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrewlekar 0 4 февраля, 2011 Опубликовано 4 февраля, 2011 · Жалоба А ещё подскажите, где код для мастера искать? В упор не вижу мастера во этой библиотечке. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dimoza 0 24 февраля, 2011 Опубликовано 24 февраля, 2011 · Жалоба версию модбаса использовал 1.3 - может с 1.5 лучше покатит. Собирал недавно проект ModbusTCP на Freemodbus 1.5 - с заголовками такой фигни не было, зато обнаружился другой небольшой глючок: не для всех функций корректно вычислялась длина возвращаемого пакета. Для большинства modbus-мастеров это не принципиально (там длина в пакете двух местах присутствует), но товарищ делал мастера на питоне под линуксом и у него мастер, собранный из готовой библиотеки, ругался на некорректность данных. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alux 0 2 марта, 2011 Опубликовано 2 марта, 2011 · Жалоба При сборке проекта были ошибки линкера, пока не подключил #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 отвечает ошибкой. В чем может быть проблема? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dimoza 0 2 марта, 2011 Опубликовано 2 марта, 2011 · Жалоба На запрос чтения одного регистра по адресу 1000 отвечает ошибкой. В чем может быть проблема? В возвращаемом пакете что передаёт? Там ведь пусть небогатая , но есть информация об ошибке. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alux 0 3 марта, 2011 Опубликовано 3 марта, 2011 · Жалоба 01 83 02 C0 Это ответ на запрос чтения (код 0x03) с устройства №1 одного регистра по адресу 1000. Почему, никак не могу понять? Проект компилируется, правда в IARе, без ошибок. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dimoza 0 3 марта, 2011 Опубликовано 3 марта, 2011 · Жалоба 01 83 02 C0 То есть возвращает код ошибки - 2. А это означает (см. рисунок), что вы пытаетесь прочитать несуществующий регистр. Обработчик у вас этот адрес обрабатывает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alux 0 3 марта, 2011 Опубликовано 3 марта, 2011 · Жалоба Это из примера 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); //адр. устройства, адрес считывания, кол-во считываемых регистров, буфер Так где я не прав? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться