学习结构化文本,功能块来控制"推动器#34;

时间:2015-01-01 23:42:03

标签: plc

我来自PC编程(VB / C#.Net和PHP)的背景,我正在学习PLC编程。在最近的测试中,我们在哪里创建了一个功能块,可以将生产线的元素推入容器中。

现在,这很简单,所以如果“推动器”(缺少一个更好的词),如果在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。测试是在12月中旬,但我希望了解有关结构化文本和设计PLC程序的更多信息。此外,代码设计为在Mitsubishi FXCPU中运行,并使用GX Works 2编写

1 个答案:

答案 0 :(得分:1)

我不知道你在哪里设置计时器的持续时间(PT:= AlarmTid)。

另外,由于我不熟悉三菱PLC,定时器会自动复位吗?看起来一旦你的计时器打开,它就永远不会关闭。

您也可以考虑使用' CASE。 。 。在哪里,它往往会清理代码。