Modbus协议与现场总线.ppt_第1页
Modbus协议与现场总线.ppt_第2页
Modbus协议与现场总线.ppt_第3页
Modbus协议与现场总线.ppt_第4页
Modbus协议与现场总线.ppt_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

3 1Modbus协议Modbus是MODICON公司于1979年开发的一种通讯协议 它是一种在工业领域被广为应用的真正开放 标准的网络通讯协议 已经成为一种电子控制器的通用语言 通过此协议控制器之间可以通讯 已成为一种工业标准 不同厂商生产的控制设备通过Modbus协议可以连成通讯网络 在PLC 变频器 电器设备及自动化仪表等领域都广泛应用Modbus协议 Modbus是链路层的主 从协议 采用请求响 应方式 主站发出带有从站地址的请求报文 具有该地址的从站收到该报文后发出响应报文 第三章Modbus协议与现场总线 1 Modbus在OSI模型中所使用的层 2 3 1 1Modbus协议的物理层1 网络结构总线式主从结构主设备 PC机 PLC从设备 PLC 智能仪表一个主站可有1 253个从站 从站之间不能相互通讯 2 通讯方式 a 一对一 主设备可以和从设备通讯 从设备响应 b 一对N 广播 主设备对N个从设备 从设备无响应 0地址表示广播地址 3 物理层支持RS 485 RS 232C 3 CRLF0D0A COLON3A 3 1 2Modbus协议的帧格式 Modbus有两种格式 ASCII格式 RTU格式 1 ASCII码帧格式 用ASCII表示数据 1 字节格式 2 数据表示方法地址 21表示ASCII码32H 31H 4 2 说明 a 地址域 从设备地址0 253 地址0为广播地址 b 功能域 代码范围1 255 命令从设备执行哪些功能 如读测量值 读开关量状态 c 数据域 两部分内容 主设备到从设备 变量起始地址 变量个数 从设备到主设备 字节数n 数据n d 检错 CRC 16 生成多项式Y X 16 X 15 X 2 1 2 RTU格式 用二进制数表示数据 1 RTU帧格式 5 3 1 3ModBus功能码 1 Modbus功能码 6 2 功能码3 读取在一个或多个保持寄存器中取得当前的二进制值 该功能码主要用于读取设备参数 例 主机命令 读6BH开始的3个寄存器内容 从机响应 回传6个字节数据 说明 1 应用层 寄存器中存储的内容用户定义 2 寄存器地址与寄存器 寄存器号减1为寄存器地址 7 3 功能码4 读取一个或多个输入寄存器值 主要用于读取设备测量数据 从寄存器8开始读一个寄存器值 8 4 功能6 写单个寄存器 例 从寄存器地址1开始 写一个寄存器值03 寄存器地址 0001H寄存器 0002H 9 5 功能码16 写多个寄存器 主机从01H地址开始写2个寄存器 从机响应主机 10 3 1 4应用举例题 有某地址为1的从设备 其变量定义如下 例1 主设备用3号命令寻址地址为1的从设备 读取寄存器地址为0000H的量程 主设备命令帧从设备响应帧 变量定义 主机请求 从机响应 量程 参数 寄存器地址 0000H 测量值 0002H 字节数 2byte 2byte 主 从 地址 功能码 变量地址高 变量数高 CRC校验 01H 03H 00H 00H 变量数低 地址 功能码 01H 03H 字节数 02H 数据1 03H CRC校验 流量 3E8H 1000 变量地址低 00H 01H 数据2 E8H 11 例2 主设备用4号命令寻址地为1的从设备 读取地址为0002H的测量值 01H 04H 0002H 0001H 地址 功能码 变量地址 变量数 CRC校验 地址 功能码 字节数 数据1 数据2 CRC CRC 01H 04H 02H 03H 20H 从设备响应 主设备命令帧 测量值 320H 800 问题 测量值有小数和正负怎么办 12 3 1 5CRC 16校验 1 说明 1 CRC校验 地址码 功能码 数据 2 生成多项式G x X 16 X 15 X 2 1 11000000000000101 3 生成多项式最高位总是1 所以实际中的生成多项式为1000000000000101 4 Modbus采用逆序生成多项式1010000000000001 5 CRC本质 移位异 是1与生成多项式或和 13 2 CRC方法 02 1 1 14 07 15 3 CRC计算程序 标准程序 数据指针 数据长度 CRC低位表 CRC高位表 16 auchCRCHi 0 xFD auchCRCHi 0 x39 17 auchCRCLo 0 xFD auchCRCLo 0 x39 18 CRCLo111111111ST00000010XORuIndex11111101auchCRCHi 0 xFD 0 xC1uchCRCHi11111111XOR11000001uchCRCLo00111110uchCRCHi auchCRCLo 0 xFD 100000012ST00000111uchCRCLo00111110XORuIndex00111001auchCRCH 0 x39 0 xC0uchCRCHi100000001110000000XORuchCRCLo010000001 uchCRCHi auchCRCLo 0 x39 0 x12结果0 x1241 例 x 2 0 x02 0 x07 CRC n CRC16 x 2 19 压 3 2Modbus协议通讯从站软件设计 1 主站使用Modbus04号命令采集从站测量数据 2 寄存器应用层定义 3 2 1从站软件设计要求 寄存器内容 压力 温度 液位 流量 2000H Modbus寄存器 实际设计考虑问题 1 Modbus命令帧结束判定方法 2 帧间隔控制方法 3 如何解决通讯数据串位及数据残缺等异常情况对通讯的影响 3 2 2从站软件设计内容 2004H 2008H 200CH 寄存器地址 1 接收数据 1 串口接收数据 2 根据主站MODUBS命令读寄存器 2 发送数据将所读寄存器发送出去 主站一次可能读一个寄存器 也可能读多个寄存器 20 3 2 3从站接收命令帧方法 1 设置一个定时器 定时3 5char时间 2 每接收一个数据 启动定时器定时 3 定时时间到 说明在3 5char时间里没有通讯数据 表明帧结束 在定时中断服务程序中处理Modbus命令 定时中断帧结束 读命令回答数据 启动定时器 3 5char 地址 功能码 变量地址 变量数 CRC校验 主站发给从站读寄存器命令8byte 从站3 5char后回答数据 如何确定MODBUS帧结束 21 帧间隔3 5char定时方法 ICR1 触发寄存器 计数器 PWM输出 22 3 2 4从站程序设计 AVRMEGA64CPU voidmain void unsignedchari 0 unsignedlongnum 0 OutSet1480 R485接收方向 Set1480Rxd Delays 100 CLI 关中断UartInit UART初始化TimeDelay OscF 10 BaudRate0 根据波特率设置定时时间 TCCR1B 1 1000 若没有通讯 则定时初始化串口 num 0 防止通讯死机 CloseINT0 关通讯中断 UartInit 初始化串口 OutSet1480 设置I O口为输出方向 Set1480Rxd 设置RS485接收方向控制 OpenINT0 开通讯中断 1 主程序 23 voidUartInit void 设置通讯波特率 UBRR0L OscF 16 BaudRate0 1 256 UBRR0H OscF 16 BaudRate0 1 256 Uart0发送和接收引脚使能 UCSR0B 1 RXEN0 1 TXEN0 设置帧格式 8个数据位 1个停止位 UCSR0C 1 URSEL0 1 UCSZ01 1 UCSZ00 UCSR0A 1 RXC0 1 TXC0 1 UDRE0 1 FE0 pragmainterrupt handlerusart0 iv USART0 RXCvoidusart0 void unsignedcharcombuf combuf UDR0 读通讯数据 TIM16 WriteTCNT1 0 x0000 清定时时间常数 TIM16 WriteICR1 TimeDelay 设置定时3 5char时间常数 TIFR 1 ICF1 定时记数器加 上限捕捉 TIMSK 1 TICIE1 启动定时中断 ReciveBuff 485 ReceiveNum 485 combuf 存储通讯数据 2 串口初始化 3 UART0中断接收 只接收一个字节数据 24 pragmainterrupt handlertimedelay iv TIMER1 CAPTvoidtimedelay void unsignedinti x unsignedintlen unsignedintstart unsignedintCheckSum unsignedintbuff 2 if ReceiveNum 485 8 TIMSK BYTE地址 D 定时3 5char中断服务 帧结束 unionIntToChar U8OTT 2 U16TTO 25 SendBuff 485 0 Address SendBuff 485 1 0 x04 SendBuff 485 2 len 2 字节数 for i 0 i len 2 i x start i SendBuff 485 3 i LMAG Cache x 取数据 CheckSum CRC16 SendBuff 485 len 2 3 计算CRC CRC16Value TTO CheckSum SendBuff 485 len 2 3 CRC16Value OTT 1 SendBuff 485 len 2 4 CRC16Value OTT 0 SendLen 485 len 2 5 发送字节长度 SendNum 485 0 UCSR0A 1 TXC0 设置发送完成中断 UCSR0A 1 UDRE0 设置发送寄存器空中断 UCSR0B 1 UDRIE0 允许发送寄存器空中断 ReceiveNum 485 0 TIMSK 关闭3 5char定时中断 26 pragmainterrupt handlersend0 iv USART0 UDRE 发送寄存器空中断服务 voidsend0 void Set1480Txd RS485发送方向控制 UDR0 SendBuff 485 SendNum 485 发送数据 if SendNum 485 SendLen 485 发送数据结束 UCSR0B 发送完成中断打开 pragmainterrupt handlersendover iv USART0 TXC 发送完成中断服务 voidsendover void UCSR0B 改变通讯方向为接收 4 中断发送数据 F 发送结束 通讯转为接收 27 unsignedintCRC16 unsignedchar puchMsg unsignedintusDataLen unsignedcharuchCRCHi 0 xFF 高CRC字节初始化 unsignedcharuchCRCLo 0 xFF 低CRC字节初始化 unsignedcharuIndex CRC循环中的索引 while usDataLen uIndex uchCRCHi puchMsg 计算CRC uchCRCHi uchCRCLo auchCRCHi uIndex uchCRCLo auchCRCLo uIndex return uchCRCHi 8 uchCRCLo 5 CRC校验 28 3 2 5ARM下的Modbus帧间隔处理方法 NXPLPC2478ARM7TDI核 208脚 1 UART特性 16c550 16字节收发FIFO接收器FIFO触发点可为1 4 8 14字节接收到有效字符中断达到FIFO触发点中断具有3 5CHAR超时中断 2 Modbus从站帧接收方法 1 上位机发送命令帧8byte 2 下位机接收FIFO触发点设为14 3 当下位机接收到8byte后 超过3 5char产生超时中断 4 在超时中断处理中接收FIFO数据 并发送响应帧 29 3 相关UART寄存器 1 中断使能寄存器 30 2 FIFO控制寄存器 31 3 中断标志寄存器 32 voidUart0Isr void Int32UUartIntId U0IIR LineStatus Counter Int8UData Int32Un Int32Ui switch UartIntId 4 中断接收程序 读FIFO数据 直到结束 3

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论