4 ControlLogix 控制器指令介绍和编程应用

更新时间:2024-04-15 09:26:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第四章 ControlLogix 控制器指令介绍和编程应用

本章内容: ControlLogix 控制器指令分类介绍。

本章目的: 掌握编写程序的基本要求,通过指令的分类学习了解各类指令的特

点,正确理解指令参数的输入,尤其是数据类型的运用,着重于通讯指令的学习。

应该说,ControlLogix 控制器与传统的可编程序控制器PLC-5/SLC500最大的区别是硬件结构的变化、数据结构的变化和通讯系统的变化,但它仍然保留或沿用了传统的可编程序控制器的指令系统,指令功能的差异不大,所以,关于编程,还有许多经验可以借鉴。 一. 控制器编程基础

要得到一个简洁、精确、严密的逻辑控制程序,除了对生产过程工艺的了解和分析,对整个控制系统正确的规划和设计,还要对程序的逻辑结构(即指令执行顺序)、数据的刷新过程、指令的详尽功能有着深刻的了解,才能正确地去编写或修改程序。关于编程的基础知识有如下三个方面需要了解。 1.梯形图程序的逻辑结构

ControlLogix 控制器的控制程序编写方式有梯形图程序、顺序功能流程图程序和语句程序。语句编程的程序可编译成梯形图程序相似的执行顺序,是适合计算机程序开发人员使用的方式;顺序功能流程图程序实质上是一个结构程序,它的结构元素还是梯形图程序或语句程序。所以,控制器的编程,通常是基于梯形图程序的编程。

梯形图程序由指令构成的逻辑梯级集合而成,逻辑梯级的结构则由输入指令和输出指令两部分组成:

输入指令 决定梯级条件的指令,通常是以下三类指令:

? 位指令的逻辑运算结果 在梯形图中用得最多的形式,根据生产过程的与或非逻辑关系编制出来的结构,其结果必为逻辑结果。 ? 比较指令的比较结果 用大小相等关系进行比较和数值范围进行判定而产生的逻辑结果。

? 检测或诊断的结果 两条特殊的指令SQI和DTR可对操作对象进行检测和诊断,得出逻辑结果。

输入指令的运行,并不产生执行某种操作的动作,但都会得到逻辑结果,这就是梯级条件,它将决定要不要做,梯级条件的存在有两种情形: 持续一段时间 ,逻辑上表现为宽脉冲 出现瞬间时间,逻辑上表现为窄脉冲 输出指令配合使用的关系。

输出指令 按梯级条件执行,引起操作的指令,通常有以下三类指令:

? 非保持型指令 在梯级条件持续期间执行,在梯级条件消失后便停止执行。具有代表性的指令是计时器指令,一般地,位指令、传送指令、转换指令、算逻运算指令等都属于非保持型指令。这类指令也可以是无条件的,即没有输入指令,指令总是在执行。

? 保持型指令 在梯级条件跳变时执行,靠梯级条件前沿触发引起执行动作。具有代表性的指令是计数器指令,一般地,位锁存指令、移位指令、堆栈操作指令、顺序器操作指令等都属于保持型指令。在编写程序时要注意给予有跳变的梯级条件。

? 可选型指令 可选择不连续方式或连续方式,一般是对外操作的通讯指令,例如MSG指令。选择不连续方式时,梯级条件跳变一次,指令执行一次;选择连续方式时,指令被触发后,即使梯级条件消失或不跳变,仍可以连续执行。

输出指令的执行是具体操作的动作,但这种执行动作与输入指令的存续有很大的关系,也即级条件将决定输出指令的执行。

值得指出的是,在PLC-5/SLC500的梯形图编程中,这种梯级的输入指令和输出指令的关系是十分严格的,一个梯级只有一对输入指令和输出指令的关系。但是在ControlLogix 控制器的梯形图编程中,已经变得非常灵活,可以在同一个梯级中编写含有好几个梯级条件的指令集合。尽管如此,输入指令和输出指令之间的对应关系仍然是非常明确的,在逻辑因果关系较为复杂的情况下,建议采用传统的方式去编写。

2.数据的刷新时间与程序执行的关系

ControlLogix 控制系统编写程序时,往往按照工艺流程的逻辑关系编写的梯形图程序,运行下来,却有不可思议的逻辑问题,反复检查,都不是梯级或指令的逻辑错误,这是为什么呢?这跟运行时的数据状况有关。

传统的可编程序控制器的工作周期由输入扫描、程序扫描和输出扫描三个阶段组成,输入扫描刷新了所有的输入映象表;程序扫描则根据最新输入数据按编制好的梯形图逻辑执行,产生最新控制结果,即刷新输出映象表;输出扫

梯级条件的存续时间,是编写输出指令的重要依据,它将确定输入指令和

描刷新所有的输出模块。这个过程是非常清晰和明确的,开发者很容易按工艺过程编写逻辑关系而不至于产生混乱,因为在整个程序扫描过程中,输入数据是不发生改变的。

ControlLogix 控制系统的I/O数据交换是生产者/用户方式,I/O模块不再是被动的数据承受者,而是主动的数据产生者,它们按照定义的中断时间发送或接受数据,I/O数据的刷新时间完全地独立于程序扫描。在控制器中,有两个CPU同时工作,一个分管逻辑程序的扫描,一个分管对外的数据交换,程序扫描和I/O交换是分别进行的,是相互独立的,完全有可能在程序扫描的过程中,输入数据发生了变化,而在梯形图程序中多次引用了同一输入数据。解决这个问题的办法是,在程序的起始梯级拷贝输入数据到一个数据缓冲区,整个程序扫描过程只引用缓冲区的数据;所有的控制结果是在每个任务完成后系统管理操作一次送到输出模块,不必编程拷贝。

3.指令执行与数据

传统的可编程序控制器PLC-5/SLC500地址数据的基本单位是16位的字,如N7:0;可以细化到位,如N7:0/0;也可以扩展成文件,如# N7:0。相应的操作指令是字(或子元素)操作指令、位操作指令、文件操作指令。

