modbus协议栈(modbus协议栈程序编写)

      最后更新:2023-03-19 05:41:04 手机定位技术交流文章

      外行人请求帮助:modbus、rtu、modbus rtu分别是什么?被搞混了。

      我说个简单点的吧 不是复制的哦modbus协议是工控行业的标准协议,前身为莫迪康所写,现已被施奈德收购而modbus分为两种协议即串口协议(modbusrtu)和网口协议(modbustcp)协议一般的工控机只支持rs232或者RS485的串口模式这个时候工控机的协议栈里就只有modbusRTU协议当他从串口接收到数据时,会直接根据报文中的数据进行控制如果需要用modbusTCP协议进行传输,则需要使用带有网口的PLC具体的帧格式如下modbusRTU地址域功能码数据差错校验modbusTCP目的地址协议id长度单元号功能码数据简单的说tcp是由RTU加工而来的而RTU则是另外一种概念,不包含在modbus协议内 是工控行业对监控设备的简称。
      外行人请求帮助:modbus、rtu、modbus rtu分别是什么?被搞混了。

      freemodbus 与 modbus 的区别

      FreeMODBUS一个奥地利人写的Modbus协议。它是一个针对嵌入式应用的一个免费(自由)的通用MODBUS协议的移植。Modbus是一个工 业制造环境中应用的一个通用协议。Modbus通信协议栈包括两层:Modbus应用层协议,该层定义了数据模式和功能;另外一层是网络层。
      FreeMODBUS是一个针对嵌入式应用的MODBUS协议的移植,Modbus是一种串行通信协议,广泛应用在工业控制系统中,许多工业设备,包括PLC,DCS,智能仪表等都在使用Modbus协议作为他们之间的通讯标准。在工业环境中profibus和profinet也比较常用,但是由于协议不同会造成主从站无法通讯,这种情况下需要加协议转换网关,yt-pb-02,yt-pn-03, 等都可以进行协议转换。
      freemodbus 与 modbus 的区别

      怎么在ZigBee协议栈加入modbus协议

      具体要求可以和我说说我做这方面的
      怎么在ZigBee协议栈加入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=yCONFIG_BLUEZ_L2CAP=y# CONFIG_BLUEZ_SCO is not setCONFIG_BLUEZ_RFCOMM=yCONFIG_BLUEZ_RFCOMM_TTY=yCONFIG_BLUEZ_BNEP=yCONFIG_BLUEZ_BNEP_MC_FILTER=yCONFIG_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 setdevice部分就设了个USB的,其他的就不设置了。下面继续make dep;make zImage的常规过程,OK,没有发生编译问题,可以稍微舒口气了。下面要移植Bluez的基础库了,在Redhat 9下执行# ldd /usr/lib/libbluetooth.so.1.0.17libc.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-ranlibLD=/opt/host/armv4l/bin/armv4l-unknown-linux-ld# make# make installOK了,到了/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/hcidlibbluetooth.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/shecho "PIN:123"用C实现一个就是:#include 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
      如何将freemodbus协议栈移植到linux下

      如何将freemodbus协议栈移植到linux下

      FreeMODBUS一个奥地利人写的Modbus协议。它是一个针对嵌入式应用的一个(自由)的通用MODBUS协议的移植。Modbus是一个工 业制造环境中应用的一个通用协议。Modbus通信协议栈包括两层:Modbus应用层协议,该层定义了数据模式和功能;另外一层
      如何将freemodbus协议栈移植到linux下

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/58386.html

          热门文章

          文章分类