我有一个用Delphi 7编写的程序似乎遇到了一些逻辑问题。即使我的观察窗口显示它,下面的行也永远不会给出真正的价值。
Seq^.step[1] :=
(PlcStart^ and (not Seq^.Step[2])) or
(RetryDelay^.Done and (not Seq^.Step[2])) or
(Seq^.Step[1] and (not Seq^.Step[reset_]));
我的观看窗口显示(PlcStart^ and (not Seq^.Step[2])) or (RetryDelay^.Done and (not Seq^.Step[2])) or (Seq^.Step[1] and (not Seq^.Step[reset_]))
为真,但Seq^.Step[1]
的值永远不会设置为true。
真正奇怪的是,我有许多程序具有完全相同的行,所有程序似乎都正常工作。
答案 0 :(得分:0)
Seq ^ .step [1]:= (PlcStart ^和(不是Seq ^ .Step [2]))或 (RetryDelay ^ .Done和(不是Seq ^ .Step [2]))或 (Seq ^ .Step [1]和(不是Seq ^ .Step [reset _]));
我不熟悉Delphi,但我熟悉布尔逻辑。如果我正在读这个,你说的是:
(A∧¬B)∨(C∧¬B)∨(D∧¬E)
在javascript中:
(a && !b) || (c && !b) || (d && !e)
使用http://mustpax.github.io/Truth-Table-Generator/生成真值表并将“false”转换为“0”和“true”为“1”,我们得到真值表:
a b c d e (a & !b) | (c & !b) | (d & !e)
1 1 1 1 1 0
0 1 1 1 1 0
1 0 1 1 1 1
0 0 1 1 1 1
1 1 0 1 1 0
0 1 0 1 1 0
1 0 0 1 1 1
0 0 0 1 1 0
1 1 1 0 1 0
0 1 1 0 1 0
1 0 1 0 1 1
0 0 1 0 1 1
1 1 0 0 1 0
0 1 0 0 1 0
1 0 0 0 1 1
0 0 0 0 1 0
1 1 1 1 0 1
0 1 1 1 0 1
1 0 1 1 0 1
0 0 1 1 0 1
1 1 0 1 0 1
0 1 0 1 0 1
1 0 0 1 0 1
0 0 0 1 0 1
1 1 1 0 0 0
0 1 1 0 0 0
1 0 1 0 0 1
0 0 1 0 0 1
1 1 0 0 0 0
0 1 0 0 0 0
1 0 0 0 0 1
0 0 0 0 0 0
此表可能正确也可能不正确,我尚未对其进行验证。你可以通过它来自己决定。无论如何,假设它是正确的,您可以检查给定输入的预期输出,并验证您的期望是否正确。