游乙龍
(廣東省粵東技師學(xué)院電氣工程系,廣東 汕頭 515041)
通用變頻器是三相異步電動機進行調(diào)速的首選控制器。一般來說,可采用面板、外部端子和通訊3種基本方法實現(xiàn)變頻器運行指令和頻率值的給定[1-3]。面板方式適合對變頻器參數(shù)進行初始設(shè)置,如系統(tǒng)調(diào)試、維護階段,外部端子走線不宜太長,特別是模擬量給定方式容易受到干擾、精度不高。隨著現(xiàn)場總線技術(shù)的普及,通訊方式逐步成為主流做法。不同廠家往往開發(fā)有自家的專門協(xié)議,用于快速實現(xiàn)自家PLC與變頻器的通訊控制,如三菱變頻器采用ASCII碼形式專用協(xié)議[4-5]、西門子變頻器采用USS協(xié)議[6]、松下變頻器采用MEWTOCOLCOM協(xié)議[7]等,不利于不同品牌之間的自由選用。而在一些應(yīng)用場合,如水洗機、擠出機等只需實現(xiàn)多臺變頻器的控制,且根據(jù)控制要求同一控制系統(tǒng)可能選用不同品牌的變頻器。
Modbus是用于工業(yè)現(xiàn)場的總線協(xié)議,具有完全免費、簡單易用、標(biāo)準(zhǔn)規(guī)范等優(yōu)點,在工業(yè)控制中獲得廣泛的應(yīng)用。大多數(shù)通用變頻器搭配有RS485接口電路、內(nèi)置有Modbus協(xié)議。陳建榮等[8]、吳征等[9]、郝迎吉等[10]給出了基于Modbus協(xié)議的、以單片機為控制核心的變頻器通訊控制方案,但缺少單片機Modbus主站功能的具體實現(xiàn),也未給出實用的控制程序。本文設(shè)計制作了一款帶有RS485接口電路的、8進8出的單片機控制板,分析設(shè)計Modbus控制程序,通過淘晶馳串口屏進行人機交互,實現(xiàn)對不同品牌變頻器的通訊控制。
單片機控制板是控制系統(tǒng)的核心,通過TTL電平實現(xiàn)與串口屏的全雙工通訊,接收串口屏發(fā)來的運行指令、運行頻率,同時定時將查詢到的變頻器的狀態(tài)信息上傳到串口屏中進行顯示。在實際工程中,為提高控制系統(tǒng)的可靠性,變頻器的運行指令還允許通過外部物理信號進行控制,為此單片機控制板接收外部按鈕等開關(guān)信號。單片機板、變頻器通過RS485總線二線制連接,并以單片機板作為Modbus主站,各變頻器作為具有指定站號的從站。控制的核心是,按Modbus協(xié)議,單片機將控制信號按一定控制邏輯產(chǎn)生相應(yīng)的查詢幀發(fā)送到總線上,目標(biāo)從站處理后按規(guī)定的幀格式進行應(yīng)答。本文分析了Modbus通訊的幀格式及其單片機編程實現(xiàn)??刂瓶驁D如圖1所示。
圖1 控制框圖
本文選用國產(chǎn)增強型8051內(nèi)核、超高性價比的STC單片機作為主控,具體型號是STC15F2K60S2-PDIP40。該型號具有兩個串口,其中一路與串口屏進行TTL通訊,接收觸摸屏的命令、上傳變頻器的狀態(tài);一路設(shè)計RS485接口電路實現(xiàn)Modbus通訊。該控制板設(shè)計有8路漏型輸入、8路晶體管輸出,可靈活增加輸入輸出信號,比如輸入按鈕信號,用以控制運行指令。整個電路板使用24VDC開關(guān)電源供電,輸入輸出電路、RS485通訊電路均使用光耦(EL357)隔離,其中RS485接口電路使用2片高速光耦(TLP109)隔離收發(fā)信號、1片普通光耦作為方向控制信號。電源使用DCDC隔離電源模塊,B2405S將輸入電壓24 V轉(zhuǎn)為控制板所需的5V電源,B0505S產(chǎn)生隔離的RS485電源。特別地,為提高波特率的準(zhǔn)確性和通訊穩(wěn)定性,時鐘電路選用外部22.1184 MHz的晶振,而不使用內(nèi)部RC時鐘。單片機控制板框圖、實物圖如圖2所示。
圖2 單片機控制板
三菱FR-A700系列變頻器的通訊分為使用變頻器的PU接口的通訊和使用RS485端子的通訊,分別對應(yīng)兩組不同的參數(shù)。PU接口方式的通訊,使用三菱變頻器專用協(xié)議,且通訊幀采用ASCII碼格式,數(shù)據(jù)密度低,通訊效率低;RS485端子使用標(biāo)準(zhǔn)化、通用的Modbus RTU協(xié)議。RS485端子如圖3(a)所示,可采用四線式、兩線式兩種接法。兩線式更為普遍,將RXD1+和TXD1+短接并接RS485總線的A端,將RXD1-和TXD1-短接并接RS485總線的B端,如圖3(b)所示。
圖3 FR-A700變頻器RS485端子
相互通訊的各方必須設(shè)置同樣的通訊格式,才能確保通訊正常。本文通訊格式統(tǒng)一設(shè)置為9600/8/N/2,即通訊波特率為9600 bit/s,8位數(shù)據(jù)位,無奇偶校驗,2位停止位。三菱變頻器使用RS485端子的ModbusRTU通訊相關(guān)的參數(shù)如表1所示。設(shè)置通訊參數(shù)前,建議執(zhí)行ALLC=1操作,將所有參數(shù)恢復(fù)出廠默認值。
表1 三菱變頻器RS485通訊參數(shù)設(shè)置
西門子V20系列變頻器的控制回路接線端子如圖4所示,P+接RS485總線A端,N-接RS485總線的B端。西門子V20變頻器可通過RS485接口的USS協(xié)議與西門子PLC進行通訊。用戶可以通過參數(shù)設(shè)置為RS485接口選擇USS或者Modbus RTU協(xié)議。為增強抗干擾性能,建議使用屏蔽雙絞線作為RS485通訊電纜。
圖4 V20變頻器控制回路接線端子
本文選擇ModbusRTU協(xié)議實現(xiàn)單片機與變頻器的通訊,如前文所述通訊規(guī)格統(tǒng)一為9600/8/N/2,V20變頻器相關(guān)參數(shù)設(shè)置如表2所示。設(shè)置通訊參數(shù)前,最好執(zhí)行恢復(fù)出廠默認值的操作,且在更改P2023后,須對變頻器重新上電。
表2 西門子變頻器通訊參數(shù)設(shè)置
Modbus是用于工業(yè)現(xiàn)場的總線協(xié)議,具有標(biāo)準(zhǔn)、開放、免費、通俗易懂等優(yōu)點,支持多種電氣接口,已納入國家標(biāo)準(zhǔn)。Modbus分為標(biāo)準(zhǔn)Modbus、Modbus-TCP、Modbus Plus三種形式。標(biāo)準(zhǔn)Modbus的物理層是串行鏈路,廣泛采用的是RS485電氣接口。串行鏈路Modbus可分為ASCII碼和RTU兩種傳輸模式。RTU模式具有較高的數(shù)據(jù)密度,在相同的波特率下比ASCII模式有更高的吞吐率,是標(biāo)準(zhǔn)Modbus要求支持的傳輸模式。Modbus串行鏈路協(xié)議是一個主-從協(xié)議。Modbus通訊總是由主站發(fā)起,從站被動響應(yīng),從站從來不會主動向主站發(fā)送信息,從站之間也從來不會相互通訊。主站可以采用單播模式和廣播模式向從站發(fā)送信息。每個從站都有一個唯一的站號。Modbus的對象有單比特和16比特兩個類型。單比特類型主要處理離散輸入與線圈,16比特類型則是兩字節(jié)的寄存器。在工程實際應(yīng)用中,用戶可以將16個單個比特類型的對象包裝成一個16比特類型的寄存器,讀寫一個16比特的寄存器可以實現(xiàn)對16個單比特類型的對象進行讀寫操作。
查閱手冊[11-12],無論是三菱變頻器還是西門子變頻器,在Modbus通訊時,均主要支持0x03、0x06、0x10三個功能碼,其中0x03功能碼的主要功能是讀取保持寄存器的數(shù)據(jù),用戶可實時監(jiān)視變頻器的各種狀態(tài)信息、運行參數(shù)等,0x06功能碼的主要功能是向單個保持寄存器寫入數(shù)據(jù),實現(xiàn)變頻器的運行控制或頻率調(diào)節(jié),0x10功能碼則可以一次向多個保持寄存器寫入數(shù)據(jù)。在實際應(yīng)用中,可以簡化成只需用兩個功能碼,即0x03監(jiān)視運行狀態(tài),0x06實現(xiàn)運行控制與頻率值寫入。Modbus通訊有關(guān)寄存器分析匯總?cè)绫?所示。
表3 Modbus寄存器
V20變頻器使用基準(zhǔn)變量,這有助于采用統(tǒng)一的方式顯示設(shè)定值和實際值信號,一個100%的值相當(dāng)于一個0x4000的過程數(shù)據(jù)值。用戶通過設(shè)置P2000~P2004分別實現(xiàn)基準(zhǔn)頻率、基準(zhǔn)電壓、基準(zhǔn)電流、基準(zhǔn)轉(zhuǎn)矩、基準(zhǔn)功率的設(shè)置。寄存器40101的數(shù)據(jù)與頻率值的對應(yīng)關(guān)系是:
已知期望輸出頻率,則寄存器40101的設(shè)定值表示為:
單片機程序分為串口基本讀寫部分、串口屏通訊部分、ModbusRTU主站程序等3部分。串口1與串口屏通訊,初始化為38400/8/N/1;串口2實現(xiàn)RS485接口,初始化為9600/8/N/2,兩路串口均使用環(huán)形數(shù)組實現(xiàn)串口數(shù)據(jù)的讀寫,開放收發(fā)中斷且配置為高優(yōu)先級,確保響應(yīng)實時性。
本文選用淘晶馳的X5系列7寸電阻屏,型號是TJC8048X570_011R。相比于工控常用同等尺寸的觸摸屏,串口屏具有明顯的價格優(yōu)勢,開發(fā)難度低,自由靈活設(shè)計用戶界面。單片機與串口屏的通訊是無協(xié)議的自由通訊。串口屏以連續(xù)3個0xff作為數(shù)據(jù)幀的結(jié)尾,一旦接收到第1個字節(jié),串口1開始監(jiān)視接收的信息,如連續(xù)接收到3個結(jié)束符0xff則視為一幀結(jié)束,立即解析并將控制信息通過串口2發(fā)送給相應(yīng)從站。同時,單片機還通過串口1定時將從站的狀態(tài)信息發(fā)往串口屏進行顯示。
標(biāo)準(zhǔn)ModbusRTU要求幀間隔不少于3.5 t,幀中字符間隔不超過1.5 t。由于從站收到查詢幀時需要時間進行處理,再進行應(yīng)答,在實際應(yīng)用中,簡化了對3.5 t的判斷,采用定義一個監(jiān)視變量HostRx_TimeOut,在持續(xù)規(guī)定時間未再接收到字符,則視為一幀結(jié)束HostRx_Time-Out被置為1,開始分析數(shù)據(jù)幀。無論收發(fā),由于使用了緩沖功能,先將數(shù)據(jù)寫入緩沖區(qū)再啟動發(fā)送,確保了同一數(shù)據(jù)幀中的字節(jié)是連續(xù)發(fā)送的,字符間隔不超過1.5 t。
三菱、西門子、ABB[7]等知名品牌變頻器的Modbus通訊均主要支持0x03、0x06、0x10等3個功能碼,在實際工程應(yīng)用中,0x03和0x06這兩個功能碼足以滿足通訊要求。0x03功能碼用于讀取16 bit的寄存器,其收發(fā)幀格式如圖5所示。
圖5 0x03功能碼收發(fā)幀格式
定義從站地址Slave_Addr、寄存器地址RegAddr、寄存器數(shù)量RegNum,則存在如下關(guān)系:查詢幀與應(yīng)答幀的頭兩個字節(jié)相同,分別是從站地址、功能碼(03H);應(yīng)答幀的“字節(jié)數(shù)”等于寄存器數(shù)量RegNum的兩倍;寄存器地址、寄存器數(shù)量、寄存器內(nèi)容都是16 bit類型,在Modbus幀中均高字節(jié)在先、低字節(jié)在后,CRC16則是低字節(jié)在先、高字節(jié)在后。
0x06功能碼用于寫入單個16 bit的寄存器,其收發(fā)幀格式如圖6所示。
圖6 0x06功能碼收發(fā)幀格式
定義寄存器內(nèi)容RegVal。明顯地,0x06功能碼收發(fā)幀完全一致,這是一個重要的判斷依據(jù)。
在編程時,使用全局變量Host_Status,只有當(dāng)Host_Status為0時(稱為準(zhǔn)備狀態(tài))才允許更新功能碼Host_Tx_Code的值,相應(yīng)地更新從站地址Slave_Addr、寄存器地址RegAddr、寄存器數(shù)量RegNum或寄存器內(nèi)容RegVal,再根據(jù)功能碼Host_Tx_Code是0x03還是0x06分別調(diào)用不同的處理函數(shù)。這樣做的好處是避免上一次的通訊被打斷。另外,為提高通訊可靠性,對應(yīng)答幀進行了多次判斷處理,一旦超時或判斷出錯,啟用多次發(fā)送機制,如多次嘗試均失敗,則認定通訊故障。對0x03功能碼而言,在接收到應(yīng)答幀時,依次進行從站地址、CRC校驗、幀長度判斷等判斷無誤后,將接收到的數(shù)據(jù)寄存器值填入到相應(yīng)的區(qū)域。圖7、圖8分別給出了0x03和0x06功能碼的處理函數(shù)。
圖7 0x03功能碼處理函數(shù)
圖8 0x06功能碼處理函數(shù)
本文以單片機控制板為核心、以串口屏為人機界面實現(xiàn)對不同品牌的多變頻器的Modbus通訊控制。設(shè)計了一款通用性強、成本低的單片機控制板,克服了PLC或工控機不利于對不同品牌變頻器的通訊困難,分析了Modbus收發(fā)幀格式,為編寫Modbus通訊處理函數(shù)提供依據(jù)。實踐證明,本方案可以大幅度降低控制系統(tǒng)成本,在成本敏感場合具有明顯的優(yōu)勢。特別地,如使用同一品牌的變頻器,可以使用廣播方式實現(xiàn)對全部從站的同時控制,較好地保障了同步性;同時控制板具有IO功能,可方便實現(xiàn)輸入輸出控制,具有簡易PLC的靈活性。