• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      編譯型PLC Modbus協(xié)議的研究與實(shí)現(xiàn)

      2014-02-11 03:47:15令狐釗楊旭東陳倫軍
      機(jī)電工程技術(shù) 2014年12期
      關(guān)鍵詞:數(shù)據(jù)流中斷程序

      令狐釗,楊旭東,陳倫軍

      (1.貴州大學(xué)機(jī)械工程學(xué)院,貴州貴陽(yáng) 550025;2.貴陽(yáng)永青儀電科技有限公司,貴州貴陽(yáng) 550025)

      編譯型PLC Modbus協(xié)議的研究與實(shí)現(xiàn)

      令狐釗1,2,楊旭東1,陳倫軍1

      (1.貴州大學(xué)機(jī)械工程學(xué)院,貴州貴陽(yáng) 550025;2.貴陽(yáng)永青儀電科技有限公司,貴州貴陽(yáng) 550025)

      在編譯型PLC的研發(fā)過(guò)程中,為使PLC的通信具有通用性和開(kāi)放性,采用了Modbus協(xié)議。針對(duì)中斷數(shù)據(jù)收發(fā)會(huì)占用大量CPU的問(wèn)題,以及幾種常用PLC通信方式的優(yōu)缺點(diǎn),通過(guò)對(duì)Modbus協(xié)議的研究,在ARM技術(shù)和操作系統(tǒng)的支持下,結(jié)合編譯型PLC的特點(diǎn),提出了一種中斷組合DMA的數(shù)據(jù)收發(fā)新方法和一種多任務(wù)通信方法,實(shí)現(xiàn)了一種實(shí)時(shí)性較好、CPU占用量較少的適合于編譯型PLC串行鏈路上的Modbus服務(wù)器通信。測(cè)試結(jié)果表明了程序的正確性。

      Modbus;編譯型PLC;DMA;操作系統(tǒng)

      目前國(guó)內(nèi)外的主流PLC為解釋型PLC,原因在于其跨平臺(tái)性好,在線編程能力強(qiáng),但是執(zhí)行效率低[1],資源占有量大,實(shí)時(shí)性低,而且PLC新興之處并未形成標(biāo)準(zhǔn),造成了各品牌PLC自成系統(tǒng)。隨著IEC61131標(biāo)準(zhǔn)和工業(yè)場(chǎng)合對(duì)實(shí)時(shí)性要求苛刻等原因,基于IEC標(biāo)準(zhǔn)的編譯型PLC逐漸成為國(guó)內(nèi)外研究課題。在通信方面,各品牌PLC基于自身利益的考慮,基本上都開(kāi)發(fā)有專有通信協(xié)議,而面對(duì)各種新協(xié)議的不斷產(chǎn)生,用戶往往無(wú)所適從,擔(dān)心會(huì)被某些PLC廠商鉗制。Modbus通信協(xié)議是Modicon公司推出的一種公開(kāi)的工業(yè)通信協(xié)議,該協(xié)議得到了施耐德、西門子、三菱、松下等大型PLC廠商支持,同時(shí)為各種儀器儀表廣泛支持?;谝陨峡紤],為使自主研發(fā)的編譯型PLC的通信具有通用性和開(kāi)放性,提供了對(duì)Modbus的支持。本文采用STM32F107VC芯片,在實(shí)現(xiàn)了RS-485等硬件電路的基礎(chǔ)上,結(jié)合編譯型PLC的特點(diǎn),綜合多任務(wù)處理技術(shù),對(duì)協(xié)議的研究和實(shí)現(xiàn)提出了看法和實(shí)現(xiàn)方法。

      1 編譯型PLC及Modbus協(xié)議簡(jiǎn)介

      編譯型PLC不同于解釋型PLC,編寫符合編譯型PLC的Modbus通信,首先應(yīng)熟悉編譯型PLC的特點(diǎn)和Modbus協(xié)議。

      1.1 編譯型PLC

      編譯型PLC,從編譯原理的角度充分體現(xiàn)了與傳統(tǒng)解釋型PLC的不同之處。用戶編寫的程序在上位機(jī)上直接編譯,一步到位,不需要下位機(jī)再進(jìn)行解釋。正因其“一次編譯,多次執(zhí)行”的特點(diǎn),一方面減輕了PLC本體需要裝載解釋系統(tǒng)的負(fù)擔(dān),提高了效率,降低了資源占有量;另一方面增加了PLC軟硬件組合的靈活性。圖1為編譯型PLC梯形圖程序編譯流程。第一次編譯,把用戶梯形圖程序邏輯編譯成標(biāo)準(zhǔn)C文件,以方便與庫(kù)文件一起進(jìn)行GCC調(diào)用編譯;第二次編譯,即GCC編譯以生成可執(zhí)行文件,編譯后便可下載到PLC本體中以運(yùn)行。其中庫(kù)文件一般包括兩部分,一部分是驅(qū)動(dòng)程序,用于讀寫I/O,初始化I/ O等;另一部分是功能庫(kù)函數(shù),例如移位、PID等功能函數(shù)。若為帶操作系統(tǒng)的PLC,則庫(kù)文件中還包括操作系統(tǒng)。本文Modbus協(xié)議程序即放置于庫(kù)文件中,用戶編寫程序時(shí),調(diào)用即可。

      圖1 梯形圖程序編譯流程圖

      1.2 Modbus協(xié)議

      Modbus是一種單主站、多從站的請(qǐng)求/應(yīng)答協(xié)議[2-3]。如圖2為通用Modbus幀。PDU為數(shù)據(jù)單元,包括功能碼和數(shù)據(jù)兩部分。功能碼用于指示所要執(zhí)行的操作。數(shù)據(jù)域包含完成指定操作所需要的附加信息。PDU上加上地址域和差錯(cuò)校驗(yàn)構(gòu)成了ADU,即應(yīng)用數(shù)據(jù)單元。地址域用于標(biāo)識(shí)服務(wù)器,服務(wù)器用于確定數(shù)據(jù)幀是否是發(fā)送給自己的。差錯(cuò)校驗(yàn)碼用于確認(rèn)收發(fā)數(shù)據(jù)的正確性。

      圖2 通用Modbus幀

      2 軟件實(shí)現(xiàn)

      Modbus通信過(guò)程是主站發(fā)送數(shù)據(jù)給從站,從站在接收數(shù)據(jù)后,對(duì)接收幀進(jìn)行處理,處理后若非廣播幀,則進(jìn)行回復(fù)幀構(gòu)建,并回復(fù)給主站。如圖3為Modbus服務(wù)器通信流程。服務(wù)器通信的實(shí)現(xiàn)包括:數(shù)據(jù)接收和發(fā)送、幀前處理后處理、PDU處理。為使程序各部分耦合性降低,以模塊化的方式來(lái)實(shí)現(xiàn),模塊之間提供相應(yīng)接口。RTU模式和ASCII模式因數(shù)據(jù)流格式不一樣,在數(shù)據(jù)的接收和發(fā)送,以及前后處理都不一樣。但是,它們可以有一樣的PDU處理函數(shù),只需把前處理后的數(shù)據(jù)統(tǒng)一為RTU的八位二進(jìn)制格式即可。下文先闡述RTU模式和ASCII模式數(shù)據(jù)接收和前后處理,然后闡述PDU處理,最后探討多線程下Modbus通信的實(shí)現(xiàn)。

      圖3 通信流程圖

      2.1 RTU模式

      數(shù)據(jù)以報(bào)文幀方式發(fā)送和接收,如圖4為RTU數(shù)據(jù)流格式。一幀數(shù)據(jù)以非空閑幀作為幀頭的標(biāo)記,3.5個(gè)字符作為幀尾標(biāo)記。

      圖4 RTU數(shù)據(jù)流

      2.1.1 數(shù)據(jù)收發(fā)

      數(shù)據(jù)的收發(fā),通常采用中斷方式來(lái)實(shí)現(xiàn)。該方式優(yōu)點(diǎn)是配置簡(jiǎn)單,缺點(diǎn)是占用CPU過(guò)多。ARM最新Cotex系列芯片支持DMA(直接存儲(chǔ)器訪問(wèn))。根據(jù)RTU傳輸模式的特點(diǎn),最終采用DMA組合空閑幀中斷、接收中斷的方式,而發(fā)送則完全采用DMA發(fā)送,具有CPU占用小,速度快的優(yōu)點(diǎn)。圖5為RTU數(shù)據(jù)接收程序框圖。

      RTU模式以3.5個(gè)字符作為幀的結(jié)束,作為幀與幀之間標(biāo)識(shí)。其實(shí)現(xiàn)算法為:

      圖5 RTU數(shù)據(jù)接收程序框圖

      其中:MBbaud為串口波特率。因高速傳輸時(shí)隱含著大量中斷管理,從而導(dǎo)致CPU負(fù)擔(dān)加重,所以在當(dāng)波特率大于19 200 bit/s時(shí),定時(shí)器值設(shè)為1.75 ms。

      2.1.2 前后處理

      前處理的工作是確定數(shù)據(jù)是否發(fā)送給本機(jī),以及進(jìn)行CRC校驗(yàn)確認(rèn)傳輸數(shù)據(jù)的正確性。確定數(shù)據(jù)是否發(fā)送給本機(jī),通過(guò)地址的判斷來(lái)確定。后處理的工作是確認(rèn)是否廣播幀,如果不是則給回復(fù)幀加上CRC校驗(yàn)碼,并把數(shù)據(jù)移交給DMA。前后處理分別提供兩個(gè)函數(shù)頭,如下:

      2.2 ASCII模式

      ASCII模式通信流程和RTU模式類似,不同之處在于報(bào)文幀數(shù)據(jù)流格式。圖6為ASCII數(shù)據(jù)流格式。

      圖6 ASCII數(shù)據(jù)流

      2.2.1 數(shù)據(jù)收發(fā)

      ASCII模式以“:”字符標(biāo)識(shí)數(shù)據(jù)幀的起始,CR(回車符“ ”)和LF(換行符“ ”)作為幀尾標(biāo)識(shí)。如果采用DMA方式來(lái)接收,則必須通過(guò)查詢標(biāo)識(shí)字符來(lái)識(shí)別幀頭和幀尾,所以,采用接收中斷的方式比較合理。其實(shí)現(xiàn)可采用狀態(tài)機(jī)的方式,如圖7所示。而對(duì)于數(shù)據(jù)的發(fā)送,采用DMA方式發(fā)送即可。該模式對(duì)定時(shí)器要求并不高,協(xié)議規(guī)定容許有1 s的延時(shí),但為了適應(yīng)各種場(chǎng)合對(duì)實(shí)時(shí)性的要求,該延時(shí)值容許用戶配置。

      圖7 ASCII接收狀態(tài)機(jī)

      2.2.2 前后處理

      為方便PDU數(shù)據(jù)處理,在發(fā)送前后把數(shù)據(jù)轉(zhuǎn)換為八位二進(jìn)制格式。前處理程序邏輯為:接收之后先對(duì)把地址轉(zhuǎn)換以確認(rèn)地址是否正確,如果正確則全部轉(zhuǎn)換,并進(jìn)行LRC校驗(yàn)。后處理給要回復(fù)幀加上':'字符,然后依次把處理好的數(shù)據(jù)轉(zhuǎn)換為字符形式,并添加到回復(fù)幀上,然后給回復(fù)幀加上轉(zhuǎn)換后的LRC校驗(yàn)碼,最后加上“ ”、“ ”字符。前后處理分別提供兩個(gè)函數(shù)頭,如下:

      2.3 PDU處理

      PDU處理是通信的目的內(nèi)容。歸納協(xié)議,得圖8,可知其處理過(guò)程是根據(jù)數(shù)據(jù)幀的功能碼和數(shù)據(jù)域的地址信息對(duì)數(shù)據(jù)進(jìn)行讀寫操作?;诖?,PDU處理要實(shí)現(xiàn)三部分內(nèi)容:數(shù)據(jù)的讀寫操作;相應(yīng)功能碼的功能函數(shù);提供給數(shù)據(jù)處理階段主程序的接口函數(shù)。三者的程序邏輯關(guān)系是:接口函數(shù)根據(jù)功能碼查找調(diào)用哪個(gè)功能函數(shù),功能函數(shù)先檢查PDU的讀寫地址和讀寫數(shù)量信息,在信息正確的情況下進(jìn)行讀寫操作,該過(guò)程若有錯(cuò)誤則返回相應(yīng)異常。

      圖8 PDU處理流程

      離散輸入點(diǎn)和輸入寄存器只可讀,線圈和保持寄存器可讀且可寫。所以,分別實(shí)現(xiàn)四個(gè)讀寫函數(shù):讀取離散輸入、讀取輸入寄存器、讀寫線圈、讀寫保持寄存器,而其返回參數(shù)是枚舉類型的異常碼。

      各功能函數(shù)根據(jù)PDU信息調(diào)用一次或兩次其中的一個(gè)讀寫函數(shù),返回參數(shù)異常碼。以功能0x17(讀寫多個(gè)寄存器功能)為例,定義該功能碼功能函數(shù)的函數(shù)頭如下,其它功能碼的功能函數(shù)頭與其相似,僅函數(shù)名不同,如下:

      MBException SMBFunc0x17RWHoldings(U8* frame,U16*Len);//0x17功能函數(shù)

      采用用數(shù)組和函數(shù)指針的方式來(lái)查找并調(diào)用功能函數(shù),接口函數(shù)和數(shù)組定義如下:

      MBException SMBPDUProcess(U8*pframe,U16*pLen)//接口函數(shù)

      本文實(shí)現(xiàn)了實(shí)現(xiàn)了十一種功能碼,滿足PLC需求。在PDU處理實(shí)現(xiàn)的基礎(chǔ)上,組合前后出理,對(duì)RTU模式和ASCII模式,將分別構(gòu)成下面兩個(gè)函數(shù)。

      2.4 多線程下的Modbus通信

      傳統(tǒng)PLC是一個(gè)大循環(huán)掃描,其通信方式有兩種:以中斷的方式執(zhí)行;非中斷方式執(zhí)行。中斷的方式是通信數(shù)據(jù)到達(dá),程序立刻跳轉(zhuǎn)到中斷中執(zhí)行,適合于較高速度的通信場(chǎng)合,缺點(diǎn)是占用較多CPU。非中斷方式是把通信邏輯放到掃描程序中,當(dāng)掃描到了后即執(zhí)行通信,這種通信方式適合于低速度通信場(chǎng)合,但是在用戶程序量比較大時(shí),延時(shí)明顯。本文將提出采用多任務(wù)操作系統(tǒng)情況下的第三種方法:把通信單獨(dú)做為一個(gè)任務(wù)來(lái)處理,PLC程序采用多任務(wù)方式工作,設(shè)置通信任務(wù)的優(yōu)先級(jí)可以適應(yīng)對(duì)通信任務(wù)的中低高速要求。

      以RTU模式為例,若采用中斷方式,只需將SMBRTUProcess()組織到定時(shí)器中斷中即可;若采用非中斷方式執(zhí)行,只需將SMBRTUProcess()放到大循環(huán)中即可。本文也提出的第三種方式的實(shí)現(xiàn)方法是在main()函數(shù)中新建一個(gè)任務(wù)用于Modbus通信,該任務(wù)執(zhí)行條件是數(shù)據(jù)是否到達(dá)。其通過(guò)在數(shù)據(jù)接收完時(shí)發(fā)送數(shù)據(jù)接收完成信號(hào)量給操作系統(tǒng)等待任務(wù)調(diào)度以實(shí)現(xiàn)。其中通信任務(wù)的優(yōu)先級(jí)容許用戶配置。本文采用的操作系統(tǒng)是CoOs,程序源碼如下:

      表1 異常測(cè)試結(jié)果

      3 測(cè)試

      上位機(jī)RS-232轉(zhuǎn)RS-485連接到PLC,利用Modbus poll的CommunicationTraffic顯示往返數(shù)據(jù),如下以0x03為例,分別為兩種模式測(cè)試值。

      分析結(jié)果,一方面測(cè)試軟件沒(méi)顯示錯(cuò)誤,另一方面,對(duì)比往返數(shù)據(jù),顯示了數(shù)據(jù)的正確性。設(shè)置通信間隔時(shí)間為20 ms,長(zhǎng)時(shí)間讀寫數(shù)據(jù),運(yùn)行結(jié)果表明軟件的正確和可靠性,速度方面也滿足要求。

      對(duì)異常的測(cè)試也是至關(guān)重要的。下文僅表述在RTU模式下測(cè)試功能碼0x03的部分異?;貜?fù)。測(cè)試結(jié)果見(jiàn)表1,表明了異常碼顯示的正確性。

      4 總結(jié)

      基于Modbus協(xié)議在PLC領(lǐng)域的通用性,文章結(jié)合編譯型PLC的特點(diǎn),分析和實(shí)現(xiàn)了該協(xié)議在串行鏈路上的服務(wù)器通信。通過(guò)合理利用DMA的方式實(shí)現(xiàn)了RTU的串口數(shù)據(jù)收發(fā),有效釋放了中斷CPU;通過(guò)狀態(tài)機(jī)的方法實(shí)現(xiàn)了ASCII模式的數(shù)據(jù)接收;通過(guò)PLC通信方式的總結(jié),結(jié)合編譯型PLC的特點(diǎn)提出了基于多任務(wù)下的通信實(shí)現(xiàn)方法。測(cè)試驗(yàn)證了程序設(shè)計(jì)的正確性。最終使得自主研發(fā)的PLC具有了通用總線的功能,具有很好的實(shí)用性和參考價(jià)值。

      [1]李慧強(qiáng),程廣河,王茂勵(lì),等.基于ARM的編譯型可編程序控制器系統(tǒng)研究[J].自動(dòng)化與儀表,2009,24(10):42-44.

      [2]GB/T 19582.1-2008.基于Modbus協(xié)議的工業(yè)自動(dòng)化網(wǎng)絡(luò)規(guī)范第1部分:Modbus應(yīng)用協(xié)議[S].

      [3]GB/T 19582.2-2008.基于Modbus協(xié)議的工業(yè)自動(dòng)化網(wǎng)絡(luò)規(guī)范第2部分:Modbus協(xié)議在串行鏈路上的實(shí)現(xiàn)指南[S].

      Research and Implementation of Modbus Protocol for Complied PLC

      LINGHU Zhao1,2,YANG Xu-dong1,CHEN Lun-jun1
      (1.School of Mechanical Engineering,Guizhou University,Guiyang 550025,China;2.Guiyang Yong Qing Yi Dian Ke Ji Co.,Ltd.,Guiyang 550025,China)

      In order to make the communication of complied PLC which is researched and implemented to be compatible and open,Modbus protocol is adopted.Aiming at data transmission through interrupt will take up a lot of CPU time,and the advantages and disadvantages of several kinds of PLC communication mode,through the study of Modbus protocol,with the support of ARM technology and RTOS,and according to the characteristics of compiled PLC,a new combinational way of DMA and interrupt,and a effective multitask way is proposed.Finally,a kind of serial link Modbus communication that is higher real-time,lesser CPU occupation,and suitable to complied PLC is implemented.The test results turned out that the correctness of the program.

      Modbus;complied PLC;DMA;operating system

      TP274

      :A

      :1009-9492(2014)12-0210-05

      10.3969/j.issn.1009-9492.2014.12.054

      令狐釗,男,1988年生,貴州人,碩士研究生,工程師。研究領(lǐng)域:測(cè)試與數(shù)字控制技術(shù)。

      (編輯:王智圣)

      2014-07-17

      猜你喜歡
      數(shù)據(jù)流中斷程序
      汽車維修數(shù)據(jù)流基礎(chǔ)(下)
      試論我國(guó)未決羈押程序的立法完善
      一種提高TCP與UDP數(shù)據(jù)流公平性的擁塞控制機(jī)制
      “程序猿”的生活什么樣
      跟蹤導(dǎo)練(二)(5)
      千里移防,衛(wèi)勤保障不中斷
      解放軍健康(2017年5期)2017-08-01 06:27:44
      英國(guó)與歐盟正式啟動(dòng)“離婚”程序程序
      基于數(shù)據(jù)流聚類的多目標(biāo)跟蹤算法
      創(chuàng)衛(wèi)暗訪程序有待改進(jìn)
      北醫(yī)三院 數(shù)據(jù)流疏通就診量
      寻乌县| 兴山县| 本溪市| 灌云县| 潢川县| 武穴市| 临泉县| 鄂伦春自治旗| 永城市| 商丘市| 兴和县| 读书| 德令哈市| 精河县| 三台县| 许昌县| 马边| 吉木乃县| 台中市| 澎湖县| 申扎县| 灌阳县| 莲花县| 阿拉善右旗| 通州区| 从江县| 田林县| 金门县| 塔河县| 呼和浩特市| 宁津县| 淮北市| 安溪县| 永宁县| 台东市| 乐业县| 河东区| 临邑县| 枣庄市| 台山市| 瓮安县|