ControlLogix 控制系统的地址数据是基本数据,如BOOL、SINT、INT、DINT和REAL;或是系统定义的结构数据,如TIMER、PID;还有用户自定义结构数据。在编写指令地址数据时,往往有多种选择,要根据指令的性质来确定使用哪一种类型的数据,或者根据被操作的数据的类型来选择使用哪一种指令,比如COP指令和FAL指令处理数据的能力就很不一样。所以,使用每一条指令时,都要仔细地研究它的参数可以使用哪几种类型的数据,当源数据目标数据类型不一致时,指令执行将产生什么样的结果。在参考ControlLogix 控制系统的指令集时,请特别留意每条指令使用的数据类型,这项内容通常列表以方便查找。

二. 控制器指令的应用

ControlLogix 控制系统的指令介绍,此处着重于指令的应用,而不是解释指令,请结合《Logix5550控制器指令集参考手册》一书学习。 1、位操作指令

又称为继电器指令,专门用来处理离散量信息,用它来编制开关量信号的逻辑关系,梯形图程序的大部分都是这些指令构成的。 1-1 位输入指令XIC、XIO

? XIC 常闭输入指令 构成梯级条件的逻辑元素,为1时通。

? XIO 常开输入指令 构成梯级条件的逻辑元素,为0时通。 1-2 位输出指令OTE、OTL、OTU

? OTE 非保持型输出指令 梯级条件存在为1,梯级条件不存在为0。

? OTL 保持型锁存输出指令 必须与OUT指令配对使用,通常与ONS配

合运用。

? OUT保持型解锁输出指令 一般与OTL指令配对使用,单独使用时,用

来复位状态锁存位,通常与ONS配合运用。

注意,位操作指令的操作地址必须是位地址,即BOOL量或SINT、INT、DINT中的某一位,亦可为I/O模块的一个点。 1-3 一次启动指令ONS、OSR、OSF

? ONS 一次扫描有效存储指令 不能单独使用,必须跟随在某个级条件之后,级条件前沿触发后令级条件保持一个扫描周期,并储存状态,直到级条件后沿复位,存储位随即复位。分配给这条指令的地址即用于存储位,应该使用内部地址。这条指令非常有用,特别是配合锁存解锁指令的运用。比较下面两对梯级:

这一对梯级,没有ONS指令,当解锁的级条件没有消除时,无法进行锁存操作,总是以后一级的状态为准。

这一对梯级,因为ONS指令控制,两个梯级相互是独立的,锁存和解锁的操作可以随意地进行。

ONS指令的运用,可以使控制逻辑编得很精确,也可以对外部开关或外部操作不作特殊要求,而用编程来解决。传统的自锁梯级编程,可用锁存解锁指令与ONS指令配合使用来代替,对于搜索锁存信息更为方便。

? 上升沿一次启动OSR

严格的说,这条指令不是对位操作的指令,但它产生的结果是对位操作。这是一条输出指令,当级条件成立时触发,即前沿触发,设置输出位,这个输出位,可作为某个梯级的存在一个扫描周期的级条件。

? 下降沿一次启动OSR

与上条指令对应的一条指令,它也这是一条输出指令,当级条件消失时触发,即后沿触发,设置输出位,这个输出位,可作为某个梯级的存在一个扫描周期的级条件。

2、计时器和计数器指令 2-1 计时器指令

计时器指令是输出指令,位于梯级的右边,当级条件成立时,指令被使能,指令开始计时工作。通常计时器指令是用于完成延时、定时和计时的功能 。

计时基值: 1ms

计时范围: 1 --- 2,147,483,647 ms

计时器的精度与其指令所在程序的扫描周期有关,当某个执行动作周期时间小于100ms时,建议采用定时中断执行子程序,而不要用计时器控制动作。

有三种计时器:

? 非保持型通延时计时器 TON 级条件成立(通),指令使能,计时;级条件消失(断),指令未使能,累加值(ACC)复位,所有状态位复位。

? 非保持型断延时计时器 TOF 级条件成立(断),指令使能,计时;级条件

消失(通),指令未使能,累加值(ACC)复位,所有状态位复位。

? 保持型通延时计时器 RTO 级条件成立(通),指令使能,计时;级条件消失(断),指令未使能,累加值(ACC)不复位,所有状态位复位。

非保持型的计时器常常用作于定时,利用自身状态位DN做级条件,可令其自复位,从而产生定时工作脉冲。

2-2 计数器指令

计数器指令是输出指令,位于梯级的右边,当级条件发生跳变时,指令使能,并产生加1或减1的操作,计数器指令通常用来计数。 计数范围:-2,147,483,648 --- 2,147,483,647 有两种计数器:

? 增计数器 CTU 级条件跳变一次,累加值增加1,不管状态位(完成位DN或上溢出位OV)是什么状态,都不会停止增计数。

? 减计数器 CTD 级条件跳变一次,累加值减去1,不管状态位(完成位

DN或下溢出位UN)是什么状态,都不会停止减计数。

如果要实现双向计数,不妨编制两条计数器指令,它们修改共同的数据元素ACC。

注意,与计时器不同,计数器指令的状态位DN、OV、UN,不管它们是什么状态,都不影响计数的进行,计数器的计数只取决于级条件的跳变。 2-3 复位指令

复位指令RES可给保持型的指令RTO、CTU、CTD复位,复位操作将累加值和状态位统统复零。好的编程习惯是:将所有的复位操作统统放在程序的最后几级。

3、比较指令

比较指令都是输入指令,用以决定梯级的条件,在编写梯形图程序时,往往都是面对工艺过程的逻辑关系,有以下几种比较类型:

1> 单一比较指令

EQU、NEQ 、GEQ、GRT、LEQ、LES都是完成单一比较的指令,每条指令只对两个比较对象进行比较。

2> 表达式比较指令

表达式比较指令CMP,比较对象可以是算逻运算表达式,用比较连接符进行比较。 3> 屏蔽比较指令

屏蔽比较指令MEQ,两个比较对象通过屏蔽代码位对位地进行比较。

