ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
24 апреля
1146798 Топик полностью
IBAH (18.11.2021 14:20, просмотров: 210) ответил IBAH на А кто-нибудь писал полноценный модбас-клиент на МК (на ПС)? Чтобы все как в ОРС-сервере, заполнил иерархическую табличку с тегами (Канал->Устройство->Тег), стартанул и он все сам делает...
кажись придумал... ассоциативные связанные списки 
#define MaxLen (16) //максимальная длинна запроса
#define MaxWin (2) //максимальная окно между тегами
//Структура данных тега
typedef struct
  {
  unsigned char Device;//устройство
  unsigned char Func;//функция считывания
  unsigned short Adres;//адрес
  unsigned char Type;//тип данных тега (int16, int32)
  unsigned long Data;//значение тега
  unsigned char Error;//признак ошибки
  unsigned char Prev;//индекс предыдущего
  unsigned char Next;//индекс следующего
  } Teg_t;



Теги хранятся в массиве типа Teg_t. (Спасибо AlexG, а то бы с указателями мудрить начал)

После заполнения массива, проводится инициализация

1) Элементы массива, согласно устройству и функции, связываются в списки

2) Списки сортируются по адресу

3) Списки разбиваются по длине MaxLen и максимальному окну между тегами MaxWin

Отправка запроса. Выбирается элемент массива являющийся первым элементом списка, считается длина списка.

Разборка ответа. Элементы списка последовательно заполняются, согласно адресов и типа данных.

Будет работать?