MEMOBUS通讯协议(485通讯)
- 格式:pdf
- 大小:126.42 KB
- 文档页数:4
在工业控制、电力通讯、智能仪表等领域,通常情况下是采用串口通信的方式进行数据交换。
最初采用的方式是RS232接口,由于工业现场比较复杂,各种电气设备会在环境中产生比较多的电磁干扰,会导致信号传输错误。
除此之外,RS232接口只能实现点对点通信,不具备联网功能,最大传输距离也只能达到几十米,不能满足远距离通信要求。
而RS485则解决了这些问题,数据信号采用差分传输方式,可以有效的解决共模干扰问题,最大距离可以到1200米,并且允许多个收发设备接到同一条总线上。
随着工业应用通信越来越多,1979年施耐德电气制定了一个用于工业现场的总线协议Modbus协议,现在工业中使用RS485通信场合很多都采用Modbus协议,本节课我们要讲解一下RS485通信和Modbus协议。
单单使用一块KST-51开发板是不能够进行RS485实验的,应很多同学的要求,把这节课作为扩展课程讲一下,如果要做本课相关实验,需要自行购买USB转485通信模块。
RS485通信实际上在RS485之前RS232就已经诞生,但是RS232有几处不足的地方:1、接口的信号电平值较高,达到十几V,容易损坏接口电路的芯片,而且和TTL电平不兼容,因此和单片机电路接起来的话必须加转换电路。
2、传输速率有局限,不可以过高,一般到几十Kb/s就到极限了。
3、接口使用信号线和GND与其他设备形成共地模式的通信,这种共地模式传输容易产生干扰,并且抗干扰性能也比较弱。
4、传输距离有限,最多只能通信几十米。
5、通信的时候只能两点之间进行通信,不能够实现多机联网通信。
针对RS232接口的不足,就不断出现了一些新的接口标准,RS485就是其中之一,他具备以下的特点:1、我们在讲A/D的时候,讲过差分信号输入的概念,同时也介绍了差分输入的好处,最大的优势是可以抑制共模干扰。
尤其工业现场的环境比较复杂,干扰比较多,所以通信如果采用的是差分方式,就可以有效的抑制共模干扰。
A、读取数据(标准modbus协议)地址默认为0x01,可以更改1、读取数据主机呼:0103 00 0000 01 840A从机答:0103 02 XX XX XX XX上面02,XX等均为一个字节。
数据为两个字节,高位字节在前。
每帧的开头和结尾至少有3。
5个字节时间的间隔.2。
读设备地址0020 CRC (4个字节)(读取:00 20 0068)00 20 Adress CRC (5个字节)3.写设备地址00 10 Adress CRC (5个字节)(地址设为01:00 10 01 BD C0)00 10CRCﻩ(4个字节)(返回:00 1000 7C)说明: 1.读写地址命令的地址位必须是00。
2。
Adress为1个字节,范围为0-255。
用户在为主机编程时,除了站号(地址)和CRC校验码之外,其它字节的字符均采用上面的内容不变。
主机格式中的读取点数为01。
从机回答帧中的功能码(03)和读单元字节数(01)不变。
计算CRC码的步骤:1、预置16位寄存器为十六进制FFFF(即全为1)。
称此寄存器为CRC寄存器;2、把第一个8位数据与16位CRC寄存器的低位相异或,把结果放于CRC寄存器;3、把寄存器的内容右移一位(朝低位),用0填补最高位,并检查右移后的移出位;4、如果最低位为0:重复第3步(再次移位)如果最低位为1:CRC寄存器与多项式A001(10100000 0000 0001)进行异或;5、重复步骤3和4,直到右移8次,这样整个8位数据全部进行了处理;6、重复步骤2到步骤5,进行下一步8位数据的处理;7、最后得到的CRC寄存器即为CRC码;8、将CRC结果放入信息帧时,将高低位交换,低位在前。
//************************************************************************************************//**名称:CRC16//**说明:CRC效验函数//**形参:*p效验帧的指针帧长 datalen//**返回值:效验字//************************************************************************************************unsignedint CRC16(unsigned char * p, uint16 datalen ){unsigned char CRC16Lo,CRC16Hi,CL,CH,SaveHi,SaveLo;int i,Flag;CRC16Lo =0xFF; CRC16Hi= 0xFF;CL = 0x01; CH= 0xA0;for(i=0;i<datalen;i++){CRC16Lo ^=*(p+i);//每一个数据与CRC寄存器进行异或for(Flag=0;Flag<8;Flag++){SaveHi = CRC16Hi; SaveLo=CRC16Lo;CRC16Hi〉〉= 1;CRC16Lo >>= 1 ; //高位右移一位,低位右移一位if ((SaveHi &0x01) ==0x01) //如果高位字节最后一位为1 CRC16Lo|=0x80 ; //则低位字节右移后前面补1否则自动补0if ((SaveLo&0x01) ==0x01) //如果LSB为1,则与多项式码进行异或{ CRC16Hi^= CH;CRC16Lo ^= CL;}}}return (CRC16Hi<〈8)|CRC16Lo;(返回后再进行高低位转换) }。
Modbus通讯协议与4851. 什么是Modbus通讯协议?Modbus通讯协议是一种用于串行通信的协议,常用于工业自动化领域中的设备间通讯。
该协议设计简单、易于实现,因此被广泛应用于工业现场中。
Modbus协议支持多种物理介质,包括串口(如RS-232、RS-485)和以太网(如TCP/IP),其中,Modbus-RTU和Modbus-TCP是较为常见的两种实现方式。
2. 485总线介绍485总线是一种串行通信标准,广泛用于远距离数据传输。
它能实现多个设备通过同一条总线进行通信,且可实现传输距离高达1200米,通信速率可达到10 Mb/s。
相较于RS-232,RS-485是一个全双工的通信接口,并且支持多主设备,能够同时连接多个设备,使多个设备能够实现互相通信。
3. Modbus-RTU协议Modbus-RTU是一种基于二进制的Modbus协议实现方式,主要用于串口通信。
以下是Modbus-RTU常用的帧格式:起始符地址功能码数据区 CRC校验其中,起始符为11位的低电平信号,用于起始帧的标识,地址为设备的唯一标识符,功能码表示操作的具体功能,数据区包含要发送或接收的数据,CRC校验用于验证数据的完整性。
Modbus-RTU支持多种功能码,包括读取单个寄存器、读取多个寄存器、写单个寄存器等。
其通信速率可根据设备需要进行设置。
4. Modbus-TCP协议Modbus-TCP是Modbus协议的一种基于以太网的实现方式。
它使用常用的TCP/IP网络进行通信,能够实现高速、可靠的数据传输。
Modbus-TCP与Modbus-RTU相比,最明显的区别是使用了不同的物理介质和通信协议。
Modbus-TCP通过以太网进行数据传输,其帧格式与Modbus-RTU有所不同。
Modbus-TCP协议使用了标准的TCP/IP协议作为传输层协议,因此具有较高的灵活性和互操作性。
它可以与现有的以太网基础设施无缝集成,并且支持在局域网或广域网上进行远程数据传输。
使用说明书 - 1 -_MODBUS 通讯协议说明一.通讯说明控制器采用RS-485总线,协议符合ModBus RTU 规约。
数据传输均采用8位数据位、1位停止位、无奇偶校验位。
波特率可设为1200-9600 bit/s 。
通讯传送分为独立的信息头,和发送的编码数据。
以下的通讯传送方式定义与RTU 通讯规约相初始结构 = >=4字节的时间地址码 = 1 字节功能码 = 1 字节数据区 = N 字节错误校检 = 16位CRC 码结束结构 = >=4字节的时间地址码:地址码为通讯传送的第一个字节。
这个字节表明由用户设定地址码的从机将接收由主机发送来的信息。
并且每个从机都有具有唯一的地址码,并且响应回送均以各自的地址码开始。
主机发送的地址码表明将发送到的从机地址,而从机发送的地址码表明回送的从机地址。
功能码:通讯传送的第二个字节。
ModBus 通讯规约定义功能号为1到127。
本控制器利用其中的一部分功能码。
作为主机请求发送,通过功能码告诉从机执行什么动作。
作为从机响应,从机发送的功能码与从主机发送来的功能码一样,并表明从机已响应主机进行操作。
如果从机发送的功能码的最高位(比如功能码大于127),则表明从机没有响应操作或发送出错。
数据区:数据区是根据不同的功能码而不同。
CRC 码:二字节的错误检测码。
当通讯命令发送至仪器时,符合相应地址码的设备接通讯命令,并除去地址码,读取信息,如果没有出错,则执行相应的任务;然后把执行结果返送给发送者。
返送的信息中包括地址码、执行动作的功能码、执行动作后结果的数据以及错误校验码。
如果出错就不发送任何信息。
1 2.信息帧格式:(1) 地址码: 地址码是信息帧的第一字节(8位),从0到255。
这个字节表明由用户设置地址的从机将接收由主机发送来的信息。
每个从机都必须有唯一的地址码,并且只有符合地址码的从机才能响应回送。
当从机回送信息时,相当的地址码表明该信息来自于何处。
modbus通讯协议详解1、Modbus 协议简介 Modbus协议是⼀种已⼴泛应⽤于当今⼯业控制领域的通⽤通讯协议。
通过此协议,控制器相互之间、或控制器经由⽹络(如以太⽹)可以和其它设备之间进⾏通信。
Modbus协议使⽤的是主从通讯技术,即由主设备主动查询和操作从设备。
⼀般将主控设备⽅所使⽤的协议称为Modbus Master,从设备⽅使⽤的协议称为Modbus Slave。
典型的主设备包括⼯控机和⼯业控制器等;典型的从设备如PLC可编程控制器等。
Modbus通讯物理接⼝可以选⽤串⼝(包括RS232、RS485和RS422),也可以选择以太⽹⼝。
其通信遵循以下的过程:主设备向从设备发送请求从设备分析并处理主设备的请求,然后向主设备发送结果如果出现任何差错,从设备将返回⼀个异常功能码 此协议定义了⼀个控制器能认识使⽤的消息结构,⽽不管它们是经过何种⽹络进⾏通信的。
它描述了⼀控制器请求访问其它设备的过程,如何回应来⾃其它设备的请求,以及怎样侦测错误并记录。
它制定了消息域格局和内容的公共格式。
当在Modbus⽹络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产⽣何种⾏动。
如果需要回应,控制器将⽣成反馈信息并⽤Modbus协议发出。
在其它⽹络上,包含了Modbus协议的消息转换为在此⽹络上使⽤的帧或包结构。
这种转换也扩展了根据具体的⽹络解决节地址、路由路径及错误检测的⽅法。
Modbus的⼯作⽅式是请求/应答,每次通讯都是主站先发送指令,可以是⼴播,或是向特定从站的单播;从站响应指令,并按要求应答,或者报告异常。
当主站不发送请求时,从站不会⾃⼰发出数据,从站和从站之间不能直接通讯。
Modbus协议是应⽤层(协议层)报⽂传输协议,它定义了⼀个与物理层⽆关的协议数据单元(PDU),即PDU=功能码+数据域,功能码1byte,数据域不确定。
Modbus协议能够应⽤在不同类型的总线或⽹络。
RS-485和Modbus通信协议及工作原理在(工业控制)、电力通讯、(智能)仪表等领域,通常情况下是采用串口(通信)的方式进行数据交换。
最初采用的方式是(RS)232接口,由于(工业)现场比较复杂,各种(电气)设备会在环境中产生比较多的电磁千扰,会导致(信号)传输错误。
1979年施耐德电气制定了一个用于工业现场的总线协议Modbus协议,现在工业中使用RS485通信场合很多都采用Modbus 协议,所以今天我们来了解下RS485通信和Modbus通信协议。
什么是串口通信串口通信(Serial Communication),是指外设和计算机间,通过数据信号线、地线、控制线等,按位进行传输数据的一种通讯方式。
这种通信方式使用的数据线少,在远距离通信中可以节约通信成本,但其传输速度比并行传输低。
由于串行通信是在一根传输线上一位一位的传送信息,所用的传输线少,并目可以借助现成的电话网进行信息传送,因此,特别适合于远距离传输。
(RS-485)协议概述RS-485和RS-232一样,都是审行通信标准,现在的标准名称是(TI)A485/EIA-485-A,但是人们会习惯称为RS485标准,RS-485常用在工业、自动化、汽车和建筑物管理等领域。
RS-485总线弥补了RS-232通信距离短,速率低的缺点,RS-485的速率可高达10Mbit/s,理论通讯距离可达1200米;RS-485和RS-232的单端传输不一样是差分传输,使用一对双绞线,其中一根线定义为A,另一个定义为B。
通常情况下,RS485的信号在传送出去之前会先分解成正负对称的两条线路(即我们常说的A、B信号线),当到达接收端后,再将信号相减还原成原来的信号。
拓扑结构RS485有两线制和四线制两种接线,四线制只能实现点对点的通信方式,现很少采用,多采用的是两线制接线方式,这种接线方式为总线拓扑结构,在同一总线上最多可以挂接32个节点RS-485总线同12C总线一样支持主从模式,支持点对点单从机模式,也支持多从机模式,不支持多主机模式。
Modbus通讯协议Modbus通讯协议是一种简单且可靠的串行通讯协议,最初由莫德康(Modicon)公司开发,用于将PLC(可编程逻辑控制器)和外部设备连接起来。
目前Modbus已成为工业控制领域中最广泛使用的通讯协议之一。
Modbus协议基于客户端/服务器模型,采用请求/响应方式进行通讯。
客户端发送请求报文,服务器响应应答报文。
请求报文包含功能码、数据地址和数据长度等信息,应答报文则包含功能码、响应数据和错误码等信息。
Modbus协议通常使用RS-232、RS-485、以太网等通讯介质,支持点对点、点对多点、多点对多点的通讯方式。
在实际应用中,Modbus主要用于控制设备之间的通讯,例如传感器、执行器、连续控制器等。
Modbus协议中定义了多种功能码,包括读/写单个寄存器、读/写多个寄存器、读/写单个线圈等。
这些功能码支持多种数据类型的读写操作,例如16位整数、32位整数、浮点数、ASCII字符等。
在Modbus协议中,数据都是被组织成寄存器的形式进行传输的。
寄存器是一种特定的存储单元,在PLC等控制设备中常常使用。
Modbus协议中常用的寄存器类型包括线圈(coil)、离散输入(discrete input)、输入寄存器(input register)和保持寄存器(holding register)等。
总的来说,Modbus协议具有以下几个优点:1. 简单易用:Modbus协议的报文格式简单易懂,易于开发人员理解和实现。
2. 通用性强:Modbus协议不依赖于具体的硬件平台和操作系统,具有很强的通用性和跨平台性。
3. 可靠性高:Modbus通讯协议采用了校验和和自动重发机制等多种技术手段,提高了通讯的可靠性和稳定性。
总的来说,Modbus协议作为一种开放的通讯标准,已经成为工业控制领域中最流行和实用的通讯协议之一,其广泛应用于工业自动化、建筑自动化、能源管理等领域。
MODBUS水表通讯协议(RTU模式)一、通讯设置1.波特率:9600/4800/1200(缺省9600不可以更改)2.校验:偶校验/无校验(缺省无校验)3.数据位:84.停止位:1二、modbus协议1、读操作(03H)地址功能码第一个寄存器高位地址第一个寄存器低位地址寄存器的数量的高位寄存器的数量的低位CRC校验低位CRC校验高位XX03XX XX XX XX XX XX 2、读操作回复(03H)地址功能码字节数数据高字节……数据低字节CRC校验低位CRC校验高位XX03XX XX……XX XX XX 3、写操作(06H)地址功能码第一个寄存器高位地址第一个寄存器低位地址数据高字节数据低字节CRC校验低位CRC校验高位XX06XX XX XX XX XX XX4、写操作回复(06H)地址功能码第一个寄存器高位地址第一个寄存器低位地址数据高字节数据低字节CRC校验低位CRC校验高位XX06XX XX XX XX XX XX 5、写操作(10H)地址功能码第一个寄存器高位地址第一个寄存器低位地址寄存器的数量的高位寄存器的数量的低位字节数数据高字节…数据低字节CRC校验低位CRC校验高位XX10XX XX XX XX XX XX…XX XX XX 6、写操作回复(10H)地址功能码第一个寄存器高位地址第一个寄存器低位地址寄存器的数量的高位寄存器的数量的低位CRC校验低位CRC校验高位XX10XX XX XX XX XX XX 7、异常码地址功能码异常码CRC校验低位CRC校验高位XX XX(注3)01H非法功能02H非法数据地址03H非法数据值XX XX注3异常码是正常功能码的最高位加1,如读操作03H的异常功能码为83H,写单个字06H的异常功能码为86H,写多个字的10H的异常功能码为90H。
8、寄存器地址名称寄存器地址字节数操作备注设备地址0200H2读/写(不建议使用)累计流量0202H4读/写注1倍率值0208H2读/写见注1中的解释注1:寄存器地址为16进制地址,如果是用ModScan等软件测试,请转换为10进制地址累计流量为4个字节的十六进制数,高位在前,低位在后,累计流量采用无符号的32位数据(2个字)如:实际数据为123456,则高位字保存0x0001,低位字保存0xE240。
课程名称:嵌入式软件技术开课机房:11号机房2012年4月24日星期二8:10~11:35一、实验任务与实验目的二、报告内容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 任务所需要的时间。
MODBUS实例485通讯用RS485端口控制TVF2000使用说明:一、硬件连接:1.RS485/RS485:(1)终端设备:将J2用终端方式短接;(2)非终端设备:将J2用非终端方式短接;(3)A、B、AGND对接;(4)如果使用屏蔽线,SCR对接。
2.RS485/RS232(PC机):(1)用RS485/RS232转换器;(2)PC机串口与转换器RS232口连接;(3)TVF2000的CN1与转换器的RS485口的A、B、AGND连接。
二、用MODBUS与TVF2000通讯(RTU方式):1.TVF2000键盘设置:a)键盘菜单设置说明:i.1001=10:外端子1用通讯控制;ii.5005=2:标准MODBUS通讯方式;iii.5201=1-247:从机号(缺省=1);iv.5202=5:通讯速度为9600bps(缺省=5);v.5203=0:无效验(缺省=0);vi.其它=缺省值;b)键盘具体操作:i.9952 = 1:参数初始化;ii.1001 = 10;iii.5005 = 2;这样设置后,就可以与TVF2000通讯了。
2.TVF2000使用的MODBUS命令:a)读存储寄存器:03命令;b)写单个寄存器:06命令;c)写多个寄存器:16命令;3.MODBUS单寄存器写入命令说明(其它说明见附录):a)主机发送:i.[地址]:从机地址1-247;ii.[命令]:06,单寄存器写入命令;iii.[寄存器地址_H]:寄存器地址高8位;iv.[寄存器地址_L]:寄存器地址低8位;v.[数据_H]:写入数据高8位;vi.[数据_L]:写入数据低8位;vii.[CRC_H]:CRC效验高8位;viii.[CRC_L]:CRC效验低8位;b)从机返回(正常):i.[地址]:从机地址1-247(相同地址);ii.[命令]:06,单寄存器写入命令;iii.[寄存器地址H]:寄存器地址高8位;iv.[寄存器地址L]:寄存器地址低8位;v.[数据_H]:写入数据高8位;vi.[数据_L]:写入数据低8位;vii.[CRC_H]:CRC效验高8位;viii.[CRC_L]:CRC效验低8位;c)通讯具体操作(菜单1102=7为例):i.主机发送:[01][06][04][4E][00][07][CRC_H][CRC_L];ii.从机返回(正常):[01][06][04][4E][00][07][CRC_H][CRC_L];4.用通讯命令设置菜单值(调速前必须设置):i.1102=7;外部1有效;ii.1103=8;由串行通讯给定;iii.0002=初始频率;如果不设置,为菜单1104的值;iv.0001=0x06;命令寄存器:0001;v.0001=0x0f;vi.0001=0x2f;启动;vii.0001=0x6f;到达设定频率;5.用通讯命令调速(给定寄存器1:0002):i.0002=0-20000;调速:0对应1104的值,20000对应1105的值;ii.通过03命令读取状态寄存器(0004)的值;iii.通过03命令读取保持寄存器(0005、0006)的值;iv.用通讯命令停车:0001 = 0x06;6.命令寄存器:0001(MODEBUS为40001)说明如下:7.给定寄存器1:0002(MODBUS为40002)说明如下:i. 输出频率与给定值成正比例;ii. 输出频率=(0002的值)*(1105的值)/20000;8.状态寄存器:0004(MODBUS为40004)说明如下:9.保持寄存器:0005(MODBUS为40005):实际输出频率(单位:Hz);10.保持寄存器:0006(MODBUS为40006):实际输出电流(单位:0.1A);11.状态寄存器、保持寄存器均为只读;12.如果想保存通讯设置,必须用键盘设置菜单1607=1。