陳遠(yuǎn)方 張洛平 孟文寶 周金朋
(河南科技大學(xué)機(jī)電工程學(xué)院,河南洛陽 471003)
隨著變頻調(diào)速技術(shù)的深入發(fā)展,基于變頻器調(diào)速的控制系統(tǒng)在大中型自動(dòng)化生產(chǎn)中取得了廣泛的應(yīng)用。在實(shí)際的工業(yè)控制領(lǐng)域,一條生產(chǎn)流水線通常由多臺(tái)電動(dòng)機(jī)驅(qū)動(dòng),能否實(shí)現(xiàn)多臺(tái)電動(dòng)機(jī)的協(xié)調(diào)工作,直接關(guān)系到生產(chǎn)的可靠性和產(chǎn)品的質(zhì)量[1]。人工操作變頻器的控制面板,可以完成參數(shù)設(shè)定、發(fā)送運(yùn)行指令、讀各類運(yùn)行數(shù)據(jù)等。但過程復(fù)雜、專業(yè)化要求較強(qiáng),并且在數(shù)據(jù)處理、計(jì)算、保存等諸多方面存在弱點(diǎn),無法實(shí)現(xiàn)實(shí)時(shí)控制。目前,國內(nèi)外大多數(shù)變頻器公司(如臺(tái)灣臺(tái)達(dá)、日本東芝等)推出了帶有RS-485串行通訊接口的變頻器,為用戶通過計(jì)算機(jī)控制變頻器提供了條件[2]。本文研究了上位機(jī)控制多電動(dòng)機(jī)協(xié)同轉(zhuǎn)動(dòng)的方法。
在通信領(lǐng)域內(nèi),有兩種數(shù)據(jù)通信方式:并行通信和串行通信。串行通信只使用一條數(shù)據(jù)線,節(jié)省傳輸線。尤其是在遠(yuǎn)程通信時(shí),此特點(diǎn)尤為重要。本文選擇串行通信作為通信工程開發(fā)的通訊方式。
串行口在Win 32中是作為文件來進(jìn)行處理的,而不是直接對(duì)端口進(jìn)行操作。對(duì)于串行通信,Win 32提供了相應(yīng)的文件I/O函數(shù)與通信函數(shù),通過使用這些函數(shù),可以編制出符合不同需要的通信程序。下面只介紹我們熟知的windows下串行通信的兩種方法。
1.1.1 利用MSComm控件
MicrosoftCommunicationsControl(以下簡稱MSComm)是Microsoft公司提供的簡化Windows下串行通信編程的ActiveX控件,它為應(yīng)用程序提供了通過串行接口收發(fā)數(shù)據(jù)的簡便方法。
1.1.2 采用MFC串口通信編程
Win32系統(tǒng)對(duì)文件的概念進(jìn)行了擴(kuò)展,無論是文件、通信設(shè)備、命名管道、郵件槽、磁盤還是控制臺(tái)都被看作是文件。因此,可以用MFC中的CFile類來實(shí)現(xiàn)對(duì)串口的操作。
相對(duì)于后種方式,調(diào)用MSCOMM串口編程控件顯得更加簡便,不需要清楚知道各種API的用法,另外由于它在多種語言中的通用性,文中選擇通過MSCOMM串口控件實(shí)現(xiàn)串行通信。
本系統(tǒng)選用臺(tái)達(dá)公司的高機(jī)能·向量型交流電動(dòng)機(jī)驅(qū)動(dòng)器VFD-B系列變頻器。VFD-B是采用高品質(zhì)之元件、材料及融合最新的微計(jì)算機(jī)控制技術(shù)制造而成。這款變頻器是以RS-485作為串行通信協(xié)議并且具有網(wǎng)絡(luò)功能,RS-485采用平衡發(fā)送接收方式,它具有傳輸距離長(最大可達(dá)1 200 m)、抗干擾能力強(qiáng)和多站能力的優(yōu)點(diǎn)。
VFD-B系列交流電動(dòng)機(jī)驅(qū)動(dòng)器使用Modbus networks通訊協(xié)議。而Modbus可使用ASCII(American Standard Code for Information Interchange)或RTU(Remote Terminal Unit)兩種資料編碼。ASCII編碼是將所要傳送的資料先轉(zhuǎn)換成相對(duì)的ASCII碼后再傳送,而RTU則是資料直接傳送,不再經(jīng)過轉(zhuǎn)換[3]。
以ASCII資料編碼為例,簡述如下:
10-bit字符框(for ASCII),如圖1所示。ASCII資料格式的通訊協(xié)議見表1。
表1 ASCII模式通訊協(xié)議
(1)ASCII模式:變頻器向上位機(jī)回應(yīng)訊息的控制字與發(fā)送的控制字格式基本相同,只是在功能碼為03H(讀出寄存器內(nèi)容)時(shí),在DATA資料內(nèi)容中增加資料數(shù)(以byte計(jì)算),但最多可同時(shí)讀取連續(xù)的20筆數(shù)據(jù)。
(2)偵誤值:ASCII模式的檢查碼(LRC Check)由Address到Data Content結(jié)束加起來的值。
當(dāng)驅(qū)動(dòng)器做通信連接時(shí),如果產(chǎn)生錯(cuò)誤,此時(shí)驅(qū)動(dòng)器會(huì)回應(yīng)錯(cuò)誤碼且將命令碼的最高位(bit7)設(shè)為1(即Function code AND 80H)回應(yīng)給主控系統(tǒng),讓主控系統(tǒng)知道有錯(cuò)誤產(chǎn)生。并且于驅(qū)動(dòng)器的鍵盤顯示器上顯示CE-XX,作為警告信息,XX為當(dāng)時(shí)的錯(cuò)誤碼。錯(cuò)誤碼的意義見表2說明。
表2 錯(cuò)誤碼的意義
MSCOMM控件提供了兩種處理通信問題的方法:一是事件驅(qū)動(dòng)(Event-Driven)方式,二是查詢方式。
3.1.1 事件驅(qū)動(dòng)方式
本文采用事件驅(qū)動(dòng)方式處理通信問題。首先設(shè)置事件通知,當(dāng)所希望的事件發(fā)生時(shí),Windows發(fā)出該事件已發(fā)生的通知。這種方法的優(yōu)點(diǎn)是程序響應(yīng)及時(shí)、可靠性高,特別是對(duì)于擴(kuò)展了多個(gè)串口的情況,能避免數(shù)據(jù)丟失[4]。
3.2.1 創(chuàng)建通信工程ModeProject
打開Visual C++6.0,創(chuàng)建一個(gè)基于對(duì)話框的MFC AppWizard(exe)項(xiàng)目,命名為 ModeProject,插入MSComm控件。
3.2.2 串口初始化
在Class Wizard中為CModeProjectDlg類添加變量和響應(yīng)函數(shù)。
以單臺(tái)為例,程序主要部分如下:
3.2.2.1 串口事件處理函數(shù) OnCommMscomm1
MsComm控件一般用事件驅(qū)動(dòng)方式從串口接收數(shù)據(jù),事件驅(qū)動(dòng)法完成對(duì)數(shù)據(jù)的監(jiān)視,并在程序中捕捉和處理這些事件。為串口事件添加OnComm()消息處理函數(shù)。消息處理函數(shù)是對(duì)串口事件的處理,根據(jù)自身需要編寫[5]。
3.2.2.2 串口初始化
如圖2所示,通訊程序包括:單臺(tái)、多臺(tái)選擇模式,閉環(huán)調(diào)節(jié)程序,正轉(zhuǎn)、反轉(zhuǎn)、點(diǎn)動(dòng)、停止、故障復(fù)位切換程序,手動(dòng)、自動(dòng)調(diào)頻模塊。檔位切換、正反停切換由相應(yīng)按鍵處理程序完成。閉環(huán)調(diào)節(jié)程序、電動(dòng)機(jī)實(shí)際轉(zhuǎn)速的測量、模糊控制算法的實(shí)現(xiàn)由速度模塊服務(wù)程序處理。整個(gè)程序由工控機(jī)調(diào)動(dòng),程序初始化完成之后,可以根據(jù)需要手動(dòng)選擇單、多臺(tái)控制模式。以單臺(tái)為例,可在對(duì)話框界面選擇變頻器,運(yùn)動(dòng)開始之后如果速度達(dá)不到設(shè)定目標(biāo),則進(jìn)行手動(dòng)或自動(dòng)調(diào)節(jié),如果達(dá)到設(shè)定速度,則自動(dòng)等待下一個(gè)周期速度比較,不作處理。通過改變變頻器的頻率值改變電動(dòng)機(jī)轉(zhuǎn)速,電動(dòng)機(jī)轉(zhuǎn)速由編碼器反饋到程序的速度處理模塊中,從而周而復(fù)始運(yùn)轉(zhuǎn)下去。多臺(tái)電動(dòng)機(jī)控制原理與單臺(tái)類似。
程序編寫過程中,單臺(tái)、多臺(tái)組成 group,電動(dòng)機(jī)停止、正傳、反轉(zhuǎn)、點(diǎn)動(dòng)正傳、點(diǎn)動(dòng)反轉(zhuǎn)、故障復(fù)位組成 group,手動(dòng)、自動(dòng)校正組成group,這樣形成類似互鎖模式,當(dāng)選擇時(shí),只能選擇同一group中的一個(gè)單選框。如圖3所示。
在現(xiàn)場實(shí)際調(diào)試本程序過程中,數(shù)據(jù)滿足實(shí)驗(yàn)要求,采用閉環(huán)調(diào)速,變頻器以0.01 Hz為調(diào)速單位,調(diào)速精度高,精度范圍限制在±1 r/min,運(yùn)行良好。
本文詳細(xì)介紹了VC++下變頻器與工控機(jī)的通訊工程開發(fā)方法,編寫程序并通過現(xiàn)場調(diào)試,用戶可以十分便捷地寫出靈活性高,移植性強(qiáng)的串口通信程序,避免了去掌握復(fù)雜windows API函數(shù)的弊端。這種開發(fā)方法具有很強(qiáng)的實(shí)用性,系統(tǒng)能夠做到無級(jí)調(diào)速,并廣泛地用于工業(yè)數(shù)據(jù)采集等領(lǐng)域。
[1]張丹紅,劉波.基于RS-485總線的多電動(dòng)機(jī)同步控制系統(tǒng)研究[J].計(jì)算機(jī)技術(shù)與發(fā)展,2009,19(9):228 -231.
[2]楊玲.利用Visual C++6.0的MSComm控件實(shí)現(xiàn)計(jì)算機(jī)與變頻器的串行通訊[J].長春師范學(xué)院學(xué)報(bào),2004,23(1):23 -25.
[3]VFD-B使用手冊[Z].中達(dá)電通股份有限公司,2008.
[4]高遠(yuǎn).通過MSComm控件實(shí)現(xiàn)串口的設(shè)備間數(shù)據(jù)傳輸[J].鐵道通信信號(hào),2009,45(1):56 -57.
[5]吉翔,李永全.VC++下MSComm控件的串口通信方法[J].電腦開發(fā)與應(yīng)用,2009,22(12):34 -38.