PDA

Просмотр полной версии : Помощь в написании программы."Контроль Trace mode от зависаний"



rogue
08.11.2012, 08:04
Здравствуйте,меня зовут Алексей,прощу вашей помощи в написании программы в Codesys2.3. Необходимо осуществить контроль Tracemode на случай зависания и с помощью Плк овен 154 ,перезагружать компьютер.
Суть такова.В Trace mode я создаю переменную счетчик,которая отсчитывает значения от 1 до 20 к примеру и по новой.Отправляю эту переменную в ПЛК . В плк создаю свой счетчик точно такой же отсчитывающий значения с таким же временем что и в trace mode.(два идиентичных счетчика).
Условиемif scada_plc(переменную скады) = temp(переменная плк)cравниваю переменные.И если они равны,привязываю какой то маркер к дискретному выходу ,дискрета уходит на power материнской платы и выключает компьютер,через 5 сек с помощью реле,компьютер включается.Проблема в том что мне нужно как то задать начальные значения для переменных чтобы первым условием проверялось их равенство ,что они неравны,иначе так компьютер будет часто ложно перезагружаться.Готов выслушать другие более искушенные варианты.
:) Всем заранее спасибо.
PS;
IF SCADA_PLC<>temp
THEN
temp:=SCADA_PLC;
ELSE
Y99:=1;// Y99 marker privyzannyi k discret output.
END_IF;
так тоже не получается.

JIexa21
08.11.2012, 08:11
Самый простой вариант: купить надежное "железо".

rogue
08.11.2012, 09:50
С радостью))но нужно написать программу)

JIexa21
08.11.2012, 10:59
Ну тогда пускай скада раз в секунду накручивает счетчик, а плк проверяет: старое там значение или новое. Если за 5 запросов оно не изменилось, то рестарт.

TIMER (IN := NOT TIMER.Q, PT := T#1s);
IF TIMER.Q AND SCADA_PLC_NEW <> SCADA_PLC_OLD THEN
SCADA_PLC_OLD := SCADA_PLC_NEW;
error := 0;
ELSE
error := error +1;
if error > 5 then Y99:=1; end_if;
END_IF;
Что-то типа этого...
Ну и не забываем еще один таймер, когда пойдет перезагрузка, а то будет дергать каждые 5 секунд, не давая включиться компу.

capzap
08.11.2012, 11:52
у обоих писателей кода в этой теме, не отражено когда же Y99 становится равным нулю

JIexa21
09.11.2012, 08:08
у обоих писателей кода в этой теме, не отражено когда же Y99 становится равным нулю

Ну чисто логически оно вот тут:

Ну и не забываем еще один таймер, когда пойдет перезагрузка, а то будет дергать каждые 5 секунд, не давая включиться компу.

capzap
09.11.2012, 09:09
Ну чисто логически оно вот тут:

Основной посыл это не контролировать на период перегрузки пк, а вернуть состояние выхода плк из этого не следует и кстати попробуйте на своем пк нажать кнопку сброса и не отпускать, некоторые модели работают по заднему фронту

JIexa21
09.11.2012, 10:26
Отработал тот блок, который я привел, инициировал перезагрузку, запустили второй таймер, по которому работает другая функция, ожидающая перезапуска, ждет какое-то время (на аварию, чтобы поорать сигналкой, что комп вообще умер) и ждет появления другого числа в переменную). Запускается она буквально в пределах одного цикла (8-10 мс) и контролирует перезагрузку и она же сбрасывает выход. Что тут не так???

Boris_K
26.01.2015, 10:10
Понимаю, что некропостинг, но тем не менее, имею сказать:

1) Если подвисает скада - искать причины в проекте, должно помочь в 99% случаев. Касательно самого Trace mode - судя по отзывам многих людей, глюков в ней хватает. При возможности рассмотреть вариант другой скады.
2) Комп, как понимаю, под управлением винды - а это не ОСРВ, поэтому нет гарантии что скада на компе вовремя сделает какие-то операции со счётчиком. Привязывать что-то жёстко ко времени тут нельзя, всегда может проскочить лаг.
3) Да и вообще, что-то подсказывает что постоянно вырубать комп простым размыканием питания - далеко не гуд...