摘 要: 變頻器控制在工業(yè)自動(dòng)化領(lǐng)域有著廣泛的應(yīng)用,其主要目標(biāo)是控制電機(jī)的運(yùn)行狀態(tài)。根據(jù)目前控制系統(tǒng)的發(fā)展趨勢(shì),使用Visual C++的MFC類編寫(xiě)串口程序,以ModBus為通信協(xié)議,經(jīng)RS-232轉(zhuǎn)RS-485電路,實(shí)現(xiàn)利用上位機(jī)對(duì)臺(tái)達(dá)變頻器VFD-M的所有參數(shù)進(jìn)行設(shè)置,使對(duì)變頻器的實(shí)時(shí)控制成為現(xiàn)實(shí),最終實(shí)現(xiàn)面向現(xiàn)場(chǎng)的自動(dòng)化控制。
關(guān)鍵詞: 變頻器;Visual C++;ModBus協(xié)議;串行通信
傳統(tǒng)電機(jī)采用分立元件的模擬電路控制,但由于控制電路安裝難、功耗高、安全性低,以及交流電機(jī)無(wú)級(jí)調(diào)速的需求和傳統(tǒng)的直流調(diào)速技術(shù)的限制,工業(yè)領(lǐng)域中變頻器技術(shù)逐漸實(shí)用化并投入市場(chǎng)應(yīng)用。變頻器具有過(guò)流、過(guò)壓、過(guò)載保護(hù)、可控調(diào)速、降低線路電壓波動(dòng)、轉(zhuǎn)矩極限可調(diào)、停止方式可控、逆轉(zhuǎn)禁止、高效利用能源等眾多功能。此外,變頻器還集成分級(jí)加減速和經(jīng)典PID等算法,使得復(fù)雜的調(diào)速控制簡(jiǎn)單化。因此在自動(dòng)化領(lǐng)域,特別是在機(jī)電一體化系統(tǒng)中,變頻器扮演者重要角色。
一般變頻器具有兩種控制方式:控制面板控制方式和串行通信數(shù)據(jù)控制方式??刂泼姘蹇刂品绞嚼米冾l器自帶控制面板進(jìn)行手動(dòng)操控,一般應(yīng)用于非自動(dòng)控制場(chǎng)合。在自動(dòng)化程度越來(lái)越高的工業(yè)生產(chǎn)現(xiàn)場(chǎng)以及機(jī)電一體化的數(shù)控設(shè)備中,人工操作基本是不可行的。為此,本文采用串行通信數(shù)據(jù)控制方式,設(shè)計(jì)了基于Visual C++的變頻器上位機(jī)控制系統(tǒng),用來(lái)建立與變頻器之間的串行通信。該系統(tǒng)具有控制界面直觀、操作簡(jiǎn)單、控制內(nèi)容齊全等優(yōu)點(diǎn)。通過(guò)RS-232/485串行通信方式直接控制變頻器,實(shí)現(xiàn)現(xiàn)場(chǎng)交流電機(jī)的自動(dòng)化控制,進(jìn)而實(shí)現(xiàn)“控制-檢測(cè)-調(diào)節(jié)-再控制”的閉環(huán)控制系統(tǒng)。這是一條可行、高效的技術(shù)路線。
1 變頻器數(shù)字控制方式
1.1 變頻器的數(shù)字控制的軟硬件基礎(chǔ)
本文選用臺(tái)達(dá)VFD-M變頻器為控制對(duì)象,使用Visual C++的MFC類編寫(xiě)串口程序,以ModBus為通信協(xié)議,經(jīng)RS-232轉(zhuǎn)RS-485電路,最終實(shí)現(xiàn)利用上位機(jī)對(duì)臺(tái)達(dá)變頻器VFD-M的所有參數(shù)的設(shè)置,實(shí)現(xiàn)對(duì)變頻器的實(shí)時(shí)控制。根據(jù)變頻器的通信地址,操作人員可以在上位機(jī)上設(shè)置多臺(tái)變頻器的參數(shù),以實(shí)現(xiàn)對(duì)變頻器運(yùn)行的實(shí)時(shí)控制。其可視化界面美觀、實(shí)用,操作簡(jiǎn)潔。
1.2 變頻器命令代碼控制方式
在眾多的通信協(xié)議中,由Modicon公司設(shè)計(jì)的ModBus通信協(xié)議已經(jīng)成為一個(gè)通用工業(yè)標(biāo)準(zhǔn),據(jù)此不同廠商生產(chǎn)的控制設(shè)備可以連成工業(yè)網(wǎng)絡(luò),實(shí)現(xiàn)集中監(jiān)控[1]。通過(guò)此協(xié)議,控制器之間、控制器與其他設(shè)備之間可以實(shí)現(xiàn)信息交換。使用該通信方式無(wú)需附加任何費(fèi)用,是最為廉價(jià)、實(shí)用且開(kāi)放的串行通信方式。本文以RS-485標(biāo)準(zhǔn)構(gòu)建硬件橋梁,在其上使用ModBus通信協(xié)議實(shí)現(xiàn)計(jì)算機(jī)與變頻器通信,進(jìn)而實(shí)施控制。在實(shí)際的應(yīng)用中,只需按照變頻器規(guī)定的通信數(shù)據(jù)結(jié)構(gòu)、控制字和協(xié)議格式發(fā)送數(shù)據(jù)即可實(shí)現(xiàn)計(jì)算機(jī)與變頻器的通信。以臺(tái)達(dá)變頻器VFD-M為例,采用ModBus ASCII通信協(xié)議的運(yùn)轉(zhuǎn)、停止、正轉(zhuǎn)、反轉(zhuǎn)代碼指令分別為:“:010620000002-
D7\r\n”、“:010620000001D8\r\n”、“:010620000010C9\r\n”、“:010620000020B9\r\n”。只要將這些控制代碼傳送給變頻器,即可令變頻器執(zhí)行相應(yīng)功能,控制電機(jī)運(yùn)轉(zhuǎn)。
2 Visual C++串行通信實(shí)現(xiàn)
2.1 Visual C++與MFC簡(jiǎn)介
Visual C++是微軟公司推出的在Win32環(huán)境下運(yùn)行的面向?qū)ο罂梢暬删幾g系統(tǒng)的開(kāi)發(fā)程序。MFC是微軟生產(chǎn)的名為Microsoft Foundation Classes(微軟基礎(chǔ)類)的C++類集的縮寫(xiě)形式,它提供面向?qū)ο罂蚣?,程序開(kāi)發(fā)人員可以使用這一框架創(chuàng)建Windows應(yīng)用程序,并且MFC按照C++類的層次形式結(jié)合在一起,幾個(gè)高層類提供一般功能,而低層類實(shí)現(xiàn)更具體的行為,每一個(gè)低層次類都是從高層類中派生出來(lái)的,因此繼承了高層類的行為[2]。
MFC是一個(gè)微軟公司提供的類庫(kù),以C++類的形式封裝了Windows的API,并且包含一個(gè)應(yīng)用程序框架,以減少開(kāi)發(fā)人員開(kāi)發(fā)應(yīng)用程序的工作量。其中MFC類中包含了大量窗口句柄封裝類、Windows自帶的控件和組件的封裝類。MFC類(或者其派生類)、組件的封裝類是MFC應(yīng)用程序的總體結(jié)構(gòu)。MFC 提供了MFC AppWizard 自動(dòng)生成框架(用MFC編寫(xiě)的程序絕大部分都能在Windows中完美運(yùn)行)。
實(shí)際上,MFC是微軟提供的用于在C++環(huán)境下編寫(xiě)應(yīng)用程序的一個(gè)框架和引擎。VC++是Windows下開(kāi)發(fā)人員使用的專業(yè)C++ SDK(Standard Software Develop Kit,專業(yè)軟件開(kāi)發(fā)平臺(tái)),MFC就是掛在其上的一個(gè)輔助軟件開(kāi)發(fā)包。
C++和VC++的區(qū)別在于C++是一種程序設(shè)計(jì)語(yǔ)言,是一種完全兼容C語(yǔ)言的軟件編制的通用規(guī)范;而VC++只是一個(gè)編譯器、開(kāi)發(fā)工具,或者說(shuō)是一種集成的應(yīng)用程序開(kāi)發(fā)平臺(tái)。
2.2 Cserial類與ActiveX控件MSComm對(duì)比
MSComm控件(Microsoft Communication Control)建立在ActiveX基礎(chǔ)之上,幾乎覆蓋了對(duì)串口編程接口的所有封裝,其最大的好處是技術(shù)本身的跨語(yǔ)言特性,即凡是支持ActiveX控件操作的程序設(shè)計(jì)語(yǔ)言均可使用,例如Visual C++、Visual Basic、Visual FoxPro等。.NET平臺(tái)語(yǔ)言也同樣支持ActiveX,因此,MSComm幾乎成了這些不能直接操作系統(tǒng)資源的語(yǔ)言平臺(tái)上可以進(jìn)行串口通信的為數(shù)不多的方法之一。
但是,在Visual C++中使用MSComm,要比在Visual Basic等語(yǔ)言環(huán)境中復(fù)雜得多。使用MSComm就要理解COM模型特殊的變量,COM并不是簡(jiǎn)單的類封裝,而是要通過(guò)各種復(fù)雜的接口和數(shù)據(jù)轉(zhuǎn)換的過(guò)程,才能將對(duì)控件的操作轉(zhuǎn)化為最終對(duì)Windows API的調(diào)用。使用基于MSComm的串口通信程序,可能存在隨著通信數(shù)據(jù)量的加大,整個(gè)程序所占內(nèi)存數(shù)量上升的情況,而主程序?qū)Υ藷o(wú)能為力。除此之外,MSComm控件依賴于消息循環(huán),在一般情況下需要有對(duì)話框作為宿主,這使得編寫(xiě)一個(gè)使用串口的后臺(tái)服務(wù)幾乎成為不可能的事。
Cserial類的優(yōu)點(diǎn)在于它的開(kāi)放性,即所有的功能均以源代碼提供,開(kāi)發(fā)者不僅可以直接在工程中使用這些代碼,而且可以根據(jù)項(xiàng)目規(guī)劃將其編譯成靜態(tài)庫(kù)、動(dòng)態(tài)庫(kù),還可以在原有的基礎(chǔ)上進(jìn)行改造[3]。因此本文使用Cserial 類控制串口。
2.3 使用Cserial類控制串口
Cserial一共有7個(gè)文件,作用如下:
(1)Serial.cpp和Serial.h是基礎(chǔ)類包裝,定義并實(shí)現(xiàn)Cserial類。
(2)SerialEx.h和SerialEx.cpp定義并實(shí)現(xiàn)繼承于Cserial類的CserialEx類,這個(gè)類為Windows的消息傳遞進(jìn)行了特別的優(yōu)化,適合于使用SDK編寫(xiě)的圖形界面程序。
(3)SerialMFC.h、SerialWnd.h和SerialWnd.cpp 3個(gè)文件實(shí)現(xiàn)了進(jìn)一步的包裝,便于在MFC中使用Cserial[4]。
例如串口的打開(kāi)、設(shè)置、讀、寫(xiě)、關(guān)閉函數(shù)分別為:
m_port.Open();
m_port.SetUp();
m_port.Write();
m_port.Read();
m_port.Close();
如寫(xiě)運(yùn)轉(zhuǎn)指令:m_port.Write(":010620000002D7\r\n");。
3 總體方案設(shè)計(jì)
3.1 總體方案結(jié)構(gòu)
變頻器的串行通信系統(tǒng)結(jié)構(gòu)圖如圖1所示。
3.2 控制界面設(shè)計(jì)
本文設(shè)計(jì)的系統(tǒng)所要實(shí)現(xiàn)的基本功能是控制變頻器輸出,使電機(jī)能正轉(zhuǎn)、反轉(zhuǎn)、加速和減速。為了使軟件有更好的兼容性能,附加了串口配置模塊。同時(shí)為方便操作員使用,還增加了變頻器在STOP模式下的預(yù)設(shè)模塊,并以視圖化形式呈現(xiàn)出來(lái),用來(lái)完成對(duì)一些常用函數(shù)的設(shè)置。系統(tǒng)控制界面如圖2所示。
3.3 串行通信的編程實(shí)現(xiàn)
?。?)創(chuàng)建基于對(duì)話框的項(xiàng)目
①進(jìn)入Visual C++編程環(huán)境,選擇“File/New”菜單命令,打開(kāi)新建項(xiàng)目工作區(qū),選擇“Project”標(biāo)簽下的“MFC AppWizard[exe]”選項(xiàng),在“Project Name”編輯框中輸入應(yīng)用程序項(xiàng)目的名稱“數(shù)據(jù)控制變頻器的研究與實(shí)現(xiàn)”,在“Location”編輯框中輸入相應(yīng)的文件名和文件路徑,單擊“OK”按鈕。
?、谠贛FC AppWizard-Step1向?qū)ы?yè)上選擇基于對(duì)話框的選項(xiàng)(Dialog base),后面其他的向?qū)ы?yè)都采用默認(rèn)設(shè)置值并確定。
?。?)調(diào)整對(duì)話框?qū)傩?/p>
?、侔础癆lt+Enter”組合鍵,彈出“Dialog Properties”對(duì)話框。
?、谠O(shè)置ID和標(biāo)題,其他保持默認(rèn)設(shè)置,如圖3所示。
?。?)給對(duì)話框添加控件
將控件工具欄中的控件按鈕拖到對(duì)話框模板上合適的位置。
(4)根據(jù)需要對(duì)控件的屬性進(jìn)行設(shè)置,如表1所示的對(duì)正轉(zhuǎn)按鈕的設(shè)置。
?。?)添加消息映像
在Windows的使用控件編程中,必須事先設(shè)定對(duì)話框中各控件的消息處理方式,這樣,用戶才可以向控件發(fā)送消息來(lái)完成指定的任務(wù),或根據(jù)控件產(chǎn)生的消息執(zhí)行相應(yīng)的程序代碼。為控件添加消息的一般步驟如下。
?、俅蜷_(kāi)“MFC ClassWizard”對(duì)話框,按“Ctrl+W”組合鍵,如圖4所示。
②選擇“Message Maps”標(biāo)簽,從“Class name”列表框中選擇“CvisualCDlg”類。
?、墼凇癘bject IDs”列表框中選擇產(chǎn)生消息的控件ID,例如IDC_FORWARD。
?、茉凇癕essages”消息框中選擇消息響應(yīng)方式,例如BN-CLICKED方式。
?、輪螕簟癆dd Function”按鈕,創(chuàng)建相應(yīng)的成員函數(shù)。
?、捱x定“Member functions”列表框中的相應(yīng)成員函數(shù),單擊“Edit Code”按鈕,在成員函數(shù)模板中添加如下程序代碼:
void CVisualCDlg::OnForeward()
{
//TODO:Add your control notification handler code here
}
至此系統(tǒng)框架就已經(jīng)完成,下一步就是針對(duì)每一個(gè)控件內(nèi)嵌Cserial類函數(shù)來(lái)完成對(duì)串口的控制,進(jìn)而控制變頻器。
3.4 變頻器工作方式設(shè)定
要實(shí)現(xiàn)對(duì)變頻器的串行通信控制,需對(duì)變頻器進(jìn)行工作方式設(shè)定,如表2所示,詳細(xì)設(shè)定值說(shuō)明可參考臺(tái)達(dá)VFD-M變頻器使用手冊(cè)[5]。
3.5 通信的硬件實(shí)現(xiàn)
3.5.1 臺(tái)達(dá)變頻器VFD-M
臺(tái)達(dá)VFD-M變頻器系列是由中達(dá)電通股份有限公司生產(chǎn)的超低噪音迷你型變頻器,最大輸出功率可達(dá)7.5 kW,體積小、噪音低,主要用于三相異步交流電機(jī)的控制。
3.5.2 物理接口
臺(tái)達(dá)VFD-M變頻器帶有RS-485接口,因此可以通過(guò)RS-232/485轉(zhuǎn)換器與上位機(jī)RS-232端口連接,與上位機(jī)建立通信。
將界面控制變?yōu)楹瘮?shù)控制,建立函數(shù)庫(kù),通過(guò)函數(shù)調(diào)用實(shí)現(xiàn)控制,使其資源共享,便于在不同控制系統(tǒng)中靈活調(diào)用。
搜集不同型號(hào)的變頻器的控制代碼,編制控制代碼表,供程序定義時(shí)使用及在編程過(guò)程中調(diào)用。這樣,程序就可適用于控制各式各樣的變頻器。
在工業(yè)自動(dòng)化控制領(lǐng)域,組網(wǎng)運(yùn)行是發(fā)展趨勢(shì),系統(tǒng)中各控制單元的控制方法及實(shí)現(xiàn),大部要由主控計(jì)算機(jī)完成。本文以上位機(jī)Visual C++6.0為開(kāi)發(fā)平臺(tái),使用MFC類進(jìn)行開(kāi)發(fā)設(shè)計(jì),最終形成運(yùn)行于上位機(jī)的應(yīng)用程序。變頻器是自動(dòng)控制系統(tǒng)中使用較廣泛的交流電機(jī)控制器,本文通過(guò)上位機(jī),用串行通信的方式對(duì)變頻器操控,進(jìn)而對(duì)交流電機(jī)實(shí)現(xiàn)控制。這一方案及實(shí)現(xiàn)方法能為自動(dòng)化工程師解決此類問(wèn)題提供一個(gè)理想、良好的解決思路。
參考文獻(xiàn)
[1] 崔躍,夏旭東,蔣勇.Quantum控制系統(tǒng)在20 000 m3/h制氧機(jī)的應(yīng)用[J].電氣應(yīng)用,2006(2).
[2] 王文學(xué),張謙,尹巖青.Visual C++6寶典[M].北京:電子工業(yè)出版社,2001.
[3] 周韌研,商斌.Visual C++串口通信開(kāi)發(fā)入門與編程實(shí)踐[M].北京:電子工業(yè)出版社,2009.
[4] 曹衛(wèi)彬.C/C++串口通訊典型應(yīng)用實(shí)例編程實(shí)踐[M].北京:電子工業(yè)出版社,2009.
[5] 董艦,張桓.數(shù)字通信在變頻器控制中的作用[J].河北聯(lián)合大學(xué)學(xué)報(bào)(自然科學(xué)版),2012(3):93-99.