S7-400H控制器的内存结构与优化

S7-400型控制器的内存按照功能的不同,可以分为:

系统内存(System Memory--- 控制器的自身功能(MTC等)

工作内存(work Memory--- 用于运行程序;

装载内存(Load Memory--- 用于装载程序,可以通过存储卡扩展;

Description: Description: C:\Users\PCS7\Desktop\PCS7_TOP1216\H_CPU\S7_400H_General_Info\S7_400H_InnerMemory\image\image001.png

其中,工作内存部分又可以细分为:

代码工作内存(Code Memory--- 用于运行程序的代码部分;

数据工作内存(Data Memory--- 用于运行程序的数据部分;

S7-400型控制器的内存按照集成方式的不同,可以分为:

集成内存(Integrated--- 直接集成在控制器内部随控制器一起提供,无需额外订购;

扩展内存(Expanded--- 通过扩展存储卡的方式扩展提供,需要额外订购;

一般情况下,控制器的工作内存不可扩展,而装载内存则可以通过FEPROMRAM的方式进行扩展。如果希望和集成的RAM装载内存无缝扩展使用,则扩展的装载内存必须选用RAM类型。下图为CPU 412的性能参数示例。

Description: Description: C:\Users\PCS7\Desktop\PCS7_TOP1216\H_CPU\S7_400H_General_Info\S7_400H_InnerMemory\image\image002.png

 

控制器内存详细分配情况

 

内存类型

注释信息

装载内存

系统数据/System Data

硬件组态数据

程序块/Program Blocks

程序块

 (FBs,FCs,OBs,Symbols,Comments)

工作内存

(数据部分)

数据块/Data Blocks

数据块 (DBs)

系统数据/System Data

硬件组态信息,非装载内存中的全部硬件组态数据

SFC动态创建的DB/DBs Created by SFC

通过SFC21/22等动态创建的数据块

本地数据/Local Data

各优先级中断所需的临时数据存储区

工作内存

(代码部分)

逻辑功能块/Logic Blocks

逻辑功能块 (FBs,FCs)

通信数据缓冲/Communication Data Buffer2)

通信功能所需的临时缓冲区(动态分配)

通信作业数据/Communication jobs Data ( 72字节/每作业)

通信功能块占用的通信作业数据区

输入输出映像区/PII/PIQ (12 字节/每映像区字节)

输入/输出过程映像区所占用的数据空间

诊断缓冲区/Diagnostic Buffer ( 32 字节/每记录)

CPU诊断消息

系统内存

M区间、定时器T、计数器C

功能块/中断堆栈

M存储区间、定时器/计数器存储区间

堆栈区级通信/诊断/本地数据缓冲区

由于CPU的工作内存大小不可扩展,而各种CPU功能会共同占用这部分区域,对于内存空间有限的CPU,例如S7-412H,内存优化显得非常必要。

用户可以根据项目的实际情况,调整CPU的内存分配,适放更多的空间。例如,扩展过程映像区、扩展本地数据区等。实际的CPU内存占用情况可以通过以下方式检查:

如何查看用户程序内存需求

Simatic Manager中右键点击Blocks文件夹à Object Properties可以打开如下对话框,切换到Blocks页即可查询当前用户程序的内存需求情况。

Description: Description: C:\Users\PCS7\Desktop\PCS7_TOP1216\H_CPU\S7_400H_General_Info\S7_400H_InnerMemory\image\image003.png

Description: Description: C:\Users\PCS7\Desktop\PCS7_TOP1216\H_CPU\S7_400H_General_Info\S7_400H_InnerMemory\image\image004.png

用户程序内存需求情况

如何查看本地数据内存需求

控制器中的本地数据区用于存储各优先级中断运行的程序所需的临时数据,这部分存储空间是在控制器启动初始化时完成预留分配。各功能块所需的临时数据存储区大小可以通过功能块属性à General Part2中的Local data查询到,如下图所示。

Description: Description: C:\Users\PCS7\Desktop\PCS7_TOP1216\H_CPU\S7_400H_General_Info\S7_400H_InnerMemory\image\image005.png

按照实际程序所需的本地数据进行下图所示的Local data的设置,可以优化内存的分配。

v  如何分配合理Local data

Description: Description: C:\Users\PCS7\Desktop\PCS7_TOP1216\H_CPU\S7_400H_General_Info\S7_400H_InnerMemory\image\image006.png

如何查看和优化输入/输出映像区内存需求

输入/输出映像区为控制器预留的、用于存储I/O的映像数据的区间,控制器按照一定的机制进行I/O数据的动态更新,可以优化程序读取I/O的速度和性能。PCS 7中要求必须基于映像区的方式进行I/O信号的读取,冗余控制系统中也要求基于映像区的方式进行I/O信号的读取。这部分存储空间是在控制器启动初始化时完成预留分配。

通过CPU的属性对话框à Cycle/Clock Memory页面进行设置,如下图所示。

Description: Description: C:\Users\PCS7\Desktop\PCS7_TOP1216\H_CPU\S7_400H_General_Info\S7_400H_InnerMemory\image\image007.png

此处为1000 Process image input/1000 Process image output,参考表格1中的数据,每个映像区字节需要分配12 bytes的空间,总共所需1000*12 = 12000 bytes输入/输出。实际程序中所需的映像区范围可以通过I/O卡件的地址范围查询到,查询到实际程序所需的映像区范围后,预留一定余量后对上图进行设置,可以优化内存的分配。

Description: Description: C:\Users\PCS7\Desktop\PCS7_TOP1216\H_CPU\S7_400H_General_Info\S7_400H_InnerMemory\image\image008.png

Description: Description: C:\Users\PCS7\Desktop\PCS7_TOP1216\H_CPU\S7_400H_General_Info\S7_400H_InnerMemory\image\image009.png

查询I/O地址范围

如上图红色标识所示,输入地址为0~515,则输入映像区范围最小设置为516字节,输出地址为0~515,则输出映像区范围最小设置为516字节。

诊断缓冲区内存需求

诊断缓冲区用于存储CPU在线的诊断信息,以便用于诊断维护等。CPU在线信息中的Diagnose buffer即为此处所说的诊断缓冲区。这部分存储空间是在控制器启动初始化时完成预留分配。

Description: Description: C:\Users\PCS7\Desktop\PCS7_TOP1216\H_CPU\S7_400H_General_Info\S7_400H_InnerMemory\image\image010.png

CPU在线诊断信息

通过CPU的属性对话框à Diagnostics/Clock页面进行设置,如下图所示。

Description: Description: C:\Users\PCS7\Desktop\PCS7_TOP1216\H_CPU\S7_400H_General_Info\S7_400H_InnerMemory\image\image011.png

CPU 诊断缓冲区设置

此处为120条,每条消息需要分配32 bytes的空间,总共所需120*32 = 3840 bytes。该消息存储区间为Ring型存储区间,如果消息条数充满,例如,此处120条,则系统将用新的消息覆盖最老的消息。根据实际项目情况进行设置,设置范围:最大3200条,最小100条。越大存储的消息越多、时间越长。