? 完成范围比较的指令LIM,测试数值落在范围内或落在范围外。操作对象的数据类型限于SINT、INT、DINT和DEAL,最优化的比较值是32位的数据DINT或REAL。

4、算术/逻辑运算指令

算术/逻辑运算指令都是输出指令,属于非保持型指令,当级条件成立的时候执行,也可以无条件执行,有以下两种类型的运算方式:

? 完成单一运算的指令,如ADD、SUB、MUL、DIV、SQR、NEG、AND、OR、XOR、NOT、SIN、COS、TAN、ASN、ACS、ATN、LN、LOG、XPY。

? 完成表达式运算的指令,CPM,可用算逻运算符连接的表达式进行运算。

每次运算结束,都会影响算逻运算标志位,其关键字为:

S:V 溢出标志位,目标地址发生溢出,置位,且次要故障置位。

S:Z 为零标志位,目标地址为零,置位。 S:N 符号标志位 目标地址为负,置位。 S:C 进位标志位 目标地址发生进位,置位。

这四个关键字是为数不多的几个直接寻址,不用建立标签旧可直接引用。 操作对象的数据类型限于SINT、INT、DINT或DEAL,最优化的运算值是32位的数据DINT或REAL。

当级条件存在时,每次程序扫描都会执行算术/逻辑运算指令,如只需要在满足条件时计算一次,最好采用ONS指令,从而节省程序执行时间。

算术/逻辑运算指令的运用,一般地说,符合运算的常规,但在ADD指令作累加器使用时,要特别注意它的执行条件。

5、传送/转换指令

传送/转换指令都是输出指令,在级条件成立的时候执行。

? 传送和带屏蔽传送指令,MOV、MVM,

? 位域分配指令,BTD,可完成数据单元内传送和数据单元间传送,该指令的操作,可改变一段位域的位置。

? 码/数转换指令,TOD、FRD,码制(BCD码)和数制(十进制)之间的转换,使用时请注意,码制是不可运算的,所以常常需要进行转换。 ? 角度/弧度的转换指令,DEG、RAD,角度和弧度之间的相互转换。 ? 清除指令,CLR,清除目标单元数据,令其为零。

6、数组(文件)操作指令

以上讨论的指令都是对元素的操作,相似于PLC-5/SLC指令系统的文件操作指令,ControlLogix 指令系统中有一些指令是对数据连续存储的数组进行操作。下面要学习的指令是数组(文件)操作指令,它们的操作对象是数据连续存储的数组,一般地,操作方式有以下三种:

数组操作指令FAL、COP、FLL、FSC、AVE、SRT、STD。 6-1 数组(文件)算逻运算指令 FAL

这条指令是一条处理功能很强的指令,它既可以运算,也可以传送和转换。不同于COP指令的是,它可以对结构型数据的单个元素完成数据连续存储的数组的操作,处理方式非常灵活,它的执行过程有三种操作模式可选择:

--- 整体模式 级条件跳变激活指令后,指令一次完成所有的操作,一般 用于数组对数组的操作。Mode项输入ALL。

--- 数值模式 级条件跳变激活指令后,每次扫描完成指定的操作个数, 多次扫描指令才执行完毕,即使在执行过程中,级条件消失,仍然要 完成全部的操作,一般用于数组对数组的操作,其操作结果相似于整 体模式,不同的是,将一条指令的操作分担给几个扫描周期,此方式 适合该条指令执行工作量很大的情况。Mode项输入正整数。

--- 增量模式 级条件跳变一次执行一次,跟SQO指令相似,一般用于数 组对元素的操作。Mode项输入INC。

编写FAL指令有以下几点要注意:

? FAL指令的执行必须有级条件的跳变,受COP指令的影响,常常被人忽视这一点,以至于出现指令不执行的错误。

? 对基本类型数据的数组操作时,数据地址使用被操作范围的第一个元素(和其他数组操作指令一样);对结构型数组的单个元素操作时,必须采用变址的方式寻找单个元素的地址。常用的方法是用控制结构体的POS来进行修改(ALL方式必须如此,其他方式则可以用指令在外部修改),因为POS

是从0开始计数的,所以当第一个被操作元素不是数组的0地址时,必须加上偏移量,如:Array_Timer[Control_FAL.POS+2].ACC。

6-2 数组(文件)复制指令COP 、CPS

COP指令的执行是存储器从字节到字节的直接复制,即存储空间的对应搬运,通常是数组对数组的操作,源操作数和目标操作数如果不是相同类型的数据,要特别注意指令参数中的长度即指目标地址的元素个数,如下面这条指令:

Driver_1 是一个占用40个字节的用户自定义的结构体,如果要COP到双整数数组,必须用10个元素(40个字节)来接受;源操作数和目标操作数反过来,则长度应为1。

正因为COP只是存储空间之间的直接搬运,所以,不可以对结构体数组中结构体元素中的单个元素进行操作,要完成这种操作,只能用FAL指令。 CPS指令是同步拷贝指令,特别用于从基本内存的数据缓存区拷贝到内部数据区,这条指令具有屏蔽中断的功能,在拷贝过程中,背板CPU不能中止它的执行过程,因而能获得完整的数据,在不允许一个数据块新旧数据混杂时,采用这条指令。

此例是对一个10个双整字的数组Consumed标签进行同步拷贝。

6-3 数组(文件)充填指令 FLL

这条指令是用源地址的元素充填目标地址的数组,指令参数中的长度是目标地址的字节数,指令的的执行通常用作于数组的初始化。

6-4 数组(文件)搜索比较指令FSC

对表达式中建立的比较关系和比较对象进行比较,找到满足比较关系的元素时,找到位FD置位,POS则指出找到的元素所在位置,同时禁止位IN也置位,以防止往下搜索,当IN复位后,搜索继续。 6-5 数组(文件)平均值计算指令 AVE

计算指定数组内的元素组的平均值。数组的参数应填写被计算元素组的第一个元素,长度的参数应填写参加计算的元素的个数,计算结果必为双整数或实数。

