ModBus通讯规约印刷前面总的1.docx
- 文档编号:4722685
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:17
- 大小:45.89KB
ModBus通讯规约印刷前面总的1.docx
《ModBus通讯规约印刷前面总的1.docx》由会员分享,可在线阅读,更多相关《ModBus通讯规约印刷前面总的1.docx(17页珍藏版)》请在冰豆网上搜索。
ModBus通讯规约印刷前面总的1
Modbus_RTU通讯规约
(本协议采用主从问答方式)
一、Modbus通讯协议概述
Modbus通讯规约允许TDS系列仪表/变送器与施耐德、西门子、AB、GE等多个国际著名品牌的可编程顺序控制器(PLC)、RTU、SCADA系统、DCS或与第三方具有Modbus兼容的监控系统之间进行信息交换和数据传送。
TDS系列仪表/变送器只要简单地增加一套基于计算机(或工控机)的监控软件(如:
组态王、Intouch、iFIX、synall等)就可以构成一套工况监控系统。
1、广泛的系统集成
TDS系列仪表/变送器提供了标准的RS-485/422通讯接口及ModBus通讯协议,这个通讯协议已广泛被国内外工控行业作为系统集成的标准。
2、通讯数据的类型及格式
●信息传输为异步方式,并以字节为单位。
主站和从站之间传递的通讯信息为
1:
10位格式:
(1位起始位,8位数据位,1位停止位,无奇偶校验)
2:
11位格式:
(1位起始位,8位数据位,2位停止位,无奇偶校验)
3:
11位格式:
(1位起始位,8位数据位,1位停止位,1位奇校验)
4:
11位格式:
(1位起始位,8位数据位,1位停止位,1位偶校验)
仪表出厂按第2种方式,11位格式:
(1位起始位,8位数据位,2位停止位,无奇偶校验),设置方法参看详细的使用说明书。
仪表无此项设置参数为第2种方式。
●通讯数据(信息帧)格式
数据格式
起始结构
地址码
功能码
数据区
CRC校检
结束结构
数据长度
T1–T2–T3–T4
1字节
1字节
N字节
16位(CRC码)
T1–T2–T3–T4
发送数据之前要求数据总线静止时间(即无数据时间)大于3.5个字节,可以通过传输波特率计算(9600bps约为5ms),信息帧中表示为起始结构(T1–T2–T3–T4),T1、T2、T3、T4分别代表一个字节的静止时间。
当最后一个字节传输完,数据总线静止时间(即无数据时间)还需大于3.5个字节后,才可以开始发送新的数据,信息帧中表示为停止结构(T1–T2–T3–T4)。
一条完整的信息帧必须是连续的信息流,字节间的间隔时间小于1.5个字节。
TDS系列仪表/变送器收到完整的信息帧后延时250ms左右将数据连续送出,当收到本机地址码、正确的功能码后,但无法接收全后面的完整数据信息帧则在2秒左右后回复初始接收状态。
★注:
1、1个字节由8位二进制数组成(既8bit)。
2、ModBus是Modicon公司的注册商标。
3、“从机”在本文件中既为TDS系列仪表/变送器。
二、通讯信息传输过程
当通讯命令由发送设备(主机)发送至接收设备(从机)时,在CRC校验无误情况下,从机地址与地址码相符的从机接收通讯命令(TDS系列仪表/变送器以本机的地址码和功能码2个字节作为同步字),并根据功能码及相关要求处理信息,执行相应的任务,然后把执行结果(数据)返送给主机。
返回的信息中包括地址码、功能码、执行后的数据以及CRC校验码。
如果CRC校验出错就不返回任何信息。
TDS系列仪表/变送器使用的Modbus功能码(16进制)
功能码
定义
操作(二进制)
02HEX
读开关量
读取开关量设置数据;一个或多个开关量控制/报警状态数据
03HEX
读寄存器数据
读取单路或多路工况数据;单路或多路控制/报警设置数据
05HEX
写开关量
写一个开关量设置数据
06HEX
写单个寄存器
写单个功能寄存器或单路控制/报警设置数据
10HEX
写多路寄存器
写多路功能寄存器或多路控制/报警设置数据
TDS系列仪表/变送器Modbus协议的数据地址表中数据地址使用直接地址,在组态软件中通讯口可选用莫迪康(Modicon)PLC的RTU,对应的地址如下:
02功能ReadInputStatus,10001对应0000H。
03功能ReadHoldingRegisters,40001对应0000H地址。
05功能ForceSingleCoil,00001对应0000H地址。
06功能PresetSingleRegister,40001对应0000H地址。
10功能PresetMultipleRegisters,40001对应0000H地址。
但组态软件产生的通讯报文都是直接地址,与功能码说明中的报文是一致的。
如:
TDS-0400~6400智能数字温度巡检控制仪中的数据地址表中
读或写寄存器:
如地址0000H~003FH对应40001~40064。
读开关量:
如地址0400H~043FH对应11025~11088,0440H~047FH对应11089~11152。
写开关量:
如地址0300H~033FH对应00769~00832。
1、地址码
地址码是每次通讯信息帧的第一字节(8位),从01H到FFH。
每个从机都必须有唯一的地址码,仪表说明书中将这唯一的地址码称为“从机号”或“从机地址”。
所有地址的从机都将接收由主机发送来的信息,只有符合地址码的从机才响应要求,回送信息。
当从机回送信息时,回送数据均以各自的地址码开始。
主机发送的地址码表明将发送到的从机地址,而从机返回的地址码表明回送的从机地址。
2、功能码
是每次通讯信息帧传送的第二个字节。
ModBus通讯规约可定义的功能码为0到127。
TDS系列仪表/变送器仅用到其中的一部分功能码。
作为主机请求发送,通过功能码告诉从机应执行什么动作。
作为响应,从机返回的功能码与从主机发送来的功能码一样,并表明从机已响应主机并且已进行相关的操作。
3、数据区
数据区包括需要由主机发送、从机回送何种信息或执行什么动作。
这些信息可以是数据(如:
开关量、模拟量、仪表参数设置值等)或参考地址等。
如:
主机通过功能码03告诉从机返回单路或多路工况数据寄存器的值或“单路或多路控制/报警设置值(包括要读取寄存器的起始地址及读取寄存器的长度等),则返回的数据包括寄存器的数据长度及数据内容。
对于不同型号的仪表/变送器,寄存器地址和数据信息都不相同(见数据地址表)。
●功能码03HEX、06HEX、10HEX读取或写“寄存器”,每个地址为一个寄存器,一个寄存器为16位(2字节)的二进制数据(整型),高位在前、低位在后,最高位为符号位,其后15位数据位。
(如1500D05DCH;-500D81F4H)。
数据地址表如果不作特别说明,则数据的通用转换方法为:
小数点在十位,仪表回送的工况数据都是整数,上位机如果转换为实型,可以除十处理,如果转换成字符串型,可以直接将小数点插入在十位。
如1:
工况温度值=60.0,小数点在十位
仪表回送数据=60010=25816=00000010010110002
如2:
温度值=-60.0,小数点在十位
仪表回送数据=-60010=825816=10000010010110002
小数点在百位,如果转换为实型,可以除百处理,如果转换成字符串型,可以直接将小数点插入在百位。
●功能码02HEX、05HEX读/写开关量,数据都为开关量,每个地址为一个位,以bit位为单位。
从机数据返回是以bit位为单元的二进制数组成(即8bit为1个字节)多字节数据。
TDS响应的命令格式是从机地址、功能码、数据区及CRC码。
数据区的数据为多字节开关量数据或模拟量数据。
三、Modbus功能码介绍
以64路TDS仪表为例作如下说明
1、功能码02HEX:
读开关量
开关量状态:
1为ON,0为OFF。
例如:
从机其中的48路开关量设定数据(内容:
10110001B(1-8路由右到左),01110011B,10100110B,11111011B,00010101B,11001101B),主机要读取从机地址为01的从机第3路到第22路巡检状态开关量设置数据,数据地址为0302H开始20bit位(内容:
11101100B,10011100B,XXXX1001B)。
(未参加巡检时,该路数的开关量数据0)
主机发送的报文格式
主机发送
字节数
发送的信息
举例说明
从机地址
1
01H
发送至地址为01的从机
功能码
1
02H
读取开关量设置数据
起始地址(高)
1
03H
数据地址0302H
起始地址(低)
1
02H
单元数(高)
1
00H
20bit位20路巡检状态
单元数(低)
1
14H
CRC码
2
XXXXH
由主机计算得到CRC码
从机(TDS)响应返回的报文
从机响应
字节数
返回的信息
举例说明
从机地址
1
01H
来自从机01
功能码
1
02H
读取开关量设置数据
字节数
1
03H
数据区字节数
开关量设置数据
1
11101100B
8bit位设置数据(10~3路)
开关量设置数据
1
10011100B
8bit位设置数据(18~11路)
开关量设置数据
1
XXXX1001B
4bit位设置数据(22~19路)
CRC码
2
XXXXH
由从机计算得到CRC码
2、功能码03HEX:
读多路寄存器
例如:
从机地址01的工况数据值(仪表测量到的数据,如温度、压力等)如下表,其中第2路未参加巡检。
(未参加巡检时,该路数的工况数据为0000H)
巡检路数
数据(16进制)
01路
1784H
02路
0000H
03路
178AH
主机要读取从机地址为01,数据地址为0000H开始的3路工况数据。
主机发送的报文格式:
主机发送
字节数
发送的信息
举例说明
从机地址
1
01H
发送至地址为01的从机
功能码
1
03H
读取工况数据
起始地址(高)
1
00H
起始地址为0000H(1路)
起始地址(低)
1
00H
单元数(高)
1
00H
读取3路工况数据
单元数(低)
1
03H
CRC码
2
XXXXH
由主机计算得到CRC码
从机(TDS)响应返回的报文格式
从机响应
字节数
返回的信息
举例说明
从机地址
1
01H
来自从机01
功能码
1
03H
读取工况数据
字节数
1
06H
0000H数据(高)
1
17H
1路数据为1784H
0000H数据(低)
1
84H
0001H数据(高)
1
00H
2路数据为0000H
0001H数据(低)
1
00H
0002H数据(高)
1
17H
3路数据为178AH
0002H数据(低)
1
8AH
CRC码
2
XXXXH
由从机计算得到CRC码
3、功能码05HEX:
写开关量
数据FF00H为ON,数据0000H为OFF。
例如:
主机要设置从机地址为01的从机第9路参加巡检(数据FF00H代表ON该路参加巡检;数据0000H代表OFF该路不参加巡检)。
主机发送的报文格式
主机发送
字节数
发送的信息
举例说明
从机地址
1
01H
发送至地址为01的从机
功能码
1
05H
写开关量设置数据
数据地址(高)
1
03H
地址为0308H(第9路)
数据地址(低)
1
08H
1
FFH
写入ON,参加巡检。
1
00H
CRC码
2
XXXXH
由主机计算得到CRC码
从机(TDS)响应返回的报文格式
从机响应
字节数
返回的信息
举例说明
从机地址
1
01H
来自从机01
功能码
1
05H
写开关量设置数据
数据地址(高)
1
03H
地址为0308H(第9路)
数据地址(低)
1
08H
数据(高)
1
FFH
数据(低)
1
00H
CRC码
2
XXXXH
由从机计算得到CRC码
4、功能码06HEX:
写单路寄存器
主机利用这个功能码把单路二进制控制/报警设置数据保存到从机的数据存储器中去(寄存器)。
例如:
主机要把04B0H保存到从机第6路上上限寄存器中去(从机地址码为01)。
通讯数据保存结束后,TDS表内第6路上上限为04B0H:
主机发送数据地址和数据为:
数据地址
数据
0205H
04B0H
主机发送的报文格式
主机发送
字节数
发送的信息
举例说明
从机地址
1
01H
发送至从机01
功能码
1
06H
写单路寄存器
数据地址(高)
1
02H
地址为0205H(第6路上上限寄存器)
数据地址(低)
1
05H
数据(高)
1
04H
写入数据04B0H
数据(低)
1
B0H
CRC码
2
XXXXH
由主机计算得到的CRC码
从机(TDS)响应返回的报文格式
从机响应
字节数
返回的信息
举例说明
从机地址
1
01H
来自从机01
功能码
1
06H
写多路寄存器
数据地址(高)
1
02H
地址为0205H(第6路上上限寄存器)
数据地址(低)
1
05H
数据(高)
1
04H
数据(低)
1
B0H
CRC码
2
XXXXH
由从机计算得到的CRC码
5、功能码10HEX:
写多路寄存器
主机利用这个功能码把多路二进制控制/报警设置数据保存到从机的数据存储器中去(寄存器)。
例如:
主机要把04B0H,保存到从机第1路上限寄存器中去;1388H保存到从机第2路上限寄存器中去(从机地址码为01)。
通讯数据保存结束后,TDS表内第1路上限为04B0H;、第2路上限为1388H:
主机发送数据地址和数据为
数据地址
数据
0100H
04B0H
0101H
1388H
主机发送的报文格式
主机发送
字节数
发送的信息
举例说明
从机地址
1
01H
发送至从机01
功能码
1
10H
写多路寄存器
起始地址(高)
1
01H
地址为0100H(第1路开始)
起始地址(低)
1
00H
单元数(高)
1
00H
2路设定数据
单元数(低)
1
02H
字节数
1
04H
保存数据1(高)
1
04H
写入数据为04B0H
保存数据1(低)
1
B0H
保存数据2(高)
1
13H
写入数据为1388H
保存数据2(低)
1
88H
CRC码
2
XXXXH
由主机计算得到的CRC码
从机(TDS)响应返回的报文格式
从机响应
字节数
返回的信息
举例说明
从机地址
1
01H
来自从机01
功能码
1
10H
写多路寄存器
起始地址(高)
1
01H
地址为0100H(第1路开始)
起始地址(低)
1
00H
单元数(高)
1
00H
保存2路设定数据
单元数(低)
1
02H
CRC码
2
XXXXH
由从机计算得到的CRC码
四、错误校验码(CRC校验)
主机或从机可用校验码进行判别接收信息是否正确。
由于电子噪声或一些其它干扰,信息在传输过程中有时会发生错误,错误校验码(CRC)可以检验主机或从机在通讯数据传送过程中的信息是否有误,错误的数据可以放弃(无论是发送还是接收),这样增加了系统的安全和效率。
MODBUS通讯协议的CRC(冗余循环码)包含2个字节,即16位二进制数。
CRC码由发送设备(主机)计算,放置于发送信息帧的尾部。
接收信息的设备(从机)再重新计算接收到信息的CRC,比较计算得到的CRC是否与接收到的相符,如果两者不相符,则表明出错。
在进行CRC计算时只用8个数据位,起始位、停止位和奇偶校验位都不参与CRC计算。
CRC码的计算方法
1、预置1个16位的寄存器为十六进制FFFF(即全为1);称此寄存器为CRC寄存器;
2、把第一个8位二进制数据(既通讯信息帧的第一个字节)与16位的CRC寄存器的低8位相异或,把结果放于CRC寄存器;
3、把CRC寄存器的内容右移一位(朝低位)用0填补最高位,并检查最低位(LSB位被提取出来检测);如果最低位为1:
移位后CRC寄存器与多项式A001(1010000000000001)进行异或;如果最低位为0:
不作处理;
4、重复步骤3,直到右移8次,这样整个8位数据全部进行了处理;
5、重复步骤2到步骤5,进行通讯信息帧下一个字节的处理;
6、最后得到的CRC寄存器内容即为:
CRC码。
注意:
报文中的CRC码低八位(低字节)在前,高八位(高字节)在后。
Pascal高级语言直接计算CRC码举例如下:
//输入参数:
Cauarray计算的报文字节数组,Count字节数,函数返回CRC码。
FunctionCauCRC(CauArray:
arrayofbyte;Count:
byte):
word;
varTempCRC:
Word;//存放CRC计算的临时变量。
CRC:
Word;//存放CRC码。
RCRC:
Word;//判定最低位为1的临时变量。
i,j:
Word;
begin
CRC:
=$FFFF;
fori:
=0toCount-1do
begin
TempCRC:
=(CRCand$00FF)xorCauArray[i];
TempCRC:
=TempCRCor(CRCand$FF00);
forj:
=1to8do
begin
RCRC:
=TempCRCand$0001;
TempCRC:
=TempCRCand$FFFE;
TempCRC:
=TempCRCshr1;
ifRCRC=1thenTempCRC:
=TempCRCxor$A001;
end;
CRC:
=TempCRC;
end;
Result:
=CRC;
end;
五、通讯错误信息及数据的处理
当从机检测到除了CRC码出错以外的错误时,必须向主机回送信息,功能码的最高位置为1,即从机返送给主机的功能码是在主机发送的功能码的基础上加128。
以下的这些代码表明有意外的错误发生。
从机(TDS)接收到的信息如有CRC错误,则将被从机忽略,不返回信息。
从机(TDS)返送的错误码的格式如下(共5个字节):
地址码:
1字节
功能码:
1字节(最高位为1,例:
03H功能码变为83H)
错误码:
1字节
CRC码:
2字节
从机(TDS)响应回送如下错误码:
81:
非法的数据地址。
指定的数据地址超出从机“数据地址表”的范围或不在从机“数据地址表”的范围。
82:
非法的数据值。
接收到主机发送的数据值超出从机“数据地址表”相应数据地址的数据可改范围。
如从机(TDS)01正确收到主机报文,但数据地址不在其“数据地址表”范围。
则从机响应返回的数据地址出错报文。
从机响应
字节数
返回的信息
举例说明
从机地址
1
01H
来自从机01
功能码
1
83H
读多路寄存器错误
错误码
1
81H
非法的数据地址
CRC码
2
XXXXH
由从机计算得到的CRC码
开关量控制/报警状态(只读)
0400H~043FH
0400H~043FH共64bit分别代表64路断阻报警状态。
每8个单元组成1字节,每8个字节为一组,第1字节最末位代表第1路控制/报警状态,第8字节最高位代表第64路控制/报警状态。
数据类型
单元地址
说明
开关量控制/报警状态(只读)
0440H~047FH
0440H~047FH共64bit分别代表上限/下限控制/报警状态。
每8个单元组成1字节,每8个字节为一组,第1字节最末位代表第1路控制/报警状态,第8字节最高位代表第64路控制/报警状态。
0480H~04BFH
0480H~04BFH共64bit分别代表上上限/上限控制/报警状态。
每8个单元组成1字节,每8个字节为一组,第1字节最末位代表第1路控制/报警状态,第8字节最高位代表第64路控制/报警状态。
说明:
1、工况数据就是指仪表测量到的数据,如温度、压力等
2、附加功能也可以通过具体的仪表参数或设置参数获得,具体请看仪表说明书。
输入信号为热电阻的(cu50、Pt100),小数点固定在十位。
3、开关量为位地址单元,一个地址存放一位(bit)。
4、本表数据地址为TDS-6400巡检控制仪的数据地址,实际应根据相应仪表的路数缩减数据地址。
如:
TDS-1600十六路巡检巡检控制仪工况数据地址只从0000H~000FH,如果“巡检总路数”(仪表设置参数)设为14,那么工况数据地址只从0000H~000DH。
如果读取的数据地址范围超过,则回送错误码:
81-非法的数据地址。
5、如果现场使用的仪表路数小于“最大巡检路数”,而上位机按读取“最大巡检路数”的数据寄存器发送数据报文,这时必须保持“巡检总路数”(仪表设置参数)为“最大巡检路数”,然后使用“消隐路数”(仪表设置参数)去掉不要的巡检路。
如:
TDS-163377M只需要前14路,必须保持“巡检总路数”(仪表设置参数)为16路,然后将15、16路“消隐”(仪表设置参数),具体操作请参看仪表说明书。
6、对于消隐的路,也就是不参加巡检的路(仪表可设定),该路回送工况数据值为0.0。
7、对于上限、上上限控制方式:
0100H~013FH为上限寄存器,0200H~023FH为上上限寄存器。
对于下限、上限控制方式:
0100H~013FH为下限寄存器,0200H~023FH为上限寄存器
附录6:
TDS-3300智能数字温度控制仪数据地址表
寄存器地址
数据类型
单元地址
说明
工况数据(只读)
0000H
温度
分辨率由具体仪表设定确定
0001H
温度max
附加功能(只读)
0002H
单元前字节低4位代表控制/报警方式:
0000单显示
0001下限报警
0010上限报警
0011下下限/下限报警
0100下限/上限报警
0101上限/上上限报警
前字节高4位代表工况数据类型:
0000Cu50(-50.0~150.0)
0001Pt100(-50.0~150.0)
0010
Cu50/Pt100通用(-30.0~130.0)
0011Pt100(-100.0~300.0)
0100Pt100(-200~600)
单元后字节低4位代表工况数据小数点位置:
0000无小数点
0001小数点在十位
0010小数点在百位
0011小数点在千位
设定数据寄存器(可改)
0100H
第一控制/报警
单报警或前报警设定
0101H
第二控制/报警
后报警设定
开关量地址
数据类型
单元地址
说明
开关量控制/报警状态(只读)
0300~0302H
从0300H到0302H每个单元为1bit,共3bit(单元)。
0300H第一控制/报警状态
0301H第二控制/报警状态
0302H工况输入断阻
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ModBus 通讯 规约 印刷 前面 总的