# modbus_rt:纯C实现的跨平台modbus协议通信库
该项目的演示视频,详见:
B站:https://www.bilibili.com/video/BV1cc411m72m/
### 一、介绍
modbus_rt是一款完全基于C语言实现的可以运行在windows, linux, macos, RTOS上的modbus通信库。主要目的是针对控制系统和工业物联网的方向使用。modbus_rt可以同时支持slave模式和master模式,基于类似socket句柄的实现思想,可以很方便的支持多例模式。它不仅仅是modbus协议的解析和实现,而是尽可能的在应用层做好实现和封装,做到开箱即用,而不需要做过多的应用层移植。
modbus_rt支持几乎市面上常用的所有的modbus协议的实现,包括**modbus RTU**,**modbus ASCII**,**modbus TCP**,**modbus TCP over UDP**,**modbus RTU over TCP/UDP**, **modbus ASCII over TCP/UDP**,且都可以运行在**Slave模式**和**Master模式**。另外modbus_rt提供了modbus通信中的大小端转换函数接口(市面上**4种大小端模式**均支持),实现不同平台下的modbus寄存到各种数据的转换接口函数功能(包括bytes, string, int, long, float, double等)。
modbus_rt还额外提供了基于pikapython的接口实现,并整合进pikapython的官方的包管理器。可以采用python脚本实现modbus通信功能。可以无缝兼容到pikapython的环境当中(后续可能考虑提供基于micro python和Cpython的接口实现,本人对micro python和Cpython的底层封装不是很熟悉,看情况,不一定有时间,感兴趣的可以自己移植)。
另外由于modbus_rt采用纯C编写,后续会考虑支持编译封装为动态链接库,供其他编程语言调用(主要考虑给C#调用,目前主要的控制上位机平台基于QT或者C#居多),目前暂时没有封装dll,所以仅提供基于QT的demo。
##### 1、 modbus_rt的主要特性如下:
1. 可以无缝运行在市面上绝大部分平台,包括:windows,Linux,嵌入式RTOS系统当中(计划会维护rt-thread和FreeRTOS系统)。
2. 采用线程实现应用层接口,可以快速实现多个modbus 实例应用。支持几乎所有的modbus协议,且均支持Slave模式和Master模式。
3. 同时支持市面上4种不同模式的大小端数据转化接口,实现不同平台下的modbus寄存到各种数据的转换接口函数功能(包括bytes, string, int, long, float, double等)。
4. 基于面向对象的思维方式,采用句柄模式,非常方便实现modbus的多例模式。理论上只要性能,内存和空间足够,可以创建无数个modbus实例。
5. **modbus master在tcp模式下支持断线重连功能(包括tcp master和rtu/ascii master over tcp)**。在modbus的网络通信中,由于slave是服务端,master为客户端,可能由于网络或者服务端的原因(有些服务端为了保证性能是会自动做短链接处理。就是每进行一次modbus通信之后,会主动断开与客户端的连接,以减小性能开销)。这种情况下,会出现master每次通信需要判断服务端有没有断开,如果断开则需要重新建立连接。modbus_rt内部支持断线重连机制,即使由于网络或者服务端原因断开了连接,下次通信不需要重新建立连接。直接调用功能函数即可,应用框架会自动进行重连(内部有功能调用时重连和定时重连两方面处理,定时重连可以通过宏定义打开或者关闭——针对具有自动断开机制的服务端系统,可以考虑关闭定时重连,否则服务端断开之后系统会间隔的尝试与服务器进行重连。针对其他应用,开启定时重连的目的时为了防止由于网络或者超时原因导致的断开,系统会自动进行重连)。
6. **基于UDP通信接口之上modbus模式下,提供了网络设备查找和发现功能**。即:modbus slave端(一般可以称为设备端,以下简称设备端)与modbus master端(一般PC客户端或者应用端,以下简称客户端)为同一个路由器或者交换机下面的不同设备时。即使设备端与客户端的IP地址不在同一个网段下(设备端IP地址未知),可以由客户端通过往255.255.255.255的广播地址广播modbus命令,设备端收到广播信息后会对广播设备的ip地址进行检测,如果与设备不在同一个网段,会默认往255.255.255.255广播应答信息。这个时候,客户端就可以获取到modbus_rt设备端的ip地址。这样就可以实现设备地址的发现。另外基于此基础上可以扩展实现修改设备的IP地址的功能(详细可以参考rt-thread平台演示)。
7. **mdobus_rt在slave模式下,增加了set_pre_ans_callback和set_done_callback两个回调函数调用接口**。方便快速实现modbus协议与其他协议的转换。比如modbus RTU,ASCII,TCP之间的相互转化, modbus转mqtt,modbus转sql, modbus转OPC Client, modbus转profibus,modbus转canOpen等协议(第三方协议需要自己实现)。可以快速实现类似DTU的应用,以适应各种工业物联网的应用需求(详细可以参考modbus dtu案例演示)。
8. **modbus_rt提供脚本的应用层接口API,目前实现基于pikapython**(主要是考虑到pikapython本身采用python3语法,且支持windows,linux,RTOS,甚至无系统的跨平台支持),并且支持脚本解析运行模式和字节码运行模式,且提供了REPL的交互式运行模块。所以可以无缝集成到系统当中,也可以采用类似终端的方式,基于REPL的命令行模式来验证功能。
9. **(2024-01-31增加)支持自动modbus功能码实现文件下载和上传功能**:可以方便的用modbus_rt实现固件升级和其他文件(比如pikapython的字节码)下载上传功能。并且可以选择使用mbedTLS对固件和文件进行加密,实现加密的文件下载和上传。
##### 2、 modbus_rt的几点补充说明:
1. modbus_rt的协议解析部分基于开源的agile_modbus协议栈修改而来。针对slave_util部分做了重写,主要是支持动态绑定slave寄存器,甚至可以运行中增加slave寄存器。
2. 在基于windows,linux(理论上也可以运行在macos系统)上的串口通信部分采用了开源的libserialport串口通信库,采用加载动态链接库的形式调用,RTOS部分串口通信代码为自己编写。
3. modbus_rt的网络通信部分,采用BSD Socket接口,所以理论上只要可以支持BSD Socket的平台都可以使用,需要注意的是:为了实现多个socket的阻塞问题,采用了IO多路复用接口(select机制),所以需要系统支持select接口。windows和linux本身就都支持,RTOS系统需要确保系统已经移植了BSD socket并且支持select。
4. modbus_rt的应用实现层采用多线程,在windows,linux,macos等操作系统上采用了pthread多线程。linux和macos默认支持pthread,windows需要自己加载和安装pthread库。
5. 本项目参考和借鉴使用了包括但不仅限于以下开源的项目:agile_modbus, libserialport, PikaPython, PikaPython-OpenHardware, RT-Thread, FreeRTOS等等(如还有没有标注的项目,请注明)。采用和借鉴了的开源项目地址详见最后感谢栏,欢迎大家点赞相互交流学习。感谢以上的开源项目作者。
### 二、重大的更新记录
##### 1、2024-03-01更新内容
1. 修复了modbus_rt在slave模式下,如果绑定寄存器乱序绑定modbus slave寄存器的时候会导致链表数据丢失。(之前测试都是按照从小到大,或者从大到小,没有测试全面,如果地址顺序是乱的,则会出错,最新版本已经修复)——感谢网友“皓月”发现bug。
2. 增加了modbus_rt在freeRTOS系统的支持,并提供了在ESP32和air780e硬件平台的demo示例。
3. 增加了cmsis_rtos2的RTOS兼容层的platform
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
一款纯C实现的跨平台modbus协议通信库.zip一款纯C实现的跨平台modbus协议通信库.zip一款纯C实现的跨平台modbus协议通信库.zip一款纯C实现的跨平台modbus协议通信库.zip一款纯C实现的跨平台modbus协议通信库.zip一款纯C实现的跨平台modbus协议通信库.zip一款纯C实现的跨平台modbus协议通信库.zip一款纯C实现的跨平台modbus协议通信库.zip一款纯C实现的跨平台modbus协议通信库.zip一款纯C实现的跨平台modbus协议通信库.zip一款纯C实现的跨平台modbus协议通信库.zip一款纯C实现的跨平台modbus协议通信库.zip一款纯C实现的跨平台modbus协议通信库.zip一款纯C实现的跨平台modbus协议通信库.zip一款纯C实现的跨平台modbus协议通信库.zip一款纯C实现的跨平台modbus协议通信库.zip一款纯C实现的跨平台modbus协议通信库.zip一款纯C实现的跨平台modbus协议通信库.zip一款纯C实现的跨平台modbus协议通信库.zip一款纯C实现的跨平台modbus协议通信库.zip
资源推荐
资源详情
资源评论
收起资源包目录
一款纯C实现的跨平台modbus协议通信库.zip (2000个子文件)
ffunicode.c 1.87MB
ff.c 242KB
__pikaBinding.c 153KB
PikaVM.c 141KB
sockets.c 135KB
PikaObj.c 131KB
PikaParser.c 119KB
ipc.c 110KB
mib2.c 103KB
sockets.c 91KB
httpd.c 89KB
httpd.c 85KB
tcp.c 84KB
nd6.c 83KB
tcp_in.c 81KB
_pika_cJSON.c 80KB
modbus_rtu.c 79KB
snmp_msg.c 75KB
mdns.c 75KB
tcp_out.c 75KB
dhcp.c 74KB
lcp.c 72KB
lcp.c 72KB
yconf.c 71KB
dhcp.c 70KB
sockets.c 69KB
__asset_pikaModules_py_a.c 68KB
tcp_in.c 68KB
nd6.c 67KB
modbus_tcp.c 67KB
api_msg.c 67KB
tcp.c 66KB
snmp_msg.c 66KB
mdns.c 63KB
dhcp.c 63KB
auth.c 63KB
auth.c 63KB
ipcp.c 62KB
ipcp.c 62KB
eap.c 61KB
eap.c 61KB
api_msg.c 60KB
usbdevice_core.c 59KB
tcp_in.c 59KB
lconf.c 58KB
ppp.c 57KB
cmsis_os2.c 57KB
lcp.c 56KB
tcp_out.c 56KB
ip6.c 53KB
test_tcp.c 53KB
netif.c 53KB
dns.c 52KB
tcp.c 52KB
spi_msd.c 52KB
etharp.c 51KB
dns.c 51KB
tcp_out.c 49KB
pbuf.c 49KB
agile_modbus.c 48KB
serial_v2.c 48KB
mqtt.c 48KB
ppp.c 47KB
smtp.c 47KB
wlan_mgnt.c 47KB
ccp.c 47KB
ccp.c 47KB
ppp.c 47KB
pbuf.c 46KB
api_msg.c 45KB
etharp.c 45KB
kservice.c 45KB
etharp.c 44KB
rtlink.c 44KB
PikaCompiler.c 43KB
api_lib.c 43KB
udp.c 43KB
msg_in.c 43KB
mqtt.c 43KB
ulog.c 42KB
rndis.c 41KB
snmp_core.c 41KB
ipv6cp.c 41KB
ipv6cp.c 41KB
snmp_core.c 40KB
serial.c 40KB
ip4.c 40KB
makefsdata.c 40KB
at_socket.c 40KB
ipv4_nat.c 40KB
lowpan6.c 40KB
pppol2tp.c 39KB
test_dhcp.c 39KB
netif.c 39KB
nconf.c 38KB
gconf.c 38KB
test_dhcp.c 38KB
ip6.c 38KB
pbuf.c 38KB
ip4.c 38KB
共 2000 条
- 1
- 2
- 3
- 4
- 5
- 6
- 20
资源评论
阿齐Archie
- 粉丝: 3w+
- 资源: 2463
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功