кажись придумал... ассоциативные связанные списки #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
Отправка запроса. Выбирается элемент массива являющийся первым элементом списка, считается длина списка.
Разборка ответа. Элементы списка последовательно заполняются, согласно адресов и типа данных.
Будет работать?