PDA

Просмотр полной версии : помогите разобратса с программой



alexval2006
21.03.2010, 20:53
Проблема такова написал программку оформил её в функциональный блок в этом блоке я использую два таймера ton они у меня срабатывают если сигнал управляющий механизмом (магнитный пускатель) включен более 5 секунд (это время для нормального переключения механизма из положения А в положе не В, если не уложились в это время авария) в случае аварии таймер срабатывает и его выход tim1.Q меняет состояние с FALSE на TRUE, вы результате переменная отвечающая за аварию переводит выходы управления механизмом в FALSE следовательно сигнал на входе таймера меняться с TRUE на FALSE а выход tim1.Q таймера TON все равно остаться TRUE как его взвести заново тоесть перевести в FALSE
привожу код и программу в архиве просьба сильно не ржать я киповец а не программист учусь помаленьку лучше укажите на места где можно сделать лучше и как


FUNCTION_BLOCK PER_KLAPANA
VAR_INPUT (*входные переменые датчики кнопки и тп*)
A:BOOL; (*Экранная кнопка положение A*)
B:BOOL; (*Экранная кнопка положение B*)
SENSOR_A:BOOL; (*Вход датчика положение A*)
SENSOR_B:BOOL; (*Вход датчика положение B*)
(*PK_AVTO_MAN:BOOL; (*Переключатель Автомат / Ручное*)*)
ALARM_RES:BOOL; (*Вход гашения аварии перкидного клапана*)
END_VAR
VAR_OUTPUT (*выходные переменые пускатели аварии и тп*)
OUT_A:BOOL; (*Выход на пускатель положение A*)
OUT_B:BOOL; (*Выход на пускатель положение B*)
ALARM_OUT:BOOL; (*Выход авария перкидного клапана*)
END_VAR
VAR (*локальные переменые для внутрених нужд*)
tim1:TON;
tim2:TON;
END_VAR
-------------------------------------------------------------------------
IF A=TRUE AND B=FALSE THEN
OUT_A:=TRUE;
END_IF;
IF OUT_A=TRUE THEN
tim1(IN := OUT_A, PT := T#5s);
ALARM_OUT:=tim1.Q;
END_IF;
IF SENSOR_A=TRUE THEN
OUT_A:=FALSE;
END_IF;
IF B=TRUE AND A=FALSE THEN
OUT_B:=TRUE;
END_IF;
IF OUT_B=TRUE THEN
tim2(IN := OUT_B, PT := T#5s);
ALARM_OUT:=tim2.Q;
END_IF;
IF SENSOR_B=TRUE THEN
OUT_B:=FALSE;
END_IF;
IF ALARM_OUT=TRUE THEN
OUT_A:=FALSE;
OUT_B:=FALSE;
END_IF;
IF ALARM_RES=TRUE THEN
ALARM_OUT:=FALSE;
END_IF;

faritZ
24.03.2010, 20:33
здравствуйте!
так как профи не отвечают на вопрос,решил сунутся.
дело в том что я тоже начинающий,по профессии электонщик.
на мой взгляд вашу задачу удобней программировать на Cfs.
получается наглядней и интуитивно понятней.при симуляции
можно по шагам проверить весь ход работы.
не ручаюсь за абсолюдную правильность,но возможно
мое решение чем-то вам поможет!
желаю успехов!
пыси в визуализации кнопки изменил на фикцированные!

alexval2006
24.03.2010, 22:10
Спасибо но я уже победил эту проблему может и несовсем правильно это сделал но работает sfc мне неочень нравитса предпочитаю фбд и ст но серавно спасибо за участие

Rand0m
29.03.2010, 12:17
чтобы сбросить фб таймера его нужно вызвать с выключенным входом, у вас в первоначальном варианте он не вызывался и соотвественно не сбрасывался.

alexval2006
29.03.2010, 18:25
да имменно так я и сделал по методу научного тыка определил :)