找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2439|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

迅為iTOP-開發(fā)板-modbus移植和使用文檔

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:188759 發(fā)表于 2018-8-28 15:07 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本文檔介紹 modbus庫如何移植到ARM開發(fā)板上,以及如何使用測試程序。
適用迅為iTOP-4412開發(fā)板丨4418開發(fā)板丨6818開發(fā)板丨IMX6開發(fā)板
1.什么是 modbus
網(wǎng)絡(luò)上關(guān)于 modbus 介紹的文章非常多,還有專門介紹 modbus 的書籍,這些資料大家 都可以利用起來,但是在這一小節(jié)中,作者希望幫助大家理解 modbus 的本質(zhì),modbus 到 底是用來做什么,用來解決什么問題和存在的價值。
第一個要重點理解的是:modbus 是一個“純數(shù)據(jù)協(xié)議”。
說到 modbus 協(xié)議,經(jīng)常和 RS232 和 RS485 以及以太網(wǎng)聯(lián)系到一起。那么 modbus 和 RS485 協(xié)議有什么關(guān)系么?modbus 是純粹的數(shù)據(jù)協(xié)議,和 RS232、RS485 和網(wǎng)絡(luò)等協(xié)議沒 有一點關(guān)系,如果在串口 RS232 上使用 modbus 協(xié)議,modbus 只處理通過串口發(fā)送前和串 口接收后的數(shù)據(jù),串口只是在發(fā)送數(shù)據(jù)前使用 modbus 協(xié)議來轉(zhuǎn)換數(shù)據(jù),接收數(shù)據(jù)之后,將 數(shù)據(jù)通過 modbus 協(xié)議轉(zhuǎn)換出來。
第二個要重點理解的是:modbus 是一個“通用的純數(shù)據(jù)協(xié)議”。
怎么理解通用的數(shù)據(jù)協(xié)議呢?作者在讀書的時候,剛開始學(xué)習(xí)嵌入式,使用的是 51 單片 機,當(dāng)時要調(diào)試程序的時候,一般執(zhí)行到哪一步,就點亮一個燈或者拉高一個 IO,后來覺得 通過“點燈”調(diào)試程序是在太慢了,于是自己定義了“串口數(shù)據(jù)協(xié)議”,例如:執(zhí)行到某一段 代碼,我就打印 0x01,這段代碼出現(xiàn)錯誤就打印 0x02...現(xiàn)在大家學(xué)習(xí)了 linux,都知道 linux 控制臺了,linux 控制臺對于程序員來說,主要就是用來調(diào)試程序的,帶代碼中添加 print 函 數(shù)就可以實現(xiàn)控制臺打印字符串。
那么作者當(dāng)年自己定義的“串口數(shù)據(jù)協(xié)議”,就不是一個通用的協(xié)議,只能自己使用,但 是 linux 控制臺,無論哪一個 linux 工程師,操作的方式都是類似的。那么 linux 控制臺,在 所有的 linux 設(shè)備上使用方法就是通用的。
modbus 可以類比為普通話,如下對應(yīng)關(guān)系:
福建人→閩南語→普通話
廣東人→粵語→普通話
東北人→東北話→普通話
四川人→四川話→普通話
福建人”比作“RS232”,“廣東人”和“東北人”比作 RS485,“四川人”比作 “以太網(wǎng)”...那么“普通話”就是 modbus 協(xié)議。modbus 協(xié)議和“人”這個硬件沒有關(guān) 系,和“人”的說法方式?jīng)]有關(guān)系,甚至機器人只要發(fā)聲是“普通話”,這個普通話也是 modbus 協(xié)議。
網(wǎng)上關(guān)于 modbus 的資料很多,有不少資料將 modbus 和 RS232 綁定,這一點是完全 錯誤的,請大家務(wù)必注意,modbus 只是一個“通用的純數(shù)據(jù)協(xié)議”。
modbus 是用于工業(yè)現(xiàn)場的總線協(xié)議,它不僅僅是在 PLC 或者單片機上可以使用,在任 何可以跑代碼的電子設(shè)備上都可以使用,因為 modbus 對硬件沒有任何定義。當(dāng)然, modbus 應(yīng)用范圍主要是在工業(yè)控制上。如果每一臺工業(yè)控制設(shè)備,都有一種自定義的協(xié) 議,那將是很恐怖的,modbus 協(xié)議可以用在所有控制設(shè)備上,所有的工業(yè)控制設(shè)備都可以 兼容 modbus 協(xié)議。
modbus 的本質(zhì)是一個通用的純數(shù)據(jù)協(xié)議,modbus 是用來規(guī)范工業(yè)現(xiàn)場各種控制設(shè)備 的通信協(xié)議,通過 modbus 協(xié)議,控制設(shè)備通過網(wǎng)絡(luò)(RS485 和以太網(wǎng)等)可以和其它設(shè)備 之間通信,不同廠商的設(shè)備生產(chǎn)的設(shè)備可以很方便的連成工業(yè)網(wǎng)絡(luò)。
2.modbus 移植到 linux
2.1 modbus 源碼下載
可以從 libmodbus 官網(wǎng) http://libmodbus.org/download/下載 3.1.4 版本,也可以用 迅為提供的下載好的源碼。
作者將“l(fā)ibmodbus-3.1.4.tar.gz”下載,打包在“topeet_modbus.tar.gz”中,其中還 有移植好文件。
2.2 arm-linux 上的 modbus 移植和編譯
交叉編譯使用的編譯器是“arm-2009q3”,如下圖所示。
通過 ssh 將下載好的源碼壓縮包“l(fā)ibmodbus-3.1.4.tar.gz”拷貝到 Ubuntu 上,使用命 令“tar -vxf libmodbus-3.1.4.tar.gz”解壓,解壓后生成目錄“l(fā)ibmodbus-3.1.4”,如下 圖所示。
使用命令“mkdir install”,新建 install 路徑,用以安裝生成的文件,如下圖所示。
進入 libmodbus-3.1.4,執(zhí)行命令./configure ac_cv_func_malloc_0_nonnull=yes -- host=arm-none-linux-gnueabi --enable-static --prefix=/home/minilinux/install/ 。 Host=后面的是編譯器前綴,--prefix=后面的是安裝目錄,可根據(jù)自己環(huán)境確定,如下圖所 示。
如下圖所示,執(zhí)行完畢。
執(zhí)行編譯命令“make”,如下圖所示。
編譯完成,如下圖所示。
執(zhí)行安裝命令“make install”,則安裝到./configure 指定的目錄,作者這里是 “/home/minilinux/install/”目錄,如下圖所示。
安裝完成,如下圖所示。
查看安裝目錄 install,在 install 生成三個目錄:include、lib、share,如下圖所示。
如下圖所示,使用 file 命令查看 lib 目錄下的庫文件,可以發(fā)現(xiàn)其中的文件是 arm 架構(gòu) 的。
將編譯出來的 lib 路徑下的所有文件拷貝到開發(fā)板的“/lib”目錄下。
至此,modbus 的 arm-linux 的庫文件編譯完成。
2.3 arm 的測試程序
進入目錄/home/minilinux/libmodbus-3.1.4/tests/,查看測試程序 random-test- server.c,如下圖所示,已經(jīng)編譯出來了,但是還是需要修改一下源碼中的幾個參數(shù),重新編 譯。
輸入命令 vim random-test-server.c 打開測試程序,里面 23 行 ctx =modbus_new_tcp("127.0.0.1", 1502); 改成 ctx = modbus_new_tcp(NULL, 1502);, 即 server 監(jiān)控所有的 ip 地址,端口是 1502。
然后執(zhí)行命令交叉編譯命令arm-none-linux-gnueabi-gcc -o random-test-server random-test-server.c - L/home/minilinux/install/lib -lmodbus -I/home/minilinux/install/include/modbus 生成可執(zhí)行文件 random-test-server,如下圖所示。
如下圖所示,可執(zhí)行文件是 arm 架構(gòu)的。
至此,arm 服務(wù)端的測試例程“random-test-server”編譯完成。
2.3 x86-linux 的 modbus 移植和編譯
在 minilinux 目錄下再建一個文件夾,用于放 modbus 的 x86 的文件,如下圖所示,使 用命令“tar -vxf libmodbus-3.1.4.tar.gz -C x86-modbus/”,將源碼解壓到這個目錄下。
進入解壓出來的“/home/minilinux/x86-modbus/libmodbus-3.1.4”目錄,如下圖所 示,執(zhí)行命令“./configure”,不用加任何參數(shù),默認就是 GCC-x86 配置。
配置完成,如下圖所示。
執(zhí)行“make”編譯命令,然后執(zhí)行安裝命令“make install”,安裝完成,如下圖所 示。
進入 test 目錄,前面我們編譯的 arm 下的測試程序是 server,那么 Ubuntu 下運行的就應(yīng) 該是 client 客戶端,如下圖所示。
客戶端需要服務(wù)端的 IP 地址,如下圖所示,作者的服務(wù)端(也就是開發(fā)板端)IP 是 “192.168.2.20”。
接著,修改 x86-modbus 目錄下的“random-test-client.c”文件,使用 vim 命令打開 random-test-client.c 文件,將
ctx = modbus_new_tcp("127.0.0.1", 1502);
改成
ctx = modbus_new_tcp(開發(fā)板 IP, 1502);
如下圖所示,然后保存退出。
執(zhí)行命令:gcc -o random-test-client random-test-client.c `pkg-config --libs --cflags libmodbus`
編譯生成 random-test-client 可執(zhí)行文件,如下圖所示,編譯出的可執(zhí)行文件是 x86 的。
至此,x86 上的測試程序編譯完成。
3.測試
首先確保開發(fā)板和虛擬機 Ubuntu 可以 ping 通,如下圖所示,作者虛擬機的 IP 為 “192.168.2.200”,通過開發(fā)板可以 ping 通 Ubuntu。
其次,注意將前面編譯出的 arm 的庫文件拷貝到開發(fā)板上,如下圖所示。
在開發(fā)板上運行服務(wù)端程序,如下圖所示。
在虛擬機 Ubuntu 上運行客戶端程序“./random-test-client”,運行完畢如下圖所示
服務(wù)端運行完畢,如下圖所示。
至此,modbus 的移植和測試完成。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表