郭剛 陳林
【摘 要】本文通過設(shè)計(jì)了單片機(jī)無線通訊硬件電路,實(shí)現(xiàn)了S7-200之間的無線Modbus協(xié)議通訊功能,在工業(yè)應(yīng)用中具有良好的實(shí)用價(jià)值。
【關(guān)鍵詞】PLC;單片機(jī);RS-485;nRF905;Modbus
【Abstract】This paper designs Single-Chip Microcomputer(SCM)wireless communication circuit . The communication among S7-200 PLC via the circuit above is realized and the method above is extremely valuable in industrial application.
【Key words】PLC; Single-Chip Microcomputer; RS-485; nRF905; Modbus
0 引言
隨著我國經(jīng)濟(jì)的高速發(fā)展和城鎮(zhèn)化程度的不斷提高,工業(yè)污水和生活污水日益增多為維持經(jīng)濟(jì)的持續(xù)健康增長和生態(tài)環(huán)境的良性循環(huán),必須對工業(yè)及生活污水加以處理。 在污水處理現(xiàn)場,各設(shè)備較為分散,即使采用現(xiàn)場總線連接,也需要搭建橋架、鋪設(shè)通訊電纜。如果各站點(diǎn)距離較遠(yuǎn),則明顯加大了施工工程量,增加了成本,而且維護(hù)也相對麻煩。基于此背景,必須尋求一種解決方案來避免各站點(diǎn)之間的布線問題。針對此問題,工業(yè)無線傳輸技術(shù)應(yīng)運(yùn)而生,目前國內(nèi)外無線通訊技術(shù)多種多樣,包括WiFi、藍(lán)牙以及ZigBee等。對于工業(yè)現(xiàn)場級的應(yīng)用,適用的無線通訊協(xié)議包括IEEE 802.11、IEEE 802.15.1、IEEE 802.15.4。以上三種協(xié)議均存在一個(gè)共同的問題,即通訊網(wǎng)絡(luò)的實(shí)時(shí)性和可靠性不夠,兩者至少并不能同時(shí)保證滿足高實(shí)時(shí)性工業(yè)現(xiàn)場的要求?;谝陨显颍S多企業(yè)并不愿意放棄成熟的有線技術(shù)冒險(xiǎn)花資金投入無線通訊[1-3]。
本文設(shè)計(jì)的單片機(jī)和無線模塊構(gòu)成的無線數(shù)傳模塊適用于S7-200之間的無線通訊,解決了上述布線問題,在滿足污水處理設(shè)備安全、高效運(yùn)行的同時(shí)具有很好的性價(jià)比,具有良好的經(jīng)濟(jì)、社會效益和推廣前景。
1 系統(tǒng)總體方案設(shè)計(jì)
圖1 系統(tǒng)結(jié)構(gòu)圖
圖2 為單片機(jī)無線數(shù)傳模塊結(jié)構(gòu)圖
本系統(tǒng)其中一臺西門子S7-200 PLC作為系統(tǒng)的主站,而其余的S7-200 PLC作為從站,它們之間的通訊介質(zhì)是無線電波,通訊協(xié)議是Modbus協(xié)議。
無線通訊由STC12LE5A60S2單片機(jī)和無線模塊nRF905組成,其連接是通過單片機(jī)的SPI(Serial Peripheral Interface——串行外設(shè)接口)接口實(shí)現(xiàn),而單片機(jī)與S7-200 PLC之間則是通過RS485總線連接,如圖2所示。
本系統(tǒng)的通訊過程如下:上位機(jī)S7-200通過RS485總線發(fā)送控制命令,單片機(jī)接收數(shù)據(jù)幀并通過SPI接口轉(zhuǎn)發(fā)nRF905模塊,nRF905則通過無線發(fā)射信號。和從機(jī)PLC連接的單片機(jī)通過無線模塊nRF905接收數(shù)據(jù)幀,再通過RS485總線傳送至從機(jī)PLC,從機(jī)從數(shù)據(jù)幀中提取出地址信息并與自身的地址作較。若不符合則丟棄該數(shù)據(jù)幀,反之,則接收數(shù)據(jù)幀,完成相應(yīng)的功能,并返回?cái)?shù)據(jù)幀。其中上述數(shù)據(jù)幀的格式在Modbus協(xié)議中定義。
2 硬件電路設(shè)計(jì)
單片機(jī)串行通訊口是標(biāo)準(zhǔn)的TTL電平,為了完成和PLC之間的多機(jī)通訊則需加上MAX3485芯片。采用MAX3485芯片,一方面是為了完成電平轉(zhuǎn)換,降低傳輸數(shù)據(jù)誤碼率;另一方面,MAX3485芯片有數(shù)據(jù)收發(fā)控制端,方便多機(jī)通訊的實(shí)現(xiàn)。單片機(jī)與MAX3485的接線圖如圖3所示,其中P2.0控制了MAX485芯片的數(shù)據(jù)收發(fā),當(dāng)期高電平時(shí),MAX3485只能發(fā)送數(shù)據(jù);反之則只能接收數(shù)據(jù)。因此基于RS485總線的多機(jī)通訊是半雙工的。單片機(jī)的發(fā)送數(shù)據(jù)端和接收端分別接至MAX3485芯片的發(fā)送數(shù)據(jù)端和接收數(shù)據(jù)端。經(jīng)MAX3485芯片轉(zhuǎn)換后,其輸出引腳分別和其他所有單片機(jī)的A、B兩端連接,無需交叉,最終匯總至S7-200的自由口。
單片機(jī)與無線模塊之間的連接通過SPI接口,如圖4。
圖3 單片機(jī)與MAX3485芯片接線圖
圖4 單片機(jī)與nRF905芯片接線圖
3 軟件設(shè)計(jì)
單片機(jī)程序設(shè)計(jì):
S7-200和單片機(jī)之間通訊除了借助于RS485總線這個(gè)物理層,還需應(yīng)用層的支持,本系統(tǒng)應(yīng)用層采用的是Modbus協(xié)議。另外本系統(tǒng)的通訊模式是串行傳輸,因此數(shù)據(jù)鏈路層采用的是Modbus串行鏈路協(xié)議。
上述模型的第7層應(yīng)用層報(bào)文傳輸協(xié)議即Modbus協(xié)議,它在連接至不同類型總線或網(wǎng)絡(luò)的設(shè)備之間提供客戶機(jī)/服務(wù)器通訊。自從1979年出現(xiàn)工業(yè)串行鏈路的事實(shí)標(biāo)準(zhǔn)以來,Modbus協(xié)議使成千上萬的自動(dòng)化設(shè)備能夠通訊[4]。目前,繼續(xù)增加對簡單而雅觀的Modbus結(jié)構(gòu)支持?;ヂ?lián)網(wǎng)組織能夠使TCP/IP棧上的保留系統(tǒng)端口502訪問Modbus。Modbus是一個(gè)請求/應(yīng)答協(xié)議,并且提供功能碼規(guī)定的服務(wù)[5]。Modbus協(xié)議規(guī)定傳輸報(bào)文即數(shù)據(jù)幀的結(jié)構(gòu)為:地址+功能碼+數(shù)據(jù)+差錯(cuò)校驗(yàn)。
根據(jù)以上協(xié)議可編寫通訊程序,本程序可包括如下幾個(gè)部分:主函數(shù)、定時(shí)中斷、串口中斷、動(dòng)作函數(shù)、CRC校驗(yàn)函數(shù)。
主函數(shù)負(fù)責(zé)完成定時(shí)器、串口以及一些變量的初始化;定時(shí)中斷負(fù)責(zé)判斷相鄰數(shù)據(jù)幀之間的間隔時(shí)間是否超時(shí),本系統(tǒng)通訊波特率為9600b/s,Modbus協(xié)議規(guī)定相鄰數(shù)據(jù)幀之間的時(shí)間間隔不超過3.5個(gè)字符傳輸時(shí)間,因此本系統(tǒng)設(shè)置為5ms;串口中斷負(fù)責(zé)接收數(shù)據(jù)并轉(zhuǎn)移至緩沖區(qū),待定時(shí)中斷識別出一幀數(shù)據(jù)后即可讀取至緩沖區(qū);動(dòng)作函數(shù)分別識別上位機(jī)發(fā)送過來的控制命令,首先分析緩沖區(qū)的數(shù)據(jù)幀,若地址及校驗(yàn)碼無誤,先對上位機(jī)做應(yīng)答,然后可提取出功能碼,判斷出上位機(jī)要執(zhí)行何種功能,隨后即可完成讀寫操作,驅(qū)動(dòng)執(zhí)行器動(dòng)作。因此動(dòng)作函數(shù)是負(fù)責(zé)解析上位機(jī)命令碼的;CRC校驗(yàn)函數(shù)通過一定的算法對收發(fā)的數(shù)據(jù)幀數(shù)據(jù)進(jìn)行運(yùn)算,最后得出校驗(yàn)碼,接收端收到數(shù)據(jù)幀后立即判斷接收到的數(shù)據(jù)幀的校驗(yàn)碼是否與此刻的計(jì)算值一樣,若一樣則傳輸無誤,否則丟棄該數(shù)據(jù)幀。本系統(tǒng)采用的是RTU傳輸模式,因此校驗(yàn)采用的是16位的CRC校驗(yàn)。校驗(yàn)過程需要涉及一些列的計(jì)算,而8位的單片機(jī)是勝任不了的,為了解決此問題,本程序采用了查表法計(jì)算,大大緩解了單片機(jī)的計(jì)算壓力。現(xiàn)給出部分程序如下,此子函數(shù)需在定時(shí)中斷函數(shù)中調(diào)用,完成對數(shù)據(jù)幀間隔時(shí)間的監(jiān)控并給出標(biāo)志位。
單片機(jī)與nRF905之間通過SPI接口通訊,以下為nRF905初始化代碼:
void nRF905_Init(void)
{
P4SW |=0x70;
nRF905_Delay(10);
nRF905_CSN_Set();
nRF905_SCK_Clr();
nRF905_CD_Clr();
nRF905_AM_Clr();
nRF905_DR_Clr();
nRF905_PWR_UP_Set();
nRF905_TX_EN_Clr();
nRF905_TRX_CE_Clr();
nRF905_WriteBuf(W_CONFIG,Tx_Con.con,Tx_Con.len);
}
S7-200則采用標(biāo)準(zhǔn)的Modbus協(xié)議庫,編程時(shí)直接調(diào)用Modbus主站指令庫。SM0.0 調(diào)用MBUS_CTRL完成主站的初始化,并啟動(dòng)其功能控制:EN為使能端,必須連接常閉開關(guān);Mode為1時(shí)選擇Modbus協(xié)議,為0時(shí)為PPI協(xié)議;Baud為波特率設(shè)定,本系統(tǒng)選擇9600b/s;Parity為奇偶校驗(yàn)位,本系統(tǒng)無需奇偶校驗(yàn),因此設(shè)置為0;Timeout為超時(shí)時(shí)間設(shè)定,此處設(shè)定為1000ms;Done為初始化完成位;Error為初始化錯(cuò)誤代碼。MBUS_MSG模塊中EN同樣為使能端;First位為讀寫請求位,必須使用脈沖觸發(fā);Slave位為從站地址選擇位;RW位為1時(shí)只寫,為0時(shí)只讀;Addr為讀寫從站的數(shù)據(jù)地址,此處設(shè)置為10001,表示為開關(guān)量輸入;Count表示數(shù)據(jù)個(gè)數(shù),此處設(shè)置為8;DataPtr為數(shù)據(jù)指針,讀寫數(shù)據(jù)均要放在此數(shù)據(jù)區(qū);Done位為讀寫功能完成位;Error為錯(cuò)誤代碼。如圖5所示。
圖5 S7-200 Modbus程序
4 結(jié)論
本文通過設(shè)計(jì)單片機(jī)無線通訊硬件電路,成功實(shí)現(xiàn)了與S7-200之間的無線通訊,通訊協(xié)議采用標(biāo)準(zhǔn)Modbus協(xié)議,傳輸模式是RTU。作為主機(jī),S7-200 PLC可通過無線通訊讀取從機(jī)對應(yīng)的數(shù)據(jù),同時(shí)也可以發(fā)送控制命令。此方案在工業(yè)應(yīng)用中具有非常實(shí)用的價(jià)值。
【參考文獻(xiàn)】
[1]高山,祝軍岐,王維.基于PLC的污水處理監(jiān)控系統(tǒng)無線通訊解決方案[J].北京:自動(dòng)化博覽,2005:06.
[2]孫艷波,王桂英,冀勇,顧威,王春巖.一種新型企業(yè)污水處理無線監(jiān)測系統(tǒng)[J].鞍山:遼寧科技大學(xué)學(xué)報(bào),2008:06.
[3]凌勝軍,雷曉青,關(guān)小剛.基于無線通訊和PLC的供水處理集中監(jiān)控系統(tǒng)解決方案[J].西安:無線通信技術(shù),2010:04.
[4]張桓,趙樹忠.基于Modbus協(xié)議的單片機(jī)與觸摸屏通訊系統(tǒng)設(shè)計(jì)[J].唐山:河北理工大學(xué)學(xué)報(bào):自然科學(xué)版,2010:4.
[5]尤慧芳.用MODBUS實(shí)現(xiàn)觸摸屏與單片機(jī)的通信[J].南京:工業(yè)控制計(jì)算機(jī),2008:12.
[責(zé)任編輯:湯靜]