先来看代码:
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 编辑