本帖最后由 FlandreUNX 于 2017-8-14 12:03 编辑
uModbusMaster
- /**
- * __ __ _ _ __ __ _
- * _ _| / |___ __| | |__ _ _ __| / |__ _ __| |_ ___ _ _
- * | || | |/| / _ / _` | '_ || (_-< |/| / _` (_-< _/ -_) '_|
- * \_,_|_| |_\___/\__,_|_.__/\_,_/__/_| |_\__,_/__/\__\___|_|
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
复制代码
Modbus协议都出现好多年,也有不少开源的从机协议,但是开源的主机协议实在太少了.
本文在一个项目中需要用到modbus主机,在此论坛下找到了
https://github.com/armink/FreeModbus_Slaver-Master-RTT-STM32的开源主机代码.
但是觉得他的主机查询方式有点累赘,只能固定从1开始的从机ID,浪费了很多空间,而且基于freemodbus的代码风格实在不好看.所以本人花了2天时间二次重构了该作者的代码.
该项目有以下特点
- 主机接口与Freemodbus接口基本一致;
- 采用通用请求包,简化入口变量的复杂;
- 过程与对象全隔离,单系统多主机的实现;
- 支持实时系统(本版本基于MDK RTX4)与裸机的移植;
- 请求采用线程安全的堵塞方式,不会同时访问会出错的情况;
- 仅支持RTU模式的Master
- 几乎全中文注释,一行指令一个注释,非常适合新手学习
注:本程序的例程移植是以STM32F072C8t6+KIEL5+RTX_OS环境下的移植,裸奔请根据实际情况来配置;
项目上面有直接能用的例程,如果需要移植请根据例程来移植
另外我的项目地址是
https://github.com/FlandreUNX/uModbusMaster
如果各位看官喜欢该程序,可以给我点个赞star或者Fork;本程序无偿使用
但是
请标明程序出处,谢谢合作;感谢armink作者的源码的贡献!
很不错啊~非常感谢楼主的开源。终于看到期盼已久的 多主 Modbus 协议栈。
多主多从的嵌入式 Modbus 协议的需求量还是挺多的,经常会有网友问我如何改造 FreeModbus Master 的问题,但苦于精力有限,一直没有对该功能进行支持。再次感谢楼主的分享!
另外,澄清下你说的 ( https://github.com/armink/FreeModbus_Slave-Master-RTT-STM32 ) 两个问题:
1、主机协议栈与从机协议栈是 开启/关闭 可以配置的,所以如果只使用一种,是可以灵活定制的;
2、从机的起始地址也并不一定非要从 1 开始,这点取决于用户对于 port 文件夹中 user_mb_app_m.c 中 Modbus 主机回调接口的实现。例如:我的一些产品中,该文件在 Modbus 数据存储方式并不是使用默认的数组这类顺序存储的方式,而是使用链表,降低了非连续型数据的内存占用。
一周热门 更多>