6-6 数组(文件)排序 SRT

对指定数组内的一维数组的元素的数值进行递增的排序,数组的参数应填写被排序元素组的第一个元素,长度的参数应填写参加排序的元素的个数。 6-7 数组(文件)标准偏差指令 SDT

对指定数组内的一维数组的元素进行标准偏差的计算,数组的参数应填写被计算元素组的第一个元素,长度的参数应填写参加计算的元素的个数,计算结果必为实数。

7. 寄存器移动指令

这一组指令是在存储器单元进行移动操作的,且必须是级条件跳变才执行。7-1 位移指令 BSL、BSR

位左移和位右移指令,其操作对象必须是双整数而不是BOOL数组,参加移动的第一个位必须是元素的0位; 参加移动的最后一位的元素的剩余的高位均为无效地址,不能用作其他。 7-2 先入先出指令 FFL、FFU,

队列操作,必须成对使用,因操作关连,共用同一个控制文件。FFL在级条件跳变时,POS加1,装载数据到POS所指元素;FFU在级条件跳变时,卸载最前面的数据,同时全体数据前移,POS减1。完成位置位,不能继续装载;栈空位置位,不能继续卸载。 7-3 先入后出 LFL、LFU,

堆栈操作,必须成对使用,因操作关连,共用同一个控制文件。LFL在级条件跳变时,POS加1,装载数据到POS所指元素;LFU在级条件跳变时,卸载最后面的数据,POS减1。完成位置位,不能继续装载;栈空位置位,不能继续卸载。

8. 顺序器指令

8-1 顺序器输出指令SQO

将预先设置好的输出状态存放在顺序器数组中,按级条件跳变顺序地输出,与FAL指令递增方式的操作相似,但可利用0步来解决初始化问题。 8-2 顺序器装载指令SQL

通过该指令,可让操作员修改顺序器数组,尽管SQL与SQO有共同的操作对象---顺序器数组,但因为操作不关连,不可以用相同的控制器文件。 8-3 顺序器输入指令SQI

这是一条特殊的指令,它完成某输入量对参考数组的比较,是一条输入指令,比较结果将产生级条件。因为是输入指令,没有级条件触发来修改位置参数,所以,有时跟SQO指令配合使用,用同一个控制器文件,此时,往往用于校验SQO的输出;也可以编程在外部修改

9. 程序控制指令

程序控制指令的执行将使得程序的执行顺序或执行状况发生改变,可用来编排按满足条件执行程序;有些指令在调试程序时非常有用。 9-1 跳转指令 JMP和标号指令LBL

成对使用,每对用同一名称,书写方式同标签。跳转的执行将改变程序内梯级的执行顺序,可以向前跳转,也可以向后跳转,发生向后跳转时,要防止程序死循环,当程序死循环发生时,程序的看门狗超时引起故障。 9-2 跳转子程序指令JSR、子程序指令SBR和返回指令RET

跳转子程序指令的执行将调用除主控的子程序和故障处理子程序以外的子程序(嵌套层数不受限制),执行完后仍回原处。只有在要带入和带出参数(不受限制)时,SBR和RET(可多条)指令才会需要使用;当不需要带入参数时,用ENTER键来结束,以跳过带入带出参数选项。 9-3 暂停指令 TND

每个梯形图的最后一级都是END,即结束级,检测到END便停止程序扫描,如果在程序中间的某一个梯级写下这条指令,则程序扫描将暂时结束在这一梯级,通常在调试程序时使用。 9-4 主控复位指令 MCR

用MCR的成对使用来创建一个区域,在满足条件时令该区域的梯级无效,且非保持型指令复位。

--- MCR成对使用,有条件开始,无条件结束。 --- MCR构成的区域不能嵌套。 --- 不能跳转到MCR区域中。

注意:MCR区域的控制和子程序的调用是不一样的,主要表现在MCR的后扫描将复位所有的非保持型指令的数据,而JSR执行完毕后,数据是保持不变的。

9-5 中断禁止指令UID和中断使能指令UIE

这两条指令要成对使用,当某一个梯级编写了UID指令,在这之后的梯级执行都不能被定时中断或事件中断调用,直到出现了UIE指令,禁止中断才被解除,通常被用于半途的执行结果不便在调用任务后输出,限定一个完整的执行过程。

9-6 恒假指令AIF

设置在梯级的最前面,该梯级即被禁止,调试程序时用。

9-7 空操作指令 NOP,

可放置在梯级任何地方,执行空操作,如与输入指令分支并接,即旁路输入指令为无条件。

9-8 循环/终止循环指令 FOR、BRK、RET,

FOR指令的执行将调用一个重复执行的子程序,直到按步长执行到终止值,才返回到中断点;含在子程序中的BRK可在满足某个条件时,中断正在重复执行的子程序,返回到中断点。这种循环方式的子程序调用是不能带入参数和用RET返回参数的。

10.特殊指令 FBC、DDT、DTR、PID。 10-1数组(文件)位比较指令 FBC

本条指令的执行是将源数组和参考数组位对位(存储器的操作)地进行比较,发现不同时,将结果记录在结果文件中。这条指令有两个控制结构体: ? 比较数组的控制结构体 记录比较的状态,每当找到一个不匹配的位,找到位FD置位(每次记录一个不匹配模式);所有的位比较完毕,存在有不匹配位,找到位FD置位(整体模式)。该长度设置指的是参加比较位的数量。

? 结果数组的控制结构体 记录不匹配的比较结果,每当找到一个不匹配的位,便将该位(POS所指)依此记录下来。该长度一般等于比较数组的控制结构体的长度,以保证所有的位的不匹配结果都能记录下来。

源数组Array_Dint1[0]00000000000000000010010011110001参考数组Array_Dint2[0]00000000000000000100110011010010结果数组Array_Dint3[0]Array_Dint3[1]Array_Dint3[2]Array_Dint3[3]Array_Dint3[4]Array_Dint3[5]Array_Dint3[6]Array_Dint3[7]Array_Dint3[8]Array_Dint3[9]Array_Dint3[10]Array_Dint3[11]Array_Dint3[12]Array_Dint3[13]Array_Dint3[14]Array_Dint3[15]016121415

