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