技術頻道

娓娓工業(yè)
您現(xiàn)在的位置: 中國傳動網(wǎng) > 技術頻道 > 技術百科 > 基于Modbus協(xié)議實現(xiàn)單片機與PLC之間的通訊

基于Modbus協(xié)議實現(xiàn)單片機與PLC之間的通訊

時間:2008-04-30 16:14:00來源:ronggang

導語:?利用單片機和PLC進行優(yōu)勢互補,可以組成網(wǎng)絡化、智能化的工業(yè)控制系統(tǒng)。另外整個單片機系統(tǒng)程序用C51語言編程,程序簡潔,便于閱讀與調(diào)試
1 引言   HMI(人機界面)以其體積小,高性能,強實時等特點,越來越多的應用于工業(yè)自動化系統(tǒng)和設備中。它有字母、漢字、圖形和圖片等不同的顯示,界面簡單友好。配有長壽命的薄膜按鈕鍵盤,操作簡單。它一般采用具有集成度高、速度快、高可靠且價格低等優(yōu)點的單片機[1]作為其核心控制器,以實現(xiàn)實時快速處理。 PLC和單片機結(jié)合不僅可以提PLC的數(shù)據(jù)處理能力,還可以給用戶帶來友好簡潔的界面。本文以Modbus通訊協(xié)議為例,詳細討論了一個人機系統(tǒng)中,如何用C51實現(xiàn)單片機和PLC之間通訊的實例。 2 Modbus通訊協(xié)議   Modbus協(xié)議是應用于電子控制器上的一種通用語言。通過此協(xié)議,控制器相互之間、控制器經(jīng)由網(wǎng)絡和其它設備之間可以通信。   Modbus協(xié)議提供了主—從原則,即僅一設備(主設備)能初始化傳輸(查詢)。其它設備(從設備)根據(jù)主設備查詢提供的數(shù)據(jù)作出相應反應。主設備查詢的格式:設備地址(或廣播,此時不需要回應)、功能代碼、所有要發(fā)送的數(shù)據(jù)、和一錯誤檢測域。從設備回應消息包括確認地址、功能碼、任何要返回的數(shù)據(jù)、和一錯誤檢測域。如果在消息接收過程中發(fā)生一錯誤,或從設備不能執(zhí)行其命令,從設備將建立一錯誤消息并把它作為回應發(fā)送出去。   控制器能設置為兩種傳輸模式:ASCII和RTU,在同樣的波特率下,RTU可比ASCII方式傳送更多的數(shù)據(jù),所以采用KTU模式。  ?。?) 典型的RTU消息幀   典型的RTU消息幀如表1所示。
  RTU消息幀的地址域包含8bit。可能的從設備地址是0...127(十進制)。其中地址0是用作廣播地址,以使所有的從設備都能認識。主設備通過將要聯(lián)絡的從設備的地址放入消息中的地址域來選通從設備。當從設備發(fā)送回應消息時,它把自己的地址放入回應的地址域中,以便主設備知道是哪一個設備作出回應。   RTU消息幀中的功能代碼域包含了8bits,當消息從主設備發(fā)往從設備時,功能代碼域?qū)⒏嬷畯脑O備需要執(zhí)行哪些行為;當從設備回應時,它使用功能代碼域來指示是正常回應(無誤)還是有某種錯誤發(fā)生(稱作異議回應,一般是將功能碼的最高位由0改為1)。   從主設備發(fā)給從設備消息的數(shù)據(jù)域包含附加的信息:從設備必須用于進行執(zhí)行由功能代碼所定義的行為。這包括了像不連續(xù)的寄存器地址,要處理項的數(shù)目,域中實際數(shù)據(jù)字節(jié)數(shù)。如果沒有錯誤發(fā)生,從從設備返回的數(shù)據(jù)域包含請求的數(shù)據(jù)。如果有錯誤發(fā)生,此域包含一異議代碼,主設備應用程序可以用來判斷采取下一步行動。   當選用RTU模式作字符幀時,錯誤檢測域包含一16Bits值(用兩個8位的字符來實現(xiàn))。錯誤檢測域的內(nèi)容是通過對消息內(nèi)容進行循環(huán)冗長檢測(CRC)方法得出的。CRC域附加在消息的最后,添加時先是低字節(jié)然后是高字節(jié)。   (2) 所有的Modbus功能碼   Modbus的功能碼定義如表2所示。
