
Modbus Rtu 通信协议(3,16号命令).doc
12页ModbusModbus RtuRtu 通信协议通信协议(3,16(3,16 号命令号命令) ) 1 1、 读取保持寄存器(单个和多个,以字为最小单位)读取保持寄存器(单个和多个,以字为最小单位)发送命令帧:设备地址功能码地址 H地址 L数据量 H数据量 LCRC HCRC LAddr03 HHoldStartDataNumCRC高位CRC低位帧 长 度:8 个字节设备地址:1247功 能 码:3H数据地址:065535 具体范围与相关设备有关 数 量:165535 具体范围与相关设备有关校 验 码:CRC16 校验 返回命令帧:设备地址功能码数据量数据 1数据 NCRC HCRC LAddr13 H返回数据的字节数 NData (1N)CRC高位CRC低位帧 长 度:5N 个字节设备地址:1247功 能 码:3H数 据 量:实际的读取数据数量 数 据:返回数据的意义aHoldStartn= DataNum1VW a (VB a)VWa(VB a+1)VW a+n(VB a+n)VWa+n(VB a+n+1)Data(1)Data(2)Data(N-1)Data(N)校 验 码:CRC16 校验 命令有误:1) 没有任何返回2) 返回异议帧设备地址功能码错误信息CRC HCRC LAddr183 H一个字节的错误信息CRC高位CRC低位 2 2、 设置保持寄存器(多个,以字为最小单位)设置保持寄存器(多个,以字为最小单位)发送命令帧: 设备地址功能码地址 H地址 L数据量 H数据量L数据字节数具体数据CRC HCRC LAddr010 HHoldStartDataNumbytN1bytNCRC高位CRC低位帧 长 度:9bytN 个字节设备地址:1247功 能 码:10H数据地址:065535 具体范围与相关设备有关 数 量:1122 具体范围与相关设备有关字 节 数:设置的字节个数 bytN= DataNum2数 据:具体的字节数据校 验 码:CRC16 校验 返回命令帧:设备地址功能码地址 H地址 L数据量 H数据量 LCRC HCRC LAddr110 HHoldStartDataNumCRC高位CRC低位帧 长 度:8 个字节设备地址:1247功 能 码:10H数据地址:065535 具体范围与相关设备有关 数 量:1122 具体范围与相关设备有关校 验 码:CRC16 校验 命令有误:1) 没有任何返回2) 返回异议帧地址功能码错误信息CRC HCRC LAddr190 H一个字节的错误信息CRC高位CRC低位 八、一点总结八、一点总结编写通信相关的程序,其实协议和开发语言并不重要,重要的是对通信双方的通信设备的特点,性能要有充分了解,这样才能开发出可靠,高效的通信程序摘要摘要 Modbus 协议由于其具有开放性、透明性、成本低、易于开发等特点,已成为当今工业领域通信协议的首选。
本文介绍了一种基于 Modbus 通信协议的 eView 触摸屏与常用的51 单片机的通信方法该方法通过 C51 编程实现 Modbus 通信,在 51 系列单片机上具有通用性,有一定的借鉴作用关键词关键词 触摸屏单片机 Modbus 协议工业控制中经常需要观察系统的运行状态或者修改运行参数触摸屏能够直观、生动地显示运行参数和运行状态,而且通过触摸屏画面可以直接修改系统运行参数,人机交互性好单片机广泛应用于工控领域中,与触摸屏配合,可组成良好的人机交互环境触摸屏与单片机通信,需要根据触摸屏采用的通信协议为单片机编写相应的通信程序Modbus 协议是美国 Modicon 公司推出的,一种有效支持控制器之间以及控制器经由网络(如以太网)与其他设备之间进行通信的协议本文以 STC89C51 单片机和人机电子的 eView触摸屏为例,介绍其通信程序的开发过程1 1 系统结构系统结构实现触摸屏与单片机的通信,主要是解决通信协议的问题本文使用开放的 Modbus通信协议,以触摸屏作主站,单片机作从站eView 触摸屏本身支持 Modbus 通信协议,如果单片机也支持 Modbus 协议,就可以进行通信了。
eview 触摸屏支持 RS-232 和 RS-485 两种通信接口在工业控制领域,由于 RS-485 具有可靠性高、传输距离远、抗干扰能力强等优点,所以在本系统中触摸屏与单片机通信采用 RS-485 连接,传输速率设置为 9600 kbpsRS-485 信号传输是一种半双工的传输方式,单片机通过一个 RS-232/RS-485 无源转换器把 232 信号转换成 485 信号,连接到 eView 触摸屏上图 l 为该系统的原理图 单片机控制系统采用 STC89C51 系列单片机,其内部集成 MAX810/STC810 专用复位电路(原有外部复位可继续保留,与 Intel 8051 引脚兼容),具有抗干扰能力强、加密性强、高抗静电(ESD)、超低功耗等特点,而且价格低廉在本系统中,触摸屏是上位机,单片机是下位机2 2 ModbusModbus 协议协议2.1 Modbus 协议简介Modbus 协议是应用于电子控制器上的一种通用语言通过此协议,控制器相互之间、控制器经由网络(如以太网)与其他设备之间可以通信它已经成为一种通用工业标准不同厂商生产的控制设备可以通过它连成工业网络,集中监控Modbus 协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。
它描述了一控制器请求访问其他设备的过程.如何回应来自其他设备的请求,以及怎样侦测错误并记录;制定了消息域格局和内容的公共格式当在某一 Modbus 网络上通信时,此协议决定了每个控制器需要知道它们的设备地址,识别按地址发来的消息,以及决定要产生何种行动如果需要回应,则控制器将生成反馈信息并用 Modbus 协议发出在其他网络上,包含了 M0dhus 协议的消息转换为在此网络上使用的帧或包结构2.2 Modbus RTU 通信数据传输模式当控制器设备基于 Modbus 协议以 RTU 模式通信时,消息中的每个字节包含 2 个 4 位的十六进制字符这种方式的主要优点是:在同样的波特率下,可比 ASCII 方式传送更多的数据编码采用 8 位二进制,十六进制数 09 和 AF;消息中每个 8 位域都是由 2 个十六进制字符组成组织结构如下: 2.3 Modbus RTU 消息帧结构Modbus RTU 消息帧结构如下: (1)地址码地址码为通信传送的第一个字节这个宁节表明,由用户设定地址码的从机将接收由主机发送来的信息每个从机都有具有唯一的地址码,只有符合地址码的从机才能响应回送,且响应回送均以各自的地址码开始。
主机发送的地址码则表明将发送到的从机地址,而从机发送的地址码表明回送的从机地址地址 0 用作广播地址,以使所有的从设备都能认识2)功能代码功能代码为通信传送的第二个字节Modbus 通信规约定义可能的代码范围是十进制的1255当然,有些代码适用于所有控制器,有些仅适用于某种控制器,还有些保留以备后用主机发送请求,通过功能码告诉从机执行什么动作;从机响应请求,从机发送的功能码与从主机发送来的功能码一样,表明从机已响应主机进行操作如果从机发送的功能码的最高位为 1,则表明从机没有响应操作或发送出错,主设备应用程序得到异议的回应后,典型的处理是重发消息表 l 列出了常用 Modbus 支持的部分功能码 以读取线圈状态为例说明主站发送命令:设备地址命令号 01起始寄存器地址高 8 位低 8 位读取的寄存器数高 8 位低 8 位CRC 校验的低 8 位高 8 位从站响应:设备地址命令号 01返回的字节个数数据 1数据 2数据 nCRC 校验的低8 位高 8 位3)数据区数据区根据功能码的不同而不同数据区包含需要从机执行什么动作,或由从机采集的返送信息这些信息可以是实际数值、设置点、主机发送给从机或从机发送给主机的地址等。
例如,功能码告诉从机读取寄存器的值,则数据区必须包含要读取寄存器的起始地址及读取长度对于不同的从机,地址和数据信息都不相同4)错误校验码主机或从机可用校验码判别接收信息是否出错错误检测域包含一个 16 位的值(用 2个 8 位的字符来实现)错误检测域的内容是通过对消息内容进行“循环冗余检测”得出的CRC 域附加在消息的最后,添加时先是低字节然后是高字节,故 CRC 的高位字节是发送消息的最后一个宁节错误校验采用 CRC-16 校验方法3 3 软件编程软件编程下面是采用 C5l 编写的软件,主要包括 CRC 校验和终端接收及波特率设置等由于篇幅有限,其他程序略 4 4 总总 结结由于 Modhus 协议具有开放性和透明性等特点,而 51 系列单片机技术成熟、开发成本低,二者的结合将继续成为各类通信系统设计的首选本设计方法已经应用于触摸屏与单片机通信设计,并取得了较好效果这种方法对于编制类似的通信软件有一定的借鉴作用,部分程序可以直接移植错误检测与修正(Error Check & Correct) 在数字数据通信中,由发送器发送的数据信号祯(Frame)在经由网络传到接收器后,由于多种原因可能导致错误位(bit errors)的出现,因此必须由接收器采取一定的措施探测出所有的错误位,并进而采取一定的措施予以修正。
一、错误检测的基本原理(Principle of Error Check) 发送器向所发送的数据信号祯添加错误检验码(Check Bits),并取该错误检测码作为该被传输数据信号的函数;接收器根据该函数的定义进行同样的计算,然后将两个结果进行比较:如果结果相同,则认为无错误位;否则认为该数据祯存在有错误位 一般说来,错误检测可能出现三种结果: 在所传输的数据祯中未探测到,也不存在错误位; 所传输的数据祯中有一个或多个被探测到的错误位,但不存在未探测到的错误位; 被传输的数据祯中有一个或多个没有被探测到的错误位 显然我们希望尽可能好地选择该检测函数,使检测结果可靠,即:所有的错误最好都能被检测出来;如检测出现无错结果,则应不再存在任何未被检测出来的错误 实际采用的错误检测方法主要有两类:奇偶校验(Parity)和 CRC 循环冗余校验(Cyclic Redundancy Check) 二、奇偶校验(Parity) 1.单向奇偶校验 单向奇偶校验(Row Parity)由于一次只采用单个校验位,因此又称为单个位奇偶校验(Single Bit Parity)发送器在数据祯每个字符的信号位后添一个奇偶校验位,接收器对该奇偶校验位进行检查。
典型的例子是面向 ASCII 码的数据信号祯的传输,由于ASCII 码是七位码,因此用第八个位码作为奇偶校验位 单向奇偶校验又分为奇校验(Odd Parity)和偶校验(Even Parity),发送器通过校验位对所传输信号值的校验方法如下:奇校验保证所传输每个字符的 8 个位中 1 的总数为奇数;偶校验则保证每个字符的 8 个位中 1 的总数为偶数 显然,如果被传输字符的 7 个信号位中同时有奇数个(例如 1、3、5、7)位出现错误,均可以被检测出来;但如果同时有偶数个(例如 2、4、6)位出现错误,单向奇偶校验是检查不出来的 一般在同步传输方式中常采用奇校验,而在异步传输方式中常采用偶校验 2.双向奇偶校验 为了提高奇偶校验的检错能力,可采用双向奇偶校验(Row and Column Parity),也又称为双向冗余校验(Vertical and Longitudinal Redundancy Checks) 图 1.4 给出了由 5 个 ASCII 码字符数据信号及其双向偶校验位组成的典型传输矩阵(其中:前五行各字符的偶校验位组成的校验位列(最右边一列),最下面一行由各列信号位的偶校验位组成),该矩阵右下角的校验位则可按行或按列取校验位。
传输方向 校验位列 1 0 1 1 0 1 1 1 1。
