Прошу помочь советом, кто решал подобную задачу
Есть массив структурированных данных (конфигурационные данные для использования в программе). Сразу замечу что структура весьма сложная. Данный массив сохраняется в файл (хотел использовать рецепты, но в SP14 в них нельзя сохранить переменную с типом LTIME). Далее при запуске контроллера приложение проверяет наличие данных конфигурационных файлов. Если файлы есть переменные программы заполняются значениями из файла, если нет - значениями по умолчанию из RETAIN памяти.
Для контроля целостности данных в конец каждого элемента структуры массива я добавить переменую с CRC - кодом (wCRC16Val). Естественно при расчете CRC я должен исключить эту переменную, т.е. уменьшить размер блока на величину переменной. для вычислений я использую MEM.CRC16_standard. ПРимерно так:
Но такой подход не дает ожидаемого результата. При вычислении у меня CRC каждый раз новый. При том что данные не изменяются, кроме значения CRC, но я же этот блок исключил. Т.е. в функцию я передаю начальный адрес блока и длину блока, уменьшенную на размер переменной wCRC16Val.Код:GVL.stRecipies[bRecipeIndexTmp].wCRC16Val := MEM.CRC16_standard(pMemoryBlock := ADR(GVL.stRecipies[bRecipeIndexTmp]), uiLength := SIZEOF(GVL.stRecipies[bRecipeIndexTmp])-SIZEOF(GVL.stRecipies[bRecipeIndexTmp].wCRC16Val));
Посоветуйте, как выкрутиться? Сохранять CRC в отдельный файл не очень хочется.