Перейти к содержанию
    

Кто-нибудь использовал такую штуку? Пробую скомпилировать - какая-то лабуда в заголовках. Ругается, что то одного определения не видит, то другого. Что происходит то? Как побороть?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что происходит то? Как побороть?

Как обычно.

Включить все модули в проект или в пути поиска, если свой мэйкфайл.

 

У меня так сделано:

...
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"

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробую, хотя вроде все так же делаю. Я версию модбаса использовал 1.3 - может с 1.5 лучше покатит. И ещё, сами модули собрались, а вот в программе пытаюсь использовать их тайпдефы и вызовы из mb.h - ругается на то, что они не объявлены. Ничего не пойму - сколько на си пишу, такого безобразия не встречал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ничего не пойму - сколько на си пишу, такого безобразия не встречал.

Нет там никакого безобразия, библиотека сделана очень чётко и грамотно.

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

Возьмите для начала готовый пример.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну вот, стало сильно лучше. Помогло волшебное добавление именно в таком порядке

/* ----------------------- Modbus includes ----------------------------------*/
#include "../modbus/include/mb.h"
#include "../modbus/include/mbport.h"
#include "../modbus/port/port.h"

 

Причем добавление во все без исключения модули модбаса - иначе нет-нет да поругивалось.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Причем добавление во все без исключения модули модбаса

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

Надо просто пути поиска к этим папкам прописать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пути поиска просто скажут где находится тот или иной заголовочный файл, но добавлять всё равно нужно при помощи #include. Проблема не в путях, а в том, что каждый модуль модбаса хочет именно эту последовательность инклудов. Для меня это оказалось несколько странным. Хотя я не отрицаю, что тут я что-то не понимаю, но до этого успешно добавлял в проект и ucOS, и lwIp, и PolarSSL - такой странной реакции не наблюдал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Действительно странно...

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А ещё подскажите, где код для мастера искать? В упор не вижу мастера во этой библиотечке.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

версию модбаса использовал 1.3 - может с 1.5 лучше покатит.

Собирал недавно проект ModbusTCP на Freemodbus 1.5 - с заголовками такой фигни не было, зато обнаружился другой небольшой глючок: не для всех функций корректно вычислялась длина возвращаемого пакета. Для большинства modbus-мастеров это не принципиально (там длина в пакете двух местах присутствует), но товарищ делал мастера на питоне под линуксом и у него мастер, собранный из готовой библиотеки, ругался на некорректность данных.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

При сборке проекта были ошибки линкера, пока не подключил #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 отвечает ошибкой. В чем может быть проблема?

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На запрос чтения одного регистра по адресу 1000 отвечает ошибкой. В чем может быть проблема?

В возвращаемом пакете что передаёт? Там ведь пусть небогатая , но есть информация об ошибке.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

01 83 02 C0

Это ответ на запрос чтения (код 0x03) с устройства №1 одного регистра по адресу 1000.

Почему, никак не могу понять? Проект компилируется, правда в IARе, без ошибок.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

01 83 02 C0

То есть возвращает код ошибки - 2. А это означает (см. рисунок), что вы пытаетесь прочитать несуществующий регистр. Обработчик у вас этот адрес обрабатывает?

post-19701-1299137283_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это из примера 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);

//адр. устройства, адрес считывания, кол-во считываемых регистров, буфер

 

Так где я не прав?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...