https www.ccb.com:∥wwW、19free.com/?app=p....现在情况,听说换网业了,换的现在网

19free_modbus分析
上亿文档资料,等你来发现
19free_modbus分析
1.FreeMODUS简介;FreeMODBUS是一个针对嵌入式应用的一个免;官方网站http://www.freemodbu;源码下载地址http://sourceforge;Modbus是一个工业制造环境中应用的一个通用协;读输入寄存器(0x04);读保持寄存器(0x03);写单个寄存器(0x06);写多个寄存器(0x10);读/写多个寄存器(0x17)
1. FreeMODUS简介FreeMODBUS是一个针对嵌入式应用的一个免费(自由)的通用MODBUS协议的实现(移植)。官方网站http://www.freemodbus.org/index.php?lang=cn源码下载地址http://sourceforge.net/projects/freemodbus.berlios/?source=directoryModbus是一个工业制造环境中应用的一个通用协议。一个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回复。该层将向子端回复一个反馈。2. 实现FreeModbus协议所需要的软/硬件需求实现Modbus协议对硬件的需求是极其少的-任何一个具有串行接口和一定量的能够处理modbus数据帧的RAM就足够了。一个支持中断的异步串行接口,该中断至少包括接收缓冲区满中断和发送寄存器空中断
一个定时器,用以产生Modbus的RTU模式所需要的T3.5个字符的超时时间 对于软件部分而言,实现Modbus仅仅需要一个简单的事件队列。在STR71X/FreeRTOS 的移植中,使用了FreeRTOS的队列来实现了该事件队列以降低处理Modbus任务时的时间消耗。较小的微控制器往往不使用实时内核,在这种情况下,可以通过全局变量的使用来实现这个事件队列(Atmel的AVR控制器的移植中使用了该方法)。 实际的内存需求量决定于使用的模块的多少。第一个表列出了所有功能模块所需要的内存量。对应ARM来讲,内存量的获取是通过使用GNUARM编译器在使用-O1命令下统计得来的。AVR所需要得内存量是通过WINAVR编译器在使用-Os命令下统计得来得。3. demo程序分析3.1. LPC214X:不带操作系统的RTU/ASCII模式main函数结构: 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: 非法寄存器地址 位域操作函数xMBUtilSetBitsxMBUtilGetBits配置文件mbconfig.h3.2. LINUX:linux系统下的RTU/ASCII模式使用线程和线程互斥锁调用eMBPoll,操作串口设备文件实现串口操作,读取系统时间实现定时器操作3.3. LINUXTCP:linux系统下的TCP模式使用线程和线程互斥锁调用eMBPoll,监听sockect操作TCP,读取系统时间实现定时器操作实现关键xMBPortTCPPoolxMBTCPPortSendResponse3.4. MCF5235TCP:FreeRTOS系统下的TCP模式网络协议栈使用lwip,信息传递使用mailbox4. RTU/ASCII模式移植步骤4.1. 建立新工程复制demo\BARE另存为my_target4.2. 移植平台定义文件port.h检查demo\my_target\port.h是否适合当前平台,至少应定义临界保护的两个宏ENTER_CRITICAL_SECTIONEXIT_CRITICAL_SECTION4.3. 移植定时器操作porttimer.cmodbus协议栈需要一个定时器检查帧结束。定时器分辩率应达到半个字符时间,例如波特率115200,数据位10bit时,半个字符时间为(10/=43us这个最小超时时间用于帧间3.5字符时间检测。ModbusRTU规范中提到:在通信速率等于或低于19200 bps 时,这两个定时必须严格遵守;对于波特率大于19200 bps 的情形,应该使用2 个定时的固定值:建议的字符间超时时间(t1.5)为750μs,帧间的超时时间(t3.5) 为1.750ms。(FreeMODBUS只使用t3.5作为帧间间隔检测,并没使用t1.5帧内间隔检测)实现如下函数:定时器初始化xMBPortTimersInit( USHORT usTim1Timerout50us )定时器使能vMBPortTimersEnable定时器禁止vMBPortTimersDisable定时器中断服务处理prvvTIMERExpiredISR并用示波器测量xMBPortTimersInit以50us的定时是否淮确。因为ASCII模式定时时间很大,xMBPortTimersInit定时时间到达MB_ASCII_TIMEOUT_SEC定时时间也不会超出范围(mbconfig.h中定义)4.4. 移植串口操作文件portserial.cRTU/ASCII模式是基于串口的,所以要实现串口适配层的相关函数串口初始化xMBPortSerialInit串口收发使能vMBPortSerialEnable串口发送一字节xMBPortSerialPutByte串口接收一字节xMBPortSerialGetByte串口发送中断服务prvvUARTTxReadyISR串口接收中断服务prvvUARTRxISR4.5. 移植事件操作文件portevent.c(1) 不使用操作系统移植任务就完成了,只需在main函数这样调用eMBInit//初始化modbus工作模式eMBEnable//使能modbus协议栈while(1){eMBPoll()//查询、处理modbus事件}(2)使用操作系统a、创建一个任务,不停地调用eMBPollwhile(1){eMBPoll();}b、修改发送事件到队列的函数xMBPortEventPost(这个函数可能被ISR调用) 修改从队列检索事件的函数xMBPortEventGet.它被eMBPoll周期性地调用。这个函数会一直阻塞到有事件发送到队列.c、另外串口和定时器中断服务函数要修改.从中断服务函数返回时,协议处理回调函数pxMBFrameCBByteReceived、pxMBFrameCBTransmitterEmpty和pxMBPortCBTimerExpired返回TRUE时,应执行上下文件切换,因为这时事件已经发送到队列中了,如果忘记这条,协议栈的能性将会非常差。5. TCP模式移植步骤5.1. 建立新工程复制demo\BARE另存为my_target5.2. 移植平台定义文件port.h检查demo\my_target\port.h是否适合当前平台(1)使用操作系统如果使用操作系统的保护机制,不需要定义临界保护的两个宏ENTER_CRITICAL_SECTIONEXIT_CRITICAL_SECTION(2)不使用操作系统需要定义临界保护的两个宏ENTER_CRITICAL_SECTIONEXIT_CRITICAL_SECTION 5.3. 移植TCP操作文件porttcp.cTCP模式是基于TCP网络协议栈的,所以要实现TCP网络适配层的相关函数包含各类专业文献、中学教育、生活休闲娱乐、高等教育、应用写作文书、外语学习资料、各类资格考试、19free_modbus分析等内容。 
 FreeModbus--完全分析_计算机软件及应用_IT/计算机_专业资料。FreeModbus--完全分析说明:freemodbus-v1.5.0 主流程 [objc] view plaincopy 1. /* --- StarFr...  以太网帧格式分析 5页 免费 free_modbus分析 暂无评价 7页 7下载券 MODBUS协议...Modbus 指令分析 Modbus slave 设置: 保持寄存器占用 16 位 2byte 地址: 数据...  当使用 Modbus 的 Report Slave ID 功能时,这个函数将会被调用(通过在 mb...free_modbus分析 7页 1下载券 modbus详解 115页 免费 MODBUS通讯+C语言源代码...  freeModbus代码解读及移植笔记_计算机软件及应用_IT/计算机_专业资料。1. FreeModbus 协议分析协议必须首先调用初始化功能 eMBinit()函数。后调用 eMBEnable(),最后...  在 Modbus 协议下,支持的最大波特率为 19200bps。 2 协议分析关于地址,Modbus 信息中的所有数据地址以零作为基准,各项数据的第一个数据地址 的编号为 0 如: (...  根据 Modbus 的配置文件中的相应宏开关,预编译所需的头 文件,村儿减小协议代码...FreeModbus--完全分析 10页 免费 freemodbus流程解析(原创... 2页 1下载券 ...  modbus tcp 报文举例分析_信息与通信_工程科技_专业资料。modbus tcp 报文分析ModBusTcp 与串行链路 Modbus 的数据域是一致的, 具体数据域可以参考串行 modbus。 这...  Modbus 通信原理 Modbus 是一种简单的客户机/服务器型应用协议,其通信遵循以下的过程: 客户端准备请求并向服务器发送请求; 服务器分析并处理客户端的请求,然后向...  报文分析 同上,具体 Modbus Rtu 的规约参看本文件夹中的 pdf“Modebus 协议” 。 附录一、 关于十进制、十六进制、二进制转换首先解释一下进制,十进制是逢十进...

我要回帖

更多关于 https www.bbb550.com 的文章

 

随机推荐