從0開始FreeModbus應(yīng)用-chang原創(chuàng)_第1頁
從0開始FreeModbus應(yīng)用-chang原創(chuàng)_第2頁
從0開始FreeModbus應(yīng)用-chang原創(chuàng)_第3頁
從0開始FreeModbus應(yīng)用-chang原創(chuàng)_第4頁
從0開始FreeModbus應(yīng)用-chang原創(chuàng)_第5頁
已閱讀5頁,還剩19頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

從0開始FreeModbus應(yīng)用-chang原創(chuàng)從應(yīng)用角度學習FreeModbus前言FreeModbus本身沒有什么說明文檔。網(wǎng)上已經(jīng)有了一些介紹,有些是內(nèi)核分析,很有深度;有一些是應(yīng)用筆記,實際應(yīng)用時可能會用到。作為一個新入,我并不想了解那么多。我只想按步就班地知道到底要怎樣能夠很快地用起來。收集了一些資料,花了一些時間才終于基本搞清楚了一個大概。下面我從新人應(yīng)用的角度來談?wù)?,參考甚至抄摘了前人的文檔。入手主要是FreeModbus-V1.5自帶的AVR平臺下的DEMO項目,適當考慮FREERTOS下的特點。FreeModbus簡介(本節(jié)摘抄自“百度百科”的詞條“FreeModbus”)FreeMODBUS一個奧地利人寫的Modbus協(xié)議。它是一個針對嵌入式應(yīng)用的一個免費(自由)的通用MODBUS協(xié)議的移植。Modbus是一個工業(yè)制造環(huán)境中應(yīng)用的一個通用協(xié)議。Modbus通信協(xié)議棧包括兩層:Modbus應(yīng)用層協(xié)議,該層定義了數(shù)據(jù)模式和功能;另外一層是網(wǎng)絡(luò)層。FreeMODBUS提供了RTU/ASCII傳輸模式及TCP協(xié)議支持。FreeModbus遵循BSD許可證,這意味著用戶可以將FreeModbus應(yīng)用于商業(yè)環(huán)境中。目前版本FreeModbus-V1.5提供如下的功能支持:表1FreeModbus-V1.5功能支持代碼描述是否支持備注0x16屏蔽寫寄存器否0x17讀/寫多個寄存器是0x18寫FIFO否0x2B封裝接口傳輸否0x2B/0x0DCANopen參考請求與應(yīng)答否0x2B/0x0E讀設(shè)備身份表示否準備工作下載FreeModbus-V1.5.0.zip,解壓到當前文件夾。在當前文件夾下會生成“freemodbus-v1.5.0”目錄。如果選擇了解壓到“freemodbus-v1.5.0\”,則會形成兩級“freemodbus-v1.5.0”,可以不管,也可用復制粘貼的方法刪除一級。將此目錄(或兩級目錄)改為“freemodbus_v1.5.0”,否則后面用AVRSTUDIO4.12編譯時會出錯。下載ATMEL公司的AVRSTUDIO4.12并安裝。再下載AVR的GCC編譯器avr-toolchain-installer-10-win32.win32.x86.exe并安裝,它會集成到AVRSTUDIO4.12中。關(guān)于freemodbus和STUDIO工程,后面會結(jié)合freemodbus文件目錄結(jié)構(gòu)進一步介紹。繼續(xù)準備。下載并安裝虛擬串口VSPD。設(shè)置串口3與4互連(后面PROTEUS里面的硬件,串口設(shè)置為3;ModScan32主機軟件,串口設(shè)置為4),如圖所示:下載并安裝ModScan32包,綠色版里直接運行ModScan32.exe就行了。它可以當作ModBus主機,也可以查看收發(fā)的數(shù)據(jù),起監(jiān)測作用。連接設(shè)置:菜單-->connection-->connect,出現(xiàn)下面界面,按圖設(shè)置:注意:串口是用的N,8,1的模式,沒有校驗位,原例子程序是需要有even偶校驗位,后面會改原代碼。因為總是模擬通不過,換這個就通過了,具體原因沒有去找。再點“rotocolselection”,如下圖設(shè)置:報文設(shè)置:菜單-->setup-->datadefine,然后如下圖所示:按上述連接并設(shè)置后,結(jié)果應(yīng)出現(xiàn)類似下面的顯示界面(如有不對,需設(shè)置數(shù)據(jù)格式等):上面是正常取得寄存器地址1000~1004的數(shù)據(jù)時的情況(從機正常返回)?,F(xiàn)在沒有PROTEUS仿真,肯定是沒有正常返回的,應(yīng)是下面的界面:上面兩幅圖中,返回數(shù)據(jù)的寄存器是按31000的格式,因為這是3X系輸入寄存器。用功能碼04。從報文的角度,不用理會,仍認為是寄存器1000。下面會重點分析地址1000輸入寄存器的細節(jié)。為了監(jiān)控串口4的進出數(shù)據(jù),可以設(shè)置:菜單-->setup-->displayoptions-->showtraffic,此時顯示下面界面(注意,選擇用HEX顯示,也是在setup菜單下進行選擇):有黑色背景的是從串口4返回的(需有從機應(yīng)答),沒有背景的是本程序通過串口4發(fā)出去的。發(fā)出去的一幀報文是0a0403e7000440c1,共8個字節(jié)。0a--deviceid10,即從機地址,可以設(shè)置為1~247;04--功能碼04,為讀INPUTREGISTER;03e7--從機輸入寄存器起始地址,即十進字999;0004--寄存器個數(shù)為4個字(功能碼04是針對字寄存器);40c1--CRC校驗值。這里不辭辛苦將報文寫出來,不是為了介紹報文,報文格式參見MODBUS標準。請關(guān)注寄存器起始地址,報文里寄存器的起始地址是999,比上述界面上的Address:1000少1。也即,這里主機的寄存器起始地址1000,可能的最小值是1,而報文的寄存器地址,可能的最小值是0。提前說一下,F(xiàn)reeModbus里需要我們編寫的幾個回讀函數(shù),其寄存器地址,也是從1開始的,報文里的地址需減1。言歸正傳,接著做準備工作?,F(xiàn)在請下載并安裝PROTEUS仿真軟件。我這里的版本是7.8SP2。打開ISIS畫原理圖,如圖所示:注意,P1串口接口元件接收發(fā)送腳與單片機串口腳的連接關(guān)系,很多人搞不明白。從串口接口來看,其接收端和發(fā)送端是從具有這個串口的設(shè)備本身的角度來看的,比如,計算機具有的串口,其RXD腳是指計算機的接收腳。在這里,P1的RXD腳就是指這個從機的接收腳了,所以其意義是與單片機的RXD是一致的,于是它們連接在一起。虛擬終端V1,提供了一個在進行PROTEUS仿真時,可以直接與串口接口P1相連的設(shè)備。其相當于是一個獨立的顯示和輸入終端,接收和發(fā)送腳是針對它自己而言的。其RXD接收腳可以接P1的RXD,意思是監(jiān)控從機接收的數(shù)據(jù);也可以接P1的TXD,意思是監(jiān)控單片機發(fā)出去的數(shù)據(jù)。如果要從V1敲入報文,將V1當作主機,也是可以的,就不需要ModScan32程序,但是會比較麻煩,此時應(yīng)將V1的發(fā)送腳TXD接P1的RXD腳。這個V1終端在這里不是必須的,這里主要用來監(jiān)控單片機通過串口3(在P1里設(shè)置)接收和發(fā)送的數(shù)據(jù)。注意,應(yīng)在PROTEUS運行時,點菜單-->調(diào)試-->VertureTerminalV1,顯示出端口界面,在界面上右鍵再選中“HexDisplayMode”,否則,非顯示字符是顯示不出來的。用AVRSTUDIO聯(lián)調(diào)是一樣的設(shè)置。V1的屬性設(shè)置如下:單片機的設(shè)置如下:注意兩點:單片機型號和頻率應(yīng)和AVRSTUDIO項目中的設(shè)置一樣;“ProgramFile”是從機程序,這里是DEMO編譯輸出,可以是.HEX也可以是.COF等。P1的設(shè)置如下:FreeModbus文件結(jié)構(gòu)......|-<freemodbus_v1.5.0>主目錄,注意下劃線|-<demo>例子目錄||-<AT91SAM7X_ROWLEY>基于AT91SAM7X_ROWLEY平臺例子,未展開||-<ATSAM3S>基于ATSAM3S平臺例子,未展開||-<ATSAM3S_FREERTOS>基于ATSAM3S_FREERTOS平臺例子,未展開||-<AVR>基于AVR平臺例子|||-<PORT>AVR硬件平臺下與移植有關(guān)的目錄||||-mbcrc.c√適用于AVR和GNC的CRC程序,可減少RAM。注1||||-port.h√頭文件||||-portevent.c√事件相關(guān)。注2。||||-portserial.c√串口相關(guān)。||||-porttimer.c√定時器相關(guān)。|||-demo.c√本文所主要分析的例程,main()所在。|||-excoils.cAVR下另一個例程,其main()所在。|||-makefile本demo例程在GNC下的編譯配置文件,用STUDIO時不用。|||-README.txtFREEMODBUS0.4AVREXAMPLE說明文檔。||-<BARE>BARE平臺例子,未展開。||-<......>其它平臺例子,未展開。|-<doc>一些文本文檔,未展開。|-<modbus>FreeModbus的主要目錄。||-<ascii>ascii模式有用的目錄。|||-mbascii.c|||-mbascii.h||-<functions>|||-mbfunccoils.c|||-mbfuncdiag.c|||-mbfuncdisk.c|||-mbfuncholding.c|||-mbfuncinput.c|||-mbfuncother.c|||-mbutils.c||-<include>|||-mb.h√|||-mbconfig.h√|||-mbframe.h√|||-mbfunc.h√|||-mbport.h√|||-mbproto.h√|||-mbutils.h√||-<rtu>rtu模式有用的目錄|||-mbcrc.c注1|||-mbcrc.h√|||-mbrtu.c√|||-mbrtu.h√||-<tcp>tcp通訊下有用的目錄|||-mbtcp.c|||-mbtcp.h||-mb.c√mb.c文件中定義了一系列的宏定義、函數(shù)指針及全局變量,|并使用優(yōu)先編譯指令預編譯一些程序代碼。|-<tools>|-...注1:在...\freemodbus_v1.5.0\demo\avr\port目錄和...\freemodbus_v1.5.0\modbus\rtu目錄中都有mbcrc.c,兩者并不一樣,雖然都可以使用,但后者是通用的,前者是專門針對AVR單片機優(yōu)化過的,可以大大減少RAM占用量。注2:將報文接收到響應(yīng),分成若干狀態(tài),狀態(tài)改變看作事件。本文以AVR平臺下的demo.c為例子來進行。FreeModbus對硬件的需求在移植之前,先要簡單考察一下自己的硬件跑不跑得動。(以下摘抄自“百度百科”的詞條“FreeModbus”)FreeModbus協(xié)議對硬件的需求非常少——基本上任何具有串行接口,并且有一些能夠容納modbus數(shù)據(jù)幀的RAM的微控制器都足夠了。一個異步串行接口,能夠支持接收緩沖區(qū)滿和發(fā)送緩存區(qū)空中斷。一個能夠產(chǎn)生RTU傳輸所需要的t3.5字符超時定時器的時鐘。對于軟件部分,僅僅需要一個簡單的事件隊列。在使用操作系統(tǒng)的處理器上,可通過單獨定義一個任務(wù)完成Modbus時間的查詢。小點的微控制器往往不允許使用操作系統(tǒng),在那種情況下,可以使用一個全局變量來實現(xiàn)該事件隊列(AtmelAVR移植使用這種方式實現(xiàn))。實際的存儲器需求決定于所使用的Modbus模塊的多少。下表列出了所支持的功能編譯后所需要的存儲器。ARM是使用GNUARM編譯器3.4.4使用-O1選項得到的。AVR項數(shù)值是使用WinAVR編譯器3.4.5使用-Os選項編譯得到的。表2FreeModbus對硬件的需求ModuleARMCodeARMRAM(static)AVRCodeAVRRAM(static)ModbusRTU(Required)1132Byte272Byte1456Byte266ByteModbusASCII(Optional)1612Byte28Byte1222Byte16ByteModbusFunctions[1]1180Byte34Byte1602Byte34ByteModbusCore(Required)924Byte180Byte608Byte75BytePortingLayer(Required[2])1756Byte16Byte704Byte7ByteTotals7304Byte530Byte5592Byte398Byte實際大小決定于可支持的Modbus功能碼的多少。功能碼可以在頭文件mbconfig.h中進行配置。決定于硬件。以上摘抄自“百度百科”的詞條“FreeModbus”。AVR單片機MEGA168顯然在硬件上是滿足的。實際應(yīng)用時,因為不可能只是一個modbus單獨的實現(xiàn),還要各其它的軟硬件功能結(jié)合起來,所以還需考慮兩點:中斷(主要是定時中斷),與其它中斷的優(yōu)先級關(guān)系,以及各應(yīng)用對開關(guān)中斷的控制的時間點。特別是基于RTOS應(yīng)用時。ROM/RAM空間的需求,從AVR下的DEMO來看,用AVRSTUDIO4.12并安裝GCC10,用-Os選項,實際所用ROM為5942byte,所用RAM為925byte(使用...\freemodbus_v1.5.0\modbus\rtu目錄下的mbcrc.c)。如下所示:AVRMemoryUsage----------------Device:atmega168Program:5942bytes(36.3%Full)(.text+.data+.bootloader)Data:925bytes(90.3%Full)(.data+.bss+.noinit)Buildsucceededwith3Warnings...改成使用...\freemodbus_v1.5.0\demo\avr\port目錄下的mbcrc.c(其它不變),最大變化是RAM用量大大減少,與上表基本相符,如下所示:AVRMemoryUsage----------------Device:atmega168Program:5946bytes(36.3%Full)(.text+.data+.bootloader)Data:413bytes(40.3%F

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論