1.引言
CPU寄存器状态字的各位给出了有关指令状态或结果的信息以及所出现的错误,我们可以将二进制逻辑操作状态位信号状态直接集成到程序中,以控制程序执行的流程。2.状态字寄存器先简单介绍一下
CPU中状态字。
● 首次检查位:状态字的0位称作首次检查位,如果/FC 位的信号状态为“0,”则表示伴随着下一条逻辑指令,程序中将开始一个新的逻辑串。FC前面的斜杠表示对● 逻辑运算结果:状态字的第
FC取反。
1位为RLO
位(RLO= “逻辑运算结果”),在二进制逻辑运算中用作暂时存储位。比如,一串逻辑指令中的某个指令检查触点的信号状态,
并
根据布尔逻辑运算规则将检查的结果运算结果又存在
RLO位中。
(状态
位)与RLO位进行逻辑门运算,然后逻辑● 状态位:状态位(第2位)用以保存被寻址位的值。状态位总是向扫描指令(A,AN,O,…)或写指令(=,S,R,)显示寻址位的状态(对于写指令,保存的寻址位状态是本条写指令执行后的该寻址位的状态)。● OR位:在用指令OR执行或逻辑操作之前,执行与逻辑操作的时候,就需要用到
O
R这一状态位。OR位表示先前执行的与逻辑操作产生的值为“1,于是,”逻辑操作或的执行结果就已被确定为
“1。”PLC
● OV位:溢出表示算术或比较指令执行时出现了错误。根据所执行的算术或逻辑指令结果对该位进行设置。
● OS位:溢出存储位是与OV位一起被置位的,而且在更新算术指令之后,它能够保持这种状态,也就是说,它的状态不会由于下一个算术指令的结果而改变。使是在程序的后面部分,
这样,即
也还有机会判断数
字区域是否溢出或者指令是否含有无效实
数。OS位只有通过如下这些命令进行复位:JOS(若OS = 1,则跳转)命令,块调用和块结束命令。
● CC1及CC0位:CC1和CC0(条件代码)位给出有关下列结果的相关信息:• 算术指令结果• 比较指令结果• 字逻辑指令
• 在移位功能中,移出位相关信息。可以用以下指令来检查条件代码0。
CC1 CC0 检查完成后,如果:0 0 A == 0 结果=0 1 0 A > 0 结果> 0 0 1 A < 0 结果< 0
● BR位:状态字的第8位称为二进制结果位。它将字处理程序与位处理联系起来,在一段既有位操作又有字操作的程序中,
用于
表示字逻辑是否正确。将BR位加入程序后,无论字操作结果如何,都不会造成二进制逻辑链中断。在梯形图的方块指令中,
BR位CC1和CC
与ENO位有对应关系,用于表明方块指令是否被正确执行:如果执行出现了错误,
B
R位为0,ENO位也为0;如果功能被正确执行,BR位为1,ENO位也为1。在用户编写的FB/FC程序中,应该对BR位进行管理,功能块正确执行后,使
BR位为1,否
则使其为0。使用SAVE指令将RLO存入BR中,从而达到管理BR位目的。状态字的9-15位未使用。
3.具体使用
下面我们结合STEP7中的指针编程来具体介绍条件码CC0/CC0的用法。
不同的指令在CPU中执行时间是不同的。浮点数比定点数执行时间要长;比位逻辑指令执行时间要长;程序的执行时间。例1:比如说要比较一个
DB中块的DBBO-DBB99这100个字节是正数是负数还是0,正数用1来表示;负数用-1来表示;0用0来表示。并且将对应结果存入
MB200开始
的100个字节中。我们通常的做法可能为:
字逻辑指令在某些程序中
CPU
适当使用状态字来进行编程可以减少
如果利用条件码来进行编程,们只需要将
中间的比较程序加以优化,
既可以减少程
我
序的大小还会减少一定的指令执行时间,
即可以达到目的。
例2:根据状态位C0和CC1的状态而跳转的跳转功能指令JZ不改变任何状态位的状态,而且逻辑操作结果其它逻辑操作之用(不改变
RLO值也会“随着”
供用户程序/FC状态)。P
该跳转功能带到跳转程序段中,
LC资料网
示例两个整数相减并需进行连续判断:L MW2 L MW8 -I
JZ ZERO // 如果结果等于“0,则跳转”
至标号ZERO处
// 结果不等于“0时所执行的指令”
ZERO: // 结果等于“0时,所要执行的”
指令
如果用户不熟悉JZ指令和状态位C0和CC1的具体含义,编程时就需要通过比较指令将比较结果存入一个二进制位中,再根据这个二进制位通过的执行了。
例3:我们实际应用中可能要利用某些协议转换网关(比如说
Hilscher公司的NTTAP
CRC
系列网关)来和某些串口协议的仪表进行通信时,会遇到CRC校验的问题,关于校验时需要判断溢出位是否为行程序的进一步计算。我们以说明CRC校验的步骤:
1、装载16#FFFF到一个16位CRC寄存器;
2、将CRC寄存器的高8位字节与信息中的第一个8位字节相异或,结果返回到CRC寄存器中;
1的问题来进EURO2408
JC/JCN指令来控制程序
的MODBUS通信时需要的CRC校验为例
3、将CRC寄存器数据向右移动一位;4、如果溢出的位等于1,则将CRC寄存器与16#A001相异或,结果返回到CRC寄存器中;
4、如果溢出的位等于
0,则重复第3步;
8次;
5、重复第3、4步骤,直到已经移位了
6、将CRC寄存器的高8位字节与信息中的下一个8位字节相异或,结果返回到CRC寄存器中;
7、重复第3步到第6步,直到信息中所有字节都与CRC寄存器相异或,并都移位了8次;
8、最后的CRC寄存器中的结果即为CRC校验码,最后被添加到信息(数据)的末尾(交换!低8位在前,高8位在后;)
在第4步中需要判断溢出的位是否为何判断对于整个程序有着重要的影响。
1,如我们
可以用A>0指令来判断这个条件,具体代码的编写,有兴趣时大家可以根据上面的步骤编写一个自己的4.结束语
CRC程序。
在一般情况下,我们不必考虑这些状态位,但在某些情况下,利用这些状态位并结合一定的指令,可以给我们的编程带来更大的灵活性,同时对于进一步提高自己的编程水平也有一定的作用。5.参考文献
[1].SIEMENS AG.STL编程手册V5.3。[2].SIEMENS AG.S7-300[3].廖常初.S7-300/400PLC
指令及执行时间。应用技术
西门子PLC中存储区分类有
I、Q、M、SM、V、L、S、C、T等等,他们在编程时用处不同
I存储区是输入触点,可以接收外部的电平信号Q存储区是输出触点,用于提供电平信号
M为中间继电器触点,一般我们编程时多用于标志位L为临时变量存储区,如
LD10,这个变量只在当前的
程序段内起作用,调用子程序后或者子程序调用结束返回后临时变量中的数值就可能丢失了。
D不是存储区也不是触点,这个一种数据类型,表示双字或实数类型,包含32个位,4个字节。
因篇幅问题不能全部显示,请点此查看更多更全内容