3 常用功能通訊程序的設計   本文介紹了幾個Modbus常用功能程序的設計。筆者采用單片機作為主機,在單片機上編寫程序?qū)崿F(xiàn)單片機與PLC之間的通訊。由單片機向PLC發(fā)出命令信息,PLC自動作出回應。PLC通過單片機的串行通訊口通訊,程序用C51實現(xiàn)。程序的子函數(shù)及其功能:  ?。?) 串口初始化   void ProtocolInit(void)   函數(shù)功能:串口設置為異步通訊方式1(起始位1位,數(shù)據(jù)位8位,停止位1位);定時/計數(shù)器1設置為波特率發(fā)生器,通訊速率 9600bps;開串行中斷,并把串行中斷設置為高優(yōu)先級。  ?。?) CRC簡單函數(shù)   unsigned char Crc16(unsigned char *puchMsg, unsigned char usDataLen)   函數(shù)功能:先調(diào)入一值是全“1”的16位寄存器,然后調(diào)用一過程將消息中連續(xù)的8位字節(jié)各當前寄存器中的值進行處理。每個8位字符都單獨和寄存器內(nèi)容相或 (OR),結(jié)果向最低有效位方向移動,最高有效位以0填充。LSB被提取出來檢測,如果LSB為1,寄存器單獨和預置的值或一下,如果LSB為0,則不進行。整個過程要重復8次。在最后一位(第8位)完成后,下一個8位字節(jié)又單獨和寄存器的當前值相或。最終寄存器中的值,是消息中所有的字節(jié)都執(zhí)行之后的 CRC值。  ?。?) 初始化變量   void Initvar(void)   函數(shù)功能:初始化所有過程變量。  ?。?) 串行中斷服務程序   void ProtocolSerialProcess(void) interrupt 4 using 2   函數(shù)功能:發(fā)送中斷發(fā)送主機形成的命令數(shù)組,發(fā)送完后置標志位;接收中斷接收PLC返回的響應數(shù)組,存入接收數(shù)組,并置標志位,且假設響應正確,留待主機處理。  ?。?) 讀N個位變量(線圈)   void ProtocolRead_bit(unsigned char DeviceAddr/* PLC局號*/, unsigned char RegType/*寄存器類型*/, unsigned int BitAddr/*起始地址*/, unsigned char SubAddr/*子地址*/, unsigned int BitNum/*位數(shù)*/)   函數(shù)功能:根據(jù)函數(shù)參數(shù),形成讀N個位變量的命令數(shù)組,啟動發(fā)送。等待發(fā)送完并接收完(如超時未接收完則重新發(fā)送)。分析接收數(shù)組:正確,保存讀取的數(shù)據(jù);錯誤,重新發(fā)送。  ?。?) 寫一個位變量   void ProtocolSetBit(unsigned char DeviceAddr/* PLC局號*/, unsigned char RegType/*寄存器類型*/, unsigned int BitAddr/*地址*/, unsigned char SubAddr/*子地址*/, unsigned int ClrSet/*寫值“1”或“0”*/)   函數(shù)功能:根據(jù)函數(shù)參數(shù),形成置某位變量為“1”或“0”的命令數(shù)組,啟動發(fā)送。等待發(fā)送完并接收完(如超時未接收完則重新發(fā)送)。分析接收數(shù)組:正確,返回;錯誤,重新發(fā)送。   (7) 讀N個字節(jié)變量   void ProtocolReadByte(unsigned char DeviceAddr/* PLC局號*/, unsigned char RegType/*寄存器類型*/, unsigned int RegAddr/*起始地址*/, unsigned char SubAddr/*子地址*/, unsigned int RegNum/*個數(shù)*/)   函數(shù)功能:根據(jù)函數(shù)參數(shù),形成讀N個字節(jié)變量的命令數(shù)組,啟動發(fā)送。等待發(fā)送完并接收完(如超時未接收完則重新發(fā)送)。分析接收數(shù)組:正確,保存讀取的數(shù)據(jù);錯誤,重新發(fā)送。   (8) 寫N個字節(jié)變量   void ProtocolSetByte(unsigned char DeviceAddr/* PLC局號*/, unsigned char RegType/*寄存器類型*/, unsigned int RegAddr/*起始地址*/, unsigned char SubAddr/*子地址*/, unsigned int RegNum/*個數(shù)*/)   函數(shù)功能:根據(jù)函數(shù)參數(shù),形成寫N個字變量的命令數(shù)組(要寫的數(shù)從某參數(shù)數(shù)組中讀?。?,啟動發(fā)送。等待發(fā)送完并接收完(如超時未接收完則重新發(fā)送)。分析接收數(shù)組:正確,返回;錯誤,重新發(fā)送。 4 結(jié)束語   以上的程序已經(jīng)通過實驗,并應用于實際的人機系統(tǒng)中。依照類似的方法,可以編寫其他不同功能的程序,實現(xiàn)對PLC的不同控制和操作。利用單片機和PLC進行優(yōu)勢互補,可以組成網(wǎng)絡化、智能化的工業(yè)控制系統(tǒng)。另外整個單片機系統(tǒng)程序用C51語言編程,程序簡潔,便于閱讀與調(diào)試。單片機和人機界面結(jié)合可以實時的顯示PLC的工作狀況,實時的控制、設置、調(diào)整PLC工作情況,提高工業(yè)控制的自動化程度和實時性。

標簽:

點贊

分享到:

上一篇:基于PCI總線的信令采集卡的硬...

下一篇:微能WIN-V63矢量控制變頻器在...

中國傳動網(wǎng)版權與免責聲明:凡本網(wǎng)注明[來源:中國傳動網(wǎng)]的所有文字、圖片、音視和視頻文件,版權均為中國傳動網(wǎng)(www.treenowplaneincome.com)獨家所有。如需轉(zhuǎn)載請與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個人轉(zhuǎn)載使用時須注明來源“中國傳動網(wǎng)”,違反者本網(wǎng)將追究其法律責任。

本網(wǎng)轉(zhuǎn)載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權屬于原版權人。轉(zhuǎn)載請保留稿件來源及作者,禁止擅自篡改,違者自負版權法律責任。

網(wǎng)站簡介|會員服務|聯(lián)系方式|幫助信息|版權信息|網(wǎng)站地圖|友情鏈接|法律支持|意見反饋|sitemap

中國傳動網(wǎng)-工業(yè)自動化與智能制造的全媒體“互聯(lián)網(wǎng)+”創(chuàng)新服務平臺

網(wǎng)站客服服務咨詢采購咨詢媒體合作

Chuandong.com Copyright ?2005 - 2024 ,All Rights Reserved 版權所有 粵ICP備 14004826號 | 營業(yè)執(zhí)照證書 | 不良信息舉報中心 | 粵公網(wǎng)安備 44030402000946號