FBC指令不同于DDT指令的是,它不修改参考文件。

10-2 诊断检测指令 DDT

本条指令的执行是将源数组和参考数组位对位(存储器的操作)地进行比较,发现不同时,将结果记录在结果文件中,并修改此位,使之与源位一致。这条指令有两个控制结构体:

? 比较数组的控制结构体 记录比较的状态,每当找到一个不匹配的位,找到位FD置位(每次记录一个不匹配模式);所有的位比较完毕,存在有不匹配位,找到位FD置位(整体模式)。该长度设置指的是参加比较位的数量。

? 结果数组的控制结构体 记录不匹配的比较结果,每当找到一个不匹配的位,便将该位(POS所指)依此记录下来。该长度一般等于比较数组的控制结构体的长度,以保证所有的位的不匹配结果都能记录下来。

源数组

Array_Dint1[0]00000000000000000010010011110001参考数组Array_Dint2[0]00000000000000000100110011010010修改后参考数组Array_Dint2[0]00000000000000000010010011110001结果数组Array_Dint3[0]Array_Dint3[1]Array_Dint3[2]Array_Dint3[3]Array_Dint3[4]Array_Dint3[5]Array_Dint3[6]Array_Dint3[7]Array_Dint3[8]Array_Dint3[9]Array_Dint3[10]Array_Dint3[11]Array_Dint3[12]Array_Dint3[13]Array_Dint3[14]Array_Dint3[15]016121415

DDT指令不同于FBC指令的是,当源数组与参考数组比较不相同时,它 要修改参考文件。

10-3 数据传送指令DTR

这条指令跟SQI一样,是一条输入指令,每逢它所在的梯级被扫描(可以理解为指令被使能),源数组就会和参考数组通过屏蔽进行比较,产生逻辑结果,成为级条件。比较结果相同,级条件为假;比较结果不同,级条件为真,保持一个扫描周期,且将参考值改成与源值一致。

例一,比较结果相同的情况:

源数组

403020103F5F8F9F屏蔽字参考数组0000000033558899本次扫描前次扫描

例二,比较结果不相同的情况:

源数组40003000200010003F335F558F884F49 屏蔽字参考数组本次扫描前次扫描

10-4 PID控制指令

一条PID控制指令对应一个控制环节,当实行多级控制时,则使用多条PID指令(可选主从)。 如下所示的液位控制环节,将编制一条PID指令来进行控制。

? PID: 指定一个结构体给本条指令,存放组态信息和运行状态信息。 ? Process Variable: 指定过程变量,一般为模拟量输入。

? Tieback: 指定手动控制站手动控制跟随变量,一般为模拟量输入。 ? Control Variable: 指定PID控制变量,一般为模拟量输出。 ? PID Master Loop: 当本条指令为从环时,输入主环结构体名称。 ? Inhold Bit: 决定输出初始值是否保持在上次的终值上,一般为模拟量输出模块的保持状态位。

? Inhold Value: 输出初始值保持在上次的终值上,一般为模拟量输出模块的保持量。 ? Setpoint: 给定量的显示值。 ? Process Variable: 过程变量的显示值。 ? Output%: 控制变量的百分比显示值。 点击

,进入组态和调试界面:

说明:

? PID Equation: PID控制模式,可选择独立增益或相关增益。 ? Control Action: 选择控制方向,

? Derivative Of : 微分对象的选择,对PV进行微分,减少SP给定引起的冲击;对偏差微分,获得对SP变化量的快速响应。

? Loop Update Time: 回路更新时间,不能为零和负数,否则运行时产生次要故障。

? CV High Limit: 输出限幅最大值。 ? CV Low Limit: 输出限幅最小值。 ? Deadband Value: 死区值。

? No Dervative Smoothing: 选择无微分平滑作用。 ? No Bias Calculation: 选择无偏值计算。

? No Zero Crossing for Deadband: 选择无过零死区。 ? PV Tracking: 选择PV跟踪。

? Cascade Loop: 选择回路级联,可选择主回路或从回路。

说明:

? Process Variable[PV]High: 过程变量报警上限值。 ? Process Variable[PV]Low: 过程变量报警下限值。 ? Process Variable [PV] Deadband: 过程变量报警值. ? Positive Deviation: 正偏移报警值。 ? Negative Deviation: 负偏移报警值。 ? Deviation Deadband: 偏移报警死区值。

说明:

? Process Variable[PV] 关于过程变量

--- Unscaled Max: 来自模拟量模块输入通道的最大定标值,即模拟量模块中的工程定标最大值,此为进入PID的未定标最大值。

--- Unscaled Min: 来自模拟量模块输入通道的最小定标值,即模拟量模块中的工程定标最小值,此为进入PID的未定标最小值。

--- Engineering Unit Max: PV在PID中再次定标的工程定标最大值。

--- Engineering Unit Min: PV在PID中再次定标的工程定标最小值。 ? Control Variable [CV] 关于控制变量

--- Max(at 100%): 控制变量最大值, PID计算结果.SO百分比最大值所对应的模拟量模块输出通道的工程定标最大值。

--- Min (at 0 %): 控制变量最小值,PID计算结果.SO百分比最小值所对应的模拟量模块输出通道的工程定标最小值。 ? Tieback 关于手动控制跟踪量

--- Max(at 100%): 最大跟踪值,在PID中以百分比显示最大值所对应的 来自模拟量模块输入通道的最大定标值。

--- Min (at 0 %): 最小跟踪值,在PID中以百分比显示最小值所对应的 来自模拟量模块输入通道的最小定标值。

? PID Initialized: 如果在控制器运行时修改定标值,关闭它以使得重新初始化内部,从而使用新的比例值。

说明:

程定标范围相同。

? Setpoint[SP]: 给定值设定,其数据范围必须与PV在PID中再次定标的工? Set Output: 软件手动控制时,在此输入百分比值,自动方式时,其为显示值。

? Output Bias: 输出偏值百分比值。该值迭加在偏差计算结果上,构成共同的输出.SO。

? Tuning Constants: 调试参数

--- Proportional Gain[Kc]: 比例参数,其物理含义跟PID控制模式有关。 --- Reset Time [Ti] 积分调节参数,其物理含义跟PID控制模式有关。 --- Derivative Rate[Td]: 微分调节参数,其物理含义跟PID控制模式有关。

? Manual Modes:

--- Manual: 手动控制方式,手动控制站直接设置输出,PID计算结果无效。

--- Software Manual: 软件手动控制方式,程序或操作员界面直接设置输出,PID计算结果无效。

要点讨论:

? 自动控制/手动控制切换的平滑过渡

当手动控制转向自动控制(手动站手动控制或软件手动控制)时, PID指令将对跟踪值(Tieback变量或设定输出)作积分运算,直至逼近按偏差运算产生的控制变量 .SO,从而完成平滑过渡。如果没有使用积分控制项,则指令修改偏值量 .BIAS,使CV输出跟踪Tieback变量或设定输出,但此时无偏值计算项不能选择。

自动控制到手动控制的平滑过渡,手动站手动控制由手动站解决平滑过 渡; 转软件手动控制时,.SO值从自动控制PID运算最后输出开始,所 以转换是平滑的。 ? 防止积分饱和

设置控制变量CV上限幅和下限幅,是为了防止积分饱和,当CV达到上下限幅值时,积分项将停止累积。 ? 启动平滑

当控制器从编程模式转为运行模式时,PID指令亦开始执行,运算结果即为控制变量,将送到模拟量输出模块,如果选择了输出保持(PID指令参数选项),则PID指令将输出保持值作为初始量,以积分过渡或修改偏值量(和手动控制转自动控制一样)的方式实现平滑过渡。 ? PID运算的数据范围

来源于古典控制的PID,与模拟量输入/输出模块有着直接的关联,PV、 SP、CV都有相应的数据范围的讨论,只有正确地建立这三个量的数据范 围,才能保证PID的正确运算和正确控制。PID是一个事先预设的计算模 块,并有确定的数据范围(实数范围),按偏差运算的PID 运算显然要求 偏差提供它所需要的数据范围,而偏差又是PV和SP比较的结果,毫无疑 问,SP和PV必须在相同的数据范围,计算结果也应该是这个数据范围。

--- PV 的来源是外来信号,模拟量输入,它的定标至关重要。在模拟量 模块中已经有自己的工程定标,也就是模块提供给PID指令输入量的数 据范围,PID 指令中将此称为未定标数据,而在PID指令中再次定标, 称为工程定标,该值将作为SP和偏差的基准值。

--- SP的来源是操作员设定,习惯上,操作员按百分比设定,必须编制程序 将百分比值换算成和PV工程定标值一样的数据范围,这样,与PV比 较的结果偏差就是正确的数据了。

--- CV 是送到模拟量输出模块的控制变量,PID的运算结果.OS是以百分比 的形式表达的,而不是模拟量输出模块所需要的数据,经过转换(CV定 标)后,送出符合模拟量输出模块对应输出通道的数据,即模拟量输出 模块工程定标的数据范围。 ? PID指令执行时间和回路更新时间

PID指令实质上是一条运算指令,在级条件成立时,它总是在运算,但 它的运算频率与回路更新时间有关。回路更新时间应该小于指令执行的 时间间隔,大于或等于模拟量模块的采样时间。PID指令的执行有两种方法:

--- 在连续型任务中由定时器调用,多用于滞后大的控制对象,要求反应时间不是很快。可令回路更新时间等于定时器预置值,且模拟量模块的采样时间快好几倍。

--- 周期型任务定时调用,可以精确的执行指令,适合快速反应控制对 象,可令回路更新时间等于任务调用周期时间,且模拟量模块的采样时间快好几倍。

执行PID指令最精确的方法是:模拟量输入模块每采样一次,指令执行 一次,令回路更新时间等于模块采样时间。可以用模块滚动时间标记来 控制执行动作。

11.输入/输出指令

输入/输出指令是控制器对外操作指令,SSV和GSV是控制器设置系统组态信息和读取系统状态信息的指令,MSG指令则是应用最为广泛的信息传送指令,它几乎可以对任何外部设备操作。

11-1 SSV和GSV指令

在ControlLogix控制系统中,并不象PLC-5/SLC500那样,提供状态文件去直接地查看状态或进行组态,而是在控制器中隐含着系统的结构数据,用SSV

指令去设置组态信息;用GSV指令得到状态信息。SSV/GSV可访问的对象有:

? AXIS 伺服控制信息 ? CONTROLLER 控制器信息

? CONTROLLERDEVICE 控制器硬件信息 ? CST 协调系统时间信息 ? DF1 串口信息 ? FAULTLOG ? MESSAGE ? MODULE ? MOTIONGROUP ? PROGRAM ? ROUTINE ? SERIALPORT ? TASK

? WALLCLOCKTIME

这些访问对象,下面有各种形式的信息数据块,要设置或者是获取信息,都必须事先在数据库中建立起相应数据结构的标签,作为SSC的源地址或GSV的目标地址,然后再编辑指令。以系统时间为例,用SSV指令对系统设置系统时间。首先在用户自定义结构建立新的日期时间结构体。

然后在数据库中建立标签Date_Time。

编写SSV指令,

要注意,源地址是为送下去的系统日期和时间建立的Tag,此处引用地址时,不是引用Tag名,而是Tag的第一个元素,否则认为是语法错误,梯级不能接受。同样地,若从控制器中读系统日期和时间,可编写GSV指令:

对于系统可访问的对象,有的只能获取(用GSV);有的只能设置(用SSV);有的既可以获取又可以设置(用SSV和GSV)。

11-2 MSG指令

MSG指令编写之前,要建立数据类型为MESSSAGE结构的标签,每一条指令都要分配一个标签,这个标签将记录本条指令的通讯组态和执行情况。

