1. 程式人生 > >一個modbus協議庫移植——libmodbus-master

一個modbus協議庫移植——libmodbus-master

modbus協議是工業上常用的資料傳輸協議,在linux系統上,大家一般自己編寫或者找別人的程式碼複用,程式碼質量無法保障,除錯起來也比較費勁,最近發現github上有個非常好的modbus協議類庫,經過測試發現很好用,支援串列埠和ip兩種方式,下面記錄下來往arm版移植(其實類庫移植大同小異)的過程供大家參考,希望給大家節省一點時間。

1、程式碼下載

去github下載原始碼:https://github.com/stephane/libmodbus

程式碼解壓並且拷貝到交叉編譯使用者的目錄下


2、編譯

首先執行./autogen.sh 生成 configure指令碼;

然後執行./configure --help

從幫助資訊可以看到如何設定編譯生成目錄和交叉編譯項設定。

mkdir limodbus-release ---生成編譯生成檔案存放目錄

./configure --host=交叉編譯字首 --prefix=編譯生成檔案放置目錄

我自己的開發環境相關引數是:

./configure --host=arm-linux --prefix=/home/ccsl/libmodbus-master-linux/libmodbus-master-linux/limodbus-release

配置最後提示

       libmodbus 3.1.1
        ===============


        prefix:                 /home/ccsl/libmodbus-master-linux/libmodbus-master-linux/limodbus-release
        sysconfdir:             ${prefix}/etc
        libdir:                 ${exec_prefix}/lib
        includedir:             ${prefix}/include


        compiler:               arm-linux-gcc -std=gnu99
        cflags:                 -g -O2
        ldflags:                

可以檢視生成目錄和編譯器是否設定正確,如果不正確的話請重新設定

再然後執行

make & make install

中間或提示生成的檔案安裝目錄,以及如何使用生成的lib檔案,如下所示:

-------------------------------------------------------------------------------------------------------------

Libraries have been installed in:
   /home/ccsl/libmodbus-master-linux/libmodbus-master-linux/limodbus-release/lib


If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
     during execution
   - add LIBDIR to the `LD_RUN_PATH' environment variable
     during linking
   - use the `-Wl,-rpath -Wl,LIBDIR' linker flag
   - have your system administrator add LIBDIR to `/etc/ld.so.conf'


See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.

-------------------------------------------------------------------------------------------------------------

完成後到你的目錄下檢視生成的目錄和檔案:


lib檔案下面就是動態庫了,壓縮生成的庫

tar czf libmodbus-linux.tar.gz lib/libmodbus.*

通過nfs或者什麼方法把動態庫放到arm的/lib目錄下,就可以開始使用了

3、測試

libmodbus-master提供了測試程式在tests下,

首先把random-test-server.c裡面23行  ctx = modbus_new_tcp("127.0.0.1", 1502); 改成 ctx = modbus_new_tcp(NULL, 1502);,意思是說server監控所有的ip地址,埠是1502,然後編譯

arm-linux-gcc random-test-server.c -o random-test-server '-I/home/ccsl/libmodbus-master-linux/libmodbus-master-linux/limodbus-release/include/modbus  -L/home/ccsl/libmodbus-master-linux/libmodbus-master-linux/limodbus-release/lib -lmodbus'

把random-test-server放到板子上執行


好了,arm版上的環境就搭好了,為了測試一下,我們在編譯機上作為client

首先在你的編譯機上新建一個目錄(最好是換個使用者下面),按照上面的過程再來一遍,但是生成makefile檔案的時候什麼都不要加

./configure 

然後make & make install

到tests目錄下面

random-test-client.c檔案 第60行:ctx = modbus_new_tcp("127.0.0.1", 1502); 裡面的地址改成你的arm板子的地址,編譯一下:

gcc random-test-client.c -o random-test-client `pkg-config --libs --cflags libmodbus`

這樣就生成了:random-test-client

執行./random-test-client

就可以看到輸出了

到這裡就介紹完了,希望對大家有幫助!