西门子NCU573.3

发布时间:2018/5/28 9:29:00

西门子NCU573.3

6FC5357-0BB33-0AE2SINUMERIK 840D/DE NCU 573.3 Pentium III 不带系统软件 存储器:NC 2.5MB,PLC 96KB PROFIBUS-DP 准备

1. 如何避免S7-300/400系统扫描时间过长而导致CPU停机?
如果用户程序的执行时间超出硬件组态中所设定CPU的扫描周期监控时间,则CPU会因看门狗超时而停机,同时触发定时错误OB80,诊断信息如图1所示:


图1 诊断信息

S7-300/400 CPU的循环扫描时间(看门狗时间)默认为150ms(可修改为6000ms),用户程序的执行时间必须在设定的扫描周期监控时间范围内。扫描周期设置如图2所示:


图2 设置扫描周期时间

2. 如何查看S7-300/400系统扫描循环时间?
如果工程师需要了解程序的扫描周期,可通过如下两种方法查询。
方法一、将程序到PLC后,进行在线连接,查看CPU信息,如图3所示:



图3 查看CPU“扫描循环时间”

方法二、通过将OB1相应的临时变量传送到M区,即可读取CPU扫描循环时间,如图4、图5所示:


图4 临时变量传送到M区

 



图5 变量监控

3. 如何查看S7-300/400中一个子程序的大约执行时间?
使用S7-300/400 CPU时,如果工程师需要了解某个子程序的大约执行时间,可在该子程序前、后分别读取CPU系统时钟,然后使用时钟相减指令FC34进行编程计算,步骤如下:

1、设置PLC系统时钟,按图6所示的设置:



图6 置PLC系统时钟

2、创建一个块符号名为“time”的数据块(DB1),并创建如下变量,如图7所示:


图7 创建数据块


3、在需要测试的子程序的个网络和一个网络读取系统时钟,然后运用时钟相减指令FC34进行计算。
如下例程中测试了“FC1”子程序的执行时间,如图8所示:



图8 “子程序执行时间”例程

4、通过变量监控表查看该子程序的大约执行时间,如图9所示:


图9 子程序大约执行时间

问题描述:
当高性能电容的时间(根据 CPU 类型不同而不同)用完,或者电池模块过期(200天),修改过的参数就会丢失。使用以下程序库所提供的子程序,可以在 CPU 中的内部 EEPROM 中保存完整的变量区域,在运行期内该区域是不易失的(在系统手册中仅说明了保存单个变量)。

软件要求:
此操作程序库使用需要 STEP 7 Micro/WIN  V4.0 SP7 或者更高的版本 。

警告:
当 CPU 启动时,包含 DB (数据块)的存储卡不可以被插入。如果包含 DB 的存储卡被插入,CPU 会读出存储卡的内容而不是去读内部 EEPROM,同时存储数据被错误的写回。

合并和使用库:

  1. 将的文件“store_to_eeprom.zip”保存在电脑上。

  2. 在独立的目录下解压文件“store_to_eeprom.zip”。

  3. 双击开始解压的 STEP 7 Micro/WIN 库 “store_to_eeprom.mwl”。

  4. 在 STEP 7-Micro/WIN 对话栏中打开确认集成的库。

增加的 “EEPROM (v1.0)”文件夹中包含了子程序“EEPROM_Direct"”和 “EEPROM_Indirect”。

西门子NCU573.3图:01

使用子程序:

  1. 在网络中从文件夹“EEPROM (v1.0)”插入所需要的子程序。

  2. 根据例程中的参数列表给所选子程序分配输入输出参数。

使用适当的逻辑连接,以确保在执行期间程序执行触发输入位“Start”保持为1 (高)。

更多的信息也可以在子程序的注释中得到。.

注意:
不能以很高的频率在 EEPROM 上保存数据。EEPROM 典型的存储次数为100,000次。如果超过这个值,CPU 将发生故障。 如果按小时在 EEPROM 上保存数值,那么 EEPROM 的预计使用寿命是 11 到 12 年。

起始地址为直接寻址“EEPROM_direct"”例程:

 
图: 02
 

参数变量类型说明
ENBOOL

必须始终为1(高)

StartBOOL

上升沿 (0 ->1)触发程序运行;必须保持1 (高) 直到 BUSY 位变成 0 (低)。

