我不确定这是否适合StackOverflow,或者我应该发布在一个更自动化的StackExchange站点上,所以我向版主道歉。
我试图用CodeSys编程一个ABB PM564 PLC,它控制一个连接到其输出端的电机(FORWARD输出0,REVERSE输出1)场景输入是一个打开/关闭马达的POWER按钮(input0)和一个SENSOR(input1),当马达启动时,会导致马达反转。
因为瞬间反转会导致电机堵塞,我必须使用delay功能(计时器打开延迟,又名吨)在改变旋转之前暂停电机1秒。
以下是结构化文本语言中的代码块:

FUNCTION_BLOCK SWITCH
VAR_INPUT
    POWER : BOOL;
    SENSOR : BOOL;
END_VAR
VAR_OUTPUT
    FORWARD : BOOL;
    REVERSE : BOOL;
END_VAR
VAR
    switch: BOOL;
    delay : TON;
END_VAR

-
delay(IN:=switch, PT:=T#1000ms);

IF POWER THEN
    IF NOT(FORWARD OR REVERSE) THEN
        FORWARD:=TRUE;
        REVERSE:=FALSE;
    END_IF;
ELSE
    FORWARD:=FALSE;
    REVERSE:=FALSE;
END_IF;

IF SENSOR THEN
    switch:=TRUE;
END_IF;

IF switch THEN
    IF FORWARD THEN
        FORWARD:=FALSE;
        IF delay.Q THEN
            REVERSE:=TRUE;
            switch:=FALSE;
        END_IF;
    END_IF;
    IF REVERSE THEN
        REVERSE:=FALSE;
        IF delay.Q THEN
            FORWARD:=TRUE;
            switch:=FALSE;
        END_IF;
    END_IF;
END_IF;

问题是,实现代码第25行的block语句似乎没有执行,导致马达暂停一秒,每次都继续旋转。

最佳答案

这是我的猜测,但问题可能在这里:

IF POWER THEN
    IF NOT(FORWARD OR REVERSE) THEN
        FORWARD:=TRUE;
        REVERSE:=FALSE;
    END_IF;

该代码应在每次扫描可编程逻辑控制器时执行所以当定时器运行时,FORWARDREVERSE都不是TRUE。因此,这个if语句执行并生成FORWARD = TRUE
试试这个:
delay(IN:=switch, PT:=T#1000ms);

IF POWER THEN
    IF (NOT(FORWARD OR REVERSE) AND NOT(switch)) THEN
        FORWARD:=TRUE;
        REVERSE:=FALSE;
        REV_DELAY:=FALSE;
        FWD_DELAY:=FALSE;
    END_IF;
ELSE
    FORWARD:=FALSE;
    REVERSE:=FALSE;
END_IF;

IF SENSOR THEN
    switch:=TRUE;
END_IF;

IF switch THEN
    IF FORWARD THEN
        FORWARD:=FALSE;
        REV_DELAY:=TRUE;
        FWD_DELAY:=FALSE;
    END_IF;
    IF REVERSE THEN
        REVERSE:=FALSE;
        FWD_DELAY:=TRUE;
        REV_DELAY:=FALSE;
    END_IF;
END_IF;

IF (switch AND delay.Q) THEN
  REVERSE:=REV_DELAY;
  FORWARD:=FWD_DELAY;
  REV_DELAY:=FALSE;
  FWD_DELAY:=FALSE;
  switch:=FALSE;
END_IF;

关于algorithm - PLC ST语言-传感器信号反转,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20193393/

10-10 00:53
查看更多