當前位置:首頁 » 操作系統 » freemodbus源碼

freemodbus源碼

發布時間: 2023-03-24 10:08:06

『壹』 求c語言編程的Modbus TCP源代碼

從機的可以用freemodbus,我用過RTU的,很好用。
TCP的沒用過,但freemodbus的代碼格式很清晰,移植起來很簡單。
http://www.modbus.org/tech.php
另外可以去MODBUS的網站上找找,看有沒有合適的庫可以用。

『貳』 如何將freemodbus協議棧移植到linux

(二)在HHARM2410-R3上的移植
完成了在普通red hat上的安裝,熟悉了藍牙協議棧一些基本的東西,下面的任務就是把協議棧搬到開發板上了。
第一步當然是內核了,由於華恆的內核代碼改過,我也不知道從bluez上下載的patch能不能使用,試試看了,只好。
# cd /HHARM2410/kernel
# gzip -dc ~/patch-2.4.18-mh15.gz | patch -p1
# find ./ -name '*rej'
./fs/cramfs/inode.c.rej
不好,有文件不能patch,看看是針對cramfs文件系統的patch,我也不清楚為什麼bluez的patch會修改到cramfs,不過我想 問題應該不大。內核源代碼關於bluetooth的部分華恆應該沒有改過,因此patch的主要部分應該是沒有問題的。如果內核編譯後發生問題,我想大概 也只有把內核代碼翻出來看了。
先就這樣了,用用試試看好了。與普通pc上的類似,只不過有些是m的現在統統為y了。我的配置關於Bluez的部分設置為:
#
# Bluetooth support
#
CONFIG_BLUEZ=y
CONFIG_BLUEZ_L2CAP=y
# CONFIG_BLUEZ_SCO is not set
CONFIG_BLUEZ_RFCOMM=y
CONFIG_BLUEZ_RFCOMM_TTY=y
CONFIG_BLUEZ_BNEP=y
CONFIG_BLUEZ_BNEP_MC_FILTER=y
CONFIG_BLUEZ_BNEP_PROTO_FILTER=y
# CONFIG_BLUEZ_HIDP is not set
#
# Bluetooth device drivers
#
CONFIG_BLUEZ_HCIUSB=y
# CONFIG_BLUEZ_HCIUSB_SCO is not set
# CONFIG_BLUEZ_HCIUART is not set
# CONFIG_BLUEZ_HCIBFUSB is not set
# CONFIG_BLUEZ_HCIDTL1 is not set
# CONFIG_BLUEZ_HCIBT3C is not set
# CONFIG_BLUEZ_HCIBLUECARD is not set
# CONFIG_BLUEZ_HCIBTUART is not set
# CONFIG_BLUEZ_HCIVHCI is not set

device部分就設了個USB的,其他的就不設置了。
下面繼續make dep;make zImage的常規過程,OK,沒有發生編譯問題,可以稍微舒口氣了。
下面要移植Bluez的基礎庫了,在Redhat 9下執行
# ldd /usr/lib/libbluetooth.so.1.0.17
libc.so.6 => /lib/libc.so.6 (0x4002c000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x80000000)
發現沒有依賴什麼莫名其妙的庫,應該換個編譯器就可以了,configure一下就可以了。我的配置命令很簡單:
# ./configure --host=armv4l --prefix=/HHARM2410/applications/bluezport/libs CC=/opt/host/armv4l/bin/armv4l-unknown-linux-gcc CPP=/opt/host/armv4l/bin/armv4l-unknown-linux-cpp AR=/opt/host/armv4l/bin/armv4l-unknown-linux-ar STRIP=/opt/host/armv4l/bin/armv4l-unknown-linux-strip RANLIB=/opt/host/armv4l/bin/armv4l-unknown-linux-ranlib
LD=/opt/host/armv4l/bin/armv4l-unknown-linux-ld
# make
# make install
OK了,到了/HHARM2410/applications/bluezport/libs下看看,我也不清楚為什麼,居然只有.a和.la的靜態庫,沒有動態庫。只好自己動手,到bluz-libs-2.17/src/下,自己編譯動態庫:
# /opt/host/armv4l/bin/armv4l-unknown-linux-gcc -shared -o libbluetooth.so.1.0.17 bluetooth.o hci.o sdp.o
再做兩個符號連接
# ln -s libbluetooth.so.1.0.17 libbluetooth.so
# ln -s libbluetooth.so.1.0.17 libbluetooth.so.1
好了,庫交叉編譯完畢,mv到/HHARM2410/application/bluezport/libs/lib文件夾下就可以了。

