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