发布于 2012-08-06 09:10:11
31楼
16楼的程序,我来分析下:
1、取反肯定是有条件的,如果没条件,很好办,如:
ldn q0.0
= q0.0
但这肯定不是这里要讨论的结果。
2、好,有条件。设条件为C,要取反的变量为X:
当C=0时,Y=X,不变;
当C=1时,Y=!X,取反。
写成一个式子,就是:Y=(!C)*X +C*(!X)
这是一个异或的式子。但是很不幸,S7200没有对位直接进行异或操作的指令,所以14楼才用xor的字节指令对其中的某些位取反。
3、Y=(!C)*X +C*(!X),虽然没有直接XOR的指令,但仍然可以用AND和OR等指令来实现,这就是16楼的程序。
Network 1 // 网络标题
// 获取条件C,M0.0就是取反条件
LD I0.0
EU
= M0.0
Network 2
// 取反对象是Q0.0
LD M0.0
AN Q0.0 // M0.0*(!Q0.0)
LDN M0.0
A Q0.0 // (!M0.0)*Q0.0
OLD // 两个作OR运算,即 M0.0*(!Q0.0) + (!M0.0)*Q0.0
= Q0.0 // 输出!
所以18楼 芳季 说,这段程序在任何的PLC上都可以运行。因为任何PLC都具有串、并联电路,也就是AND、OR运算。