源:http://blog.sina.com.cn/s/blog_4935209001012eax.html

网站位置:http://www.freemodbus.org/index.php?lang=cn

文档位置:http://www.freemodbus.org/api/index.html

一、介绍
Freemodbus是modbus协议在嵌入式处理器上的实现。包括AVR,PIC,WIN32等等平台。它是开放性源代码,可用于商业目的。
它实现了Modbus RTU/ASCII、TCP三种传输方式,当前版本是1.5,支持以下功能:
  • 读输入寄存器 (0x04)
  • 读保持寄存器 (0x03)
  • 写单个寄存器 (0x06)
  • 写多个寄存器 (0x10)
  • 读/写多个寄存器 (0x17)
  • 读取线圈状态 (0x01)
  • 写单个线圈 (0x05)
  • 写多个线圈 (0x0F)
  • 读输入状态 (0x02)
  • 报告从机标识 (0x11)
本实现基于最新的标准并且与标准完全兼容。接收和传输Modbus RTU/ASCII数据帧是通过一个由硬件提取层的调用来驱动状态机实现的。这就使得协议非常容易移植到其他的平台之上。当接收一个完整的数据帧后,该数据帧被传入Modbus应用层,数据帧的内容在该层内得到解析。为方便地增加新的Modbus功能,Freemodbus在应用层提供了钩子函数Hooks。
如果用到了Modbus TCP协议,那么当准备处理一个新数据帧的时候,移植层就必须首先向协议层发送一个事件标志。然后,协议栈调用一个返回值为接收到的Modbus TCP数据帧的函数,并且开始处理这个数据帧。如果数据有效,则响应的Modbus反馈帧将提供给移植层生成反馈帧。最后,该反馈帧被发送到客户端。
二、实现FreeModbus协议所需要的软/硬件需求
Modbus协议对硬件的需求非常少——基本上任何具有串行接口,并且有一些能够容纳modbus数据帧的RAM的微控制器都足够了。

  • 一个异步串行接口,能够支持接收缓冲区满和发送缓存区空中断。
  • 一个能够产生RTU传输所需要的t3.5 字符超时定时器的时钟。

对于软件部分,仅仅需要一个简单的事件队列。 The STR71X/FreeRTOS 移植使用 FreeRTOS 队列作为事件队列来减少 Modbus 任务所需要的时间。小点的微控制器往往不允许使用操作系统,在那种情况下,可以使用一个全局变量来实现该事件队列(The Atmel AVR 移植使用这种方式实现)。

实际的存储器需求决定于所使用的 Modbus 模块的多少。下表列出了所支持的功能编译后所需要的存储器。 ARM 项数值是使用 GNUARM 编译器 3.4.4 使用 -O1 选项得到的。 AVR项数值是使用 WinAVR 编译器 3.4.5 使用 -Os 选项编译得到的。

Module ARM Code ARM RAM (static) AVR Code AVR RAM (static)
Modbus RTU (Required) 1132Byte 272Byte 1456Byte 266Byte
Modbus ASCII (Optional) 1612Byte 28Byte 1222Byte 16Byte
Modbus Functions [1] 1180Byte 34Byte 1602Byte 34Byte
Modbus Core (Required) 924Byte 180Byte 608Byte 75Byte
Porting Layer (Required [2]) 1756Byte 16Byte 704Byte 7Byte
Totals 7304Byte 530Byte 5592Byte 398Byte

[1]: 实际大小决定于可支持的Modbus功能码的多少。功能码可以在头文件 mbconfig.h中进行配置。
[2]: 决定于硬件。

已完成的移植:
Cortex M3 devices:
  • Atmel AT91SAM3S.
ARM devices:
  • STR71X with FreeRTOS/GCC. See STR71X/simple2.c for an example.
  • STR71TCP with FreeRTOS/lwIP/GCC. This port includes FreeRTOS, lwIP and a fully working PPP stack. The lwIP, PPP and FreeRTOS part is generic and therefore can be used for other ports ( or other projects ).
  • LPC214X with Keil. See LPC214X/demo.c for an example. This port uses the Keil ARM Compiler 2.41.
  • AT91SAM7X with FreeRTOS/Rowley. See AT91SAM7X_ROWLEY/demo.c for an example.
AVR devices:
  • ATMega8/16/32/128/168/169 with WinAVR. See AVR/demo.c for an example.
Coldfire devices:
  • MCF5235 with GCC. See MCF5235/demo.c for an example.
  • MCF5235 with CodeWarrior and FreeRTOS port for ColdFire. See MCF5235CW/demo.c for an example.
  • MCF5235/TCP with GCC. This port features FreeRTOS and the lwIP stack. The lwIP part is generic and therefore it should be used as a basis for other lwIP ports.