V_StartINT

偏移量指定(起始地址)。例如,200=VB 200

LengthINT

从偏移量(起始地址)开始待保存的字节数

MemoryINT

用于子程序的临时存储区

BusyBOOL

过程状态 1 (高),程序在运行中

DoneBOOL结束状态 1 (高),成功完成保存

表: 01

起始地址为间接寻址“EEPROM_indirect”例程:

 
图: 03
 

参数变量类型说明
ENBOOL

必须始终为1(高)

StartBOOL

上升沿 (0 ->1)触发程序运行;必须保持1 (高) 直到 BUSY 位变成 0 (低)。

AddressDWORD指定起始地址偏移量(起始地址以DWORD类型变量读入)
LengthINT

从偏移量(起始地址)开始待保存的字节数目

MemoryINT

用于子程序的临时存储

BusyBOOL

过程状态 1 (高),程序在运行中

DoneBOOL

结束状态 1 (高),成功完成保存

表:02

程序测试:
程序运行后, 删除可保持的 V 变量并将存储的数据装载回 CPU。 

序号.解释
1删除数据:
由路径“View > Component > System Block"”到“System Block"”选择“Retentive Ranges”表。


图:04

选择数据范围,输入起始地址和范围。点击“Clear”按钮。

例程如下图显示: 

 
图: 05

2装载数据: 
  • 停止CPU。

  • 启动CPU。

启动 CPU 时,存储数据从 CPU 的内部 EEPROM 中被写入存储器。

问题:如何计算当前程序所需的Local Data大小并合理设置S7 400 CPU属性中的Memory选项卡中的Local Data,S7 400 CPU中的Local data设置不当会导致什么问题?
回答:Local data顾名思义为本地数据,在西门子控制器中有一部分内存空间被设置为L区间,它被用于控制器在运行程序时存储临时数据。由于编写FB/FC程序的需要和OB中调用功能块结构的不同,不同的OB由于调用不同的FB/FC,因此所需的Local data的大小各不相同(被调用的FB/FC将占用当前调用他的OB块的Local Data资源)。在控制器硬件组态中的CPU属性设置中,Memory选项卡用于设置Local data的分配。如果相应OB块实际运行所需的Local data大于硬件组态中所设置的Local Data大小,那么相应的程序将无法运行,CPU将INTF错误,甚至更为严重的情况下CPU可能会停止运行。但如果盲目将Local Data的分配设置过大,将会浪费一部分宝贵的CPU内存空间。
S7 300CPU中的Local data不可修改,每个优先级固定设置为256 bytes,S7 400的Local data则可以人为修改。由此可以看出正确设置S7400 CPU的Local Data的大小非常重要。在控制器硬件组态中CPU属性? Memory选项卡的Local Data区域用于设置基于优先级的Local Data(如下图所示):


Pic1: Local Data的分配

在PCS7组态的项目中,在编译CFC程序后,系统将会自动计算各OB块所需的Local Data大小,可以通过交叉索引(Chart reference data ? Local data,如下图所示)查询到。


Pic2: Chart reference data ? Local data

而普通的由用户采用Step7编程方式编写的程序,程序功能块及OB块各自的调用结构由用户自行控制,需要在编写完整个程序之后自行计算。
在手动计算Local Data时,需要获取如下信息:
1. 各OB块、FB块、FC块各自独立运行时所需的Local Data大小
可以通过如下方式查询到:在Block文件夹中选择相应功能块,右键 属性? General - Part2中即可查看到,如下图所示:


Pic3: 功能块所需的Local Data

注:嵌套调用时,上功能块将不会计算其嵌套调用的FB/FC所需的Local data大小;在上图中将不会累加嵌套功能块所需的Local data大小;


2. 整个程序的调用结构(Call structure)
由于功能块不会计算其嵌套调用的功能块所需到Local data大小,因此为了计算整个OB所需到Local Data,必须了解整个程序的调用结构。打开任何一个功能块,点击左侧的Call Structure即可查询到,如下图所示;


Pic4: 程序调用结构


3. 当前程序下所使用的所有OB的优先级
由于CPU属性设置中的Local Data分配基于优先级进行设置,因此需要查看所有当前程序使用的OB块的中断优先级,打开硬件组态中CPU属性查看,如下图所示;


Pic5: 查看OB的优先级

