第三讲 CompactLogix的编程介绍.doc_第1页
第三讲 CompactLogix的编程介绍.doc_第2页
第三讲 CompactLogix的编程介绍.doc_第3页
第三讲 CompactLogix的编程介绍.doc_第4页
第三讲 CompactLogix的编程介绍.doc_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第三讲CompactLogix的编程介绍通过前一讲我们已经初步知道了如何使用RSLinx和RSLogix5000,这一讲我们将介绍CompactLogix的程序结构、编程语言、自定义数据结构、Add-on自定义指令、模拟量模块以及一些指令的使用。一 程序结构和编程语言CompactLogix的程序结构分为任务-程序-子程序三级结构,每个CompactLogix控制器可以有多个任务,不同控制器类型的任务数是不同的,比如CompactLogix 1768系列有16个任务,而1769-L35E有8个任务。任务是CompactLogix 的第一级程序结构,任务分成三种类型,包括连续型任务、周期型任务和事件型任务。当控制器的CPU没有执行其它操作时,CPU执行连续型任务,连续型任务执行完毕后,又从头开始执行。连续型任务的执行是周而复始的过程,它的执行周期是不定的优先级比周期性任务和事件型任务都低。一个CompactLogix工程项目可以没有连续型任务,最多也只能有一个连续型任务。用于工厂自动化的顺序控制系统通常都有连续型任务,而对于过程控制的系统,则可能没有连续型任务。周期型任务就如它的名字一样是按照预先设定的时间间隔执行的任务。CompactLogix控制器是个多任务的系统,但是在某一时刻只能执行一个任务。如果某一个任务正在执行,此时另一个任务要被触发执行,这时控制器就要看看这两个任务的优先级,以决定是否中断正在执行的任务,转而去执行其它任务。CompactLogix具有15个优先级,数值从1-15,数值小的优先级高。优先级高的任务可以中断优先级低的任务,执行完优先级高的任务后再回头从低优先级任务中断处继续执行,连续型任务的优先级最低,它可被其它任务所中断。第三种任务类型是事件型任务,当一个指定的触发事件发生时才去执行事件型任务。在创建事件型任务时可以指定这种触发事件,触发事件有多种,比如有数字量信号发生变化时,运动控制执行某种操作时,消费者标签接收到数据时或是通过事件指令来触发等。但是,CompactLogix只支持通过事件指令来触发事件任务的执行。与周期性任务一样,事件型任务也有优先级。RSLogix5000编辑软件包括四种编程语言,除了常用的梯形图编程以外,还有功能块、结构化文本和顺序流程图。一般来说,原来是做顺序控制的更习惯使用梯形图编程,用于过程控制则更适合使用功能块编程,而如果是批次控制,使用顺序功能图则更有优势,如果需要编写一些数学算法可以使用结构化文本。二延时开指令TON和计算指令CPT介绍现在我们来看看CompactLogix控制器的指令。CompactLogix指令系统非常丰富,有常用的位指令、定时器和计时器指令、比较指令、数学运算指令和传输指令等,还有运动控制指令、串口通讯指令和ASCII指令等。我们这里只介绍两个指令:延时开指令TON和计算指令CPT。现在编写一段小程序,当输入模块的第2点动作0.5秒后,计算a1=(b1+c1)*d1的值,其中b1和c1为双整数,a1和d1为实数。(以下部分需要屏幕抓图,视频文件:)我们首先创建程序使用的标签再编写程序。在上面项目test1中,双击左边窗口Controller Tag,打开标签编辑窗口,在最后一行的第一列即name列上输入b1,这就创建了一个类型为双整形,名称为b1的标签,按照同样的方法创建c1标签,再按照同样的方法创建a1标签,由于创建标签的默认类型为双整数DINT,我们要创建的是实数,所以在a1行Data type列上将数据类型由DINT该为REAL。按照创建a1同样的方法创建d1。我们还要创建两个标签:一个是Compute,它是一个布尔量,是一个别名标签。创建后将其数据类型由DINT该为BOOL,同时由于是个别名标签,它代表的是输入模块的第2个输入点,所以在这一行的Alias for列上选择为Local:2:I.Data.2。最后一个标签是定时器标签ComputeDelay,将数据类型改为TIMER。双击连续任务下的mainroute,在梯形图编辑器中打开了test1,右键点击梯形图编辑器上的End,选择Add Rung 添加一条程序,添加一个常开点Examine On和一个延时开指令TON,常开点指令使用的标签为Compute。TON指令使用的定时器标签为ComputeDelay,设定值为500,定时器指令中使用的时间单位为1ms,设定值为500,即这个定时器为Compute动作后延时500毫秒动作。上面我们创建了ComputeDelay这个定时器数据类型,定时器数据类型是个预先定义的数据结构,它包含5项数据,比如.ACC表示定时器当前计时值,.DN表示定时器延时时间到。如果我们需要取得定时器当前计时值,可以直接使用ComputeDelay.ACC这个标签,不要进行任何转换。再添加另一条程序,在这条程序上有一个常开点Examine On指令和计算指令CPT,CPT位于Compute/Math指令属性页上。Examine On指令上的标签为 ComputeDelay.DN, CPT指令Dest是个标签,可以是单字节整数SINT、整数INT、双字节整数DINT或实数REAL,CPT指令的Expression是一个表达式,表达式中除了可以有加减乘除运算符以及()符号外,还可以使用数学函数,通过一条CPT指令便可以完成需要多条指令才能完成的功能,我们可以象使用高级语言那样使用一条表达式完成多步的计算。这里,我们设定Dest为标签a1,Expression为“(b1+c1)*d1”。从这个语句我们还可以看出,不同数据类型混合使用是很方便,不需要我们去编写繁琐的转换指令,数据转换是自动完成的。当然我们应该了解转换规则,比如双整数DINT转换为实数REAL时,不会丢失信息。但是如果实数转换为双整数是有可能丢失信息的,实数转换为双整数是采用四舍五入进行的。将编写好的程序下载到控制器,并使控制器处于运行状态,设置b1,c1,d1的值,看看由CPT算出a1的值。三自定义数据结构体前面我们介绍了定时器TIMER数据类型是预定义的数据结构,除了预定义的数据结构外,为了使编程更加方便,我们有时需要自己创建数据结构,这就是RSLogix5000的用户自定义结构体。下面我们创建一个简单的储油罐Tank的自定义结构体,它包含油温、油位、高油温报警等信息。(以下部分需要屏幕抓图,视频文件:)点击左边浏览器窗口上的Data Types,从弹出的菜单中选择新数据类型,可以看到这时打开了自定义数据类型创建窗口,在名称栏输入结构体名称Tank,在结构体成员中输入以下3个名称Temp、Level和HighTemp,它们分别表示油温、油位和高油温报警,这3个成员数据类型分别为REAL、REAL和BOOL。Tank结构体创建好后,我们便可以创建类型为Tank的标签。双击控制器标签,打开控制器标签编辑窗口,创建一个名称为Tank1的标签类型,将其数据类型由默认的DINT类型改为Tank。点击Tank1前的加号,可以看到Tank1包括三个成员Tank1.Temp、Tank1.Level和Tank1.HighTemp,这三个成员是自动创建的,因为Tank1的数据类型是Tank。自定义结构体可以包含预定义结构体,也可以包含另一个自定义结构体,也就是说结构体可以嵌套。不管是创建简单数据类型的标签还是创建自定义数据结构体的标签,都可以创建数组类型的标签,可以创建一维、二维和三维数组的标签类型。编程人员使用自定义数据结构体可以使程序更加条理清晰、容易理解,同时也能提高现场启动和系统维护的效率。四Add-on自定义指令RSLogix5000编程软件中已经包含了多种指令,这些指令是由编程软件提供的,你可以在各个项目中使用这些指令。另外,RSLogix5000也可以自己定义指令,自定义的指令可以象普通指令一样在程序中多处调用,也可以将自定义指令导出后,在其它项目中再导入后使用。下面我们编写一个自定义指令MyCompare,这个指令有两个双整数输入,一个双整数输出。如果第一个数大于第二个数,则输出为1,如果第一个与第二个数相等,则输出为0,如果第一个数小于第二个数,则输出为-1。(以下部分需要屏幕抓图,视频文件:) 展开左边浏览器窗口上的Data Types项,右键点击其下的Add-on-Defined。从弹出的菜单中选择 New Add-on Instrution,创建一个自定义指令,我们把这个自定义指令命名为MyCompare,选择Type的类型为Ladder Diagram,这里的Type为要选择什么编程语言来编写这个自定义指令,点击OK后出现自定义指令定义对话框。选择Parameters属性页,对MyCompare指令的输入输出参数进行定义,我们定义MyCompare指令有三个参数,两个为输入,分别为input1和input2,数据类型都为DINT,Usage列表示这个参数是输入参数还是输出参数,这里选择为input。MyMyCompare指令的第三个参数为rtn,它的数据类型也是DINT,Usage列选择为output。最后我们将这三个参数的Req列和Vis列都打上勾,表示使用这个指令时,这三个参数可见且必须输入标签作为实际参数。这样我们完成了MyCompare指令的参数定义。现在可以编写实际的逻辑操作,点击这个对话框窗左下角的Logic按钮,打开Compare指令梯形图编辑器,我们这个自定义指令只有三条程序。在第一条程序上添加两条指令,分别是GRT指令和MOV指令,GRT指令位于Compare指令属性页上,GRT是大于比较,MOV指令位于Move/Logic指令属性页上,用于数据传送。选择GRT指令的Source A为input1,Source B为input2,MOV指令的Source为1,Dest为rtn。第二条程序也只包含两条指令,一个是EQU指令,另一个也是MOV。EQU是等于比较,选择这条指令的Source A为input1,Source B为input2,这条程序的MOV指令的Source为0,Dest为rtn。在第三条程序上我们也添加两条指令,一个是LES,LES是小于比较,选择Source A为input1,Source B为input2,另一个指令是MOV,Source 上输入-1,Dest上输入rtn。这样我们便完成了MyCompare指令的程序代码的编写。自定义指令编写好以后,可以在编写自定义指令的项目中调用,也可以将自定义指令导出后,再将其导入到其它的项目中并进行调用。下面我们来看看如何调用自定义指令。双击MainRoutine,打开梯形图编辑,在程序的末尾处增加一条程序,选择Add-on指令属性页,我们发现Add-on指令属性页有一个指令名为MyCompare,这个指令就是我们刚才创建的指令,你在这个项目中创建的或是导入的自定义指令都会在Add-on指令属性页中列出。点击MyCompare指令便将这条指令添加到程序中,右键点击MyCompare旁边的问号,创建一个数据类型为MyCompare的标签compare2, 按照同样的方法创建3个标签a2、b2和c2,这3个标签为双整数DINT,这3个标签作为实际参数分别对应MyCompare指令的input1、input2和rtn,也就是说,在调用这条指令前,a2赋值给input1,b2赋值给input2,指令执行完后,rtn的值将赋值给c2。现在我们来测试结果,将程序下载到控制器并使控制器处于运行状态,双击控制器标签打开标签编辑窗口,在标签编辑窗口的下方选择Monitor tags属性页,更改a2,b2的值,当a2大于b2时,c2为1,当a2等于b2时,c2为0。当a2小于b2时,c2为-1。五使用模拟量模块在第二讲我们介绍了数字量输入模块和数字量输出模块,我们现在来介绍CompactLogix的模拟量模块。CompactLogix有各种模拟量模块,有电流型、电压型、热点偶、热电阻等。有的模拟量模块可以自己定义是电流输入还是电压输入,比如1769-IF8这个模块具有8通道输入模块,每个通道都可以单独定义成是电流输入还是电压输入。(以下部分需要屏幕抓图,视频文件:) 右键点击I/O Configuration下的CompactBus Local,添加一个1769-IF8模拟量输入模块,在新模块对话框中有4个属性页,其中前两个属性页General和Connection与添加数字量模块时的属性页相似,主要定义模块的版本号、模块所在的槽号以及模块的连接属性,按照要求输入相应的值或选择相应的值。我们来看看这后面两个属性页可以设置什么信息,点击Configuration属性页,可以看到这里可以对模块的各个通道单独进行组态,要启用通道只要将相应通道的Enable列选上即可,在Input Range列可以单独定义通道是电流型还是电压型,以及量程。从这里我们可以看出,CompactLogix的模拟量模块的各个通道类型是单独定义的,量程也可以不同,而且CompactLogix并不象传统PLC厂商那样采用DIP开关来定义通道类型和量程范围,CompactLogix是采用软件的方式来设定通道类型和量程范围,这可以方便用户的使用,当你更改通道类型或是量程范围时,你无需将模块取下。而且更换模块也不会因为忘记拨DIP开关导致不可预测的结果。点击Alarms属性页,可以看到模块的每个通道都可以单独定义高报警和低报警以及死区值,你可以根据实际通道信号启用通道报警并调整这些值,如果通道的实际值大于高报警值,相应通道的报警标签就会置位,我们后面会介绍有哪些报警标签。传统PLC使用的模拟量模块如果要实现高报警和低报警都要在程序里完成,如果有很多这样的模拟输入通道,就要编写一大堆的比较语句来实现,而CompactLogix无需编写一条程序,只需进行设置便可完成相应的功能。添加好1769-IF8模块后,我们点击控制器标签,看看RSLogix5000为我们自动生成了什么标签,在标签编辑窗口中,可以看到添加了3个结构体的标签,Local:3:O、Local:3:I和Local:3:C,由于是模拟量输入模块,我们关心的是输入值,展开Local:3:I,可以看到在这个结构体标签下有很多标签,有各个通道数据的标签,比如:Local:3:I:Ch0Data 到Local:3:Ch7Data,还有高报警标签Local:3:I:Ch0HAlarm到Local:3:I:Ch7HAlarm,低报警标签Local:3:I:Ch0LAlarm到Local:3:I:Ch7LAlarm,如果通道0的数据大于在组态模块时所设定的高报警值,那么Local:3:I:Ch0HAlarm将置位,如果通道0的数据小于在组态模块时所设定的低报警值,那么Local:3:I:Ch0LAlamr将置位。其它标签还有通道信号是否超过量程的上下限、通道状态等。六使用功能块编程下面我们演示如何使用功能块创建一个周期性任务。这个周期性任务要完成的功能是指示灯闪烁,也就是一个输出点500ms有输出、500ms无输出。当然了,实现这个简单功能的任务,完全可以在连续型任务内通过其他的指令来完成。我们这里演示的目的只是说明如何创建和使用周期型任务。我们的这个闪烁的指示灯程序用功能块来完成。同样道理,我们只是为了演示可以使用不同的语言,并不意味着我们所创建的任务适合这种语言。在上一讲中,我们已经创建了一个CompactLogix L35E的项目文件,并且分别添加了一个输出模块1769-OB8和一个输入模块1769-IQ16。(以下部分需要屏幕抓图,视频文件:)运行RSLogix5000,打开项目的工程文件test1,右键点击RSLogix5000右边的浏览器窗口上的Task,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论