7
南京西门子中国代理商变频器供应商
S7-200模拟量输入模块(EM231,EM235)寻址
每个模拟量扩展模块,按扩展模块的先后顺序进行排序,其中,模拟量根据输入、输出不同分别排序。模拟量的数据格式为一个字长,所以地址从偶数字节开始,精度为12位;模拟量值为0-32000的数值。输入格式: AIW[起始字节地址] 如AIW0输出格式: AQW[起始字节地址] AQW0每个模拟量输入模块,按模块的先后顺序地址为固定的,顺序向后排。例::AIW0,AIW2,AIW4……、AQW0,AQW2……。
每个模拟量扩展模块至少占两个通道,即使个模块只有一个输出AQW0(EM235只有一个模拟量输出),二个模块模拟量输出也应从AQW4开始寻址,以此类推。
2.传感器连接到S7-200 模拟量输入模块(EM231,EM235)有哪些注意事项?
模拟量输入模块可以通过拨码开关设置为不同的测量方式(电流电压)。模块开关的设置应用于整个模块,一个模块只能设置为一种测量范围;而且开关设置只有在重新上电后才能生效。只能将输入端同时设置为一种量程和格式,即相同的输入量程和分辨率。
EM235是常用的模拟量扩展模块,它实现了4路模拟量输入和1路模拟量输出功能。EM235模拟量扩展模块的接线方法,对于电压信号,按正、负直接接入X+和X-;对于电流信号,将RX和X+短接后接入电流输入信号的“+”端;未连接传感器的通道要将X+和X-短接。
注意:为避免共模电压,须将M端与所有信号负端连接,未连接传感器的通道要短接。当模拟量输入PLC接收到一个变动很大的不稳定的值时,原因之一:你可能使用了一个自供电或隔离的传感器电源,两个电源没有彼此连接,所以由此产生了一个很高的上下振动的共模电压,影响模拟量输入值。原因之二:可能是模拟量输入模块接线太长或绝缘不好。所以解决方法:1.连接传感器输入的负端与模块上的公共M 端以补偿此种波动。(注意:事前要确定这是两个电源间的连接。如果另外一个连接已经存在了,当再添加公共连接时可能会产生一个多余的补偿电流。)
当出现模拟量输入PLC接收到信号变化很慢,这可能是你使用了滤波器,可以通过降低滤波采样数,或取消模拟量滤波方式解决。
3.关于EM235是否能用于热电阻测温问题?
EM235不是用于与热电阻连接测量温度的模块,勉强使用容易带来故障。
4.关于EM235输入校准问题:
模拟量输入模块使用前应进行输入校准。其实出厂前已经进行了输入校准,如果OFFSET和GAIN电位器已被重新调整,需要重新进行输入校准。其步骤如下:
A、切断模块电源,选择需要的输入范围。
B、接通CPU和模块电源,使模块稳定15分钟。
C、用一个变送器,一个电压源或一个电流源,将零值信号加到一个输入端。
D、读取适当的输入通道在CPU中的测量值。
E、调节OFFSET(偏置)电位计,直到读数为零,或所需要的数字数据值。
F、将一个满刻度值信号接到输入端子中的一个,读出送到CPU的值。
G、调节GAIN(增益)电位计,直到读数为32000或所需要的数字数据值。
H、必要时,重复偏置和增益校准过程。
5.模拟量值和A/D转换值的转换问题:
设模拟量的标准电信号是A0—Am(如:4—20mA),A/D转换后数值为D0—Dm(如:6400—32000),设模拟量的标准电信号是A,A/D转换后的相应数值为D,由于是线性关系,函数关系A=f(D)可以表示为数学方程:
A=(D-D0)×(Am-A0)/(Dm-D0)+A0。
根据该,可以方便地根据D值计算出A值。将该逆变换,得出函数关系D=f(A)可以表示为数学方程:
D=(A-A0)×(Dm-D0)/(Am-A0)+D0。
具体举一个实例,以S7-200和4—20mA为例,经A/D转换后,我们得到的数值是6400—32000,即A0=4,Am=20,D0=6400,Dm=32000,代入公式,得出:
A=(D-6400)×(20-4)/(32000-6400)+4
设该模拟量与AIW0对应,则当AIW0的值为12800时,相应的模拟电信号是6400×16/25600+4=8mA。
又如,某温度传感器,-10—60℃与4—20mA相对应,以T表示温度值,AIW0为PLC模拟量采样值,则根据上式直接代入得出:
T=70×(AIW0-6400)/25600-10
可以用T 直接显示温度值。
模拟量值和A/D转换值的转换理解起来比较困难,该段多读几遍,结合所举例子,就会理解。为了让您方便地理解,我们再举一个例子:
某压力变送器,当压力达到满量程5MPa时,压力变送器的输出电流是20mA,AIW0的数值是32000。可见,每毫安对应的A/D值为32000/20,测得当压力为0.1MPa时,压力变送器的电流应为4mA,A/D值为(32000/20)×4=6400。由此得出,AIW0的数值转换为实际压力值(单位为KPa)的计算公式为:
VW0的值=(AIW0的值-6400)(5000-100)/(32000-6400)+100(单位:KPa)
编程实例
您可以组建一个小的实例系统演示模拟量编程。本实例的的CPU是CPU222,仅带一个模拟量扩展模块EM235,该模块的个通道连接一块带4—20mA变送输出的温度显示仪表,该仪表的量程设置为0—100度,即0度时输出4mA,100度时输出20mA。温度显示仪表的铂电阻输入端接入一个220欧姆可调电位器,简单编程如下:
温度显示值=(AIW0-6400)/256
编译并运行程序,观察程序状态,VW30即为显示的温度值,对照仪表显示值是否一致。
有些辅助继电器具有特殊功能或存储系统的状态变量、有关的控制参数和信息,我们称为特殊标志继电器。用户可以通过特殊标志来沟通PLC与被控对象之间的信息,如可以读取程序运行过程中的设备状态和运算结果信息,利用这些信息用程序实现一定的控制动作。用户也可通过直接设置某些特殊标志继电器位来使设备实现某种功能。
特殊标志继电器用“SM”表示,特殊标志继电器区根据功能和性质不同具有位、字节、字和双字操作方式。其中SMB0、SMB1为系统状态字,只能读取其中的状态数据,不能改写,可以位寻址。系统状态字中部分常用的标志位说明如下:
SM0.0:始终接通;
SM0.1:扫描为1,以后为0,常用来对程序进行初始化;
SM0.2:当机器执行数学运算的结果为负时,该位被置1;
SM0.3:开机后进入RUN方式,该位被置1一个扫描周期;
SM0.4:该位提供一个周期为1分钟的时钟脉冲,30秒为1,30秒为0;
SM0.5:该位提供一个周期为1秒钟的时钟脉冲,0.5秒为1,0.5秒为0;
SM0.6:该位为扫描时钟脉冲,本次扫描为1,下次扫描为0;
SM1.0:当执行某些指令,其结果为0时,将改位置1;
SM1.1:当执行某些指令,其溢出或为非法数值时,将改位置1;
SM1.2:当执行数学运算指令,其结果为负数时,将改位置1;
SM1.3:试图除以0时,将改位置1;
S7-200中SM0.0的用法:
1、SM0.0在程序运行时始终为ON。
2、SM0.0是一个无条件的常闭触点,用来启动无条件运行的指令。
只要上电,SM0.0必然是“1”。因此程序中那些不受任何条件限制,要执行的指令就用它作为触发触点。
3、问:程序有时要在指令前加SM0.0,为什么不直接连在母线上,不是一样吗?
答案:
因为,S7-200的指令是不能直接连在“母线”上的,这不符合语法要求。
SM0.0是不可控的触点,适用于无条件触发的场合,并非每个指令都需要SM0.0。在其它场合,要用可控制的触点来触发指令,如I0.0、M0.0或各种比较指令等等。如果没有可控触点可用,就只能用SM0.0。
其他答案:
a、 S7200编程中有规定,在输出类指令前有触点指令,有的时候输出指令不需要条件直接输出为1,但为了满足这样的编程约定就串连常为1的sm0.0在。
b、不同PLC厂家都有自己语法规定 ,SIEMENS S7-200梯形图就这样要求的,不能母线直接连输出指令(或子程序调用)。
c、一个程序用不用SM0.0在于多方面的需要,如果你不需要也能完成控制要求那不用当然好了。不过对于一些指令你还是非用它不可呢!另外在调试程序时它还是你的好帮手呢!
基本指令
一 关于状态字(SM)
01 SMB0包括8个状态位(SM0.0/SM0.1/SM0.2/SM0.3/SM0.4/SM0.5/SM0.6/SM0.7)
02 SMB1 包含了各种潜在的错误提示,可在执行某些指令或执行出错时由系统自动对相应进行置位或复位.
03 SMB2 在自由接口通信时,自由接口接收字符的缓冲区.
04 SMB3 在自由接口通信时,发现接收到的字符中有奇偶效验错误时,可将SM3.0置位.
05 SMB4 标志中断队列是否溢出或通信接口使用状态.
06 SMB5 标志I/O系统错误.
07 SMB6 CPU模块识别(ID)寄存器.
08 SMB7 系统保留
09 SMB8-SMB21 I/O模块识别和错误寄存器,按字节对形式(相邻两个字节)存储扩展模块0-6的模块类型、I/O类型、I/O点数和测得的各模块I/O错误.
10 SMB22-SMB26 记录系统扫描时间.
11 SMB28-SMB29 存储CPU模块自带的模拟电位器所对应的数字量.
12 SMB30-SMB130 SMB30为自由接口通信时,自由接口0的通信方式控制字节;SMB130为自由接口通信时,自由接口1的通信方式控制字节;两字节可读可写。
13 SMB31-SMB32 存储器(EEPROM)写控制.
14 SMB34-SMB35 用于存储定时中断的时间间隔.
15 SMB36-SMB65 高速计数器HSC0、HSC1、HSC2的监视及控制寄存器.
16 SMB66-SMB85 高速脉冲输出(PTO/PWM)的监视及控制寄存器.
17 SMB86-SMB94 自由接口通信时,接口0或接口1接收信息状态寄存器.
18 SMB186-SMB194 自由接口通信时,接口0或接口1接收信息状态寄存器.
19 SMB98-SMB99 标志扩展模块总线错误号.
20 SMB131-SMB165 高速计数器HSC3、HSC4、HSC5的监视及控制寄存器.
21 SMB166-SMB194 高速脉冲输出(PTO)包络定义表.
22 SMB200-SMB299 预留给智能扩展模块,保存其状态信息.
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.结束语
在一般情况下,我们不必考虑这些状态位,但在某些情况下,利用这些状态位并结合一定的指令,可以给我们的编程带来大的灵活性,同时对于进一步提高自己的编程水平也有一定的作用
使cpu进入stop的情况很多,比如调用错误,没有下载需要DB块,编程错误等等,如果你想避免错误时不使CPU进入停止状态,你可以在程序中加入特殊的OB块,则出现相应问题,调用相应的OB块,虽然里面没程序,PLC将对错误错误不作任何处理,继续运行。否则PLC将进入停机状态可,比如:
OB73通讯冗余出错OB
当容错S7连接中发生冗余丢失时,H CPU的操作系统将调用OB73(只有在S7通讯中才会有容错S7连接)如果其它容错S7连接发生了冗余丢失,则不会再有OB73启动。直到为具有容错功能的所有S7连接恢复冗余后,才会出现另一个OB73启动。如果发生了启动事件且OB73没有编程,CPU不会转为STOP模式。
OB80时间出错组织块
无论何时执行OB时出错,S7-300 CPU的操作系统将调用OB80。此类错误包括:出周期时间、执行OB时出现确认错误、提前了时间而使OB的启动时间被跳过、CiR后恢复RUN模式。例如,如果在上一次调用之后发生了某一周期性中断OB的启动事件,而同一OB此时仍在执行中,则操作系统将调用OB80。如果OB80尚未编程,则CPU将转为STOP模式。可以使用SFC 39至42禁用或延迟和重新启用时间出错OB。
OB81电源出错组织块
只要发生由错误或故障所触发的事件,而此错误或故障又与电源(仅在S7-400上)或备用电池(当事件进入和离开时)有关,则S7-300 CPU的操作系统调用OB81。在S7-400中,如果已使用BATT.INDIC开关了电池测试功能,则只有在出现电池故障时才会调用OB81。如果OB81没有编程,则CPU不会转为STOP模式。可以使用SFC 39至42禁用或延迟,并重新启用电源出错OB。
OB82诊断中断组织块
如果具有诊断功能的模块(已为其启用了诊断中断)检测到错误,则它会输出一个诊断中断的请求给CPU(当事件进入和离开时)。则操作系统调用OB82。OB82的局部变量包含逻辑基址和四字节的故障模块的诊断数据(请参见下表)。如果OB82尚未编程,则CPU转为STOP模式。可以使用SFC 39至42禁用或延迟,并重新启用诊断中断OB。
OB83插入/删除模块中断组织块
在下列情况下,CPU操作系统会调用OB 83:
1、插入/删除已组态模块后
2、在STEP 7下修改模块参数以及在运行期间将改下载至CPU后
可借助SFC 39至42禁用/延迟/启用插入/删除中断OB。
OB84CPU硬件故障组织块
在下列情况下,CPU中的OS将调用OB84:
1、已到并正了内存出错之后
2、对于S7-400H:如果两个CPU之间的冗余链接的性能下降
可以使用SFC 39至42禁用或延迟CPU硬件出错OB,然后再次启用它。
OB85级出错组织块
只要发生下列事件之一,CPU的操作系统即调用OB85:
1、尚未装载的OB(OB81除外)的启动事件。
2、操作系统访问模块时出错。
3、在系统新过程映像期间出现I/O访问错误(如果由于组态原因,未禁止OB85的调用)。
OB86机架故障组织块
只要在分布式I/O (PROFIBUS DP或PROFInet IO)中检测到扩展机架(不带S7-300)、DP主站系统或站故障(进入事件与离开事件时),CPU的操作系统调用OB86。如果OB86尚未编程,当到此种类型的出错时,CPU将转为STOP模式。可使用SFC 39至42禁用或延迟,并重新启用OB86。
OB87通讯出错组织块
只要发生由通讯出错导致的事件,CPU的操作系统就会调用OB87。如果OB87尚未编程,CPU不会转为STOP模式。可以使用SFC 39至42禁用或延迟,并重新启用通讯出错OB。
OB 88处理中断OB
程序块执行被中止后,CPU操作系统将调用OB 88。导致此中断的原因可能是:
1、同步出错的嵌套深度过大
2、块调用(U堆栈)的嵌套深度过大
3、分配本地数据时出错
如果未对OB 88编程且程序块执行被中止,则CPU进入STOP模式(事件ID W#16#4570)。如果在级28下中止了程序块执行,则CPU进入STOP模式。可借助于SFC 39至42禁用、延迟和启用处理中断OB。
OB121编程出错组织块
只要发生同程序处理相关的错误所导致的事件,CPU的操作系统即调用OB121。例如,如果用户程序调用了尚未装载到CPU中的块,将会调用OB121。
OB122I/O访问出错组织块
只要在访问模块上的数据时出错,CPU的操作系统即调用OB122。例如,如果在访问I/O模块上的数据时,CPU检测到读取错误,操作系统将调用OB122。