Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: [C]Обработка коммуникационных протоколов и собственные структуры данных  (Прочитано 5058 раз)
0 Пользователей и 1 Гость смотрят эту тему.
tugoboss
Интересующийся

ru
Offline Offline

« : 19-01-2009 12:58 » 

Здравствуйте!

Пишу программу для устройства - концентратора (с микроконтроллером на борту). К нему подключены интеллектуальные датчики температуры. Концентратор общается с верхней системой по Modbus протоколу и опрашивает датчики температуры.

Данные от всех датчиков (коды АЦП, версия ПО, версия железа, калибровочные значения и т.д.) объединены в структуру данных. По Modbus от верхней системы может прийти запрос на считывание каких-то данных из этой структуры или на записть туда данных.

Как организовать "прослойку" между протоколом Modbus  и структурой данных?
Есть ли какой-то общий подход? Ведь, по идее, все равно - Modbus или какой-то другой протокол.

Структура данных уже описана (не мной), мне нужно продолжить начатое дело Улыбаюсь

Если мало данных - уточню.

Спасибо.
Записан
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 19-01-2009 13:11 » 

tugoboss, а ты проткол Modbus изучал?
судя по всему, что-то знаешь

и все таки непонятно, а в чем собственно вопрос

Мастер - слейв(твой концентратор)
Концентратор(мастер) - датчики

Задача концентратора хранит данные, или получить сдатчика/отдать на мастер данные с датчиков

Тем более структура данных уже описана.

Общий подход? Чтобы работало!
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
tugoboss
Интересующийся

ru
Offline Offline

« Ответ #2 : 21-01-2009 08:54 » 

Улыбаюсь "Чтобы работало" - это понятно. Только я еще начинающий - делайте скидку.

Вроде сам разобрался, гляньте.

Есть внутренняя структура:

Код:
typedef struct
{
    unsigned long ADCvalue[SENSOR_CNT]; // код АЦП реальное значение
    unsigned long ADCcalib[SENSOR_CNT]; // код АЦП при калибровке
    float         valueT[SENSOR_CNT];   // температура, реальное значение
    float         calibT[SENSOR_CNT];   // температура, калибровочное значение
    unsigned char type[SENSOR_CNT];     // тип датчика   
    unsigned char version [SENSOR_CNT]; // версия ПО датчика
}thermoSensorData;

И есть пространство Modbus адресов, поделенное на 4 таблицы.

Для связывания пространства Modbus с внутренней структурой, создается такая прослойка-структура:
Код:
typedef struct
{
    unsigned short startModbusAddress; // начальный адрес Modbus
    unsigned short endModbusAddress;   // конечный адрес Modbus
    unsigned char *realAddress;        // указатель на внутреннюю стуктуру
}desc;

desc структур создается по количеству полей в thermoSensorData.

Может это и очевидно, но для меня недавно было совсем не так.

« Последнее редактирование: 21-01-2009 08:56 от tugoboss » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines