не для modbus, а для доморощенного UART протокола использовал доморощенную БД. Каждый параметр имеет свой ID. есть набор базовых типов.
typedef enum _InternalDataType{
T_VOID,
T_BYTE, /* unsigned char */
T_WORD, /* unsigned short */
T_INT, /* short 2-byte */
T_DWORD, /* unsigned long */
T_LONG, /* long */
T_FLOAT, /* float 4-byte */
T_DOUBLE, /* double 8-byte */
T_STRING, /* n-byte, 255 max */
} t_InternalDataType;
из них создаются комбинации в любых сочетаниях и количествах
Далее параметр описывается на доморощенном языке
{ ID_PAR_RESULT, // Измеренная величина (давление, расход и т.д.)
<RAM_STORAGE>,
PROCESS_DATA_SUBD(), // стандартный обработчик параметра
(BYTE)255 & (FLOAT),
ACCESS_LEV_LOW/ACCESS_LEV_NOT_ACCESS, // уровни доступа по R/W
NO_OPTION}
}
<RAM_STORAGE> - хранится в ОЗУ
по умолчанию в EEPROM
{ ID_PAR_AUTO_NULL_CORR,// процедура автоматической коррекции нуля.
PROCESS_DATA_AUTO_NULL_CORR(), // обработчик вызываемый по *pF
ACCESS_LEV_LOW/ACCESS_LEV_LOW
}
все определено дефайнами
#define ID_PAR_AUTO_NULL_CORR 0x20
итд
далее запускается прога, котора сначала запускает препроцессор и заменяет буквы на цифры. Далее доморощенный транслятор упаковывает все в БД, проверяя синтаксис, контролируя уникальность ID.
создает бинарник(можно залить в EEPROM) и сишник который можно подключить к проекту
структура БД представлена на рис.
СУБД содержит ф-и
/**/ rcode /**/
/* Код возврата : */
/* */
/* Размер прочитанных данных */
/* - Запись найдена, нормальное завершение */
/* -1 - Ошибка */
/* */
/**/ DB_GetPar(BYTE bId, ptr pPar, BYTE bSize) /**/
/* bId - идентификатор параметра */
/* pPar - указатель на приемный буфер */
/* bSize- максимальный размер буфера */
/**/ BOOL /**/
/* Код возврата : */
/* FALSE - Запись произведена успешно */
/* TRUE - Ошибка */
/* */
/**/ DB_PutPar(BYTE bId, ptr pPar) /**/
/* bId - идентификатор параметра */
/* pPar - указатель на приемный буфер */
добавление параметра на человеческом языке, нет привязки параметров к физическим адресам.
совместимость новой БД со старым ПО контроллера.
ВременнЫе накладные расходы связанные с поискам по кольцам уменьшаются путем построения индексного кэша в тойже EEPROM.
-
- с ходу не всё смог переварить. Надо подумать, смогу ли я что-то из этого применить к своей задаче. Кстати, что такое "стандартный обработчик параметра"? - koyodza(11.02.2010 22:05)
- стандартный это просто записать или прочитать значение из/в БД(EEPROM) - abivan(12.02.2010 09:03)
- с ходу не всё смог переварить. Надо подумать, смогу ли я что-то из этого применить к своей задаче. Кстати, что такое "стандартный обработчик параметра"? - koyodza(11.02.2010 22:05)