获得所有上述信息后,即可计算当前程序所需的Local data大小。假设当前项目下使用的功能块及OB块上述相关信息如下表所示:

OB/FB/FCPriority 优先级所需Local Data(Bytes)
FB1X100
FC1X400
OB1126
OB351226
OB121X20
OB122X20

OB的调用关系如上图Pic4所示。根据调用结构计算,单独运行各OB块时所需的Local data如下:
OB1: OB1 + Max(Sum(FB1,FC1), FC1) =26+Max(Sum(100,400), 400)=526
OB35: OB35 + Sum(FB1,FC1) =26+Sum(100,400)=526
OB121: OB121=20
OB122: OB122=20
最终CPU属性中Local data的设置如下:
优先级 1 所需Local Data大小至少为526 + 20 + 20 = 566 bytes;
优先级12所需的Local Data大小至少为526 + 20 + 20 = 566 bytes;
注:为什么上述优先级1和12中需要加入 两个20呢,因为程序运行的任何位置都有可能会执行OB121、OB122,所以需要加上OB121和OB122所需的本地数据。PCS7中(Pic2所示)进行各优先级所需Local data大小计算时已经自动加入了这部分的大小。
具体的计算法则可以归纳为一下几点:

1. 从内往外,从低往高;
即:基于程序的调用结构,从层、最内层逐步往上、往外计算;
2. 同级取,内外求和;
即:程序调用结构中,同层FB/FC中所需的Local data取各所需Local data中的值;某一优先级所需的Local Data大小取所有相同优先级OB所需的Local Data的值;上下调用层级各自所需Local Data需求和;
3. 结果叠加OB121(编程错误)、OB122(I/O读取错误);
即:最终计算出的某优先级所需的Local data大小需要叠加上OB121、OB122所需的Local data;

如果项目中CPU设置的Local Data小于程序所需Local Data大小时会有如下后果:
1. PCS7中,如果项目硬件组态设置的CPU的Local data大小小于程序所需的Local data大小的情况下,PCS7项目在编译时将提示如下相应警告信息:
/******************************************************************************************
W: Local data requirements for the priority class 1:
The local data requirements (890 bytes, including OB121 and OB122) of organization block OB1 exceed the configured local data stack of the corresponding priority class on the connected offline CPU.
/******************************************************************************************
如果实际运行的CPU中的Local Data设置小于正在的程序所需的Local data大小将提示如下错误信息,程序将终止:
/******************************************************************************************
Download to CPU SIMATIC H Station(1)\CPU_417-4H_R0\S7 Program(1) on 1/12/2009 10:26:16 PM (entire program)
E: Local data requirements (890 byte, inclusive OB121 and OB122) for organization block OB1 is larger than the local data stack configured in the connected online CPU for the corresponding priority class 1.
/******************************************************************************************
2. Step7编写的程序则不会校验Local data分配的情况,如果实际运行的CPU中的Local Data设置小于正在的程序所需的Local data大小,则在程序后运行该优先级下的程序时,CPU将INTF错误,该优先级的程序将无法执行,并将触发OB88(Process interrupt OB)错误中断。在CPU的诊断缓冲区中将生成类似如下的诊断信息:
/******************************************************************************************
Event 1 of 160: Event ID 16# 3576
Error when allocating local data
Caused by OB: Cyclic interrupt OB (OB 35), Priority class: 12
OB number: 35
Module address: 72
Requested OB: Processing abort OB (OB88)
Priority class: 28
Internal error, Incoming event
04:04:28.026 PM 01/14/1994
/******************************************************************************************
如果程序中没有插入OB88,则CPU将停止运行;
在冗余CPU的情况下,在主CPU运行,启动从CPU时将调用优先级为28的OB72。如果在优先级为28的中断中出现Local Data不足的情况,则主从CPU都将停止运行。CPU的诊断缓冲区将生成类似如下的诊断信息:
/******************************************************************************************
Event 2 of 374: Event ID 16# 4570
STOP due to processing error (OB not loaded or not possible, or no FRB)
Breakpoint in user program: CPU redundancy error OB (OB72)
Priority class: 28
OB number: 72
Module address: 6
Previous operating mode: RUN (redundant mode)
Requested operating mode: STOP (internal)
Event occurred in the standby CPU in rack 1
Internal error, Incoming event



西门子NCU573.3