发表于:2011/9/26 5:52:48
#0楼
[/URL] 很多人可能都有下面的疑问:
1)状态字中的首次检测位到底有什么作用?它与编程有关吗?
2)程序段的第一条逻辑运算指令实际上作了什么操作?
S7-300/400的状态字(Status word)的最低位为首次检测位FC,该位的为0状态表示一个梯形图逻辑程序段的开始,或指令为逻辑串(即串并联电路块)的第一条指令。在逻辑串指令执行过程中该位为1,输出指令(=、R、S)或与RLO(逻辑运算结果)有关的跳转指令将该位清零,表示一个逻辑串的结束。
请看下面的程序段,它将两条串联电路(逻辑串)并联后,控制Q4.2的线圈,逻辑表达式为I0.4*I0.7+I0.6*/I0.5=Q4.2(/I0.5对应于I0.5的常闭触点)。执行第一条指令“A I0.4”时首次检测位为0,表示程序段开始。执行指令“A I0.6”时首次检测位为0,表示第二条串联电路开始。执行“=”指令之后,首次检测位被清零。
查阅手册,对A指令的描述如下:检查寻址位的状态是否为1,并将测试结果与RLO进行“与”运算。
执行第一条A指令时,它到底做了什么操作?
1)显然它不会将I0.4的二进制值与前一个程序段执行完后的RLO进行“与”运算,本程序段与前一程序段之间“井水不犯河水”。
2)“与”运算需要两个变量参与,第一条A指令执行完后只有一个位变量I0.4的值,不可能作“与”运算,就像只有一个人不能结婚一样。
将上面的第一条A指令改为“O I0.4”或“X I0.4”指令(“或”运算或“异或”运算指令),前两条指令的“与”运算执行的结果相同。这说明前两条指令实际执行的是什么逻辑运算取决于第二条指令,而与第一条指令(A、O或X)无关。
实际上,程序段的第一条指令或逻辑串的第一条指令并不执行什么逻辑运算,第一条A、O、X指令只是将指令中的位变量的值传送到RLO,第一条AN、ON、XN指令将指令中的位变量的值作“非”运算后传送到RLO。
操作系统在执行程序的时候,判断首次检测位的值,其值为0时,就知道该指令是程序段的第一条指令或逻辑串的第一条指令,然后完成上述的操作。首次检测位与用户程序没有直接的关系。
别的PLC(包括S7-200)几乎都用LD和LDN(或LD NOT、LDI)指令来表示一个程序段或逻辑串的开始。S7-300/400因为没有类似的指令,所以用首次检测位来检测一个程序段或逻辑串的开始。
我是廖常初,是一个高校的老师,曾在企业从事机械、电气技术工作,长期从事工业控制和PLC应用的教学、科研和工程应用工作。博客中的日志除注明外均为原创。愿意在此与大家探讨工控的问题!
廖常初工控博客地址:http://blog.gkong.com/blog.asp?name=liaochangchu
我曾写过几本小书: 《PLC编程及应用》第3版(S7-200)、《S7-300/400 PLC应用技术》第3版、《FX系列PLC编程及应用》第2版、《S7-200 PLC编程及应用》、《PLC基础及应用》第2版(FX系列大专教材)、《西门子人机界面(触摸屏)组态与应用技术》、《西门子工业通信网络组态编程与故障诊断》、《S7-1200 PLC编程及应用》第2版、《跟我动手学S7-300/400 PLC》、《跟我动手学FX系列PLC》
机械工业出版社廖常初图书专题:http://www.gkong.com/zt/liaochangchu/
廖常初工控博客地址:http://blog.gkong.com/blog.asp?name=liaochangchu
我曾写过几本小书: 《PLC编程及应用》第3版(S7-200)、《S7-300/400 PLC应用技术》第3版、《FX系列PLC编程及应用》第2版、《S7-200 PLC编程及应用》、《PLC基础及应用》第2版(FX系列大专教材)、《西门子人机界面(触摸屏)组态与应用技术》、《西门子工业通信网络组态编程与故障诊断》、《S7-1200 PLC编程及应用》第2版、《跟我动手学S7-300/400 PLC》、《跟我动手学FX系列PLC》
机械工业出版社廖常初图书专题:http://www.gkong.com/zt/liaochangchu/