数控变频器的研究与实现
2015-05-17
作者:曾文龙,李晓龙,胡庆生
来源:2014年微型机与应用第10期
摘 要:变频器控制在工业自动化领域有着广泛的应用,其主要目标是控制电机的运行状态。根据目前控制系统的发展趋势,使用Visual C++的MFC类编写串口程序,以ModBus为通信协议,经RS-232转RS-485电路,实现利用上位机对台达变频器VFD-M的所有参数进行设置,使对变频器的实时控制成为现实,最终实现面向现场的自动化控制。
关键词: 变频器;Visual C++;ModBus协议;串行通信
传统电机采用分立元件的模拟电路控制,但由于控制电路安装难、功耗高、安全性低,以及交流电机无级调速的需求和传统的直流调速技术的限制,工业领域中变频器技术逐渐实用化并投入市场应用。变频器具有过流、过压、过载保护、可控调速、降低线路电压波动、转矩极限可调、停止方式可控、逆转禁止、高效利用能源等众多功能。此外,变频器还集成分级加减速和经典PID等算法,使得复杂的调速控制简单化。因此在自动化领域,特别是在机电一体化系统中,变频器扮演者重要角色。
一般变频器具有两种控制方式:控制面板控制方式和串行通信数据控制方式。控制面板控制方式利用变频器自带控制面板进行手动操控,一般应用于非自动控制场合。在自动化程度越来越高的工业生产现场以及机电一体化的数控设备中,人工操作基本是不可行的。为此,本文采用串行通信数据控制方式,设计了基于Visual C++的变频器上位机控制系统,用来建立与变频器之间的串行通信。该系统具有控制界面直观、操作简单、控制内容齐全等优点。通过RS-232/485串行通信方式直接控制变频器,实现现场交流电机的自动化控制,进而实现“控制-检测-调节-再控制”的闭环控制系统。这是一条可行、高效的技术路线。
1 变频器数字控制方式
1.1 变频器的数字控制的软硬件基础
本文选用台达VFD-M变频器为控制对象,使用Visual C++的MFC类编写串口程序,以ModBus为通信协议,经RS-232转RS-485电路,最终实现利用上位机对台达变频器VFD-M的所有参数的设置,实现对变频器的实时控制。根据变频器的通信地址,操作人员可以在上位机上设置多台变频器的参数,以实现对变频器运行的实时控制。其可视化界面美观、实用,操作简洁。
1.2 变频器命令代码控制方式
在众多的通信协议中,由Modicon公司设计的ModBus通信协议已经成为一个通用工业标准,据此不同厂商生产的控制设备可以连成工业网络,实现集中监控[1]。通过此协议,控制器之间、控制器与其他设备之间可以实现信息交换。使用该通信方式无需附加任何费用,是最为廉价、实用且开放的串行通信方式。本文以RS-485标准构建硬件桥梁,在其上使用ModBus通信协议实现计算机与变频器通信,进而实施控制。在实际的应用中,只需按照变频器规定的通信数据结构、控制字和协议格式发送数据即可实现计算机与变频器的通信。以台达变频器VFD-M为例,采用ModBus ASCII通信协议的运转、停止、正转、反转代码指令分别为:“:010620000002-
D7\r\n”、“:010620000001D8\r\n”、“:010620000010C9\r\n”、“:010620000020B9\r\n”。只要将这些控制代码传送给变频器,即可令变频器执行相应功能,控制电机运转。
2 Visual C++串行通信实现
2.1 Visual C++与MFC简介
Visual C++是微软公司推出的在Win32环境下运行的面向对象可视化集成编译系统的开发程序。MFC是微软生产的名为Microsoft Foundation Classes(微软基础类)的C++类集的缩写形式,它提供面向对象框架,程序开发人员可以使用这一框架创建Windows应用程序,并且MFC按照C++类的层次形式结合在一起,几个高层类提供一般功能,而低层类实现更具体的行为,每一个低层次类都是从高层类中派生出来的,因此继承了高层类的行为[2]。
MFC是一个微软公司提供的类库,以C++类的形式封装了Windows的API,并且包含一个应用程序框架,以减少开发人员开发应用程序的工作量。其中MFC类中包含了大量窗口句柄封装类、Windows自带的控件和组件的封装类。MFC类(或者其派生类)、组件的封装类是MFC应用程序的总体结构。MFC 提供了MFC AppWizard 自动生成框架(用MFC编写的程序绝大部分都能在Windows中完美运行)。
实际上,MFC是微软提供的用于在C++环境下编写应用程序的一个框架和引擎。VC++是Windows下开发人员使用的专业C++ SDK(Standard Software Develop Kit,专业软件开发平台),MFC就是挂在其上的一个辅助软件开发包。
C++和VC++的区别在于C++是一种程序设计语言,是一种完全兼容C语言的软件编制的通用规范;而VC++只是一个编译器、开发工具,或者说是一种集成的应用程序开发平台。
2.2 Cserial类与ActiveX控件MSComm对比
MSComm控件(Microsoft Communication Control)建立在ActiveX基础之上,几乎覆盖了对串口编程接口的所有封装,其最大的好处是技术本身的跨语言特性,即凡是支持ActiveX控件操作的程序设计语言均可使用,例如Visual C++、Visual Basic、Visual FoxPro等。.NET平台语言也同样支持ActiveX,因此,MSComm几乎成了这些不能直接操作系统资源的语言平台上可以进行串口通信的为数不多的方法之一。
但是,在Visual C++中使用MSComm,要比在Visual Basic等语言环境中复杂得多。使用MSComm就要理解COM模型特殊的变量,COM并不是简单的类封装,而是要通过各种复杂的接口和数据转换的过程,才能将对控件的操作转化为最终对Windows API的调用。使用基于MSComm的串口通信程序,可能存在随着通信数据量的加大,整个程序所占内存数量上升的情况,而主程序对此无能为力。除此之外,MSComm控件依赖于消息循环,在一般情况下需要有对话框作为宿主,这使得编写一个使用串口的后台服务几乎成为不可能的事。
Cserial类的优点在于它的开放性,即所有的功能均以源代码提供,开发者不仅可以直接在工程中使用这些代码,而且可以根据项目规划将其编译成静态库、动态库,还可以在原有的基础上进行改造[3]。因此本文使用Cserial 类控制串口。
2.3 使用Cserial类控制串口
Cserial一共有7个文件,作用如下:
(1)Serial.cpp和Serial.h是基础类包装,定义并实现Cserial类。
(2)SerialEx.h和SerialEx.cpp定义并实现继承于Cserial类的CserialEx类,这个类为Windows的消息传递进行了特别的优化,适合于使用SDK编写的图形界面程序。
(3)SerialMFC.h、SerialWnd.h和SerialWnd.cpp 3个文件实现了进一步的包装,便于在MFC中使用Cserial[4]。
例如串口的打开、设置、读、写、关闭函数分别为:
m_port.Open();
m_port.SetUp();
m_port.Write();
m_port.Read();
m_port.Close();
如写运转指令:m_port.Write(":010620000002D7\r\n");。
3 总体方案设计
3.1 总体方案结构
变频器的串行通信系统结构图如图1所示。
3.2 控制界面设计
本文设计的系统所要实现的基本功能是控制变频器输出,使电机能正转、反转、加速和减速。为了使软件有更好的兼容性能,附加了串口配置模块。同时为方便操作员使用,还增加了变频器在STOP模式下的预设模块,并以视图化形式呈现出来,用来完成对一些常用函数的设置。系统控制界面如图2所示。
3.3 串行通信的编程实现
(1)创建基于对话框的项目
①进入Visual C++编程环境,选择“File/New”菜单命令,打开新建项目工作区,选择“Project”标签下的“MFC AppWizard[exe]”选项,在“Project Name”编辑框中输入应用程序项目的名称“数据控制变频器的研究与实现”,在“Location”编辑框中输入相应的文件名和文件路径,单击“OK”按钮。
②在MFC AppWizard-Step1向导页上选择基于对话框的选项(Dialog base),后面其他的向导页都采用默认设置值并确定。
(2)调整对话框属性
①按“Alt+Enter”组合键,弹出“Dialog Properties”对话框。
②设置ID和标题,其他保持默认设置,如图3所示。
(3)给对话框添加控件
将控件工具栏中的控件按钮拖到对话框模板上合适的位置。
(4)根据需要对控件的属性进行设置,如表1所示的对正转按钮的设置。
(5)添加消息映像
在Windows的使用控件编程中,必须事先设定对话框中各控件的消息处理方式,这样,用户才可以向控件发送消息来完成指定的任务,或根据控件产生的消息执行相应的程序代码。为控件添加消息的一般步骤如下。
①打开“MFC ClassWizard”对话框,按“Ctrl+W”组合键,如图4所示。
②选择“Message Maps”标签,从“Class name”列表框中选择“CvisualCDlg”类。
③在“Object IDs”列表框中选择产生消息的控件ID,例如IDC_FORWARD。
④在“Messages”消息框中选择消息响应方式,例如BN-CLICKED方式。
⑤单击“Add Function”按钮,创建相应的成员函数。
⑥选定“Member functions”列表框中的相应成员函数,单击“Edit Code”按钮,在成员函数模板中添加如下程序代码:
void CVisualCDlg::OnForeward()
{
//TODO:Add your control notification handler code here
}
至此系统框架就已经完成,下一步就是针对每一个控件内嵌Cserial类函数来完成对串口的控制,进而控制变频器。
3.4 变频器工作方式设定
要实现对变频器的串行通信控制,需对变频器进行工作方式设定,如表2所示,详细设定值说明可参考台达VFD-M变频器使用手册[5]。
3.5 通信的硬件实现
3.5.1 台达变频器VFD-M
台达VFD-M变频器系列是由中达电通股份有限公司生产的超低噪音迷你型变频器,最大输出功率可达7.5 kW,体积小、噪音低,主要用于三相异步交流电机的控制。
3.5.2 物理接口
台达VFD-M变频器带有RS-485接口,因此可以通过RS-232/485转换器与上位机RS-232端口连接,与上位机建立通信。
将界面控制变为函数控制,建立函数库,通过函数调用实现控制,使其资源共享,便于在不同控制系统中灵活调用。
搜集不同型号的变频器的控制代码,编制控制代码表,供程序定义时使用及在编程过程中调用。这样,程序就可适用于控制各式各样的变频器。
在工业自动化控制领域,组网运行是发展趋势,系统中各控制单元的控制方法及实现,大部要由主控计算机完成。本文以上位机Visual C++6.0为开发平台,使用MFC类进行开发设计,最终形成运行于上位机的应用程序。变频器是自动控制系统中使用较广泛的交流电机控制器,本文通过上位机,用串行通信的方式对变频器操控,进而对交流电机实现控制。这一方案及实现方法能为自动化工程师解决此类问题提供一个理想、良好的解决思路。
参考文献
[1] 崔跃,夏旭东,蒋勇.Quantum控制系统在20 000 m3/h制氧机的应用[J].电气应用,2006(2).
[2] 王文学,张谦,尹岩青.Visual C++6宝典[M].北京:电子工业出版社,2001.
[3] 周韧研,商斌.Visual C++串口通信开发入门与编程实践[M].北京:电子工业出版社,2009.
[4] 曹卫彬.C/C++串口通讯典型应用实例编程实践[M].北京:电子工业出版社,2009.
[5] 董舰,张桓.数字通信在变频器控制中的作用[J].河北联合大学学报(自然科学版),2012(3):93-99.