Я исхожу из фона в компьютерном программировании (VB/C# .Net и PHP) и изучаю программирование ПЛК в школе. В недавнем тесте мы имели, где создать функциональный блок, который будет подталкивать элемент производственной линии и в контейнер.Изучение структурированного текста, функциональный блок для управления «толкателем»
Теперь это довольно просто, поэтому я добавил сигнал тревоги в свой код, если «толкатель» (из-за отсутствия лучшего слова), который активируется, если маневр не будет завершен в течение 10 секунд.
Моя проблема заключается в том, что толкатель сразу переходит в состояние тревоги, и кажется, что он довольно искажен: (Таким образом, любой ответ даст некоторое представление о том, как лучше структурировать код, или выяснить, почему он переходит в сигнал тревоги быстро ...
(* INIT *)
(* Drive the pusher back if its out on init *)
IF M8002 THEN
SkyvTilbake := TRUE; (* My "Function"/Step to retract the pusher *)
Ferdig := FALSE; (*Let other components know that the pushers operation has completed *)
SkyverUtMotor := FALSE; (*This is the engine output for driving the pusher out *)
SkyverInnMotor := FALSE; (* This is the engine output for driving the pusher in *)
END_IF;
(* "Aktiver" is a input to activate the pusher *)
IF Aktiver THEN
SkyvTilbake := FALSE;
SkyvUt := TRUE; (* My "Function"/Step" to push the pusher out *)
Ferdig := FALSE;
END_IF;
(* Push out step *)
IF SkyvUt AND NOT SkyvTilbake AND NOT Alarm THEN
TON_1(IN:= SkyvUt ,PT:= AlarmTid ,Q:= Alarm ,ET:= TimeLeft);
SkyverUtMotor := TRUE;
(* When sensor out activates (input), retract the pusher *)
IF SensorUte THEN
SkyvUt := FALSE;
SkyvTilbake := TRUE;
SkyverUtMotor := FALSE;
END_IF;
(* retract the pusher as long as there are no alarms *)
ELSIF SkyvTilbake AND NOT Alarm THEN
TON_2(IN:= SkyvTilbake ,PT:= AlarmTid ,Q:= Alarm ,ET:= TimeLeft);
SkyverInnMotor := TRUE;
(* When it reach the normal position, activate "Ferdig" *)
IF SensorInne THEN
SkyverInnMotor := FALSE;
SkyvTilbake := FALSE;
Ferdig := TRUE;
END_IF;
END_IF;
(* When the alarm activates, stop all the engines *)
IF Alarm THEN
SkyverUtMotor := FALSE;
SkyverInnMotor := FALSE;
END_IF;
(* RESET ALARM *)
IF Reset THEN
Alarm := 0;
SkyvTilbake := TRUE;
END_IF;
PS. испытание было в середине декабря, но я ищу, чтобы узнать больше о структурированном тексте и разработке программ PLC. Кроме того, код разработан для работы в Mitsubishi FXCPU , и написано в GX Works 2
Привет, спасибо за ответ :) Мой TON сбрасывается каждый раз, когда переменная 'IN' идет низко. Я рассмотрю структуры Case :) – Richard87
Aha: D Спасибо, этот комментарий решил это;) Проблема была SkyvIn не сбрасывается при активации Reset :) Thx! – Richard87