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