Тогда остается второй вариант. Менее приятный.
Записываются ли в Retain переменные, которые не относятся к обмену по ModBus?
Здравствуйте! Имеется небольшой вопрос - в блоке получения риального времени, запиленного при помощи библиотеки SysLibTime, некий счетчик считает секунды с начала суток (т.е. каждый день заново), доходит до 65535 секунд (в это время на часах 18:12:15) и обнуляется, соответственно отваливается сам техпроцесс. Как можно с этим бороться?
Использовать значение времени из других переменных данной библиотеки
Это да, сейчас считаются минуты, а не секунды, но встает следующий вопрос - привязка времени старта/стопа сделана в секундах (т.е. в конфигурации забито время старта, например, 7:45:01, и оно переводится в секунды), соответственно получается что числовое значение текущего времени (465 минут с момента старта счетчика) не равно числовому значению времени старта (27901 секунда с момента стрта счетчика)
Ни одна переменная из VAR_GLOBAL RETAIN не сохраняется и не знаю соответственно почему.
Переменная vrema_zapuscov_dnem - массив ни какого отношения к ModBus не имеет - тоже слетает !
Но у меня есть какое то подспутное чувство , что это началось после того как я перенес туда данные из ModBus(slave)[Var]. Очень мне надо было вводить с визуализации в контроллер отрицательные числа в переменную word. Вот теперь незнаю в чем косяк , а самое главное , что ошибок нет!
пример программы был выложен в 284 сообщении там можно посмотреть все и вся!!!!
Я имею ввиду что где-то в программе есть "некий пункт", который производит пересчет времени, заданного в конфигурации (7:45:01) в секунды (27901), вот этот "некий пункт" я никак не могу задетектить.
Спасибо за совет, но для меня это не вариант!
Переменные я указал в предыдущем сообщении только кусочек - для примера их там гораздо больше и все они слетают.
Еще раз повторюсь у меня проблема с RETAIN !!!!! Отказываться от красиво и логично написанной программы не хочу ! Ввод осуществляется с ИП320 и Визуализации - в перспективе перенос в МАСТЕРСКАДА.
Мой вопрос почему слетают данные.
Скорее всего вопрос именно в обмене с ИП320.
Так получилось, что конфигурация, а значит и сетевой обмен начинаются раньше, чем загружается программа.
Соответственно в этот момент переменные, обменивающиеся с панелью могут получать с панели значение 0.
Как лечится:
Необходимо создать группу промежуточных переменных Retain.
Добавить модуль статистика, и сделать дополнительную подпрограмму:
Если подали питание - присвоить переменным для обмена с панелью значения специально созданных промежуточных переменных
if r_trig(power_iz_statistica) then
perem1_iz_ModBus_Slave:= prom1_for_retain;
...
perem_N_iz_ModBus_Slave:= prom_N_for_retain;
end_if;
Если пропадает питание - значение переменных обмена с панелью записать в промежуточные ретэйн..
if f_trig(power_iz_statistica) then
prom1_for_retain:=perem1_iz_ModBus_Slave;
...
prom_N_for_retain:=perem_N_iz_ModBus_Slave;
end_if;