MSP430 devices
  • MSP430F169 with Rowley Crossworks. See MSP430/demo.c for an example.
  • MSP430F169 with GCC. See MSP430/demo.c for an example.
Z8Encore devices
  • Z8F6422 and Z8F1622 port. See Z8ENCORE/demo.c for an example. The port uses ZDS II - Z8 Encore! 4.10.1 as development environment.
Win32:
  • A Win32 Modbus RTU/ASCII Port.
  • A Win32 Modbus/TCP Port.
Linux:
  • A Linux (uCLinux or other distributions) Modbus RTU/ASCII Port.

Freemodbus 1.5相关推荐

  1. FreeModbus 移植于STM32 实现Modbus RTU通信

    http://ntn314.blog.163.com/blog/static/161743584201233084434579/ 毕业设计自己要做个基于STM32的PLC能直接跑语句表的,现在看来好像 ...

  2. freemodbus源码/获取地址

    官网源码地址:点击访问 FreeMODBUS是一个奥地利人写的Modbus协议.它是一个针对嵌入式应用的一个免费(自由)的通用MODBUS协议的移植.Modbus是一个工业制造环境中应用的一个通用协议 ...

  3. FreeModbus移植到STM32F107(以太网传输方式)

    1.创建工程 配置好之后生成工程 2.将FreeModbus源码,拷贝到工程目录 3.将FreeModbus文件添加进工程 打开mbtcp.c文件发现,受MB_TCP_ENABLED宏定义的影响,所有 ...

  4. FreeModbus移植到STM32F103(串行传输方式)

    1.创建工程 2.将FreeModbus源码,拷贝到工程目录 3.将FreeModbus文件添加进工程 添加好之后,编译出现错误 4.移植底层接口 先看第一个错误,缺少port.h 借鉴AVR架构的程 ...

  5. FreeModbus源码获取

    1.进入官网:https://www.embedded-solutions.at/en/freemodbus/ 2.进入下载页面 3.下载源码 4.解压源码 5.查看FreeRTOS源码

  6. freemodbus收藏学习网址

    https://www.cnblogs.com/axinno1/p/8521481.html https://blog.csdn.net/xukai871105/article/details/216 ...

  7. STM32F103/107 移植Freemodbus RTU

    1.简介 FreeMODBUS一个奥地利人写的Modbus协议.它是一个针对嵌入式应用的一个免费(自由)的通用MODBUS协议的移植.Modbus是一个工业制造环境中应用的一个通用协议.Modbus通 ...

  8. FreeModbus源码结构分析

    FreeModbus 官网 目录结构 [demo]-各种平台的例程 [doc]-文档资料 [modbus]-核心源码 [tools]-相关工具 FreeModus的移植主要用到-\modbus目录和 ...

  9. uip+freemodbus网络通信

    前言: TCP/IP协议通过uip协议栈来实现,应用层的modbus协议使用freemodbus来实现,另外还需要一个网卡(笔者使用的是KSZ8851网卡控制器)来实现底层的数据传输(包括物理层.数据 ...

最新文章

  1. Exchange工具11—性能监视器
  2. 【原创翻译】如何阅读一个GO程序
  3. C#编程语言之byte[]数组和string的互相转化
  4. 判断checkbox是否选中并改变值
  5. 实验报告书 c语言,c语言实验报告书.doc
  6. 科大星云诗社动态20210824
  7. c语言1 2 3 10000,在网上看到一个求2的10000次方的方法,有个地方看不懂,求大佬...
  8. Shell(1)——执行脚本
  9. sublime text3下BracketHighlighter的配置方法
  10. 【Pytorch神经网络实战案例】15 WGAN-gp模型生成Fashon-MNST模拟数据
  11. vi 编辑器命令 (share)
  12. K8S 核心组件 kubelet 与 kube-proxy 分析
  13. 连接Linux服务器操作Oracle数据库
  14. 我与CSDN的2020年
  15. NLP 自然语言分析理解
  16. 设计模式读书笔记之结构型模式
  17. 6.2神经网络算法应用上学习笔记
  18. 万网空间PHP 伪静态化,disuczx版块URL伪静态目录化设置方法
  19. 嵌入式软件测试怎么实现自动化测试?
  20. MATLAB-imrotate函数

热门文章

  1. 详细分析开源软件 ExifTool 的任意代码执行漏洞 (CVE-2021-22204)
  2. 三番四次,Installer 0day 终于获得微补丁
  3. 【Tomcat】Tomcat 系统架构与设计模式,第 2 部分: 设计模式分析
  4. 刷 携程 地面业务 前端面试经历
  5. 单源最短路径(最短路)
  6. java web 加载Spring --web.xml 篇
  7. 学习Nagios(三): NRPE安装及配置
  8. Word 2003快速输入技巧
  9. /usr/bin/ld: skipping incompatible -转
  10. Linux调试工具strace和gdb常用命令小结-转