作者 | 主题 |
---|---|
菁 至圣 经验值: 11116 发帖数: 1023 精华帖: 21 |
楼主 2016-06-14 11:34:43
主题:SIMATIC S7-1500与TIA博途软件的使用---连载32 以下内容节选自机械工业出版社出版的西门子自动化技术丛书----《SIMATIC S7- 1500 与 TIA博途软件使用指南》, 作者崔坚。更多更详细的内容请您参考《SIMATIC S7- 1500 与 TIA博途软件使用指南》一书。
S7-1500 PLC的地址区----CPU的地址区的划分及寻址方法
5.2 S7-1500 PLC的地址区
5.2.1 CPU的地址区的划分及寻址方法
S7-1500 CPU的存储器划分为不同的地址区,在程序中通过指令可以直接访问存储于地址区的数据。地址区包括过程映像输入区(I)、过程映像输出区(Q)、标志位存储区(M)、计数器(C)、定时器(T)、数据块(DB)、本地数据区(L)等。 由于TIA博途不允许无符号名称的变量出现,所以即使用户没有为变量定义符号名称,TIA博途也会自动为其分配名称,缺省从“Tag_1”开始分配。S7-1500地址区域内的变量均可以进行符号寻址。 地址区可访问的单位及表示方法参考表5- 8。
过程映像输入区位于CPU的系统存储区。在循环执行用户程序之前,CPU首先扫描输入模块的信息,并将这些信息记录到过程映像输入区中,与输入模块的逻辑地址相匹配。使用过程映像输入区的好处是在一个程序执行周期中保持数据的一致性。使用地址标识符“I”(不分大小写)访问过程映像输入区。如果在程序中访问输入模块中一个输入点,在程序中表示方法如图5- 16所示。
一个字节包含八个位,所以位地址的取值范围为0~7。一个输入点即为一个位信号。如果一个32点的输入模块设定的逻辑地址为8,那么第1个点的表示方法为I8.0;第10个点的表示方法为I9.1;第32个点的表示方法为I11.7。按字节访问地址表示方法为IB8、IB9、IB10、IB11(B为字节BYTE的首字母);按字访问表示方法为IW8、IW10(W为字WORD的首字母);按双字访问表示方法为ID8(D为双字DOUBLE WORD的首字母)。在S7-1500 PLC中所有的输入信号均在输入过程映像区内。
过程映像输出区位于CPU的系统存储区。在循环执行用户程序中,CPU将程序中逻辑运算后输出的值存放在过程映像输出区。在一个程序执行周期结束后更新过程映像输出区,并将所有输出值发送到输出模块,以保证输出模块输出的一致性。在S7-1500 PLC中所有的输出信号均在输出过程映像区内。 使用地址标识符“Q”(不分大小写)访问过程映像输出区,在程序中表示方法与输入信号类似。输入模块与输出模块分别属于两个不同的地址区,所以模块逻辑地址可以相同,如IB100和QB100。
如果将模块插入到站点中,其逻辑地址将位于 S7-1500 CPU 的过程映像区中(默认设置)。 在过程映像区更新期间,CPU 会自动处理模块和过程映像区之间的数据交换。 如果希望程序直接访问模块(而不是使用过程映像区),则在 I/O 地址或符号名称后附加后缀“:P”,这种方式称为直接访问I/O地址的访问方式。 注意:S7-1500 I/O地址的数据也可以使用立即读或立即写的方式直接访问,访问最小单位为位。
标志位存储区位于CPU的系统存储器,地址标识符为“M”。对S7-1500而言,所有型号的CPU标志位存储区都是16384个字节。在程序中访问标志位存储区的表示方法与访问输入输出映像区的表示方法类似。同样,M区的变量也可通过符号名进行访问。M区中掉电保持的数据区大小可以在“PLC变量”—>“保持性存储器”中设置,如图5- 17所示。
定时器存储区位于CPU的系统存储器,地址标识符为“T”。对S7-1500而言,所有型号CPU的S5定时器的数量都是2048个。定时器的表示方法为T X,T表示定时器标识符,X表示定时器编号。存储区中掉电保持的定时器个数可以在CPU中(如通过变量表)设置。S5定时器也可通过符号寻址。 S7-1500既可以使用S5定时器(T),也可以使用IEC定时器。推荐使用IEC定时器,这样程序编写更灵活,且IEC定时器的数量仅受CPU程序资源的限制。一般来说,IEC定时器的数量远大于S5定时器的数量。
计数器存储区位于CPU的系统存储器,地址标识符为“C”。在S7-1500中,所有型号CPU的S5计数器的数量都是2048个。计数器的表示方法为C X,C表示计数器的标识符,X表示计数器编号。存储区中掉电保持的计数器个数可以在CPU中(如通过变量表)设置。S5计数器也可通过符号寻址。 S7-1500既可以使用S5计数器(C),也可以使用IEC计数器。推荐使用IEC计数器,这样程序编写更灵活,且IEC计数器的数量仅受CPU程序资源的限制。一般来说,IEC计数器的数量远大于S5计数器的数量。 注意:如果程序中使用的M区、定时器、计数器地址超出了CPU规定地址区范围,编译项目时将报错。
数据块可以存储于装载存储器、工作存储器以及系统存储器中(块堆栈),共享数据块地址标识符为“DB”,函数块FB的背景数据块地址标识符为“IDB”。 在S7-1500中,DB块分2种,一种为优化的DB,另一种为标准DB。每次添加一个新的全局DB时,其缺省类型为优化的DB。可以在DB块的属性中修改DB的类型。 背景数据块IDB的属性是由其所属的FB(函数块)决定的,如果该FB(函数块)为标准FB(函数块),则其背景DB就是标准DB;如果该FB(函数块)为优化的FB(函数块),则其背景DB就是优化的DB。 优化DB和标准DB在S7-1500 CPU中存储和访问的过程完全不同。标准DB掉电保持属性为整个DB,DB内变量为绝对地址访问,支持指针寻址;而优化 DB内每个变量都可以单独设置掉电保持属性,DB内变量只能使用符号名寻址,不能使用指针寻址。优化的DB块借助预留的存储空间,支持“下载无需重新初始化”功能,而标准DB则无此功能。图5- 18所示为标准DB在S7-1500内的存储及处理方式。 图5- 19所示为优化DB在S7-1500内的存储及处理方式。 从图5- 18和图5- 19可知,S7-1500 CPU处理标准DB块内的数据时,要额外消耗CPU的资源,导致CPU效率下降,所以推荐使用优化的DB。在优化的DB中,所有的变量以符号形式存储,没有绝对地址,不易出错,且数据存储的编码方式与S7-1500 CPU编码方式相同,效率更高。 优化的DB支持以下访问方式: L "Data".Setpoint //直接装载变量"Data".Setpoint A "Data".Status.x0 //以片段访问的方式访问变量"Data".Status的第0位 L "Data".my_array[#index] //以索引的方式对数组变量"Data".my_array实现变址访问。 注意:无论使用优化DB还是标准DB,在S7-1500中,都应尽量避免使用“OPN DB[#DBNumber])”这样的指令来对DB块进行操作,因为S7-1500的CPU中没有真实的DB寄存器(其DB寄存器是虚拟的),所以执行该指令需要消耗S7-1500 CPU额外的性能。
ARRAY DB是一种特殊类型的全局DB,仅包含一个ARRAY数组类型。ARRAY的元素可以是PLC数据类型或其它任何数据类型。这种DB不能包含除ARRAY 之外的其它元素。可以使用“ReadFromArrayDB”指令从ARRAY DB中读取数据并写入目标区域中。 由于ARRAY DB类型为“优化块访问”属性,且不能更改,所以 ARRAY DB不支持标准访问。
本地数据区位于CPU的系统数据区,地址标识符为“L”。本地数据区用于存储FC(函数)、FB(函数块)的临时变量、以及OB(“标准”访问的组织块)中的开始信息、参数传送信息及梯形图编程的内部逻辑结果(仅限标准程序块)等。在程序中访问本地数据区的表示方法与访问输入输出映像区的表示方法类似。
Slice访问可以方便快捷地访问数据类型为Byte、Word、Dword和Lword变量中的Bit、Byte、Word以及DWord, Slice访问的优势是访问简单灵活,直观高效,无需对访问的目标地址单独定义。 Slice访问支持I/Q/DB/M等数据区,尤其适用于优化的DB。由于优化的DB内变量没有偏移地址,所以无法通过绝对地址直接访问一个变量内部的数据,例如变量中的一个位信号或字节等信号。这时就可以通过Slice访问方式来实现。例如,DB内变量“My_DW_Variable”是一个DWord类型的变量,如需访问该变量的第2个字,则访问格式为My_DW_Variable.W1;“My_W_Variable”是一个Word数据类型的变量,访问该变量的第1个bit的访问格式为My_W_Variable.X0 。如图5- 22所示。
AT访问也称之为AT变量覆盖,是指通过在程序块的接口数据区附加声明来覆盖所声明的变量。其优势在于无需指令即可根据需要,实现变量的自由拆分,拆分后的变量可在程序中使用。可以选择对不同数据类型的已声明变量进行AT访问。具体使用方法可以参考图5- 23中的示例。 首先将程序块“AT_Demo” FC 5的访问属性修改为标准的块访问,之后在该块内定义一个类型为字符串(String)的输入变量 “Message”。在变量“Message”下新建一行,在该行数据类型中输入“AT”,然后定义一个名为“AT_Message”的结构体。根据字符串“String”的数据结构,创建一个结构体变量对变量“Message”进行拆分。该结构体首个变量为“Max_Length”,类型为SINT,对应“Message”字符串中可存储的最大字符长度;第二个变量为“Act_Length”, 类型也为SINT,对应“Message”字符串中的实际字符数量;第三个变量“Letter”为字符数组。 这样,在该程序块内部,可直接访问结构体变量“AT_Message”内的各个变量,而无需再次编程对输入变量“Message”的内容进行提取。 注意 以下变量支持AT访问:
|