Modbus協(xié)議下單片機與eView觸摸屏的通信
摘要Modbus協(xié)議由于其具有開(kāi)放性、透明性、成本低、易于開(kāi)發(fā)等特點(diǎn),已成為當今工業(yè)領(lǐng)域通信協(xié)議的首選。本文介紹了一種基于Modbus通信協(xié)議的eView觸摸屏與常用的51單片機的通信方法。該方法通過(guò)C51編程實(shí)現Modbus通信,在51系列單片機上具有通用性,有一定的借鑒作用。
工業(yè)控制中經(jīng)常需要觀(guān)察系統的運行狀態(tài)或者修改運行參數。觸摸屏能夠直觀(guān)、生動(dòng)地顯示運行參數和運行狀態(tài),而且通過(guò)觸摸屏畫(huà)面可以直接修改系統運行參數,人機交互性好。單片機廣泛應用于工控領(lǐng)域中,與觸摸屏配合,可組成良好的人機交互環(huán)境。
觸摸屏與單片機通信,需要根據觸摸屏采用的通信協(xié)議為單片機編寫(xiě)相應的通信程序。Modbus協(xié)議是美國Modicon公司推出的,一種有效支持控制器之間以及控制器經(jīng)由網(wǎng)絡(luò )(如以太網(wǎng))與其他設備之間進(jìn)行通信的協(xié)議。本文以STC89C51單片機和人機電子有限公司的eView觸摸屏為例,介紹其通信程序的開(kāi)發(fā)過(guò)程。
1 系統結構
實(shí)現觸摸屏與單片機的通信,主要是解決通信協(xié)議的問(wèn)題。本文使用開(kāi)放的Modbus通信協(xié)議,以觸摸屏作主站,單片機作從站。eView觸摸屏本身支持Modbus通信協(xié)議,如果單片機也支持Modbus協(xié)議,就可以進(jìn)行通信了。eview觸摸屏支持RS-232和RS-485兩種通信接口。在工業(yè)控制領(lǐng)域,由于RS-485具有可靠性高、傳輸距離遠、抗干擾能力強等優(yōu)點(diǎn),所以在本系統中觸摸屏與單片機通信采用RS-485連接,傳輸速率設置為9600 kbps。RS-485信號傳輸是一種半雙工的傳輸方式,單片機通過(guò)一個(gè)RS-232/RS-485無(wú)源轉換器把232信號轉換成485信號,連接到eView觸摸屏上。圖l為該系統的原理圖。
單片機控制系統采用STC89C51系列單片機,其內部集成MAX810/STC810專(zhuān)用復位電路(原有外部復位可繼續保留,與Intel 8051引腳兼容),具有抗干擾能力強、加密性強、高抗靜電(ESD)、超低功耗等特點(diǎn),而且價(jià)格低廉。在本系統中,觸摸屏是上位機,單片機是下位機。
2 Modbus協(xié)議
2.1 Modbus協(xié)議簡(jiǎn)介
Modbus協(xié)議是應用于電子控制器上的一種通用語(yǔ)言。通過(guò)此協(xié)議,控制器相互之間、控制器經(jīng)由網(wǎng)絡(luò )(如以太網(wǎng))與其他設備之間可以通信。它已經(jīng)成為一種通用工業(yè)標準。不同廠(chǎng)商生產(chǎn)的控制設備可以通過(guò)它連成工業(yè)網(wǎng)絡(luò ),集中監控。
Modbus協(xié)議定義了一個(gè)控制器能認識使用的消息結構,而不管它們是經(jīng)過(guò)何種網(wǎng)絡(luò )進(jìn)行通信的。它描述了一控制器請求訪(fǎng)問(wèn)其他設備的過(guò)程.如何回應來(lái)自其他設備的請求,以及怎樣偵測錯誤并記錄;制定了消息域格局和內容的公共格式。
當在某一Modbus網(wǎng)絡(luò )上通信時(shí),此協(xié)議決定了每個(gè)控制器需要知道它們的設備地址,識別按地址發(fā)來(lái)的消息,以及決定要產(chǎn)生何種行動(dòng)。如果需要回應,則控制器將生成反饋信息并用Modbus協(xié)議發(fā)出。在其他網(wǎng)絡(luò )上,包含了M0dhus協(xié)議的消息轉換為在此網(wǎng)絡(luò )上使用的幀或包結構。
2.2 Modbus RTU通信數據傳輸模式
當控制器設備基于Modbus協(xié)議以RTU模式通信時(shí),消息中的每個(gè)字節包含2個(gè)4位的十六進(jìn)制字符。這種方式的主要優(yōu)點(diǎn)是:在同樣的波特率下,可比ASCII方式傳送更多的數據。
編碼采用8位二進(jìn)制,十六進(jìn)制數0~9和A~F;消息中每個(gè)8位域都是由2個(gè)十六進(jìn)制字符組成。組織結構如下:
2.3 Modbus RTU消息幀結構
Modbus RTU消息幀結構如下:
(1)地址碼
地址碼為通信傳送的第一個(gè)字節。這個(gè)寧節表明,由用戶(hù)設定地址碼的從機將接收由主機發(fā)送來(lái)的信息。每個(gè)從機都有具有唯一的地址碼,只有符合地址碼的從機才能響應回送,且響應回送均以各自的地址碼開(kāi)始。主機發(fā)送的地址碼則表明將發(fā)送到的從機地址,而從機發(fā)送的地址碼表明回送的從機地址。地址0用作廣播地址,以使所有的從設備都能認識。
(2)功能代碼
功能代碼為通信傳送的第二個(gè)字節。Modbus通信規約定義可能的代碼范圍是十進(jìn)制的1~255。當然,有些代碼適用于所有控制器,有些僅適用于某種控制器,還有些保留以備后用。主機發(fā)送請求,通過(guò)功能碼告訴從機執行什么動(dòng)作;從機響應請求,從機發(fā)送的功能碼與從主機發(fā)送來(lái)的功能碼一樣,表明從機已響應主機進(jìn)行操作。如果從機發(fā)送的功能碼的最高位為1,則表明從機沒(méi)有響應操作或發(fā)送出錯,主設備應用程序得到異議的回應后,典型的處理是重發(fā)消息。表l列出了常用Modbus支持的部分功能碼?! ?/P>
以讀取線(xiàn)圈狀態(tài)為例說(shuō)明。主站發(fā)送命令:[設備地址][命令號01][起始寄存器地址高8位][低8位][讀取的寄存器數高8位][低8位][CRC校驗的低8位][高8位]。從站響應:[設備地址][命令號01][返回的字節個(gè)數][數據1][數據2]…[數據n][CRC校驗的低8位][高8位]。
(3)數據區
數據區根據功能碼的不同而不同。數據區包含需要從機執行什么動(dòng)作,或由從機采集的返送信息。這些信息可以是實(shí)際數值、設置點(diǎn)、主機發(fā)送給從機或從機發(fā)送給主機的地址等。例如,功能碼告訴從機讀取寄存器的值,則數據區必須包含要讀取寄存器的起始地址及讀取長(cháng)度。對于不同的從機,地址和數據信息都不相同。
(4)錯誤校驗碼
主機或從機可用校驗碼判別接收信息是否出錯。錯誤檢測域包含一個(gè)16位的值(用2個(gè)8位的字符來(lái)實(shí)現)。錯誤檢測域的內容是通過(guò)對消息內容進(jìn)行“循環(huán)冗余檢測”得出的。CRC域附加在消息的最后,添加時(shí)先是低字節然后是高字節,故CRC的高位字節是發(fā)送消息的最后一個(gè)寧節。錯誤校驗采用CRC-16校驗方法。
3 軟件編程
下面是采用C5l編寫(xiě)的軟件,主要包括CRC校驗和終端接收及波特率設置等。由于篇幅有限,其他程序略。



4 總 結
由于Modhus協(xié)議具有開(kāi)放性和透明性等特點(diǎn),而51系列單片機技術(shù)成熟、開(kāi)發(fā)成本低,二者的結合將繼續成為各類(lèi)通信系統設計的首選。本設計方法已經(jīng)應用于觸摸屏與單片機通信設計,并取得了較好效果。這種方法對于編制類(lèi)似的通信軟件有一定的借鑒作用,部分程序可以直接移植。
評論