午夜三级做爱黄片,午夜福利小视频,午夜国产成人精品,午夜黄色在线视频 - www.atkqc.com

由于操作過于頻繁师赂,請(qǐng)點(diǎn)擊下方按鈕進(jìn)行驗(yàn)證抽米!

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

關(guān)鍵詞: 可編程控制器   Modbus   通訊協(xié)議

1  引言
  HMI(人機(jī)界面)以其體積小,高性能坏平,強(qiáng)實(shí)時(shí)等特點(diǎn)卑吭,越來越多的應(yīng)用于工業(yè)自動(dòng)化系統(tǒng)和設(shè)備中。它有字母丙躏、漢字择示、圖形和圖片等不同的顯示,界面簡單友好晒旅。配有長壽命的薄膜按鈕鍵盤栅盲,操作簡單。它一般采用具有集成度高废恋、速度快谈秫、高可靠且價(jià)格低等優(yōu)點(diǎn)的單片機(jī)[1]作為其核心控制器,以實(shí)現(xiàn)實(shí)時(shí)快速處理鱼鼓。 PLC和單片機(jī)結(jié)合不僅可以提PLC的數(shù)據(jù)處理能力私免,還可以給用戶帶來友好簡潔的界面木冈。本文以Modbus通訊協(xié)議為例,詳細(xì)討論了一個(gè)人機(jī)系統(tǒng)中檀抡,如何用C51實(shí)現(xiàn)單片機(jī)和PLC之間通訊的實(shí)例演易。

2  Modbus通訊協(xié)議[4]
  Modbus協(xié)議是應(yīng)用于電子控制器上的一種通用語言。通過此協(xié)議园溃,控制器相互之間坝偶、控制器經(jīng)由網(wǎng)絡(luò)和其它設(shè)備之間可以通信。

  Modbus協(xié)議提供了主—從原則冲雾,即僅一設(shè)備(主設(shè)備)能初始化傳輸(查詢)醉檐。其它設(shè)備(從設(shè)備)根據(jù)主設(shè)備查詢提供的數(shù)據(jù)作出相應(yīng)反應(yīng)。主設(shè)備查詢的格式:設(shè)備地址(或廣播槽叮,此時(shí)不需要回應(yīng))磷像、功能代碼、所有要發(fā)送的數(shù)據(jù)津贩、和一錯(cuò)誤檢測域邦匆。從設(shè)備回應(yīng)消息包括確認(rèn)地址、功能碼尝江、任何要返回的數(shù)據(jù)涉波、和一錯(cuò)誤檢測域。如果在消息接收過程中發(fā)生一錯(cuò)誤炭序,或從設(shè)備不能執(zhí)行其命令啤覆,從設(shè)備將建立一錯(cuò)誤消息并把它作為回應(yīng)發(fā)送出去。

  控制器能設(shè)置為兩種傳輸模式:ASCII和RTU惭聂,在同樣的波特率下窗声,RTU可比ASCII方式傳送更多的數(shù)據(jù),所以采用KTU模式辜纲。

(1) 典型的RTU消息幀
典型的RTU消息幀如表1所示笨觅。


  RTU消息幀的地址域包含8bit「冢可能的從設(shè)備地址是0...127(十進(jìn)制)见剩。其中地址0是用作廣播地址,以使所有的從設(shè)備都能認(rèn)識(shí)扫俺。主設(shè)備通過將要聯(lián)絡(luò)的從設(shè)備的地址放入消息中的地址域來選通從設(shè)備苍苞。當(dāng)從設(shè)備發(fā)送回應(yīng)消息時(shí),它把自己的地址放入回應(yīng)的地址域中涉姆,以便主設(shè)備知道是哪一個(gè)設(shè)備作出回應(yīng)耕粪。

  RTU消息幀中的功能代碼域包含了8bits,當(dāng)消息從主設(shè)備發(fā)往從設(shè)備時(shí)荒鳖,功能代碼域?qū)⒏嬷畯脑O(shè)備需要執(zhí)行哪些行為;當(dāng)從設(shè)備回應(yīng)時(shí)居饵,它使用功能代碼域來指示是正郴捉唬回應(yīng)(無誤)還是有某種錯(cuò)誤發(fā)生(稱作異議回應(yīng),一般是將功能碼的最高位由0改為1)减严。

  從主設(shè)備發(fā)給從設(shè)備消息的數(shù)據(jù)域包含附加的信息:從設(shè)備必須用于進(jìn)行執(zhí)行由功能代碼所定義的行為镐访。這包括了像不連續(xù)的寄存器地址,要處理項(xiàng)的數(shù)目肮碗,域中實(shí)際數(shù)據(jù)字節(jié)數(shù)限榆。如果沒有錯(cuò)誤發(fā)生,從從設(shè)備返回的數(shù)據(jù)域包含請(qǐng)求的數(shù)據(jù)始踪。如果有錯(cuò)誤發(fā)生笆唧,此域包含一異議代碼,主設(shè)備應(yīng)用程序可以用來判斷采取下一步行動(dòng)洁糟。

  當(dāng)選用RTU模式作字符幀時(shí)岸裙,錯(cuò)誤檢測域包含一16Bits值(用兩個(gè)8位的字符來實(shí)現(xiàn))。錯(cuò)誤檢測域的內(nèi)容是通過對(duì)消息內(nèi)容進(jìn)行循環(huán)冗長檢測(CRC)方法得出的速缆。CRC域附加在消息的最后降允,添加時(shí)先是低字節(jié)然后是高字節(jié)。

