free_modbus分析.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
free_modbus分析

FreeMODUS简介/index.php?lang=cn 源码下载地址/projects/freemodbus.berlios/?source=directory Modbus是一个工业制造环境中应用的一个通用协议。一个Modbus通信协议栈包括两层:Modbus应用层协议,该层定义了数据模式和功能;另外一层是网络层。在当前版本中,FreeMODBUS 提供了一个针对Modbus 应用层协议V1.1以及支持在Modbus over serial line speifications 1.0 协议中定义的RTU/ASCII 传输模式。自从0.7版本以后,FreeModbus也支持在 Modbus Messaging on TCP/IP Implementation Guide V1.0a中定义的Modbus TCP协议。FreeModbus是遵循BSD许可证,这意味着用户可以将FreeModbus应用于商业环境中。目前支持的Modbus功能包括: 读输入寄存器(0x04)? 读保持寄存器(0x03)? 写单个寄存器 (0x06)? 写多个寄存器 (0x10)? 读/写多个寄存器(0x17)? 读线圈状态 (0x01)? 写单个线圈(0x05)? 写多个线圈(0x0F)? 读离散输入(0x02)? 报告从结点ID (0x11)Modbus RTU/ASCII帧的接受和发送通过硬件提取层的回调函数驱动的一个状态机实现的。这就使得该协议很容易移植到新的平台上。当一个数据帧组合完毕,该数据将自动被传到Modbus应用层,数据帧的内容在该应用层得到解释。应用层提供Hooks(钩子函数),以方便增加新的Modbus功能。如果在处理一个新的数据帧时用到了Modbus TCP,移植层必须向协议层发送一个事件标志。协议层将调用一个返回接收到的Modbus TCP帧的功能函数。如果创建了一个有效的回复并且移植层支持Modbus回复。该层将向子端回复一个反馈。实现FreeModbus协议所需要的软/硬件需求实现Modbus协议对硬件的需求是极其少的-任何一个具有串行接口和一定量的能够处理modbus数据帧的RAM就足够了。? 一个支持中断的异步串行接口,该中断至少包括接收缓冲区满中断和发送寄存器空中断? 一个定时器,用以产生Modbus的RTU模式所需要的T3.5个字符的超时时间?对于软件部分而言,实现Modbus仅仅需要一个简单的事件队列。在STR71X/FreeRTOS 的移植中,使用了FreeRTOS的队列来实现了该事件队列以降低处理Modbus任务时的时间消耗。较小的微控制器往往不使用实时内核,在这种情况下,可以通过全局变量的使用来实现这个事件队列(Atmel的AVR控制器的移植中使用了该方法)。实际的内存需求量决定于使用的模块的多少。第一个表列出了所有功能模块所需要的内存量。对应ARM来讲,内存量的获取是通过使用GNUARM编译器在使用-O1命令下统计得来的。AVR所需要得内存量是通过WINAVR编译器在使用-Os命令下统计得来得。eMBInit//初始化modbus工作模式 eMBEnable//使能modbus协议栈 while(1) { eMBPoll//查询、处理modbus事件 } 回调函数 1、读输入寄存器eMBRegInputCB 参数列表: pucRegBuffer: 寄存器数据缓冲 usAddress: 寄存器首地址 usNRegs: 寄存器个数 返回值 MB_ENOERR: 成功 MB_ENOREG: 非法寄存器地址 2、读/写保持寄存器eMBRegInputCB 参数列表: pucRegBuffer: 寄存器数据缓冲 usAddress: 寄存器首地址 usNRegs: 寄存器个数 eMode 访问模式:读或写 返回值 MB_ENOERR: 成功 MB_ENOREG: 非法寄存器地址 3、读/写线圈寄存器 eMBRegCoilsCB 参数列表: pucRegBuffer: 寄存器数据缓冲 usAddress: 第一个线圈地址 usNCoils: 线圈个数 eMode 访问模式:读或写 返回值 MB_ENOERR: 成功 MB_ENOREG: 非法寄存器地址 4、读eMBRegDiscreteCB 参数列表: pucRegBuffer: 寄存器数据缓冲 usAddress: 离散输入首地址 usNDiscrete: 离散输入个数 返回值 MB_ENOERR: 成功 MB_ENOREG: 非法寄存器地址 位域操作函数 xMBUtilSetBits xMBUtilGetBits 配置文件mbconfig.h LINUX:linux系统下的RTU/ASCII模式 使用线程和线程互斥锁调用eMBPo

您可能关注的文档

文档评论(0)

153****9595 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档