西门子XP216交换机
| 6GK5216-0HA00-2AS6 SCALANCE XP216,受管理的 IE 交换机,12个 10/100 Mbit/s M12 端口,4x 10/100/1000 Mbit/s M12 端口 IP65,LED 诊断, 错误信息触点, 冗余电源, PROFINET 输入输出设备, 网络管理, 在冗余环路中可运行, 包含防尘盖,包含 电子手册在 CD-ROM 上, 可选配 C-PLUG |
问题:在S7-CPU中使用嵌套程序需要注意什么,如何使用?
回答:S7-CPU支持嵌套程序,但对于不同的CPU类型,在使用时需要注意一些问题。
1. 不同的CPU类型,支持的嵌套程序深度不同,用户可在CPU的技术数据中查到此参数,以6ES7315-2AG10-0AB0为例。
图1:CPU的嵌套深度参数
2. 用户可以按照如下方式使用嵌套功能:
a) 在某个优先级组织块中调用多个嵌套FC/FB。例如,在OB1 (优先级为1)调用FC1,FC1中调用FC2,FC2中调用FC3,等等,一直到FC7,与OB1共8层深度。如果在FC7 中又调用了FC8 ,此时会导致CPU 停机,在CPU在线信息界面中可查看到此情况,如图2所示。用户也可在OB35(优先级为12)调用FC11,FC11中调用FC12,FC12中调用FC13,等等,一直到FC17。
图2:嵌套调用
b) 在某个优先级中调用某个FC,此FC多次调用自身。例如,在OB1 (优先级为1)调用FC1,FC1中仍然调用FC1,用户在FC1 的程序中必须编程累计FC1被调用的次数,如果达到了7次,则需要从FC1 中跳出调用(此方法即为软件行业广泛应用的递归编程方法)。如果在FC1 调用自身次数超出了CPU允许的嵌套深度,此时会导致CPU 停机。
3. 当用户在使用嵌套功能时,可能出现几种错误:
a) The nesting depth of block calls (U-Stack) is too high(嵌套深度太高)。例如:
? 用户在某个优先级(如OB1)中调用嵌套程序深度超出所使用CPU支持深度,如第2节(a) 部分所描述。
? 用户在某个优先级(如OB1)中调用嵌套程序深度超出所使用CPU支持深度,如第2节(b) 部分所描述。
此时CPU将报16#4575错,如图3所示:
图3:同步错误嵌套1
b) The nesting depth of synchronous errors is too high(同步错误嵌套深度太高)。例如:
? 用户在OB1中使用L DB1.DBB0 语句(CPU中并未下载DB1),
? 此时CPU出现编程错误,将调用OB121。
? 如果用户在下载的OB121中又使用了L DB1.DBB0 指令,将导致CPU停机
此时CPU将报16#4573错,如图4所示:
图4:同步错误嵌套2
c) Error during allocation of local data (分配本地数据错误) 。对于S7-CPU每个优先级都有对本地数据大小的限制,如果用户使用的范围超出了此限制,CPU将出现错误。以6ES7315-2AG10-0AB0为例,其每个优先级下的本地数据大小为512 BYTE。如下错误使用都可能导致此错误:
? OB1 调用FC1,FC1 中定义的local data(TEMP数据类型)与OB1中定义的local data(TEMP数据类型)总和超出了CPU 对此优先级分配的local data 数量。
? OB1 中嵌套调用多个FC, 这些FC 使用的local data 与OB1中定义的local data(TEMP数据类型)总和超过了分配给此优先级的local data 数量。
此时CPU将报16#3576错,如图5所示:
图5:分配本地数据错误
? 对于S7-400CPU, 用户可以在硬件配置中调节每个优先级下的本地数据大小,以6ES7412-2XG04-0AB0为例,如图6所示:
西门子XP216交换机
图6:分配本地数据
4. 当用户在使用嵌套功能出现错误时,对于支持OB88的CPU(例如S7-400CPU),可用通过下载OB88来防止CPU停机,此时CPU将处于SF状态,但OB88不可以再出现嵌套使用错误,否则CPU将进入停机状态。对于不支持OB88的CPU(例如S7-300CPU),当出现嵌套调用错误时,无法避免CPU进入停机状态。
问题3:S7-200 CPU内的程序是否具有掉电保持特性?
回答:S7-200 CPU内的程序块下载时,会同时下载到EEPROM中,也就是说程序下载后,将保持。同样,系统块和数据块下载时,也会同时下载到EEPROM中。
问题4:S7-200 CPU内部的数据的掉电保持特性?
回答:S7-200系统手册第四章——“PLC基本概念”一章中“理解S7--200如何保存和存储数据”一节详细介绍了S7-200 CPU内数据的掉电保持特性,建议用户仔细阅读。
S7-200 CPU内的数据分为RAM区和EEPROM区。
其中,RAM区数据需要CPU内置的超级电容或者外插电池卡才能实现掉电保持特性。
对于CPU221和CPU222的内置超级电容,能提供典型值约50小时的数据保持。
对于CPU224,CPU224XP,CPU224XPsi和CPU226的内置超级电容,能提供典型值约100小时的数据保持。
超级电容需要在CPU上电时充电。为达到上述指标的数据保持时间,需要连续充电至少24小时。
当该时间不够时,可以购买电池卡,以获得更长时间的数据保持时间。
EEPROM区能实现数据保持,不依靠超级电容或者电池就可以保持数据。
问题5:S7-200 CPU内部数据的工作顺序?
回答:S7-200 CPU一上电后,CPU先去检查RAM区域中的数据,如果在超级电容或者电池有电的情况下,数据并未丢失,则使用该RAM区的数据;如果超级电容或者电池没电了,导致数据丢失,则CPU去读EEPROM中相应的区域(包含数据块中的数据定义内容),如果在EEPROM中存有保持的数据,则CPU将EEPROM中的数据写回到RAM区中,再进行下面的工作。
如果EEPROM中也没有对应存储区的数据了,则该存储区的数据将变成0。
问题6:S7-200 CPU电池卡的使用注意事项?
回答:新版S7-200 CPU电池卡有两种型号。
对于CPU221和CPU222,由于其中没有实时时钟,则对应的为时钟电池卡,订货号为:6ES7297--1AA23--0XA0。
对于CPU224,CPU224XP,CPU224XPsi和CPU226,电池卡仅提供电池功能,订货号为:6ES7 291--8BA20--0XA0,该款电池卡型号又叫做BC293。
电池卡的寿命典型值约为200天,当插上电池卡后,如果CPU处于工作状态或者超级电容有电的情况下,并不消耗电池卡的电量。当电池卡的电量消耗完毕之后,该电池卡就报废了。
S7-200电池卡不能充电,使用完毕就不能再用了,只能购买新的电池卡了。
S7-200没有检测电池卡内剩余电量的状态位和这种功能。
新版S7-200 CPU电池卡不能用于老CPU,即订货号为6ES7xxx-xxx21-0XB0和6ES7xxx-xxx22-0XB0以及更老版本的CPU。
图1
以上为两种电池卡以及所在插槽位置。
电池卡的使用完整限制条件,请参考《S7-200系统手册》附录A 技术规范—可选卡件一节。
问题7:S7-200 CPU内EEPROM的使用方法?
回答:EEPROM的写入分为如下几种情况:
1、MB0—MB13的设置,只需要在系统块—断电数据保持中设置即可。
默认情况下,系统块设置如下图蓝框中所示,即MB14—MB31,这些区域没有对应的EEPROM区域,无须考虑EEPROM写入次数限制。
图2
MB0—MB13如果在系统块中设置成掉电保持区域,如图2红框中所示,并将系统块下载到CPU之后,则这14个字节的数据在掉电的瞬间会将数值写入EEPROM中,如果掉电时间超过超级电容和电池的保持时间之后,再上电时,CPU会将EEPROM中存储的数据数值写回到RAM中对应的存储区,实现保持数据的目的。
注意:实现该功能一定要将修改过的系统块下载到CPU中。
2、数据块中定义的数据,如图3所示,当下载数据块的时候,同时会将定义的数据下载到EEPROM中,这样,当掉电时间超过超级电容和电池的保持时间之后,再上电时,CPU会将EEPROM中存储的数据块中定义的数据数值写回到RAM中对应的存储区,实现保持数据的目的。也就是恢复成数据的初始设置值。
注意:实现该功能一定要将定义好数据的数据块下载到CPU中。
图3
3、使用SMB31和SMW32控制字来实现将V区的数据存到EEPROM中
特殊存储器字节31 (SMB31)命令S7-200将V存储区中的某个值复制到存储器的V存储区,置位SM31.7提供了初始化存储操作的命令。特殊存储器字32 (SMW32)中存储所要复制数据的地址。如图4为S7-200系统手册内关于SMB31和SMW32的使用说明。
图4
采用下列步骤来保存或者写入V存储区中的一个特定数值:
1. 将要保存的V存储器的地址装载到SMW32中。
2. 将数据长度装载入SM31.0和SM31.1。具体含义如图4所示。
3. 将SM31.7置为1。
图5
注意:如果在数据块中定义了某地址的数据,而又使用这种办法存储同样地址的数据,则当CPU内超级电容或电池没电时,CPU再上电时将采用SMB31和SMW32存储的数据。
问题8:EEPROM写入次数的统计?
回答:每次下载程序块/数据块/系统块或者执行一次SMB31.7置位的操作都算作对EEPROM的一次写操作,所以请注意在程序中一定不要每周期都调用SMB31/SMW32用于将数据写入EEPROM内,否则CPU将很快报废。
问题9:不使用数据块的方法,如何在程序中实现不止一个V区数据的存储?
回答:由于SMB31/SMW32一次多只能送入一个V区双字给EEPROM区域,因而当有超过一个双字的数据需要送入EEPROM中时,需要程序配合实现。具体操作方法可参照如下的例子,即使用SMB31/SMW32送完一个数据(字节/字/双字)之后,通过一个标志位(如M0.0)来触发下一个SMB31/SMW32操作,之后需要将上一个标志位清零,以用于下一次的存储数据的操作。
由于SM31.7在每次操作结束之后都自动复位,因而不能使用它作为第二次触发操作的条件。