Добрый день. Это не нормально.
Выложите простейший проект, в котором у меня получится это воспроизвести - тогда можно будет дать какие-то комментарии.
Вид для печати
Входы с AI модулей MB210-101. Их в сети этого плк 5 штук. то есть до 40 сигналов. по факту скорее всего 27. Просто вентмашины на разных этажах поэтому отдельные модули.
Евгений, благодарю.
То есть при наличии всего 40 сигналов структуры можно целиком можно объявлять в Persistent, включая оперативные сигналы - заначения датчиков и ошибок?
но объявлять их можно только так
stPoolWaterTempSp: TEMP_POINT_SETTINGS; (*Уставка температуры воды в бассейне*)
stPoolWaterTempSp.rSetPoint: REAL :=28;
stPoolWaterTempSp.rHysteresys: REAL :=0.5;
stPoolWaterTempSp.rAlarmLimitHi: REAL :=30;
stPoolWaterTempSp.rAlarmLimitLo: REAL :=26;
"короткое" объявление работать не будет?
В PERSISTANT можно объявлять всё, что угодно, пока там хватает места (всего под RETAIN и PERSISTANT суммарно выделено чуть меньше 64 Кб).Цитата:
То есть при наличии всего 40 сигналов структуры можно целиком можно объявлять в Persistent, включая оперативные сигналы - заначения датчиков и ошибок?
Что вы называете "коротким" объявлением?Цитата:
"короткое" объявление работать не будет?
Может.
Пошагово добавлять в "пустой проект без сбоев" фрагменты вашего исходного проекта. После добавления каждого фрагмента - запускать проект и проверять, не проявится ли проблема. После проявления проблемы - проанализировать последний из добавленных фрагментов на наличие ошибок.
Спасибо.
Видимо перепутал с объявлениями массивов, когда поэлементно можно передавать начальные значения в строку, без необходимости писать каждый раз полное название структуры и элемента в ней.
Но не смог разобраться как передавать начальные значения
Сделал так:
Создал структуру:
Объявил её в PersistentVars и передал ей начальные значения:Код:TYPE CYCLE_TIMER :
STRUCT
xEnable: BOOL; (*Разрешение на работу*)
todStartTime: TOD; (*Время начала цикла*)
usiDuration: USINT; (*Длительность цикла*)
byDaysEnabled: BYTE; (*Дни включения цикла*)
usiDurationMin: USINT; (*Минимальная длительность цикла*)
usiDurationMax: USINT; (*Максимальная длительность цикла*)
tStopTime: TIME; (*Время окончания работы блока*)
END_STRUCT
END_TYPE
В итоге кодсис ругается:Код:stWaterSypplyTimer: CYCLE_TIMER; (**)
stWaterSypplyTimer.todStartTime: TOD :=TOD#1:00:00; (*Время начала цикла водоподготовки*)
stWaterSypplyTimer.usiDuration: USINT :=10; (*Длительность цикла водоподготовки в часах*)
stWaterSypplyTimer.xEnable: BOOL :=TRUE; (*Разрешение на работу цикла водоподготовки*)
stWaterSypplyTimer.byDaysEnabled: BYTE :=2#0111_1111; (*Дни включения цикла водоподготовки младший бит понедельник старший воскресенье*)
stWaterSypplyTimer.usiDurationMin: USINT :=1;
stWaterSypplyTimer.usiDurationMax: USINT :=22;
Не понимаю, как тогда правильно передавать начальные значения для элементов структуры?Код:------ Компиляция : Приложение: Device.Application -------
типизировать код...
[WARNING] PLC200: Менеджер библиотек [Device: Plc Logic: Application]: C0100: Библиотека CmpTargetVisu не добавлена в Менеджер библиотек, либо не найдено корректной лицензии
[WARNING] PLC200: PersistentVars [Device: Plc Logic: Application](Строка 34): C0373: Неиспользуемый путь экземпляра stPoolWaterTempSp.rSetPoint: переменная используется как плейсхолдер
[WARNING] PLC200: PersistentVars [Device: Plc Logic: Application](Строка 35): C0373: Неиспользуемый путь экземпляра stPoolWaterTempSp.rHysteresys: переменная используется как плейсхолдер
[WARNING] PLC200: PersistentVars [Device: Plc Logic: Application](Строка 36): C0373: Неиспользуемый путь экземпляра stPoolWaterTempSp.rAlarmLimitHi: переменная используется как плейсхолдер
[WARNING] PLC200: PersistentVars [Device: Plc Logic: Application](Строка 37): C0373: Неиспользуемый путь экземпляра stPoolWaterTempSp.rAlarmLimitLo: переменная используется как плейсхолдер
[WARNING] PLC200: PersistentVars [Device: Plc Logic: Application](Строка 6): C0373: Неиспользуемый путь экземпляра stWaterSypplyTimer.todStartTime: переменная используется как плейсхолдер
[WARNING] PLC200: PersistentVars [Device: Plc Logic: Application](Строка 7): C0373: Неиспользуемый путь экземпляра stWaterSypplyTimer.usiDuration: переменная используется как плейсхолдер
[WARNING] PLC200: PersistentVars [Device: Plc Logic: Application](Строка 8): C0373: Неиспользуемый путь экземпляра stWaterSypplyTimer.xEnable: переменная используется как плейсхолдер
[WARNING] PLC200: PersistentVars [Device: Plc Logic: Application](Строка 9): C0373: Неиспользуемый путь экземпляра stWaterSypplyTimer.byDaysEnabled: переменная используется как плейсхолдер
[WARNING] PLC200: PersistentVars [Device: Plc Logic: Application](Строка 10): C0373: Неиспользуемый путь экземпляра stWaterSypplyTimer.usiDurationMin: переменная используется как плейсхолдер
[WARNING] PLC200: PersistentVars [Device: Plc Logic: Application](Строка 11): C0373: Неиспользуемый путь экземпляра stWaterSypplyTimer.usiDurationMax: переменная используется как плейсхолдер
[WARNING] PLC200: PersistentVars [Device: Plc Logic: Application](Строка 21): C0373: Неиспользуемый путь экземпляра stPoolFilterBackwashTimer.xEnable: переменная используется как плейсхолдер
[WARNING] PLC200: PersistentVars [Device: Plc Logic: Application](Строка 22): C0373: Неиспользуемый путь экземпляра stPoolFilterBackwashTimer.todStartTime: переменная используется как плейсхолдер
[WARNING] PLC200: PersistentVars [Device: Plc Logic: Application](Строка 23): C0373: Неиспользуемый путь экземпляра stPoolFilterBackwashTimer.usiDuration: переменная используется как плейсхолдер
[WARNING] PLC200: PersistentVars [Device: Plc Logic: Application](Строка 24): C0373: Неиспользуемый путь экземпляра stPoolFilterBackwashTimer.byDaysEnabled: переменная используется как плейсхолдер
[WARNING] PLC200: PersistentVars [Device: Plc Logic: Application](Строка 25): C0373: Неиспользуемый путь экземпляра stPoolFilterBackwashTimer.usiDurationMin: переменная используется как плейсхолдер
[WARNING] PLC200: PersistentVars [Device: Plc Logic: Application](Строка 26): C0373: Неиспользуемый путь экземпляра stPoolFilterBackwashTimer.usiDurationMax: переменная используется как плейсхолдер
Заранее спасибо.
Можешь это сделать в коде программы...
If xxx=false then
...
xxx:=true
Endif
Вроде можно в самой структуре... Правда я не уверен.
Но если это возможно, то тогда не сможешь другой переменной с данной структурой присвоить другие значения по умолчанию.
А во вторых сто мешает создать pou, которая запускается один раз. Код тот же, только там свою pou втыкаешь, а в самой pou всё переменные по умолчанию пишешь. Но если надо именно persistent, то придётся и её воткнуть туда...