车健生
(沈阳现代制造服务学校,辽宁沈阳 110148)
设计PLC梯形图程序,一般是先按系统控制要求,结合工艺流程绘出程序流程框图,对大型复杂程序应考虑顺序功能图设计原则,由框图导出梯形图。教学实践中,学生由于没有进过企业、下过车间,难以理解工业系统控制要求和工艺流程。比如对于“邮件分拣机控制”“电镀生产线控制”等PLC实验项目,学生也只是在电视里见过类似的设备,无法从系统角度把握控制过程。梯形图程序虽说是图,但只是设计上源于、形象上接近继电器控制电路,现在的学生继电器控制电路学习的较少,所以梯形图无法使学生从继电器电路知识中获得触类旁通的学习效果。一般的PLC项目,即便是实验模型的梯形图程序也都比较冗长、控制环节繁杂,这也为梯形图程序设计的抽象性、复杂性蒙上了神秘的色彩。
要解决上述问题,就要通过一定教学手段形象、直观地描述系统控制要求及生产工艺流程;要在梯形图讲解、设计过程中辅助以实时状态的动画效果,展现梯形图运行时一系列控制状态。目前一些实践是使用Flash等实现模拟PLC控制过程的动画效果。也有学者介绍“利用组态软件”开发了“四层电梯的虚拟仿真系统”用于PLC实验教学[1]。这些对PLC理论实践起到了很大的推动作用。
动画和虚拟仿真系统开发成本较高,在教学中,如果实验内容稍加变化,就会显露灵活性不够、可扩充性差。利用组态软件编程模拟PLC梯形图运行过程,可弥补动画、虚拟仿真系统存在的不足,模拟不是要做真实系统要做的全部事情,而是模拟出原系统的一个抽象模型。在模拟真实系统中舍弃一些次要、甚至是干扰的因素,有利于突出教学重点、减少程序设计难度、降低软件开发成本。梯形图经过多年发展,积累了丰富的控制方面的例程,突出表现在它的逻辑处理能力上,利用组态软件模拟PLC梯形图,可以吸取PLC原有例程中对控制过程直观形象的逻辑表达式,从而使组态软件模拟编程逻辑上有章可循,事半功倍。
组态软件,是一种数据采集与过程控制的专用软件,也指在自动控制系统监控层一级的软件平台和开发环境。组态软件可以读写PLC信号,可以通过图形和动画等形象地直观地再现系统控制过程,也可以对工业现场进行监视和控制。以组态软件EBpro为例,它是一种类BASIC高级语言。组态软件基于元件驱动编程,含有包括元件外貌图片在内的各种丰富属性和方法,元件实质上是一种类,组态软件编程一般都具有面向对象的脚本语言的特点。
梯形图是一种“使用最多的”“图形式的PLC编程语言”,它沿用了“继电接触器控制原理图”,“同时还吸收了计算机的特点”[2]。PLC编程体系的特点突出体现在基于存储器,通过编程使存储器产生控制过程所要求的状态,通常以逻辑位状态为主要标志。结构化编程语言C、BASIC等,是面向过程的语言,它以最终获取运算处理结果为目的;PLC编程语言是面向实时状态的语言,它以能对控制过程不同阶段呈现的某种状态做出相应的反应为目的。
PLC编程语言梯形图与组态软件编程语言分别是一个完整的自动化控制系统的下位机和上位机运行程序,它们是有机联系、前后衔接的关联语言。这两种语言的元素体系大部分是同构的,其元素是可以通过映射直接对应的。如PLC中输入映像寄存器I、输出映像寄存器Q、位存储器M、特殊标志位存储器SM与组态软件编程语言中“逻辑变量”是对应的,PLC中变量存储器V和局部变量存储器则分别与组态软件编程语言中“全局变量”和“局部变量”相对应。
基于不同目的的计算机语言当然有各自不同的特点,组态软件与梯形图中的元件就有很大不同。PLC中定时器T、计数器C、累加器AC等就是如此,这些功能性存储器,PLC中也称指令盒,这部分功能存储器在PLC中数量众多。组态编程的语言虽含有其中部分元件,但功能有所差别,元件调用方式迥异,只能通过编写代码,构造功能模块才能实现。
梯形图在程序运算处理中涉及的逻辑关系表达上形象直观、条理清楚,在目前各种编程语言中是少见的,特别适用于开关量逻辑控制。组态软件编程如果能够借用或映射PLC梯形图的逻辑表达,可极大减化组态软件编程中逻辑设计工作,并且使组态模拟程序逻辑条理分明、严谨可靠;而组态软件是一种灵活高效的高级语言,擅长外在形象表达。梯形图与组态软件在这种意义上,二者相辅相成,珠联璧合。
本文举例,PLC型号为S7-200,组态软件为Easy Builder pro(EB8000升级版,简称EBpro)。EBpro编程语言称之为“宏指令”,用户程序以自定义函数的形式表述。它提供周期执行、条件执行和启动一次性执行三种程序执行方式,其中“周期执行”突出体现了面向实时状态的编程系统的特点,是控制过程软件最主要的一种执行方式。
PLC典型指令盒的组态软件函数编程模拟,其技巧和规范也是模拟其它PLC元件时要遵循的,有一定的以点带面作用。组态编程模拟函数名使用对应的PLC指令(盒)名称,模拟函数的参数也与PLC指令盒基本对应。PLC指令盒一般均有逻辑位状态,所以组态编程自定义模拟函数返回值均为逻辑类型。本文程序清单中为书写方便,通过R符号,对简单赋值语句进行了归并,R表示这条语句在编程器中要先换行。
组态软件均设有定时器元件,但功能与PLC定时器元件有一定差别,编写模拟函数时,也要求元件应该语句化。组态软件模拟PLC运行,当然要采用周期执行方式,但定时器的预设值可能大于执行周期,如果不进行保护,定时器没有完成计时,又被重新执行初始化,或者定时器程序被挂起,就会消耗大量内存资源。解决方法是,函数设置工作标志ti,为1时表示定时器处于计时状态中,不能再次进入;0表示空闲,可以进入。PLC有为通电延时型TON、断电延时型TOF和记忆型通电延时定时器TONR三种类型定时器,具有代表性的是通电延时型TON。
程序清单1 定时器TON模拟函数:
计数器用来累计脉冲输入端上升沿的个数。这个上升沿是瞬间脉冲由0变1的过程,涉及这种上升沿、下降沿的指令还有EU指令、ED指令等,组态软件编程时,如何把握这个上升沿或下降沿呢?EBpro扫描周期最小100ms,这也是它检测脉冲最小分辨度,可以假定在这个周期区间脉冲是不变的(这是EBpro模拟检测脉冲的前提)。在“Loca HMI”,LBLW……系列地址单元设定一个标志位,自定义函数每次读写标志位,如果发现标志改变,由0变1,则意味着接受到了1个上升沿,计数器加1。
周期循环执行下,计数器存储单元也有保护问题。EBpro宏指令在周期循环执行状态下,每个周期内宏指令函数都被从头执行一遍,这使得程序中用户定义的变量每个周期都要被复位或者清零,如果计数工作不在一个周期完成,计数器变量值就不再准确,事实上也很少有计数器是在1个周期内完成的。解决的方法是,计数器函数中存取“计数”的单元不使用局部变量方式引用,而是使用“Loca HMI”,LBLW……这样的地址存储单元。
程序清单2 加计数器CTU模拟函数:
组态软件编程模拟PLC梯形图元件或指令是模拟整个梯形图的基础。组态软件模拟编程中主程序仍以函数形式表出,被称之为主函数。仍然要遵循PLC梯形图程序周期执行的特点,周期性执行下的函数返回后,函数中的变量每次都要被销毁,所以如果函数要保持其中某些变量的中间结果或最后结果变量,都要考虑脱离函数保持变量值的问题,方法是在函数前部安排GetData(……)语句,从函数变量作用域外读取要处理的数据;在函数后部安排SetData(……)语句,在函数变量作用域外存储处理后的数据。
一般带有实际背景的PLC梯形图,控制环节多,逻辑关系复杂,这给模拟大型PLC程序带来一定难度。但是如果能借用已完成设计要求梯形图逻辑表达语句,直接映射到组态软件模拟编程中来,那将是简单而又高效的。PLC中一条独立电路称之为一个网络,每个网络一般来看由输入条件和输出结果两部分构成。在输入部分经常呈现的是若干触点的“串联、并联”或者“串并混联”等,这些在逻辑上表现为“与、或”或者“与或的某种逻辑运算”等,如图1中网络1可对应写出“I00 and not T38”。
程序清单3闪烁电路梯形图的模拟程序:
macro_command main() // 主函数。周期执行,时间1s
bool I00,T37,T38,Q00 //I00和Q00: 分别为长开触点I0.0和线圈Q0.0的状态变量,T37、T38定时器状态变量
图1 闪烁电路PLC梯形图程序的EBpro模拟编程效果图
模拟程序界面可以梯形图为背景,背景元件旁安置相应的组态元件。组态软件编程灵活性较大,可以根据教者要求在任意位置上设置元件,输出控制过程中的信息,从而生动地表达梯形图设计思想和联动设备的工作流程。与STEP7-Micro/WIN编程软件中“监视程序”不同的是,首先,该模拟程序每个元件在程序控制下状态位改变时,模拟元件的动画图标会随之变化,开展情景教学;其次,该模拟程序运行时,可为元件重新设置新的参数值,构造新的实验场景。如在闪烁电路模拟程序运行,增大或减小定时器T37、T38预设值PT,Q0.0灯泡的闪烁会变慢或变快,以便显现闪烁电路的工作原理,如图1。
组态软件种类众多,广泛使用的就达十余种,每种软件体系各具特殊性,以上程序在实际运行时,要根据具体使用的组态编程语言语法做适当的修改。PLC梯形图元件众多,控制程序复杂,但在模拟梯形图时把握周期执行性以面向实时状态控制程序的特点,映射梯形图逻辑表达式到组态编程中以简化模拟编程设计,这两个要素是具有普遍性的。组态软件模拟编程能够对梯形图教学提供形象直观教学手段,在某些过程上也可以实现虚拟仿真效果。如果学生能够参与组态软件的设计,无疑将调动学生发挥想向力、激发学生自主学习热情。在工程实践中利用组态软件模拟编程辅助梯形图设计,对于展示PLC程序产品的设计理念和运行效果也有一定的价值。