为每一条MSG指令建立一个标签,不能建立数组。

只有为指令分配了标签后,点击

方可进入组态界面:

说明:

? 对控制器以外的各种设备传送信息,它的信息类型如下所列: -CIP Data Table Read/Write 对ControlLogix控制器进行读写 -PLC5 Typed Read/Write 对PLC5处理器进行读写

-PLC5 Word Range Read/Write 对类似PLC5处理器地址进行读写 -Block Transfer Read/Write 对块传送模块进行读写

-PLC2 Unprotected Read/Write 对PLC2处理器及类似PLC2地址(寄存器地址)的设备进行读写。

-PLC3 Typed Read/Write对PLC3处理器进行读写

-PLC3 Word Range Read/Write,对类似PLC3处理器地址进行读写。 -SLC Typed Read/Write对SLC处理器进行读写

-Module Reconfigure 在模块仍然连接时,对模块进行重新组态 。 -CIP Generic 对任何设备的服务性操作。 ? 本指令执行的状态

-Enable 指令级条件成立,指令被使能,开始工作。 -Enable Waiting 信息传送请求被送到缓冲区,等待传送。 -Start 缓冲区排队轮到,开始传送数据。 -Done 数据传送完毕,指令置位完成。 -Done Length 实际完成的数据块长度

-Error Code 如指令执行失败,此处给出16进制的错误代码00XX。 -Extended Error Code 给出16进制的扩展错误代码XXXX。

-Tined Out 设置超时请求,此项选择,当发生超时,终止MSG传送过程。

1> ControlLogix 控制器与ControlLogix 控制器的通讯

源或目标的标签地址不是引用Tag名,而是Tag的第一个元素,否则认为是语法错误,梯级不能接受。

元素个数最多可有65335个,尽管ControlNet 的数据包最多只有500个字节,MSG指令可将数据块拆开,分成一个以上的数据包送走。

Communication 页面要求输入两个控制器之间的通讯路径,如果在I/O组态中有该控制器,亦可通过Browse获得路径,倘若仅仅是为了建立MSG路径而在I/O组态中加入控制器,则没有必要,那样将占用内存空间,建议书写路径,路径书写规则:

路径是段和段的连接,段由x,y组成,段和段之间用逗号分离。 ? X 背板为1;网络为2。

? Y 槽号;站号,ControlNet网络1-99号,EtherNet网络为IP地址。 上面书写的路径是:背板—CNB(位于5槽)—ControlNet网络—对方CNB(站号3号)— 背板 — 控制器(位于0槽)。

路径还可以是动态的,在信息块的结构数据中,有Path一项,这是个字符串结构,更换字符串数据即更换了路径。

字符串的长度最大82个,足够表达路径了。

,此项建立了MSG指令的连接,缺省是选择的,也就

是说MSG指令占用一个固定的连接;如果释放此项,只有在MSG指令执行的时候才占用连接,是一个活动的连接,可编制程序,令多条MSG指令共同使用一个连接,这对缓和资源的运用是有好处的。

2> ControlLogix 控制器与PLC-5控制器的通讯 编写如下梯形图逻辑:

点击

进入组态画面:

说明:

? Message Type: 选择对PLC-5读取数据

? Source Element: PLC-5 处理器中的地址作为源地址(文件首址) ? Number Of Element: 读取数据的元素的个数,最多32767个。

? Destination Element: CLX中的数组(接受数据区域)的首元素作为目标地址

进入Communication画面,确定通讯对象,

说明:

? Path: 可通过Browse…找到DHRIO模块位置,亦可用书写路径的办法。 ? Channel: 选择A通道,模块定义A通道为DH+通道。

? Source Link: 应与DHRIO模块上(在RSLinx中)定义的路由表一致。 ? Destination Link: 应与DHRIO模块上(在RSLinx中)定义的路由表一致。

? Destination Node: DH+上接受MSG数据的PLC-5处理器站号(八进制)。

3> ControlLogix 控制器与PLC-5 BT模块的通讯

ControlLogx 用MSG指令代替了PLC5的块传送指令,无论是对模块的块传送,还是远程I/O链上用作于通讯的块传送。以对1771-IFE的BT操作为例,编写如下梯形图逻辑:

点击

分别进入写和读的组态画面:

说明:

? Message Type: 选择对模块进行块传送写操作。

? Source Element: CLX中指定数组首元素地址作为源地址。

? Number Of Element: 块传送写数据文件长度(根据BT模块决定)。

说明:

? Message Type: 选择对模块进行块传送读操作。

? Number Of Element: 块传送读数据文件长度(根据BT模块决定)。 ? Destination Element: CLX中指定数组首元素地址作为目标地址。 进入Communication画面,确定通讯对象,

说明:

? Path: 可通过Browse…找到DHRIO模块位置,亦可用书写路径的办法。 ? Channel: 选择B通道,模块定义B通道为RIO通道。 ? Rack: BT模块所在机架(八进制)。 ? Group: BT模块所在组号(八进制)。

? Slot: BT模块位于左槽或右槽(2槽寻址时用),一般为0。 数据文件的解释:

Tag 名为 INT_BT_WRIT的整型数数组(37个元素)是块传送写的数据文件,是被操作的BT模块1771-IFE 所需要的组态文件,这里将根据IFE模块的组态方式完成数据的输入。值得指出的是,ControlLogix 中没有BCD码,而IFE模块的通道定标必须是BCD码,所以只能在二进制的方式下输入,可以看出,通道0和通道1被设置成BCD码表达的0-4095。同样的,在数据形式的选取,也只能选01(模块组态第十位和第九位),即非BCD码的数值。

Tag 名为 INT_BT_READ的整型数数组(20个元素)是块传送读的数据文件,它将读取通道A/D转换的数据,因为定义数据形式为补码数据,所以,可以在相应的地址中读到通道0和通道1的正确表达的数据。

4> ControlLogix 控制器与其它设备的通讯

