Win9X平臺下通過RS485通信實現(xiàn)多臺三菱變頻器控制
數(shù)據(jù)格式C和D分別如下:
*1 ACK | *2變頻器站 | *7 |
*1 ACK | *2變頻器站 | *5錯誤代碼 | *7 |
其他的數(shù)據(jù)格式的功能如下:格式A’ 用于運行指令的寫入,其對應(yīng)的應(yīng)答數(shù)據(jù)格式為格式C和格式D;格式 B用于監(jiān)視變頻器的運行參數(shù)(頻率、電壓、電流、轉(zhuǎn)速)及讀出變頻器的系統(tǒng)參數(shù),其對應(yīng)的應(yīng)答數(shù)據(jù)格式為E、E’、F、G、H。
一般情況下,變頻器通過操作面板(PU)來設(shè)置變頻器參數(shù),一旦參數(shù)設(shè)定好了,就不能改變,這樣很難通過現(xiàn)場信號進(jìn)行實時的控制。通過以上對變頻器通信協(xié)議的分析,考慮用軟件來實現(xiàn)工控機與變頻器的串行通信,利用軟件可以靈活的實現(xiàn)系統(tǒng)所需的各種功能而不必改動現(xiàn)場的硬件電路,而且RS-485通信線最多能同時控制32臺變頻器,同時,各變頻器的運行狀態(tài)也能實時地回送給上位機。
5 控制系統(tǒng)通信控制軟件設(shè)計
5.1串口通信程序設(shè)計方法
基于對系統(tǒng)結(jié)構(gòu)和變頻器串口通信協(xié)議的分析,必須對工控計算機的串行口進(jìn)行編程。在DOS的操作系統(tǒng)下,計算機所有的硬件對編程人員是透明的,因此比較容易進(jìn)行內(nèi)存管理和硬件中斷管理,所以程序的響應(yīng)速度快。但是,DOS是單任務(wù)操作系統(tǒng),對硬件資源浪費嚴(yán)重,并且在進(jìn)行圖形界面編程時其難度和任務(wù)量都遠(yuǎn)遠(yuǎn)超過了對硬件部分的編程。因此我們采用Windows 9X操作系統(tǒng)和基于此平臺的開發(fā)軟件來編寫控制系統(tǒng)軟件。
在Windows 9X環(huán)境下,操作系統(tǒng)完全接管了各種硬件資源, 不允許用戶程序直接讀寫硬件端口和進(jìn)行中斷管理。所以早期的程序員只能通過數(shù)目眾多的API函數(shù)來控制端口,使用起來很不方便。
本系統(tǒng)利用VB6.0下提供了一個ActiveX控件(Microsoft Communication控件, 簡稱MSComm 控件)來實現(xiàn)串行口的通信設(shè)計。通過在應(yīng)用程序中嵌入MSComm控件的方式,進(jìn)行計算機串口的通信管理,下面簡要介紹一下MSComm控件的功能:
MSComm 6.0控件可以實現(xiàn)數(shù)據(jù)緩沖區(qū)的管理,Input (從緩沖區(qū)讀取接收數(shù)據(jù))的數(shù)據(jù)類型為Variant,從緩沖區(qū)讀取數(shù)據(jù)的格式為字符串格式(Text)或二進(jìn)制格式(Binary)。
MSComm控件提供的具體功能如表1:
屬性/事件 | 功能 | 類型 |
CommPort | 設(shè)置串口號 | Integer |
Settings | 設(shè)置串口通信參數(shù) | String |
PortOpen | 設(shè)置或返回通信口的狀態(tài) | BOOL |
InputMode | 設(shè)置從緩沖區(qū)讀取數(shù)據(jù)的格式 | Integer |
Input | 從接收緩沖區(qū)讀取數(shù)據(jù) | Variant |
Output | 向發(fā)送緩沖區(qū)寫入數(shù)據(jù) | Variant |
InBufferSize | 接收緩沖區(qū)的大小 | Integer |
InpbfferCount | 接收緩沖區(qū)的字節(jié)數(shù) | Integer |
OutbufferSize | 接收緩沖區(qū)的大小 | Integer |
InpbfferCount | 接收緩沖區(qū)的字節(jié)數(shù) | Integer |
inputLen | 設(shè)置或返回input每次讀出的字節(jié)數(shù) | Integer |
Commevent | 串口事件 | Integer |
其中串口號(CommPort)設(shè)置為1、2 … n等表示COM1、COM2 … COMn。參數(shù)設(shè)置(Settings)的格式為“BBBB,P,D,S”,BBBB表示波特率,P表示奇偶校驗(N:無校驗,E:偶校驗,O:奇校驗),D表示字節(jié)有效位數(shù),S表示停止位數(shù)。串口狀態(tài)(PortOpen)為BOOL變量,TRUE表示打開串口,F(xiàn)ALSE表示關(guān)閉串口。InputMode使程序能方便地選擇從緩沖區(qū)讀取數(shù)據(jù)的格式,設(shè)置為0時,為字符串格式(Text),設(shè)置為1時,為二進(jìn)制格式(Binary)。InputLen設(shè)置或返回的是用Input從緩沖區(qū)讀字符串時每次讀出的字符個數(shù),這個性質(zhì)對于讀出數(shù)據(jù)塊中定長數(shù)據(jù)串非常有用。
InBufferCount和OutBufferCount用于串口的查詢方式。對于較復(fù)雜的通信任務(wù),可通過Com9Xvent處理串口的事件,當(dāng)相應(yīng)事件或串口錯誤事件發(fā)生時,系統(tǒng)會激活OnComm事件,在OnComm中添加用戶的處理代碼,則可實現(xiàn)類似DOS中斷的串口處理程序。
5.2變頻器串口通信軟件結(jié)構(gòu)
為了用該控件控制一個串口進(jìn)行通信操作,還必須在應(yīng)用程序中插入該控件。為此,將MSComm控件插入到程序的某個對話框,并為這個控件對象命名為MSComm1,則程序中對串口的各種操作都可通過對象MSComm1來實現(xiàn)。
下面是串口控制子程序的流程圖:
6 結(jié)束語
本文利用Win9X下的ActiveX控件和三菱變頻器RS-485的串行通信功能,成功實現(xiàn)了在Win9X環(huán)境下單臺IPC機對多臺三菱變頻器的控制,并能實時檢測各變頻器的運行狀態(tài)。整個控制系統(tǒng)靈活方便,具有很大的實用性。本文在Win9X下多臺變頻器控制的設(shè)計方案及軟件實現(xiàn)為此類問題的解決作了很好的嘗試與探索。與DOS方式的控制相比,具有開發(fā)周期短、充分利用硬件資源、軟件界面美觀等優(yōu)點。但由于Win9X是多任務(wù)分時操作系統(tǒng),所以該系統(tǒng)不能做到強實時控制,這是今后有待改進(jìn)的地方。
評論