(2) 所有的Modbus功能碼
  Modbus的功能碼定義如表2所示艺糜。

 

3  常用功能通訊程序的設(shè)計(jì)[5]
  本文介紹了幾個(gè)Modbus常用功能程序的設(shè)計(jì)剧董。筆者采用單片機(jī)作為主機(jī),在單片機(jī)上編寫程序?qū)崿F(xiàn)單片機(jī)與PLC之間的通訊破停。由單片機(jī)向PLC發(fā)出命令信息翅楼,PLC自動(dòng)作出回應(yīng)。PLC通過單片機(jī)的串行通訊口通訊真慢,程序用C51實(shí)現(xiàn)毅臊。程序的子函數(shù)及其功能:

(1) 串口初始化
  void ProtocolInit(void)
  函數(shù)功能:串口設(shè)置為異步通訊方式1(起始位1位,數(shù)據(jù)位8位黑界,停止位1位);定時(shí)/計(jì)數(shù)器1設(shè)置為波特率發(fā)生器褂微,通訊速率 9600bps;開串行中斷,并把串行中斷設(shè)置為高優(yōu)先級(jí)园爷。

(2) CRC簡單函數(shù)
  unsigned char Crc16(unsigned char *puchMsg, unsigned char usDataLen)
函數(shù)功能:先調(diào)入一值是全“1”的16位寄存器,然后調(diào)用一過程將消息中連續(xù)的8位字節(jié)各當(dāng)前寄存器中的值進(jìn)行處理丑辖。每個(gè)8位字符都單獨(dú)和寄存器內(nèi)容相或 (OR)卷芜,結(jié)果向最低有效位方向移動(dòng),最高有效位以0填充咏编。LSB被提取出來檢測元粹,如果LSB為1,寄存器單獨(dú)和預(yù)置的值或一下理侄,如果LSB為0勺激,則不進(jìn)行雾鸠。整個(gè)過程要重復(fù)8次。在最后一位(第8位)完成后捎滴,下一個(gè)8位字節(jié)又單獨(dú)和寄存器的當(dāng)前值相或纪娄。最終寄存器中的值,是消息中所有的字節(jié)都執(zhí)行之后的 CRC值悉契。

(3) 初始化變量
  void Initvar(void)
  函數(shù)功能:初始化所有過程變量启毁。

(4) 串行中斷服務(wù)程序
  void ProtocolSerialProcess(void) interrupt 4 using 2   
  函數(shù)功能:發(fā)送中斷發(fā)送主機(jī)形成的命令數(shù)組,發(fā)送完后置標(biāo)志位;接收中斷接收PLC返回的響應(yīng)數(shù)組憔辞,存入接收數(shù)組页衙,并置標(biāo)志位,且假設(shè)響應(yīng)正確阴绢,留待主機(jī)處理店乐。

(5) 讀N個(gè)位變量(線圈)
  void ProtocolRead_bit(unsigned char DeviceAddr/* PLC局號(hào)*/, unsigned char RegType/*寄存器類型*/, unsigned int BitAddr/*起始地址*/, unsigned char SubAddr/*子地址*/, unsigned int BitNum/*位數(shù)*/)
  函數(shù)功能:根據(jù)函數(shù)參數(shù),形成讀N個(gè)位變量的命令數(shù)組呻袭,啟動(dòng)發(fā)送眨八。等待發(fā)送完并接收完(如超時(shí)未接收完則重新發(fā)送)。分析接收數(shù)組:正確棒妨,保存讀取的數(shù)據(jù);錯(cuò)誤踪古,重新發(fā)送。

