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

 
 
5 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> FreeModbus
andrewlekar
сообщение Feb 3 2011, 09:13
Сообщение #1


Знающий
****

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



Кто-нибудь использовал такую штуку? Пробую скомпилировать - какая-то лабуда в заголовках. Ругается, что то одного определения не видит, то другого. Что происходит то? Как побороть?
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Feb 3 2011, 09:18
Сообщение #2


Беспросветный оптимист
******

Группа: Свой
Сообщений: 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 =)
Go to the top of the page
 
+Quote Post
andrewlekar
сообщение Feb 3 2011, 09:59
Сообщение #3


Знающий
****

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



Попробую, хотя вроде все так же делаю. Я версию модбаса использовал 1.3 - может с 1.5 лучше покатит. И ещё, сами модули собрались, а вот в программе пытаюсь использовать их тайпдефы и вызовы из mb.h - ругается на то, что они не объявлены. Ничего не пойму - сколько на си пишу, такого безобразия не встречал.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Feb 3 2011, 10:16
Сообщение #4


Беспросветный оптимист
******

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



Цитата(andrewlekar @ Feb 3 2011, 12:59) *
Ничего не пойму - сколько на си пишу, такого безобразия не встречал.

Нет там никакого безобразия, библиотека сделана очень чётко и грамотно.
Подключается буквально в три шага, в документации расписано.
Возьмите для начала готовый пример.

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


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
andrewlekar
сообщение Feb 3 2011, 10:40
Сообщение #5


Знающий
****

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



Ну вот, стало сильно лучше. Помогло волшебное добавление именно в таком порядке
Код
/* ----------------------- Modbus includes ----------------------------------*/
#include "../modbus/include/mb.h"
#include "../modbus/include/mbport.h"
#include "../modbus/port/port.h"


Причем добавление во все без исключения модули модбаса - иначе нет-нет да поругивалось.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Feb 3 2011, 11:25
Сообщение #6


Беспросветный оптимист
******

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



Цитата(andrewlekar @ Feb 3 2011, 13:40) *
Причем добавление во все без исключения модули модбаса

Это идеологически неправильно...
Надо просто пути поиска к этим папкам прописать.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
andrewlekar
сообщение Feb 3 2011, 11:52
Сообщение #7


Знающий
****

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



Пути поиска просто скажут где находится тот или иной заголовочный файл, но добавлять всё равно нужно при помощи #include. Проблема не в путях, а в том, что каждый модуль модбаса хочет именно эту последовательность инклудов. Для меня это оказалось несколько странным. Хотя я не отрицаю, что тут я что-то не понимаю, но до этого успешно добавлял в проект и ucOS, и lwIp, и PolarSSL - такой странной реакции не наблюдал.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Feb 3 2011, 12:14
Сообщение #8


Беспросветный оптимист
******

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



Цитата(andrewlekar @ Feb 3 2011, 14:52) *
Проблема не в путях, а в том, что каждый модуль модбаса хочет именно эту последовательность инклудов. Для меня это оказалось несколько странным.

Действительно странно...
Хотя, может я тоже добавлял, просто не помню. Давно это было, а отлаженная библиотека кочует из проекта в проект без изменений.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
andrewlekar
сообщение Feb 4 2011, 08:51
Сообщение #9


Знающий
****

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



А ещё подскажите, где код для мастера искать? В упор не вижу мастера во этой библиотечке.
Go to the top of the page
 
+Quote Post
Dimoza
сообщение Feb 24 2011, 07:44
Сообщение #10


Частый гость
**

Группа: Свой
Сообщений: 120
Регистрация: 21-08-06
Из: СПб
Пользователь №: 19 701



Цитата(andrewlekar @ Feb 3 2011, 12:59) *
версию модбаса использовал 1.3 - может с 1.5 лучше покатит.

Собирал недавно проект ModbusTCP на Freemodbus 1.5 - с заголовками такой фигни не было, зато обнаружился другой небольшой глючок: не для всех функций корректно вычислялась длина возвращаемого пакета. Для большинства modbus-мастеров это не принципиально (там длина в пакете двух местах присутствует), но товарищ делал мастера на питоне под линуксом и у него мастер, собранный из готовой библиотеки, ругался на некорректность данных.
Go to the top of the page
 
+Quote Post
alux
сообщение Mar 2 2011, 21:45
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 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 отвечает ошибкой. В чем может быть проблема?

Go to the top of the page
 
+Quote Post
Dimoza
сообщение Mar 2 2011, 22:15
Сообщение #12


Частый гость
**

Группа: Свой
Сообщений: 120
Регистрация: 21-08-06
Из: СПб
Пользователь №: 19 701



Цитата(alux @ Mar 3 2011, 00:45) *
На запрос чтения одного регистра по адресу 1000 отвечает ошибкой. В чем может быть проблема?

В возвращаемом пакете что передаёт? Там ведь пусть небогатая , но есть информация об ошибке.
Go to the top of the page
 
+Quote Post
alux
сообщение Mar 3 2011, 06:31
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Код
01 83 02 C0

Это ответ на запрос чтения (код 0x03) с устройства №1 одного регистра по адресу 1000.
Почему, никак не могу понять? Проект компилируется, правда в IARе, без ошибок.
Go to the top of the page
 
+Quote Post
Dimoza
сообщение Mar 3 2011, 07:28
Сообщение #14


Частый гость
**

Группа: Свой
Сообщений: 120
Регистрация: 21-08-06
Из: СПб
Пользователь №: 19 701



Цитата(alux @ Mar 3 2011, 09:31) *
Код
01 83 02 C0

То есть возвращает код ошибки - 2. А это означает (см. рисунок), что вы пытаетесь прочитать несуществующий регистр. Обработчик у вас этот адрес обрабатывает?
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
alux
сообщение Mar 3 2011, 07:44
Сообщение #15


Знающий
****

Группа: Свой
Сообщений: 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);
//адр. устройства, адрес считывания, кол-во считываемых регистров, буфер

Так где я не прав?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 14:51
Рейтинг@Mail.ru


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