结构化文本PLC编程。打开和关闭灯

时间:2016-02-18 14:12:57

标签: timer plc

我正在编写一个程序,使用自动化软件来控制油箱。

我有几个报警信号,如果这些信号中的任何一个变为真,则触发报警标志。然后,此警报标志需要点亮警告灯。到目前为止,我很好,但是我试图让灯泡闪烁。

我知道我必须使用定时器,到目前为止已经实现了将灯打开2秒然后关闭2秒但我不知道如何循环这样它继续这样做直到按下重置按钮。

到目前为止,这是我的代码;

PROGRAM _CYCLIC

    Warning_Lamp;

    TON_Warning(IN := Alarm_Active_Flag_1 , PT := T#2s );

    IF(TON_Warning.Q = TRUE)THEN

        Warning_Lamp := TRUE;

    END_IF


    TON_Warning_2(IN := TON_Warning.Q , PT := T#2s );

    IF(TON_Warning_2.Q = TRUE)THEN

        Warning_Lamp := FALSE;

    END_IF



END_PROGRAM

2 个答案:

答案 0 :(得分:0)

在不知道PLC的平台或STL的语法和惯例的情况下,我不能给你最有效的例子,但是这里有一些小的伪代码可以得到重点

// Set a Bit to indicate an alarm was triggered
IF(Alarm_State := TRUE) THEN
    Wait_For_Reset = TRUE;
END_IF

// Condition your code off the state of that bit rather than your alarm bit
IF(Wait_For_Reset := TRUE) THEN
    //YOUR CODE HERE

END_IF

//Reset the bit that controls your code loop when the user presses Reset
IF(Reset_Pressed := TRUE) THEN
    Wait_For_Reset = FALSE:
END_IF

我会避免DO / WHILE循环,除非这是这个PLC唯一的工作,因为对于我遇到的大多数平台,DO / WHILE循环会中断PLC的正常扫描,直到循环完成。

现在显然这对实际警报位没有任何作用,只有你的代码处于高位时才会执行任何操作,如果警报条件仍然存在,那么它将再次设置并继续处理代码。如果要防止这种情况发生,最好使用Alarm_State的上升沿输入来设置Wait_For_Reset位。这样它只为Alarm_State的每个LO / HIGH转换设置一次。我遇到的每个PLC都有一些版本的Rising Edge Bit。如果你想在代码中手动执行,那么你可以这样做:

IF(Alarm_State := TRUE AND WFR_ONS := FALSE) THEN
    Wait_For_Reset := TRUE;
    WFR_ONS := TRUE; //One Shot
END_IF

IF(Alarm_State := FALSE) THEN
    WFR_ONS := FALSE;
END_IF

其余的将保持不变。

答案 1 :(得分:0)

count:= count +1;

IF计数> 2000 THEN
计数:= 0;

END_IF

IF count> 500 THEN

灯:真;

ELSE    灯:=假;

END_IF

//持续2秒(循环时间= 1ms * 2000)