先来看代码:
LD X000
LD X001
AND X002
ORB
OR X003
AND M0
OUT Y000
END
对应的梯图为:

我们来逐步分析这段三菱 PLC 代码对应的逻辑表达式,按照 串联为 “与”(用 *
表示 )、并联为 “或”(用 +
表示 ) 的规则推导:
第一分支:LD X000
单独的常开触点,逻辑为 X000
。
第二分支:LD X001
+ AND X002
LD X001
是加载触点,AND X002
是与 X002 串联,逻辑为 X001 * X002
(“串联 = 与” )。
用 ORB
合并前两个分支
前两个分支通过 ORB
并联,合并后逻辑为 X000 + (X001 * X002)
(“并联 = 或” )。
叠加 OR X003
在前面合并结果基础上,OR X003
表示再并联 X003,逻辑变为 [X000 + (X001 * X002)] + X003
。
因为 “或” 运算满足交换律和结合律,也可简化写为 X000 + X001 * X002 + X003
( 并联关系可直接展开 )。
叠加 AND M0
最后 AND M0
表示与 M0 串联,整体逻辑为:
(X000 + X001 * X002 + X003) * M0
最终结果驱动 Y000
,所以完整逻辑表达式就是:
Y000 = (X000 + X001 * X002 + X003) * M0
( 本质是 “(第一分支 或 第二分支 或 X003) 与 M0
驱动 Y000” ,用符号简化后就是上述形式 )
我们可以把逻辑表达式 Y000 = (X000 + X001 * X002 + X003) * M0
转换成二叉树结构来表示。二叉树中:
根节点:表示最终输出 Y000
内部节点:表示逻辑运算符(+
或 *
)
叶子节点:表示输入信号(X000
, X001
, X002
, X003
, M0
)
Y000
|
*
/ \
/ \
+ M0
/|\
/ | \
X000 * X003
/ \
X001 X002
整体结构:
表达式 (X000 + X001*X002 + X003) * M0
的最外层运算是 *
(与 M0 串联),因此根节点是 *
,左子树是 (X000 + X001*X002 + X003)
,右子树是 M0
。
处理并联部分:
左子树 X000 + X001*X002 + X003
的运算符是 +
(并联),因此分解为三个分支:
第一个分支:X000
第二个分支:X001*X002
(内部是串联关系)
第三个分支:X003
串联分支处理:
第二个分支 X001*X002
是串联关系,因此用 *
节点连接 X001
和 X002
。
前序遍历(根→左→右):Y000 → * → + → X000 → * → X001 → X002 → X003 → M0
(可用于生成前缀表达式:* + X000 * X001 X002 X003 M0
)
中序遍历(左→根→右):X000 → + → X001 → * → X002 → + → X003 → * → M0 → = → Y000
(需添加括号才能正确还原表达式:(X000 + (X001 * X002) + X003) * M0 = Y000
)
后序遍历(左→右→根):X000 → X001 → X002 → * → X003 → + → M0 → * → Y000
(可用于生成后缀表达式:X000 X001 X002 * X003 + M0 * Y000
)
这种二叉树结构清晰展示了逻辑运算的优先级:
节点层级: 0
节点值: *
左子节点: +
右子节点: M0
----------------
节点层级: 1
节点值: +
左子节点: X0
右子节点: +
----------------
节点层级: 2
节点值: X0
左子节点: null
右子节点: null
----------------
节点层级: 2
节点值: +
左子节点: *
右子节点: X3
----------------
节点层级: 3
节点值: *
左子节点: X1
右子节点: X2
----------------
节点层级: 4
节点值: X1
左子节点: null
右子节点: null
----------------
节点层级: 4
节点值: X2
左子节点: null
右子节点: null
----------------
节点层级: 3
节点值: X3
左子节点: null
右子节点: null
----------------
节点层级: 1 // 修正:原输出中这里错误标注为层级2
节点值: M0
左子节点: null
右子节点: null
----------------
M0 节点的层级应为 1
逻辑结构验证
你可以通过以下方式验证二叉树结构的正确性:
逐层构建表达式
层级 0:*
层级 1:左子树 +
和右子树 M0
→ (...) * M0
层级 2:左子树的 +
展开为 X0
和 +
→ (X0 + ...) * M0
层级 3:继续展开 +
→ (X0 + X1*X2 + X3) * M0
检查每个节点的子节点
修正后的结构完全符合逻辑表达式的二叉树表示,层级标注也正确反映了节点间的父子关系。
本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:


本帖最后由 勇哥,很想停止 于 2025-06-04 21:59:41 编辑