久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2350|回復: 0
打印 上一主題 下一主題
收起左側

迅為iTOP-開發板-modbus移植和使用文檔

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

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

使用道具 舉報

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

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区三区在线观看视频 | 韩日一区二区 | 国产三区四区 | 青娱乐av| a视频在线播放 | 亚洲精品一区二区三区四区高清 | 久久精品国产免费看久久精品 | 精品一区二区在线视频 | 性色视频在线观看 | 亚洲www啪成人一区二区麻豆 | 亚洲自拍偷拍欧美 | 亚洲高清视频在线观看 | 日韩成人在线播放 | 久久精品一区二区三区四区 | 亚洲欧美日韩精品久久亚洲区 | 91国在线| 一片毛片 | 亚洲精品久久久久久下一站 | 亚洲顶级毛片 | 免费黄色片在线观看 | 免费观看一级毛片视频 | 婷婷色国产偷v国产偷v小说 | 亚洲视频免费播放 | 午夜精品久久久久久久久久久久久 | 在线免费黄色小视频 | 久久亚洲综合 | 婷婷丁香综合网 | 天天影视亚洲综合网 | 久久久久久久久精 | 黄色在线观看网站 | 国产99久久久国产精品 | 日韩欧美一区二区三区 | 给我免费的视频在线观看 | 欧美日韩国产精品一区二区 | 欧美午夜一区 | 亚洲欧美一区二区三区国产精品 | 91久久精品国产 | 精品国产乱码久久久久久牛牛 | av电影一区| 亚洲天堂久久新 | 午夜精品一区二区三区在线视 |