algorithm - PLC ST 语言 - 传感器信号导调用机反转

标签 algorithm automation plc

我不是 100% 确定这是否适合 StackOverflow,或者我应该在更自动化的 StackExchange 网站上发布,所以无论如何我向版主道歉。

我正在尝试使用 CodeSys 对 ABB PM564 PLC 进行编程,该 PLC 控制连接到其输出的电机(FORWARD 是输出 0,REVERSE 是输出 1)。场景输入是一个POWER按钮(input0),用于打开/关闭电机;以及一个SENSOR(input1),它会导调用机在激活时反转。

因为瞬间反转会导调用机卡住,所以我必须使用延迟功能(定时器接通延迟,又名 TON)来将电机暂停 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行的IF block 语句似乎没有执行,导调用机暂停一秒并继续旋转FORWARD每次..

最佳答案

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

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

该代码应在 PLC 的每次扫描时执行。因此,当计时器运行时,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/

相关文章:

linux - 在终端中运行良好的 Shell 脚本不会在 crontab 中产生预期输出

java - 用于向 ROCKWELL PLC (1756-A10/A) 读取和写入数据的简单 APP

C# OPC 应用程序相同的代码,但工作方式不同

plc - 转至显示按钮 Factorytalk 查看我?

algorithm - 如何有效地查找网格中某个范围内的元素之和?

algorithm - 删除图中不必要的节点

algorithm - 遗传算法中的线性适应度缩放产生负适应度值

algorithm - 通过只遍历一次来测试单链表是否是循环的

ssis - 如何使用命令行从 biml 生成 ssis 包并在服务器上部署 ssis

windows - 如何在Windows 10上搭建winium Driver服务?