Добрый
Наконец-то я начал это делать. И сразу возникла как будто нерешаемая проблема
Вот есть у меня структура:
Код:
TYPE STRUCT_Weintek_Program_DATA:
STRUCT
//Собственно, все параметры
ROOM_READ_TEMP : REAL; //Адрес 000-001. СЗ. Текущая температура в помещении с датчика
ROOM_TEMP_ON : REAL; //Адрес 002-003. Температура включения нагревателей
ROOM_TEMP_OFF : REAL; //Адрес 004-005. Температура выключения нагревателей
V1_PRESSURE : REAL; //Адрес 006-007. СЗ. Давление из В1 (город)
Pings : DINT; //Адрес 008-009. Счётчик пингов для внешних систем
OUT_V1_PRESSURE : REAL; //Адрес 010-011. СЗ. Давление В1. На участок запаса воды
CPU_Load : REAL; //Адрес 012-013. Загрузка ЦП контроллера
AFTER_PUMP1_PRESSURE : REAL; //Адрес 014-015. СЗ. Давление после перекачного насоса
TANK_PRESSURE : REAL; //Адрес 016-017. СЗ. Давление в емкости (Уровень)
DRY_RUNNING_PROTECT_ON : REAL; //Адрес 018-019. Защита от сухого хода ВКЛ
..............
.............
..........
END_STRUCT
END_TYPE
Вот код:
111.png
Вот всё работает как надо, всё хорошо
Но структура большая, в ней ~400 строк
Стоит мне переименовать/добавить/удалить любой параметр, как Codesys сразу говорит, что мол структура изменилась - и теперь будет обнулена
А это значит, что остальные ~399 параметров тоже обнулятся - и придётся все RETAIN-ы вводить по-новой
Пока вижу решением только хранить всё это с универсальными именами типа такого:
Код:
TYPE STRUCT_Weintek_Modbus_DATA:
STRUCT
//Собственно, все параметры
rHoldReg_000_000 : REAL; //Адрес 000-001. СЗ. Текущая температура в помещении с датчика
rHoldReg_002_002 : REAL; //Адрес 002-003. Температура включения нагревателей
rHoldReg_004_004 : REAL; //Адрес 004-005. Температура выключения нагревателей
rHoldReg_006_006 : REAL; //Адрес 006-007. СЗ. Давление из В1 (город)
rHoldReg_008_008 : DINT; //Адрес 008-009. Счётчик пингов для внешних систем
rHoldReg_010_010 : REAL; //Адрес 010-011. СЗ. Давление В1. На участок запаса воды
rHoldReg_012_012 : REAL; //Адрес 012-013. Загрузка ЦП контроллера
rHoldReg_014_014 : REAL; //Адрес 014-015. СЗ. Давление после перекачного насоса
rHoldReg_016_016 : REAL; //Адрес 016-017. СЗ. Давление в емкости (Уровень)
rHoldReg_018_018 : REAL; //Адрес 018-019. Защита от сухого хода ВКЛ
..............
.............
..........
END_STRUCT
END_TYPE
Тогда переименовывать ничего не придётся, но выглядит-то плохо
Может, как-то через UNION? Через структуры? Через указатели? Через атрибуты?
Хочется где-то в стороне создать такую же структуру, объединить адреса у этой и у модбасовской структуры, но не через UNION, т.к., когда они в одном UNION-е - та же самая проблема с переименовкой
Спасибо за идеи