接著移植Bluez的工具集。與庫類似,先看一下各個程序需要用到什麼庫,比如:
#ldd /usr/sbin/hcid
libbluetooth.so.1 => /usr/lib/libbluetooth.so.1 (0x40035000)
libc.so.6 => /lib/libc.so.6 (0x40042000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
挨個試試需要用的工具,發現需要的庫華恆和Bluez都提供了,應該換個編譯器編譯一下就可以了。編譯之前我為了到板子上與我自己的手機連接方便修改 了bluez-utils-2.17/hcid/security.c文件,在init_security_data函數中的設置默認的密碼,非常簡單地 改了兩行:
strcpy(hcid.pin_code, "123");
hcid.pin_len = 3;
然後configure我想就行了,我的configure設置為:
# ./configure --prefix=/HHARM2410-R3/applications/bluezport/utils --includedir=/HHARM2410-R3/applications/bluezport/libs/include --libdir=/HHARM2410-R3/applications/bluezport/libs/lib --with-bluez=/HHARM2410-R3/applications/bluezport/libs --disable-test --disable-cups --disable-pcmia --host=armv4l CC=/opt/host/armv4l/bin/armv4l-unknown-linux-gcc CPP=/opt/host/armv4l/bin/armv4l-unknown-linux-cpp AR=/opt/host/armv4l/bin/armv4l-unknown-linux-ar STRIP=/opt/host/armv4l/bin/armv4l-unknown-linux-strip RANLIB=/opt/host/armv4l/bin/armv4l-unknown-linux-ranlib LD=/opt/host/armv4l/bin/armv4l-unknown-linux-ld
# make
我在這步make的時候出現了一點小錯誤,好像是說PATH_MAX沒有定義,這個是LINUX設置的存放路徑名緩沖區的最大長度。應該是少包含了一個頭文件造成的。我沒有去仔細考究,就在當前文件下的config.h中添加了三行:
#ifndef PATH_MAX
#define PATH_MAX 4095/* PAGE_SIZE - 1 */
#endif
採用簡單粗魯的添加定義的方式。再make,通過。
# make install
好了,工具集都在/HHARM2410-R3/applications/bluezport/util下了
最後,由於在PC的LINUX下的默認pin_helper /usr/bin/bluepin是用python寫的代碼,在2410上當然不能用了,所以要自己寫一個pin_helper的程序。翻翻 /usr/bin/bluepin的代碼以及hcid/security.c的代碼,事實上hcid進程在驗證PIN code的時候開了一個pipe指向pin_helper進程的標准輸出,pin_helper進程向用戶詢問PIN code,如果用戶輸入密碼XXXX就以"PIN:XXXX"的形式寫到標准輸出中去,如果用戶reject就寫個"ERR"回去。
我以一種最簡單的方式實現pin_helper程序,即固定地寫一個code回去,比如123,犧牲安全性。
腳本實現就是:
#!/bin/sh

echo "PIN:123"
用C實現一個就是:
#include <stdio.h>

int main(int argc, char* argv[])
{
printf("PIN:123");
}
交叉編譯成my_pin_helper再放到板子的/usr/bin下,那麼就可以把板子的hcid.conf修改成:
pin_helper /usr/pin/my_pin_helper
後來,我在板子上也用MiniGUI寫了一個pin_helper,也挺簡單的。

好了,一切准備完畢,做好ramdisk,記得在/dev下mknod幾個rfcomm,放到板子上,可以運行!
插上USB適配器,連模塊都不用probe
# hciconfig hci0 up
# hcid -f /etc/bluetooth/hcid.conf
# hciconfig -a

『叄』 有人移植過RT Thread 上的那個modbus主站程序么

1、目前項目已經在Github中開源
2、主機的相關的框架已經修改完成,初始化、配置Modbus主機相關介面與原有從機介面基本相同;

3、移植主機相關硬體配置與原有從機方式一致,需要修改FreeModbus源碼中port文件夾中後綴帶_m相關文件;

4、Modbus主機請求主機請求功能目前實現了所有與保持寄存器、輸入寄存器、線圈及離散輸入相關的功能,並測試通過

5、目前的Modbus主機請求功能是非同步模式,後期考慮方便上層調用,可以同時給上層提供同步模式的控制方法;

6、主機的異常處理任務還未添加,只留了介面,後期考慮給上層提供回調介面,相關異常功能上層也能自動做處理;

7、目前最新代碼同時支持Modbus主機及Modbus從機兩種模式,兩者互不幹涉,用戶可以在/FreeModbus/modbus/mbconfig.h中自行裁剪。

『肆』 有人移植過RT Thread 上的那個modbus主站程序么

1、目前項目已經在Github中開源
2、主機的相關的框架已經修改完成,初始化、配置Modbus主機相關介面與原有從機介面基本相同兄兆;

3、移植主機相關硬體配置與原有從機方式一致,需要修改FreeModbus源碼中port文件夾中後綴帶_m相關文件;

4、Modbus主機請求主機請求功能目前實現了所有與保持寄存器、輸入寄存器、線圈及離散輸入相關的功能,並測試通過

5、目前的Modbus主機請求功能是非同步模式,後期考慮方便上層調用,可以同時給上層提供同步模式的控制方法;

6、主機的異常處理任務還未添加,只留了介面,後期考慮給上層提供回調介面,相關異常功能上層也能自動做處理;

7、目前最新代碼同時支持Modbus主機及Modbus從陵穗機兩種模式,兩者互不幹涉,用尺塵卜戶可以在/FreeModbus/modbus/mbconfig.h中自行裁剪。

『伍』 modbus協議與單片機通信

是改激這樣子的 . 單片機上實現核慧襪一個從機的modbus協議 可以到freemodbus官網 ,有源代碼碧尺可以下載 ,各種單片機的都有.

熱點內容
firefox緩存目錄 發布:2024-04-25 08:00:31 瀏覽:939
我的世界國服怎麼免費弄伺服器 發布:2024-04-25 08:00:16 瀏覽:538
javaapi源碼 發布:2024-04-25 07:51:15 瀏覽:605
怎麼在伺服器執行jmeter腳本 發布:2024-04-25 07:35:25 瀏覽:396
域名訪問https 發布:2024-04-25 07:16:56 瀏覽:414
javaie亂碼 發布:2024-04-25 07:07:15 瀏覽:602
php開發微信支付 發布:2024-04-25 06:57:38 瀏覽:317
上傳視頻最快 發布:2024-04-25 06:42:59 瀏覽:14
允許更新預編譯站點 發布:2024-04-25 06:32:53 瀏覽:679
如何獲取已經連上的網路密碼 發布:2024-04-25 06:27:48 瀏覽:466