西门子模块6ES7231-7PC22-0XA0实体经营
1.引言
CPU寄存器状态字的各位给出了有关指令状态或结果的信息以及所出现的错误,我们可以将二进制逻辑操作状态位信号状态直接集成到程序中,以控制程序执行的流程。
2.状态字寄存器
先简单介绍一下CPU中状态字。
● 检查位:状态字的0位称作检查位,如果/FC 位的信号状态为“0”,则表示伴随着下一条逻辑指令,程序中将开始一个新的逻辑串。FC前面的斜杠表示对FC取反。
● 逻辑运算结果:状态字的第1位为RLO 位(RLO= “逻辑运算结果”),在二进制逻辑运算中用作暂时存储位。比如,一串逻辑指令中的某个指令检查触点的信号状态,并根据布尔逻辑运算规则将检查的结果(状态位)与RLO位进行逻辑门运算,然后逻辑运算结果又存在RLO位中。
● 状态位:状态位(第2位)用以保存被寻址位的值。状态位总是向扫描指令(A,AN,O,…)或写指令(=,S,R,)显示寻址位的状态(对于写指令,保存的寻址位状态是本条写指令执行后的该寻址位的状态)。
● OR位:在用指令OR执行或逻辑操作之前,执行与逻辑操作的时候,就需要用到OR这一状态位。OR位表示先前执行的与逻辑操作产生的值为“1”,于是,逻辑操作或的执行结果就已被确定为“1”。
● OV位:溢出表示算术或比较指令执行时出现了错误。根据所执行的算术或逻辑指令结果对该位进行设置。
● OS位:溢出存储位是与OV位一起被置位的,而且在更新算术指令之后,它能够保持这种状态,也就是说,它的状态不会由于下一个算术指令的结果而改变。 这样,即使是在程序的后面部分,也还有机会判断数字区域是否溢出或者指令是否含有无效实数。OS位只有通过如下这些命令进行复位:JOS(若OS = 1,则跳转)命令,块调用和块结束命令。
● CC1及CC0位:CC1和CC0(条件代码)位给出有关下列结果的相关信息:
• 算术指令结果
• 比较指令结果
• 字逻辑指令
• 在移位功能中,移出位相关信息。
可以用以下指令来检查条件代码CC1和CC0。
CC1 CC0 检查完成后,如果:
0 0 A == 0 结果 =0
1 0 A > 0 结果 > 0
0 1 A < 0 结果 < 0
● BR位:状态字的第8位称为二进制结果位。它将字处理程序与位处理联系起来,在一段既有位操
作又有字操作的程序中,用于表示字逻辑是否正确。将BR位加入程序后,无论字操作结果如何,都不会造成二进制逻辑链中断。在梯形图的方块指令中,BR位与ENO位有对应关系,用于表明方块指令是否被正确执行:如果执行出现了错误,BR位为0,ENO位也为0;如果功能被正确执行,BR位为1,
ENO位也为1。在用户编写的FB/FC程序中,应该对BR位进行管理,功能块正确执行后,使BR位为1,否则使其为0。使用SAVE指令将RLO存入BR中,从而达到管理BR位目的。
状态字的9-15位未使用。
3.具体使用
下面我们结合STEP7中的指针编程来具体介绍条件码CC0/CC0的用法。
不同的指令在CPU中执行时间是不同的。浮点数比定点数执行时间要长;字逻辑指令比位逻辑指令执行时间要长;在某些程序中适当使用状态字来进行编程可以减少CPU程序的执行时间。
例1:比如说要比较一个DB中块的DBBO-DBB99这100个字节是正数是负数还是0,正数用1来表示;负数用-1来表示;0用0来表示。并且将对应结果存入MB200开始的100个字节中。我们通常的做法可能为:
如果利用条件码来进行编程,既可以减少程序的大小还会减少一定的指令执行时间,我们只需要将
中间的比较程序加以优化,即可以达到目的。
例2:根据状态位C0和CC1的状态而跳转的跳转功能指令JZ不改变任何状态位的状态,而且逻辑操作结果RLO值也会“随着”该跳转功能带到跳转程序段中,供用户程序其它逻辑操作之用(不改变/FC状态)。
示例 两个整数相减并需进行连续判断:
L MW2
L MW8
-I
JZ ZERO // 如果结果等于“0”,则跳转至标号ZERO处
// 结果不等于“0”时所执行的指令
ZERO: // 结果等于“0”时,所要执行的指令
如果用户不熟悉JZ指令和状态位C0和CC1的具体含义,编程时就需要通过比较指令将比较结果存入一个二进制位中,再根据这个二进制位通过JC/JCN指令来控制程序的执行了。
例3:我们实际应用中可能要利用某些协议转换网关(比如说Hilscher公司的NTTAP系列网关)来和某些串口协议的仪表进行通信时,会遇到CRC校验的问题,关于CRC校验时需要判断溢出位是否为1的问题来进行程序的进一步计算。我们以EURO2408的MODBUS通信时需要的CRC校验为例说明CRC校验的步骤:
1、装载16#FFFF到一个16位CRC寄存器;
2、将CRC寄存器的高8位字节与信息中的个8位字节相异或,结果返回到CRC寄存器中;
3、将CRC寄存器数据向右移动一位;
4、如果溢出的位等于1,则将CRC寄存器与16#A001相异或,结果返回到CRC寄存器中;
4、如果溢出的位等于0,则重复第3步;
5、重复第3、4步骤,直到已经移位了8次;
6、将CRC寄存器的高8位字节与信息中的下一个8位字节相异或,结果返回到CRC寄存器中;
7、重复第3步到第6步,直到信息中所有字节都与CRC寄存器相异或,并都移位了8次;
8、后的CRC寄存器中的结果即为CRC校验码,后被添加到信息(数据)的末尾(交换!低8位
在前,高8位在后;)
在第4步中需要判断溢出的位是否为1,如何判断对于整个程序有着重要的影响。我们可以用A>0指令来判断这个条件,具体代码的编写,有兴趣时大家可以根据上面的步骤编写一个自己的CRC程序。
4.结束语
在一般情况下,我们不必考虑这些状态位,但在某些情况下,利用这些状态位并结合一定的指令,可以给我们的编程带来更大的灵活性,同时对于进一步提高自己的编程水平也有一定的作用。
一、西门子PLC维修
不能与笔记本联机编程故障现象
公司有一台设备,西门子PLC(S7-200)选用的是214-1AD23,利用西门子触摸屏6AV6 642-0AA11-0AX1进行操作,一切情况都正常。但现在用笔记本电脑用PPI电缆连接该PLC却一直不成功,不断地提示端口、波特率、电缆等检查,偶然连相邻的另一台PLC却可以连上,请教如何做好。
二、西门子PLC维修不能与笔记本联机编程解决办法
1、将CPU打到STOP位置试试
2、关闭所有的软件,尤其是占用通讯口的软件,只保留200PLC编程软件。
3、要与西门子新推出的 S7-200 CN CPU 正常通信,必须满足以下条件:
使用编程软件 STEP 7-Micro/WIN V4.0 SP3 以上版
将编程软件的工作环境设置为中文状态。
如果不满足上述条件,会在下载通信时遇到 82 号错误。如果已经满足上述条件而仍然遇到错误,请检查是否其他原因。
4、使用原装USB/PPI电缆,需要将编程软件升级到当前发布的新版本,并且在设置PG/PC接口的时候要选择USB,非原装USB电缆需要正确选择COM口(电脑-属性-硬件-设备管理器-端口)
5、在 PG/PC通信属性时,COM口的符号前为什么会有一个星号*?COM口前面的星号说明它被其他软件占用,Micro/WIN不能使用。
另参考:
检查编程通信的主要步骤
如果有时能够通信但不正常,请检查如下1-4项,如果根本不通,请检查全部项目:
1、检查STEP 7-Micro/WIN与bbbbbbs操作系统是否完全兼容
2、检查是否使用西门子的原装编程电缆,以及电缆是否符合编程PC机或笔记本电脑的硬件条件
3、检查编程电脑上的COM通信口设置
鼠标右键单击我的电脑,选择;属性
打开设备管理器标签(对于bbbbbbs2000,选择硬件标签,按设备管理器按钮)
双击;端口(COM和LPT)
双击所使用的通信口,如COM1
在端口设置标签,选择
在对话框中把接收和发送缓冲区都设置为小值,并保持选中FIFO选择框
重新启动计算机使设置有效
4、检查编程电缆的DIP开关设置,是否与Micor/WIN的通信速率设置相同
在Micro/WIN左边的浏览条中鼠标单击Communication(通信)大图标,检查通信参数设置。鼠标双击PC/PPI电缆图标可以更改通信属性。 CPU出厂的缺省设置是通信口地址为2,波特率为9.6K。
使用新的SMART(智能)RS-232/PPI电缆的用户,如果配合Micro/WIN32 V3.2 SP4以上版,可以将DIP开关5设置为1,选中通信界面的bbbbbb all baudrate(搜索所有波特率)选择框,可用于搜索网络上所有相关设备。
对于普通编程电缆,搜索速率高为19.2,因此如果CPU通信口速率被设置为187.5K,则不能被找到。
5、如果仍然不通,请检查CPU右下角的传感器直流电源输出电压(测量L+/M),电压应当高于22V
6、使用wipeout.exe程序,恢复CPU的出厂设置。缺省情况下CPU通信口地址为2,通信速率9.6K。
1.整数、双整数、浮点数的四则运算
西门子S7-200/300/400PLC的四则运算指令基本相同,主要是对两个操作数的加、减、乘、除运算,操作数可以是整数、双整数、浮点数等。S7-200与S7-300/400的指令格式相似,梯形图程序格式如图10-7.1所示。
图中的IN1为四则运算中的被加数、被减数、被乘数、被除数;IN2为加数、减数、乘数、除数:OUT为运算结果存储器地址。
从图10-7.1可见,尽管S7-200与S7-300/400的梯形图指令相同,但从转换后的指令表可以看出两者在执行过程中存在差异。
S7-200的执行过程如下:
①将操作数l(被加数、被减数、被乘数、被除数)移动到结果存储器;
②将结果存储器(操作数1)与操作数2(加数、减数、乘数、除数)进行运算,并将运算结果存储到结果存储器中。
S7-300/400的执行过程如下:
①将操作数l(被加数、被减数、被乘数、被除数)读入到累加器l中:
②将操作数2(加数、减数、乘数、除数)读入到累加器1中,原累加器1中的操作数l移动到累加器2中:
③累加器2中的内容与累加器l运算,运算结果存储在累加器l中;
④累加器1的运算结果传送到结果存储器中。
四则运算编程时应注意以下几点:
①在S7-200中,整数、双整数的运算结果仍然为整数与双整数,因此,在程序中应注意防止因运算结果溢出而导致的执行错误。
②在S7-200中整数、双整数的除法运算DIV—I、DIV- DI指令,以及S7-300/400的DIV_ DI指令,除法运算的结果不保留余数。
③对于S7-200的整数除法,如果需要余数,可以使用DIV指令。DIV指令要求的输出存储器OUT为32位,执行DIV指令后,两个整数的除法运算可以得到32位运算结果,输出存储器OUT的高16位用于存储余数,低16位用于存储商。
④S7-200的双整数除法无法保留余数。
⑤对于S7-300/400的整数除法,可以自动生成余数,执行DIV I指令后,累加器l的高16位存储余数,低16位存储商。
⑥对于S7-300/400的双整数除法,如果需要余数,可以在利用DIV DI指令求出商后,再使用MOD指令求余数。执行MOD指令后,商被舍去,累加器l存储余数。
⑦除法运算的除数不能为“O”。
2.浮点数的函数运算
在S7-200/300/400中,浮点数可以进行函数运算。函数运算包括正弦、余弦、正切、平方根、自然对数、指数等运算,在S7-300/400中还可以进行平方、反正弦、反余弦、反正切、求值等运算。
对于浮点数的函数运算,为了得到正确的运算结果,同样应遵守函数运算的基本规定与要求,保证程序中操作数取值范围的正确性。
3.增量指令
在S7-200中,除可以使用以上数据运算指令外,还可以通过专门的指令对字节、字、双字进行增“1”( Increment)与减“1”(Decrement)运算。这些指令的使用十分简单,可以按照表10-7.1的格式直接编程。
除以上常用的功能指令外,S7还有其他部分功能指令,如程序控制指令,S7-200中的表指令、字符串指令、特殊计数指令等。这些指令有的使用较少。 1.定义变量
为了进行结构化编程,必须编制功能块。从搅拌机控制要求可见,泵A、泵B、搅拌电机的控制要求相似,都是接受操作面板的启动按钮、停止按钮控制,都需要满足一定的控制条件,都需要检测错误,都有工作、停止指示灯等。因此,可以通过一个统一的FB块进行结构化编程。
功能块FB需要的变量较多,本例中,作为泵A、泵B、搅拌电机共同的输入,包括了启动信号( start)、停止信号(stop)、接触器辅助触点反馈(fbk)、定时器(T no)、检测时间(fbk time)等,定义的输入变量表如图11-5.1所示。
作为泵A、泵B、搅拌电机共同的输出,包括了故障标志寄存器输出( err)、工作指示灯(start lt)、停止指示灯( stop_lt),定义的输出变量表如图11-5.2所示。
作为泵A、泵B、搅拌电机共同的输入/输出,有接触器线圈输出( coil),定义的输入/输出变量表如图11-5.3所示。
作为泵A、泵B、搅拌电机共同的静态变量,有启动延时(timl BIN与timl BCD),定义的静态变量表如图11-5.4所示。
2.编制功能块
根据以上变量定义与控制要求,用于搅拌机泵A、泵B、搅拌电机控制的功能块FB1编制如图11-5.5所示。
功能块包括了接触器的启动/停止控制、故障检测、指示灯3部分的控制程序,全部采用符号地址(形式参数)进行编程。