基于顺序功能图的工控机VC编程研究*
2015-01-21熊田忠叶文华毛冬辉王祺奥黄艳飞
熊田忠,叶文华,杨 斌,毛冬辉,王祺奥,黄艳飞
(1.南京航空航天大学机电学院,江苏南京210016;2.三江学院电气与自动化工程学院,江苏南京210012;3.南京欧创数控机床有限公司,江苏南京211199)
0 引言
作为控制器,PLC 和工控机(或称IPC)均广泛应用于工业控制领域。PLC 坚固耐用,可靠性高,抗干扰能力强,编程灵活方便,通用性好,特别适合输入/输出点数众多的以顺序逻辑控制为主的工业场合。工控机硬件结构方面有总线标准化程度高、兼容性强,而软件资源丰富、可视化软件编程容易,程序可移植性好,运行速度快,存储量大,联网方便等特点[1-3]。
将PLC 的现场控制优势与工控机的图形界面与数据处理等优势相结合,即PLC 作为下位机主要进行控制,工控机作为上位机进行管理,这样的架构是实现管控分离的分布式系统,成为许多中、大型控制系统的普遍配置方案[4-5],二者又通过通信连接实现管控一体化。
工控机控制系统是基于工控机和一个稳定可靠的操作系统以及一套由不同厂家开发的基于PC 的控制软件,加上一些必要的I/O 硬件设备组成的控制系统。该系统是一种开放式控制,使控制系统和工厂管理系统更易于连接,能够把实时逻辑控制、连续生产过程和批量生产过程控制、运动控制、可视化操作、信息分析、系统诊断等功能集成到一个紧凑的软件包中,这些软件通常以通用免费的VC、VB、Delphi 等进行开发,能完成一些PLC 难以完成的工作,并且成本相对于PLC结合工控机的控制系统更为低廉[6-8]。但是,单一工控机控制系统的研究文献均未对顺序逻辑控制方法进行系统、通用化的论述。
梯形图是PLC 的一种主要编程语言,采用经验法设计梯形图,设计使用的时间、设计的质量与设计者的经验有很大关系。对于复杂的控制系统,分析起来非常困难,容易遗漏掉一些应加以考虑的问题;设计出的梯形图往往非常复杂,难读懂,这也给PLC 控制系统维护和改进带来了很大的困难。顺序功能图(sequential function chart)又称为状态转移图或功能图,它是描述控制系统的控制过程、功能和特性的一种图形,也是设计可编程程序控制器的顺序控制程序的有力工具。顺序功能图具有直观、简单、逻辑性强的特点,不仅可使工作效率大为提高,而且能使程序调试极为方便[9-11]。
近年来正在发展的软PLC 技术可以解决工控机顺序逻辑控制问题。软PLC 技术是一种基于IPC 或EPC 的将PLC 的控制功能封装在软件内的控制技术,也就是通过软件来实现标准硬件PLC 的基本功能。但是,软PLC 技术又会增加额外开发或软件成本[12-14],在PLC 顺序控制不占主要的控制系统中采用软PLC 技术不是很有必要。
通常的工控机一般不具有顺序功能图和梯形图编译软件,笔者研究的是基于顺序功能图的VC 编程方法,在单一工控机控制系统上可以较方便地实现类似PLC 的顺序控制功能,在以VC 等应用软件编程的工控机控制系统中,本研究提出的方法容易与其他控制系统功能软件很好地融合,且实现成本低。
1 典型顺序功能图实例
一个典型顺序功能图实例如图1所示。S0 ~S8为顺序功能图的“步”,其中S0 为“起始步”;步与步之间的连线为步转换方向线;转换方向线上标出的是转换条件;每步右侧线连方格部分为步输出,本研究的步输出须以设置(Set)和复位(Reset)的形式给出,而不能直接挂线圈。本例S0-S1-S2 步转换关系为单行序列,S2-S3 转换或S2-S4 转换为选择序列,S5-S6、S7 的转换为并行序列,通常的顺序控制均以这3 种序列形式组合而成。符合顺序控制的过程只要用顺序功能图准确描述,就能够以适当方法“翻译”成相应的梯形图程序,阅读、调试、修改都比较方便,且不容易出错。程序分步转换程序和步输出程序,下面以西门子S7-300 PLC 的梯形图编程为例给出部分程序,其他程序可以参照编写,其中步S0 ~S8 以M10.0 ~M11.0 的9 个位逻辑表示。
图1 一个典型顺序功能图实例
1.1 步转换程序的梯形图实现
图1 实例的选择序列S2-S3,S2-S4 及其合并S3-S5,S4-S5,并行序列S5-S6、S7 及其合并S6、S7-S8 的步转换程序梯形图如图2所示。
图2 部分步转换程序梯形图
1.2 步输出程序的梯形图实现
图1 实例的S8 步的步输出程序梯形图如图3所示。
图3 部分步输出程序梯形图
2 顺序功能图的VC 实现
本研究采用VC + +6.0 编写基于顺序功能图的顺序控制程序时采用如下方法:
单独开一个线程进入一个循环的扫描控制程序模拟PLC 主扫描循环,从而可以不影响控制系统的其他界面操作,线程的优先级根据需要而定;在主扫描循环程序中依次编写输入映射、步转换、步输出、输出映射等子程序代码;采用开线程结合Sleep 函数实现PLC定时器功能,逻辑上不同时开启的定时器都可以采用一个线程控制。总体程序流程图如图4所示。其中,各线程可以根据需要设定不同的优先级。
图4 总体程序流程图
下面笔者以图1 顺序功能图为例分别加以叙述,其中,步转换程序和步输出程序仅给出了部分参考程序代码,其他代码可以参照编写。
2.1 变量定义
定义相关变量及其含义如表1所示。
表1 变量定义
2.2 主扫描循环线程
编写名为PlcMainCycle 的线程程序如下:
在需要调用时,可写入如下代码:
AfxBeginThread(PlcMainCycle,NULL,THREAD_PRIORITY_NORMAL);//主扫描循环线程开启
2.3 输入输出映射
输入映射程序功能是将外部输入状态(数字量输入DI 或模拟量输入AI 等)读入到内存变量,本例将DI 读入到InputMap;输出映射程序是将处理好的用以更新外部输出状态的值映射到外部设备(数字量输出DO 或模拟量输出AO 等),本例将OutputMap 映射到DO。通常可以调用I/O 设备厂家提供的静态链接库或动态链接库相应函数即可完成。
2.4 步转换程序
步转换程序采用条件语句和位操作符、逻辑运算符等即可容易实现,以图1 实例的并行序列S5-S6、S7 及其合并S6、S7-S8 的步转换程序为例,参考代码如下:
2.5 定时器线程
与PLC 不同,在Windows 多任务操作系统下VC编程没有多个独立定时器可用。针对常用的延时接通定时器,本研究采用了线程结合Sleep 函数的方法来实现。定时器线程代码如下:
需要注意的是,逻辑上同时运行的定时器不可以采用一个线程控制,要分别编写和开启不同的类似线程,否则会引起错乱,如图1 的T2 和T3 定时器。该方法定时器调用时,在相应输出程序中先复位对应的延时到标志位,再设定延时ms 数值,最后开启对应的定时器线程。定时器线程中,程序挂起设定延时ms 数值时长后,置位对应延时到标志位。延时到标志位的状态供主扫描循环线程查询使用。具体使用代码示例见2.4 节S6、S7-S8 步转换程序和2.6 节S6、S7 步输出程序。
2.6 步输出程序
同样,步输出程序也只需通常的条件语句和位操作符、逻辑运算符即可实现,图1 实例S6 和S7 步输出程序参考代码如下:
为使程序更清晰、便于移植,以上步转换程序和步输出程序中,部分移位的位数也可以采用宏定义。
3 实验及结果
在主频为2.53 GHz,Intel Core i3 CPU 的PC 机,Windows XP 操作系统上,本研究采用VC+ +6.0 建立基于基本对话框的MFC 应用程序,通过读取Windows的CPU 时间戳的方法对主扫描循环时间进行测试,经运行调试,顺序控制功能正确,程序运行约2 min 后的某画面如图5所示。
图5 运行结果图
由图5 可见,平均主扫描循环周期仅约6.6 ×10-5ms,最大值也仅约1.49 ms,远小于通常PLC 主扫描周期限值(与I/O 设备硬件反应有关,通常设为150 ms左右),可见,该方法在通常的工控机硬件条件下完全可以承担规模大得多的顺序控制功能;查看Windows 任务管理器,此时CPU 使用27%。为减小程序运行时的CPU 资源占用,可在主扫描循环程序中增加Sleep(50)语句,运行后CPU 资源占用减小为5%左右,比该程序不运行时占用2%左右略高。
4 结束语
本研究提出了一种工控机在Windows 操作系统下,采用VC 编程实现基于顺序功能图的类似PLC 顺序控制的控制方法,在工艺步骤以顺序功能图确定后,也可以“翻译”成相应的程序代码,实现顺序控制功能。该方法具有较好的编程灵活方便、低成本和良好的控制性能,在柔性PCB 加强板预贴机上得到较长时间的工程应用验证,具有一定的应用价值。
[1]王 起.论PLC、单片机、工控机在工业现场中的应用及选用方法[J].广西轻工业,2011(1):60-61.
[2]朱铮涛.计算机顺序逻辑控制系统设计[J].机床与液压,2001(3):53-55.
[3]杜明侠.PC-BASED 控制系统在图书配送中的应用设计[J].华北水利水电学院学报,2008,29(1):87-88,91.
[4]马杏军,刘 谨,陈敏贤.PLC 与工控机集成控制在汽车固定节检漏中的应用[J].机电工程,2001,18(3):33-36.
[5]刘保杰,强宝民.基于工控机和PLC 的电液比例同步控制液压实验台的设计[J].机床与液压,2012,40(18):82-48.
[6]权建洲,赖向东,吴保芳.基于工控机位置伺服同步系统的开发[J].机电工程,2002,19(4):7-9.
[7]孙频东,陈小虎,赵芙生.基于工控机的回转窑控制系统[J].工业控制计算机,2000,13(3):49-51.
[8]费建林,杨正波.大型中空微机控制系统[J].电子仪器仪表用户,1997(3):16-19.
[9]左 毅,陈燎原.PLC 梯形图的三种顺序控制设计法[J].机床电器,2007(2):43-46.
[10]陆秀令,张松华,张忠贤.PLC 梯形图的顺序控制设计法[J].机床与液压,2004(4):150-151.
[11]廖常初.PLC 梯形图的顺序控制设计法与顺序功能图[J].电工技术杂志,2001(10):51-53.
[12]陈婵娟,李 龙.软PLC 开发系统指令表编辑模块的研究与实现[J].制造技术与机床,2012(12):224-226.
[13]陈 佳,刘林林.基于工业PC 的软PLC 的设计与实现[J].工业控制计算机,2009,22(1):5-7.
[14]马雄波.基于PC 机的开放式多轴软数控系统关键技术研究与实现[D].哈尔滨:哈尔滨工业大学机电工程学院,2007.