(6) 寫一個(gè)位變量
  void ProtocolSetBit(unsigned char DeviceAddr/* PLC局號(hào)*/, unsigned char RegType/*寄存器類型*/, unsigned int BitAddr/*地址*/, unsigned char SubAddr/*子地址*/, unsigned int ClrSet/*寫值“1”或“0”*/)
  函數(shù)功能:根據(jù)函數(shù)參數(shù)券腔,形成置某位變量為“1”或“0”的命令數(shù)組伏穆,啟動(dòng)發(fā)送。等待發(fā)送完并接收完(如超時(shí)未接收完則重新發(fā)送)纷纫。分析接收數(shù)組:正確枕扫,返回;錯(cuò)誤,重新發(fā)送辱魁。    

(7) 讀N個(gè)字節(jié)變量
  void ProtocolReadByte(unsigned char DeviceAddr/* PLC局號(hào)*/, unsigned char RegType/*寄存器類型*/, unsigned int RegAddr/*起始地址*/, unsigned char SubAddr/*子地址*/, unsigned int RegNum/*個(gè)數(shù)*/)
  函數(shù)功能:根據(jù)函數(shù)參數(shù)燥颠,形成讀N個(gè)字節(jié)變量的命令數(shù)組,啟動(dòng)發(fā)送轨赦。等待發(fā)送完并接收完(如超時(shí)未接收完則重新發(fā)送)睛赁。分析接收數(shù)組:正確,保存讀取的數(shù)據(jù);錯(cuò)誤谈芬,重新發(fā)送徙祥。

(8) 寫N個(gè)字節(jié)變量
  void ProtocolSetByte(unsigned char DeviceAddr/* PLC局號(hào)*/, unsigned char RegType/*寄存器類型*/, unsigned int RegAddr/*起始地址*/, unsigned char SubAddr/*子地址*/, unsigned int RegNum/*個(gè)數(shù)*/)
  函數(shù)功能:根據(jù)函數(shù)參數(shù),形成寫N個(gè)字變量的命令數(shù)組(要寫的數(shù)從某參數(shù)數(shù)組中讀取)式蠢,啟動(dòng)發(fā)送廉贤。等待發(fā)送完并接收完(如超時(shí)未接收完則重新發(fā)送)。分析接收數(shù)組:正確遥妒,返回;錯(cuò)誤卧蒂,重新發(fā)送纽秽。

4  結(jié)束語
  以上的程序已經(jīng)通過實(shí)驗(yàn),并應(yīng)用于實(shí)際的人機(jī)系統(tǒng)中圆乡。依照類似的方法掰腌,可以編寫其他不同功能的程序,實(shí)現(xiàn)對(duì)PLC的不同控制和操作击胜。利用單片機(jī)和PLC進(jìn)行優(yōu)勢互補(bǔ)亏狰,可以組成網(wǎng)絡(luò)化、智能化的工業(yè)控制系統(tǒng)偶摔。另外整個(gè)單片機(jī)系統(tǒng)程序用C51語言編程暇唾,程序簡潔,便于閱讀與調(diào)試辰斋。單片機(jī)和人機(jī)界面結(jié)合可以實(shí)時(shí)的顯示PLC的工作狀況策州,實(shí)時(shí)的控制、設(shè)置宫仗、調(diào)整PLC工作情況够挂,提高工業(yè)控制的自動(dòng)化程度和實(shí)時(shí)性。

(蔡曉燕 趙興群 萬遂人 董鵬云)

聲明:本網(wǎng)站所收集的部分公開資料來源于互聯(lián)網(wǎng)藕夫,轉(zhuǎn)載的目的在于傳遞更多信息及用于網(wǎng)絡(luò)分享孽糖,并不代表本站贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé),也不構(gòu)成任何其他建議毅贮。本站部分作品是由網(wǎng)友自主投稿和發(fā)布办悟、編輯整理上傳,對(duì)此類作品本站僅提供交流平臺(tái)炊捻,不為其版權(quán)負(fù)責(zé)鸦呆。如果您發(fā)現(xiàn)網(wǎng)站上所用視頻、圖片眨捶、文字如涉及作品版權(quán)問題畔香,請(qǐng)第一時(shí)間告知,我們將根據(jù)您提供的證明材料確認(rèn)版權(quán)并按國家標(biāo)準(zhǔn)支付稿酬或立即刪除內(nèi)容履字,以保證您的權(quán)益猪褐!聯(lián)系電話:010-58612588 或 Email:editor@mmsonline.com.cn。

網(wǎng)友評(píng)論 匿名: