[重构开源]*uModbusMaster*|modbus主机||STM32|RTOS支持|单MCU多主机

2019-12-10 18:29发布

本帖最后由 FlandreUNX 于 2017-8-14 12:03 编辑

uModbusMaster


  1. /**
  2. *        __  __         _ _            __  __         _           
  3. *   _  _|  /  |___  __| | |__ _  _ __|  /  |__ _ __| |_ ___ _ _
  4. *  | || | |/| / _ / _` | '_ || (_-< |/| / _` (_-<  _/ -_) '_|
  5. *   \_,_|_|  |_\___/\__,_|_.__/\_,_/__/_|  |_\__,_/__/\__\___|_|  
  6. *
  7. *  This program is free software: you can redistribute it and/or modify
  8. *  it under the terms of the GNU Affero General Public License as
  9. *  published by the Free Software Foundation, either version 3 of the
  10. *  License, or (at your option) any later version.
  11. *
  12. *  This program is distributed in the hope that it will be useful,
  13. *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15. *  GNU Affero General Public License for more details.
  16. *
  17. *  You should have received a copy of the GNU Affero General Public License
  18. *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
  19. */
复制代码
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作者的源码的贡献!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
58条回答
FlandreUNX
1楼-- · 2019-12-12 20:04
 精彩回答 2  元偷偷看……
sunnydragon
2楼-- · 2019-12-12 20:19
本帖最后由 sunnydragon 于 2017-8-13 22:45 编辑
FlandreUNX 发表于 2017-8-13 20:03
对的改为链表+结构体的方式很好.
将主机获取数据到储存的过程进行分离,如由用户来决定如何储存这样更好, ...


不仅仅是链表,用户通过 Modbus 数据回调接口还能做很多事。

再比如我之前有做过一个专门针对 Modbus 数据结构设计的开源项目 EasyDataManager: https://github.com/armink/EasyDataManager ,把这个里面的 Cache data 数据结构与 Modbus 寄存器关联还能实现,寄存器内容变化的通知及对应的异步事件处理,完完全全事件驱动模式编程,效率大增。

这样再也不需要为了获取一个寄存器变化做些事情,而单独开辟线程轮训了。
suny1022
3楼-- · 2019-12-12 23:38
这个必须要赞一下,学习了
weiwei4
4楼-- · 2019-12-13 01:57
不错,支持一个
weichao4808335
5楼-- · 2019-12-13 07:22
dingyige!!!!!
wajlh
6楼-- · 2019-12-13 09:48
 精彩回答 2  元偷偷看……

一周热门 更多>