基于VC的工控机通信系统开发*
2011-09-27陈远方张洛平孟文宝周金朋
陈远方 张洛平 孟文宝 周金朋
(河南科技大学机电工程学院,河南洛阳 471003)
随着变频调速技术的深入发展,基于变频器调速的控制系统在大中型自动化生产中取得了广泛的应用。在实际的工业控制领域,一条生产流水线通常由多台电动机驱动,能否实现多台电动机的协调工作,直接关系到生产的可靠性和产品的质量[1]。人工操作变频器的控制面板,可以完成参数设定、发送运行指令、读各类运行数据等。但过程复杂、专业化要求较强,并且在数据处理、计算、保存等诸多方面存在弱点,无法实现实时控制。目前,国内外大多数变频器公司(如台湾台达、日本东芝等)推出了带有RS-485串行通讯接口的变频器,为用户通过计算机控制变频器提供了条件[2]。本文研究了上位机控制多电动机协同转动的方法。
1 通信方案
在通信领域内,有两种数据通信方式:并行通信和串行通信。串行通信只使用一条数据线,节省传输线。尤其是在远程通信时,此特点尤为重要。本文选择串行通信作为通信工程开发的通讯方式。
1.1 串行通信的实现机制
串行口在Win 32中是作为文件来进行处理的,而不是直接对端口进行操作。对于串行通信,Win 32提供了相应的文件I/O函数与通信函数,通过使用这些函数,可以编制出符合不同需要的通信程序。下面只介绍我们熟知的windows下串行通信的两种方法。
1.1.1 利用MSComm控件
MicrosoftCommunicationsControl(以下简称MSComm)是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,它为应用程序提供了通过串行接口收发数据的简便方法。
1.1.2 采用MFC串口通信编程
Win32系统对文件的概念进行了扩展,无论是文件、通信设备、命名管道、邮件槽、磁盘还是控制台都被看作是文件。因此,可以用MFC中的CFile类来实现对串口的操作。
相对于后种方式,调用MSCOMM串口编程控件显得更加简便,不需要清楚知道各种API的用法,另外由于它在多种语言中的通用性,文中选择通过MSCOMM串口控件实现串行通信。
2 变频器
2.1 台达VFD-B系列
本系统选用台达公司的高机能·向量型交流电动机驱动器VFD-B系列变频器。VFD-B是采用高品质之元件、材料及融合最新的微计算机控制技术制造而成。这款变频器是以RS-485作为串行通信协议并且具有网络功能,RS-485采用平衡发送接收方式,它具有传输距离长(最大可达1 200 m)、抗干扰能力强和多站能力的优点。
2.2 变频器串行通信协议
VFD-B系列交流电动机驱动器使用Modbus networks通讯协议。而Modbus可使用ASCII(American Standard Code for Information Interchange)或RTU(Remote Terminal Unit)两种资料编码。ASCII编码是將所要传送的资料先转换成相对的ASCII码后再传送,而RTU则是资料直接传送,不再经过转换[3]。
以ASCII资料编码为例,简述如下:
10-bit字符框(for ASCII),如图1所示。ASCII资料格式的通讯协议见表1。
表1 ASCII模式通讯协议
(1)ASCII模式:变频器向上位机回应讯息的控制字与发送的控制字格式基本相同,只是在功能码为03H(读出寄存器内容)时,在DATA资料內容中增加资料数(以byte计算),但最多可同时读取连续的20笔数据。
(2)侦误值:ASCII模式的检查码(LRC Check)由Address到Data Content结束加起来的值。
当驱动器做通信连接时,如果产生错误,此时驱动器会回应错误码且将命令码的最高位(bit7)设为1(即Function code AND 80H)回应给主控系统,让主控系统知道有错误产生。并且于驱动器的键盘显示器上显示CE-XX,作为警告信息,XX为当时的错误码。错误码的意义见表2说明。
表2 错误码的意义
3 程序实现
3.1MSCOMM控件串行通信处理方式
MSCOMM控件提供了两种处理通信问题的方法:一是事件驱动(Event-Driven)方式,二是查询方式。
3.1.1 事件驱动方式
本文采用事件驱动方式处理通信问题。首先设置事件通知,当所希望的事件发生时,Windows发出该事件已发生的通知。这种方法的优点是程序响应及时、可靠性高,特别是对于扩展了多个串口的情况,能避免数据丢失[4]。
3.2 MSComm控件串口通信编程实例
3.2.1 创建通信工程ModeProject
打开Visual C++6.0,创建一个基于对话框的MFC AppWizard(exe)项目,命名为 ModeProject,插入MSComm控件。
3.2.2 串口初始化
在Class Wizard中为CModeProjectDlg类添加变量和响应函数。
以单台为例,程序主要部分如下:
3.2.2.1 串口事件处理函数 OnCommMscomm1
MsComm控件一般用事件驱动方式从串口接收数据,事件驱动法完成对数据的监视,并在程序中捕捉和处理这些事件。为串口事件添加OnComm()消息处理函数。消息处理函数是对串口事件的处理,根据自身需要编写[5]。
3.2.2.2 串口初始化
4 实验验证
4.1 闭环调速软件流程图
如图2所示,通讯程序包括:单台、多台选择模式,闭环调节程序,正转、反转、点动、停止、故障复位切换程序,手动、自动调频模块。档位切换、正反停切换由相应按键处理程序完成。闭环调节程序、电动机实际转速的测量、模糊控制算法的实现由速度模块服务程序处理。整个程序由工控机调动,程序初始化完成之后,可以根据需要手动选择单、多台控制模式。以单台为例,可在对话框界面选择变频器,运动开始之后如果速度达不到设定目标,则进行手动或自动调节,如果达到设定速度,则自动等待下一个周期速度比较,不作处理。通过改变变频器的频率值改变电动机转速,电动机转速由编码器反馈到程序的速度处理模块中,从而周而复始运转下去。多台电动机控制原理与单台类似。
4.2 VC++6.0编写的程序对话框界面
程序编写过程中,单台、多台组成 group,电动机停止、正传、反转、点动正传、点动反转、故障复位组成 group,手动、自动校正组成group,这样形成类似互锁模式,当选择时,只能选择同一group中的一个单选框。如图3所示。
在现场实际调试本程序过程中,数据满足实验要求,采用闭环调速,变频器以0.01 Hz为调速单位,调速精度高,精度范围限制在±1 r/min,运行良好。
5 结语
本文详细介绍了VC++下变频器与工控机的通讯工程开发方法,编写程序并通过现场调试,用户可以十分便捷地写出灵活性高,移植性强的串口通信程序,避免了去掌握复杂windows API函数的弊端。这种开发方法具有很强的实用性,系统能够做到无级调速,并广泛地用于工业数据采集等领域。
[1]张丹红,刘波.基于RS-485总线的多电动机同步控制系统研究[J].计算机技术与发展,2009,19(9):228 -231.
[2]杨玲.利用Visual C++6.0的MSComm控件实现计算机与变频器的串行通讯[J].长春师范学院学报,2004,23(1):23 -25.
[3]VFD-B使用手册[Z].中达电通股份有限公司,2008.
[4]高远.通过MSComm控件实现串口的设备间数据传输[J].铁道通信信号,2009,45(1):56 -57.
[5]吉翔,李永全.VC++下MSComm控件的串口通信方法[J].电脑开发与应用,2009,22(12):34 -38.