MSG指令最灵活的就是对其它设备的信息传送,选定CIP Generic的信息类型,它可以对ControlLogix系统的任何模块进行实时地服务操作,一些指定的服务操作,事先给定了服务代码,只要编制指令执行即可。Custom选项使得MSG指令可以对提供服务代码的设备进行操作,以 三. 程序常见问题的解决及相应的编程实例 实例一

问题:本地和远程控制同一台设备,没有优先关系,希望既可以在本地用开关

控制(输入开关信号)完成本地操作,又可以在操作员界面(RSView 或PannelView)完成远程控制,两种控制方式的切换,编程解决。 方案1: 在本地和远程各设一个切换开关,操作员先选定操作方式,再开始操 作。

方案2:操作员无须关心操作方式,一旦在本地开始操作,即转入本地操作方

式;一旦在远程开始操作,即转入远程操作方式。

练习题

1、 有三个马达MTR1 、MTR2 和MTR3 ,按先后次序启动。启动开关为

Motor_Start, 停止开关为 Motor_Stop。Motor_Start为 ON 时,MTR1 启 动,3秒后 MTR2 启动,再过 5 秒后 MTR3 启动。Motor_Stop为ON 时,三个马达同时停止运行,用别名把MTR1 、MTR2 和MTR3分别分 配给三个输出点,来模拟三个马达的状态。

2、 某交通要道,南北方向通行 6 秒,东西方向通行4秒,试编制程序模拟红 绿灯变化情况,令南北向红灯Lamp_R_SN;东西向红灯Lamp_R_EW; 南北向绿灯Lamp_G_SN;东西向绿灯Lamp_R_EW。用别名将四个灯的 地址分配给外部的输出点,以便观察。

3、 试编一程序使外部的16个灯(对应输出模块16个点)具有如下状态, 且周而复始地进行。

时间 Lamp.0-- Lamp.7 Lamp.8-- Lamp.15 2秒 亮 灭 2秒 灭 亮 3秒 亮 亮

4、 当开关Switch.0接通时,一灯 Lamp.0 延时 2 秒后始亮;当开关Switch.0 断开时,灯 Lamp.0延时 2 秒 后始灭。唯当开关Switch.0接通后还不到 2 秒 (即灯 Lamp.0还未亮 ) 即把 开关Switch.0 断开,则灯Lamp.0保持不 亮;反之亦然。

5、试编制一个手动可逆计数器,用开关 Switch.1 作增计数脉冲,用开关 Switch.2作减计数脉冲,注意观察计数器状态位 CD、CU、DN、OV、 UN 在什么情况下置位。

6、为了让上位机识别处理器,须产生一锯齿波信号,试编程实现,用并 TRENDS观 察 。

7、当模拟量模块通道0输入的值大于300时,Lamp.0灯闪烁;大于500时, Lamp.0和Lamp.1的灯闪烁;大于800时,Lamp.0、Lamp.1和Lamp.2的 灯一起闪烁。

8、下图是一个混和液体容器的实例,试编一个模拟程序反映容器内液体变 化 ( 提示:用计时器模拟流量,用计数器模拟液位 )。

? 用Switch.1控制 V1;用 Switch.2控制 V2;用Switch.3控制V3。 ? 改变开关状态或流量大小,观察液位的变化。

? 设置液位上下限位,用Lamp.10和Lamp.11报 警,并使相应阀门

关闭。

9、同上题,将程序由原来的本地控制改为本地和远程(即用上位机或操作员 终端)都能控制。

10、计算一个梯形图程序执行的平均周期时间 ( 提示:用ADD指令 )。

11、 设模拟量模块通道0采集的是自来水流量数据,该流量计量单位为 吨/小时,数据范围为 0---3000, 试编制一程序计算自来水的产量 (注意怎样保证积累精度),假定自来水产量将在上位机以吨的单位显 示(考虑数据的整理)。

12、 用 BTD 指令在Lamp上实现下列过程,须周而复始。

Lamp.11 — 15 Lamp.8 — .10 Lamp.4 — .7 Lamp.0 — 3 第一秒 灭 灭 灭 亮

第二秒 灭 灭 亮 亮 第三秒 灭 亮 亮 亮 第四秒 亮 亮 亮 亮

13、将数组Array_Dint1中的数据加 5, 用递增的方式传送到 Dint_P_1中, 以便逐个查看,请注意观察控制结构体的状态位和 .POS 的变化。

14、某控制器中,有一批如下所示的数据需要组织传送,试编制一程序 按 ID 号 (为 1、2、3、4、5或6 ,每 2 秒更换一次)判断,将它们轮 流分送到用户定义的数据传送结构体COPY_DATA(DINT[50]) Array_Bool (DINT)) Array_Timer.ACC (TIMER[10])

Array_Dint (DINT[10] ) Array_Counter.ACC (COUNTER[10]) Array_Real1 (REAL[5]) Array_Control .POS (CONTROL[10])

15、 某处理器在上电时,须进行初始化工作,以下数据要复位,编程实 现。

Array_Bool (DINT) Array_Timer.ACC (TIMER[10])

Array_Dint (DINT[10] ) Array_Counter.ACC (COUNTER[10])

16、在Lamp上预置状态设为 0000000000001111 ,试编一程序,令其每秒 钟移动一次,在Lamp上循环移动,左移10次,右移10次,周而复始 地进行。

17、 按每秒一次的速度从模拟量模块通道0 采集数据,采集的数据存放在 指定的数组Array_Dint3中,使其保持最新的 50 个数据。

18、某包装工艺中,以红、绿、蓝三种颜色的球来识别三种不同的包装过 程,当红球弹出,光感传感器识别后送到处理器来的数据为1200--- 1500;当绿球弹出, 为800---1100;当蓝球弹出,为 300---600;其各 输出点(送到 Lamp )的控制规律(按每秒一步进行)如下所示: 红球 绿球 篮球 第一步 000000000111 000000000011 000000000001 第二步 000000111111 000000011011 000000001001 第三步 000111111111 000011011011 000001001001

第四步 111111111111 011011011011 001001001001

本文来源:https://www.bwwdw.com/article/jrqp.html

Top