摘要:該文詳細(xì)論述了基于Modbus協(xié)議的RS485總線通訊機設(shè)計原理及應(yīng)用。物理結(jié)構(gòu)上包括上位機、主站、和多個從站節(jié)點。在上位機與各從站節(jié)點間增加主站,承擔(dān)上位機的輪詢工作,使上位機從繁忙的通信工作中解放出來,并能夠提高系統(tǒng)獨立性,加快系統(tǒng)從故障中恢復(fù)的速度。軟件方面基于Modbus協(xié)議,并且添加CRC校驗,從而有效地提高了系統(tǒng)的可靠性、安全性。本設(shè)計已成功應(yīng)用于某監(jiān)獄門禁控制系統(tǒng)。
現(xiàn)場總線被譽為自動化領(lǐng)域的計算機局域網(wǎng)。在總線種類多樣化的今天,Modbus技術(shù)以其先進(jìn)性、開放性、成熟性使得基于Modbus串行鏈路通信的設(shè)備得到了廣泛的使用,Modbus通信有3種方式:串行鏈路、TCP/IP和ModbusPLUS。本文的研究對象是基于串行鏈路主從式通信結(jié)構(gòu)的設(shè)備。在這種總線網(wǎng)絡(luò)中,系統(tǒng)間的通信一般采取上位機輪詢各節(jié)點的方式,即上位機對各節(jié)點不間斷地進(jìn)行輪詢,當(dāng)輪詢到某節(jié)點時,上位機與此節(jié)點在一定時間間隔內(nèi)互相交換信息。但是當(dāng)節(jié)點數(shù)目眾多時,出于系統(tǒng)響應(yīng)及時性的要求,上位機對各節(jié)點輪詢的時間間隔需要盡可能短,而這樣,輪詢工作將會給上位機造成沉重的負(fù)擔(dān),占用其較多的CPU資源,使得上位機不能專注于完成數(shù)據(jù)處理,同時導(dǎo)致系統(tǒng)的可靠性與安全性降低。
基于此原因,本文提出一種針對串行鏈路的新方法,在上位機與各節(jié)點之間增加一個通訊機(為不至于和各節(jié)點混淆,本文稱其為主站),并給出了基于此主站的上位PC機與各節(jié)點(該系統(tǒng)稱各節(jié)點為從站)的通信流程以及此主站的主程序流程。
1系統(tǒng)的硬件環(huán)境設(shè)計
系統(tǒng)硬件環(huán)境主要包括以下幾個模塊:上位機、主站、從站。對于串行鏈路的Modbus系統(tǒng),其物理接口可以選用RS232或RS485。最常用的接口是RS485兩線制接口。本系統(tǒng)中的上位機采用PC機,其物理接口為RS232接口,而主站的物理接口為RS485接口。所以PC機不能直接連接RS485接口,必須在主站與PC機間進(jìn)行RS232與RS485轉(zhuǎn)換。通過RS232/RS485轉(zhuǎn)換電路將PC機串口RS232信號轉(zhuǎn)換成RS485信號。
圖1硬件框圖
綜上所述,主站和從站硬件的總體設(shè)計如圖1所示,主站與上位機的通信采用RS232的方式,主站與各節(jié)點間的通信采用RS485的方式。從站把來不及傳到PC機的數(shù)據(jù)暫時放到FLASN存儲區(qū)中。從站和FLASH存儲器間通過SPI通訊。
2網(wǎng)絡(luò)通訊協(xié)議
2.1Modbus協(xié)議簡介
Modbus串行鏈路協(xié)議是一個主站-從站協(xié)議,Modbus應(yīng)用層報文傳輸協(xié)議提供了總線或網(wǎng)絡(luò)上連接的設(shè)備之間的客戶機/服務(wù)器通信。在Modbus串行鏈路上,主節(jié)點提供客戶機的功能,而子節(jié)點則作為服務(wù)器。由于Modbus協(xié)議具有幀格式結(jié)構(gòu)、傳輸方式、功能及內(nèi)容簡單、傳輸效率高等優(yōu)點,近年來在控制系統(tǒng)中得到了廣泛的應(yīng)用。本論文所涉及的Modbus協(xié)議,是在采用串行鏈路的RTU模式標(biāo)準(zhǔn)協(xié)議的基礎(chǔ)上,結(jié)合實際應(yīng)用,擴(kuò)展了其幀格式結(jié)構(gòu)和范圍。
主機傳輸?shù)拿顖笪娜缦拢?/strong>
ADOD0D1…DXCRC1CRC2
說明:
ADO:目標(biāo)地址,即站點地址(或稱網(wǎng)絡(luò)設(shè)備地址)。
D0-DX:報文內(nèi)容,X最大為255,(不含CRC1,CRC2)
CRC1,CRC2:CRC校驗結(jié)果。Modbus-RTU協(xié)議采用CRC-16(16位循環(huán)冗余校驗碼)校驗方法,包含16位二進(jìn)制。CRC校驗碼由發(fā)送端計算,放置于發(fā)送信息的尾部。接收端重新計算接收到的信息的校驗碼,并與接收到的校驗碼相比較,如果二者不相符,則表明通訊出錯。
2.2主要通訊過程描述
首先PC機每隔一段時間掃描主站一次,若通訊無異常主站向PC機發(fā)送應(yīng)答碼;同理主站空閑時,也是每隔一段時間依次掃描從站,若通訊無異常從站向主站發(fā)送應(yīng)答碼。而且主站通過優(yōu)先級優(yōu)先接收PC機發(fā)送的報文,這樣可以防止PC機和從站數(shù)據(jù)包的混亂。主站傳遞PC機發(fā)向站點的通訊命令報文或者主站發(fā)送掃描報文,站點接收到命令報文信息后,首先判斷目標(biāo)地址代碼,若目標(biāo)地址與本站點地址不一致則站點回到中斷以前狀態(tài),若地址一致則繼續(xù)判斷命令代碼,根據(jù)命令代碼進(jìn)行相應(yīng)的操作。通訊過程詳細(xì)介紹如下。
2.2.1主站掃描從站
主站首先向目標(biāo)從站發(fā)送掃描碼,從站接收到掃描碼后向主站回發(fā)應(yīng)答碼,主站接收到從站的應(yīng)答碼后即完成對一目標(biāo)從站的掃描。主站通過依次掃描所有目標(biāo)從站來維持整個通訊系統(tǒng)的正常運行。
主站-->從站掃描碼
從站-->主站應(yīng)答碼
注:PC機掃描主站于此相同。
2.2.2主站向目標(biāo)從站下傳數(shù)據(jù)
主站在掃描任一目標(biāo)從站前會檢查數(shù)據(jù)下傳緩沖區(qū)。若有待傳送數(shù)據(jù)報,則會將前一條報文發(fā)送出去,從站接收到報文后向主站發(fā)送應(yīng)答碼,主站接收到應(yīng)答碼后完成數(shù)據(jù)報文的傳送。
主站-->從站數(shù)據(jù)
從站-->主站應(yīng)答碼
2.2.3從站向主站上傳數(shù)據(jù)
從站向主站的數(shù)據(jù)傳送是被動的。從站在接收到主站的掃描碼后會檢查上傳緩沖區(qū),若有數(shù)據(jù)報要發(fā)送,則會將數(shù)據(jù)報上傳給主站,主站在接收到數(shù)據(jù)報后繼續(xù)發(fā)送確認(rèn)碼給該從站。
主站-->從站掃描
從站-->主站數(shù)據(jù)
主站-->從站確認(rèn)碼
從站-->主站應(yīng)答碼
2.2.4通訊異常檢測
主站向某一從站發(fā)送報文(掃描碼或數(shù)據(jù)報文)后會偵聽從站的響應(yīng),若在規(guī)定的時間內(nèi)接收到了從站的報文(應(yīng)答碼或數(shù)據(jù)報文),則認(rèn)為對該站的通訊是正常的;若在規(guī)定的時間段內(nèi)沒有接收到該從站到正常響應(yīng)報文,主站會重新發(fā)送同一條報文,若連續(xù)3次發(fā)送都沒有接收到從站的正常響應(yīng)報文,就認(rèn)為主站同該從站的通訊發(fā)生了異常。
2.2.5廣播報文
主站可以向所有從站發(fā)送廣播報文,廣播報文的目的地址為0xf5。從站接收到廣播報文后不能向主站發(fā)送應(yīng)答碼或數(shù)據(jù)報。
2.2.6獲取從站狀態(tài)信息
從站在檢測到狀態(tài)改變時會記錄狀態(tài)改變信息,在主站掃描到從站時將狀態(tài)改變信息上傳到主站,主戰(zhàn)將報文添加到轉(zhuǎn)發(fā)報文緩沖區(qū)等待傳送到上位機,上位機接收后向主站發(fā)送確認(rèn)碼,主站收到確認(rèn)碼后轉(zhuǎn)發(fā)到從站。
主站在系統(tǒng)啟動時會向所有從站發(fā)送狀態(tài)請求廣播報文,從站收到狀態(tài)請求廣播報文后準(zhǔn)備狀態(tài)信息報文,在主站掃描到從站時將狀態(tài)信息報文上傳到主站。
2.2.7時間同步
主站在系統(tǒng)啟動時會向所有從站發(fā)送時間同步廣播報文,從站在收到時間同步廣播報文后根據(jù)設(shè)置報文內(nèi)容調(diào)整時鐘。
從站在上電運行后準(zhǔn)備請求時間同步報文,在主站掃描到從站時將報文上傳到主站,主站接收到請求時間同步報文后,即刻將本地時間以時間同步報文的形式發(fā)送到請求從站,從站接收到時間同步報文后,根據(jù)報文內(nèi)容調(diào)整時鐘。
2.2.8上位機發(fā)送數(shù)據(jù)到從站
PC-->主站數(shù)據(jù)包
若主站掃描狀態(tài)恰好為等待數(shù)據(jù)回應(yīng),則將數(shù)據(jù)暫時放到掃描發(fā)送緩存區(qū),并等待數(shù)據(jù)發(fā)送完畢;否則向PC回應(yīng)主站忙。
主站-->從站數(shù)據(jù)包
從站-->主站確認(rèn)碼
若收到應(yīng)答碼,向PC回應(yīng)發(fā)送成功,否則回應(yīng)發(fā)送失敗
主站-->PC確認(rèn)碼
下一PC數(shù)據(jù)
下一數(shù)據(jù)-->主站
或完成碼-->主站
完成碼-->從站
2.2.9從站提交數(shù)據(jù)到上位機
主站掃描子站時,子站將數(shù)據(jù)包發(fā)送到主站,主站轉(zhuǎn)發(fā)到上位機,上位機收到后發(fā)送數(shù)據(jù)收到確認(rèn)包到主站,主站收到確認(rèn)包后轉(zhuǎn)發(fā)到從站。從站未收到確認(rèn)包,不會進(jìn)行其他數(shù)據(jù)的上傳。在規(guī)定時間內(nèi)未收到確認(rèn)包認(rèn)為數(shù)據(jù)傳送失敗。
主站-->從站掃描碼
從站-->主站數(shù)據(jù)
主站-->PCFLASH存儲器中數(shù)據(jù)
PC-->主站確認(rèn)碼(放入FLASH存儲器)
主站-->從站確認(rèn)碼
從站-->主站應(yīng)答碼
3軟件實現(xiàn)
主站主要完成2個功能:對各節(jié)點進(jìn)行掃描以獲取并保存各節(jié)點的通信狀態(tài);對上位機與各從站之間的報文進(jìn)行可靠轉(zhuǎn)發(fā)。軟件流程如圖2所示,系統(tǒng)上電后,首先進(jìn)行初始化操作,主要包括設(shè)置串口、定時器,開啟開門狗,配置芯片引腳等內(nèi)容。
系統(tǒng)初始化成功后,主站向上位機請求從站配置信息,主要包括從站數(shù)量、各從站的地址、各從站配置情況即從站為啟用還是閑置狀態(tài)。
從站配置信息請求成功后,主站開始對各從站進(jìn)行掃描,并對掃描中產(chǎn)生的從站報文進(jìn)行處理。每掃描完一個從站,主站都會去查看有無來自上位機的報文,并對報文進(jìn)行適當(dāng)處理。當(dāng)經(jīng)過一定時間間隔后主站再去掃描下一個從站。
其中,在來自上位機的報文中,有的報文是需要轉(zhuǎn)發(fā)給某個從站的,在掃描期間來自從站的報文中,有的也是需要轉(zhuǎn)發(fā)給上位機的。只有合理設(shè)計轉(zhuǎn)發(fā)協(xié)議,才能既保證報文的可靠傳輸,又不致于使系統(tǒng)實時性明顯變差或產(chǎn)生網(wǎng)絡(luò)堵塞。本系統(tǒng)將來自上位機的報文分為3類:第1類是上位機直接傳給主站的,主站收到這類報文,進(jìn)行簡單回復(fù),這次通信完成;第2類是上位機發(fā)給某個從站并且需要得到從站回復(fù)信息的,這時候需要主站將報文轉(zhuǎn)發(fā)給此從站,并將此從站的回復(fù)信息再轉(zhuǎn)發(fā)給上位機;第3類是上位機發(fā)給某從站但不需要回復(fù)的,這時主站將報文傳給此從站,但不需要等待從站的回復(fù)信息,這次通信完成。同理,在掃描過程中,對從站產(chǎn)生的報文的處理也分為類似3種,具體處理過程如圖2所示。
圖2主程序流程圖
本控制系統(tǒng)的設(shè)計中,由于主站的使用,一方面,上位機不再承擔(dān)對眾多從站的輪詢工作,使其擁有了更多的CPU資源進(jìn)行快速響應(yīng)、處理人機交互與日志存儲等事件,順暢完成眾多動畫的播放,提高了系統(tǒng)的事件處理與響應(yīng)能力;另一方面,在傳統(tǒng)的主從式RS485通信網(wǎng)絡(luò)中,當(dāng)某根通信線由于意外或者人為原因造成短接或斷路后,可能導(dǎo)致整個通信網(wǎng)絡(luò)癱瘓,主站的使用,使得原本連接在同一網(wǎng)絡(luò)上的上百個從站分成幾個相對獨立的網(wǎng)絡(luò),當(dāng)某一網(wǎng)絡(luò)發(fā)生故障時,將不會對其他網(wǎng)絡(luò)的通信造成影響。同時,由于主站可以脫離上位機單獨對各從站進(jìn)行掃描并實時獲取各從站的當(dāng)前狀態(tài),如果上位機需要從某種故障中恢復(fù)并進(jìn)行重新啟動,它可以直接從主站中快速獲取整個系統(tǒng)中所有從站的當(dāng)前狀態(tài),主站還可以根據(jù)掃描從站數(shù)的多少,自動調(diào)整掃描時間間隔,在保證系統(tǒng)響應(yīng)的前提下降低通信故障率,提高系統(tǒng)可靠性與安全性。
4結(jié)語
本文詳細(xì)論述了基于Modbus協(xié)議的RS485總線通訊機設(shè)計原理。雖然此主站的增加會使系統(tǒng)成本稍有上升,但它不僅可以使上位機從繁忙的通信工作中解放出來,更好地完成人機交互、數(shù)據(jù)處理、動畫播放等任務(wù),而且還能夠提高系統(tǒng)獨立性,加快系統(tǒng)從故障中恢復(fù)的速度,有效地提高系統(tǒng)的可靠性、安全性。本設(shè)計已成功應(yīng)用于某監(jiān)獄門禁控制系統(tǒng),實踐證明該系統(tǒng)運行穩(wěn)定、故障率低、操作方便、安全可靠
評論