在文章ControlLogix系统组态编程工具介绍(一)中对Studio5000组态编程软件、RSLinx连接软件和RSNetWorx 网络组态软件进行介绍,本文继续分享ControlLogix系统控制器文件结构相关内容。
4、控制器文件结构
控制器的文件结构是指控制器的程序文件结构和数据文件结构。在使用控制器前,应该学习和了解控制器的文件结构,这对于合理设计程序文件,规划程序、设备阶段和数据及数据库结构,优化控制器内存和逻辑执行等都是十分有帮助的。
1)程序文件
程序文件是用户编写的针对控制应用的执行文件,一个ControlLogix项目的程序文件结构包括3层,即任务(Task)层、程序(Program) 层和例程(Routine)层,结构层次架构如图所示。其中,一个项目最多可以定义32个任务,每个任务最多可以定义100个程序、设备阶段或它们的组合。每个程序或设备阶段拥有自己独立的数据库和例程,例程的个数由控制器的内存决定,只要内存足够大,例程的数量没有具体限制。
①任务
任务是一个项目所有与控制有关的数据和逻辑的总和,有连续型、周期型和事件触发型3种执行类型。连续型任务是指周而复始执行的任务,周期型任务是指定时(中断)执行的逻辑程序,事件触发型任务是指事件触发引起的调用任务。
一个项目只能定义一个连续型任务。连续型任务执行期间,可以被周期性任务和事件触发型任务中断(周期型任务和事件触发型任务因此也称为中断型任务)。中断型任务的中断级别有15个,序号为1~15,序号越小,中断级别就越高,任务的优先权也越高。高优先权任务可以中断所有低优先权的任务,一个中断任务完成后返回到断点继续执行。
②程序和设备阶段
◆程序是任务的下一层结构,由独立的数据库和例程组成。在数据库中建立的标签只能被程序内的例程引用,属于内部数据。每个程序中必须指定一个例程为主例程,作为程序运行的启动程序,其余的例程由主例程中调用。程序中还可以指定一个故障处理例程,以解决程序中的例程在运行时引起的故障。
程序是一个完整的结构,可以理解为就是一个传统的处理器。当把传统的处理器移植到ContolLogix控制器时,它的结构就对应一个连续任务下的一个程序。当一个任务下有多个程序时,控制器将按程序的组态顺序执行。这个顺序可以根据需要在任务组态中进行调整。
◆设备阶段是专门针对基于状态转换模型的控制场合而开发的程序设计方法,也称为设备相位。Stuio5000(或RSLogix5000 V15版及以后的版本)支持设备阶段的编程和管理功能。它把设备运行划分为各个操作状态循环操作,任何时候只有一个模块处于激活处理中,每个状态按照设定的时间或给定的条件,决定完成并进入下一个状态。设备阶段采用标准化的状态编程模型,把编制的程序代码写入规定的状态模块,模块之间只需通过转换和命令调用来实现控制。
设备阶段有自己独立的数据库和例程,要建立各种阶段状态例程,包括类似于主控例程的预设状态例程或初始化状态例程等。设备阶段与程序处于同等位置,只是针对的应用对象不同而已。
③例程
例程是控制器执行的所有控制代码的集合,也称为子程序,是一个项目实现各种控制策略的执行逻辑代码。例程可以用任一种编程语言进行编写,每个例程只能引用控制器数据库和所在程序的数据库。
2)数据文件
ControlLogix系统的数据文件与传统的PLC处理器不同,它采用数据标签来表示程序处理的数据或对象。数据文件是用户程序中使用的数据标签的集合,也称为数据库。一个好的ControlLogix项目,不仅要建立数据文件,还要对数据进行合理的规划,包括数据范围、数据类型和结构等。
①数据标签
数据标签由字母开头,包括大小写字母、数字0~9和下划线组成,如witch_1,Pump_5和Start等。在同一个数据范围内,数据标签不分大小写,大小写主要用于辅助记忆。由于数据标签在数据库中是按字母顺序排列的,所以可用前缀、补齐标签字符长度的方法进行命名。如A1_TK001,A2_TK151等,简洁的数据标签可以节省内存。
②数据范围
ControlLogix系统建立的数据文件可分为全局数据范围和程序数据范围。全局数据范围又称为控制器数据范围,对外数据和内部数据全部都可以被控制器中的所有程序或例程引用。程序数据范围属于各程序的内部数据,只能被所在程序中的例程引用。各程序数据范围是相互隔离的,不同程序范围中的标签可以重名。
③数据类型
ControlLogix系统的数据类型有基本数据类型和结构数据类型2种。基本数据类型构成结构数据类型,结构数据类型和关系数据库的记录结构方式一致,有利于数据采集和管理系统的数据交换。
◆基本数据类型
基本数据类型包括布尔型(BOOL)、 短整数型(SINT)、 整数型(INT)、 双整数型(DINT)和实数型(REAL),是程序或人机界面引用地址的最小单位,通常称为操作数。基本数据类型的名称、符号、格式和数值范围见表,实数型数据可以表示小数。
Controllogix系统数据处理的基本单位是32位共4字节(B),数据标签的类型为BOOL、SINT或INT时,数据位分别只有1位、8位和16位,控制器仍按一个完整的32位分配内存空间,空余的位被闲置。ControlLogix系统基本数据类型的内存空间占用如图阴影部分所示。很显然,这样的内存分配其优点是简单,缺点是占用内存较多。
CPU处理不同的数据类型时运算速度是不同的,如采用 SINT或INT类型运算时,CPU需要把SINT或INT转换成DINT后进行运算,运算完成后还要将结果分别转换为 SINT或INT型数据。这都需要占用CPU处理时间。混合运算时的转换略有不同,如SINT与DINT运算,结果为DINT等。数据类型都是DINT时,数据处理时不需要转换,运算速度较快。
这在具体应用编程时要注意,如果运算量不大,CPU运行速度足够快,这点时间是可以忽略的。但如果程序较大,就需要做进一步优化。
◆结构数据类型
结构数据类型包括系统预定义结构数据类型、用户自定义结构数据类型和数组等3种,每一种类型又包含几种形式,见表。
◆系统预定义结构数据类型
指系统预先定义的结构数据,具有固定的形式,在组态编程定义时自动产生,它包括以下几种形式:
◆I/O组态时产生的数据
ContolLogix系统在创建I/O模块时,数据库中自动生成相应的I/O结构数据。设在本地框架1号和2号槽位分别添加DI和DO模块时,就有:
Local:1:C—本地框架1号槽位DI模块组态数据
Local:1:I—本地框架1号槽位DI模块输入数据
Local:2:C—本地框架2号槽位DO模块组态数据
Local:2:I—本地框架2号槽位DO模块状态数据
Local:2:0—本地框架2号槽位DO模块输出数据
每一种I/O模块其结构数据是不一样的,编程时可以直接采用相应的数据,或通过别名的方式读写I/O通道。I/O模块的这种结构数据,大大简化了 ControlLogix系统的I/O寻址方式。如 Local:1:I.Data.1表示1号槽位DI模块的输入通道1,Local:2:0.Data.7表示2号槽位的DO模块的输出通道7等。AI和AO模块的定义和别名调用方法类似。
◆多字元素文件数据
ControlLogix 系统扩展了PLC-5增强型指令集,并继续引用传统PLC指令集中的多字元素文件,同时把指令中的16位整型数转换为32位双整型数。如定时器(Timer)指令、计数器(Counter)指令、比例积分微分(PID)指令、信息(MSG)指令和顺序功能图(SFC)操作指令等。
运动控制、功能块图、设备阶段以及系统组态信息和状态信息对应的数据结构,分别在运动控制编程、功能块(过程控制)编程、设备阶段编程以及使用设置控制器状态值指令(SSV)和读取控制器状态值指令(GSV)时引用。
◆自定义结构数据类型,指用户根据应用需要自行定义的结构数据。它包括以下几种形式:
字符串自定义数据结构。用户可以自行定义长度为1KB~64KB的字符串数据结构,用于ASCⅡI码的数据(英 文字符和数字符号等)表述。数据结构中默认一个长度为82B的字符串,与传统PLC-5/SLC-500系统中定义的字符串长度一致以保证能相互兼容。
用户自定义数据结构。用户自定义数据结构(UDF)是在编程时为了某一控制任务组织相关数据而建立的数据结构,以便于数据的查找、监视和传输等。在建立数据结构的过程中,数据元素的定义顺序与存储器空间的占用有关。BOOL类型占1位,每建立一个BOOL元素,都会存放在剩余的空间上。如果空间不够,再划出新的32位字的空间。同理,SINT类型占8位,每建立一个SINT元素,都会存放在剩余的空间上。如果空间不够,再划出新的32位字的空间。其他类型以此类推。一个完整的用户自定义数据结构UDF的大小一定是32位的整数倍。
为电机控制而建立的UDF存储空间如图所示,各种数据类型占用的存储空间与定义的顺序(而不是按字母顺序)和它们的类型有关,把相同类型的数据整理到一起,数据所占用的空间只需40B(10*4=40B),比原来基本数据类型所占空间(14*4=56B )要小得多。
AOI自定义指令结构。 AOI自定义指令数据结构是建立AOI时需要分配的输入/输出参数和指令内部使用的参数构成的数据库,类似于指令的数据结构。AOI建立后,就会在项目目录的【用户自定义】(Add-On-Defined) 文件夹中自动产生与AOI指令同名的自定义数据结构。AOI指令调用时,都要分配一个相应结构的数据标签,作为指令执行时的输入和输出参数。
◆数组
数组是同一数据类型连续分布的集合,可由基本数据类型和结构数据类型构成。数组有一维、2维和3维等3种结构。数组中元素的个数没有限制,大小取决于控制器内存。
一个数组元素具有相同的数据形式,而且可以用算术表达式来运算。
数组数据Array_1[2]表示一个一维数据,数组名为Array_1, [2]表示数组的第3个元素(0、1和2)。 Pump_2[1,3]表示一个2维数组中的第2行、第3列交叉的元素,同理,Motor_A[2,3,0]表 示一个3维数组,数组名为Motor_A, [2,3,0]表示其中3维中第3、 第4和第0行交叉点的因素,数组数据元素如图所示,图中阴影的位置就表示数组元素的位置。
共有访客发表了评论
网友评论