modbus协议报文分析

读线圈状态

读取从设备的线圈或离散量输出状态,即DO(Discrete Output,离散输出)
请求码:01
地址范围:00000~00016
报文如下:Tx:006700-44 D4 00 00 00 06 01 01 00 00 00 11
从起始地址0000开始读取17个线圈的状态
44 D4:标识传输标识
00 00:协议标识
00 06:长度标识
01:单位标识(从站标识)
01:功能码
00 00:起始地址
00 11:线圈数量
响应报文:Rx:006701-44 D4 00 00 00 06 01 01 03 AB 92 00
如果查询正确且成功,响应中功能码与请求中功能码相同,否则功能码+0x80返回。其中03代表长度,后面三个字节,将AB 92 00转成2进制为:
101010111001001000000000
响应报文中每个线圈占用一个bit,一个寄存器占16位两个字节长度,即一个字节表示8个线圈的状态,1=on,0=off。Modbus使用低位保存在高位地址的方式,所以AB 92 00应转换为:110101010100100100000000


读取离散量输入值

读取离散输入DI(Discrete Input)的on/off状态,可读取的1-2000个连续的离散输入量状态。
请求码:02
请求报文:Tx:006706-55 07 00 00 00 06 01 02 00 00 00 11
响应报文:001-Rx:00 01 00 00 00 06 01 02 03 AB 92 00
查询某个线圈的状态,例如:查询地址为00009线圈的状态00 01 00 00 00 06 01 02 00 09 00 01;
响应:003-Rx:00 01 00 00 00 04 01 02 01 01



读取保持寄存器值

读取保持寄存器的内容。寄存器数量占两个字节,取值范围0x0001~0x007D(125)最多读取连续125个寄存器的内容。Modbus的保持寄存器和输入寄存器以字为单位。
请求码:03
请求报文:000-Tx:00 01 00 00 00 06 01 03 00 00 00 11,读取17个寄存器的数值
响应报文:001-Rx:00 01 00 00 00 25 01 03 22 00 0F 00 0E 00 0D 00 0C 00 0B 00 0A 00 09 00 08 00 07 00 06 00 05 00 04 00 03 00 02 00 01 00 01 00 02
其中功能码后面的数字代表返回的位数0x22 = 34个字节,共34/2=17个寄存器,每个寄存器的值由两个字标识。


读取输入寄存器值

读取从设备输入寄存器的内容。
请求码:04
请求报文:010-Tx:00 01 00 00 00 06 01 04 00 00 00 11,读取17个寄存器的值。
响应:011-Rx:00 01 00 00 00 25 01 04 22 00 DF 12 23 34 56 1F 43 00 11 11 22 33 44 55 66 77 88 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
响应报文中的字段含义同上。


写单个线圈

用于将单个线圈寄存器(或离散输入)设置为ON或则OFF状态,支持广播模式。在广播模式下所有从站设备的同一地址的值将被统一修改。
请求码:05
请求报文:080-Tx:00 01 00 00 00 06 01 05 00 09 FF 00 ,起始地址由两个字节构成;目标数据也由两个字节构成,只能取值:0xFF00或0x0000
响应报文:081-Rx:00 01 00 00 00 06 01 05 00 09 FF 00(如果设置成功,响应报文与查询报文相同)


写单个保持寄存器

更新从设备的单个保持寄存器的值,支持广播模式。
请求码:06
请求报文:008-Tx:00 01 00 00 00 06 01 06 00 09 09 03,将地址为00009的寄存器设置为09 03。
响应报文:设置成功后,响应报文和请求报文内容相同。例如:



写多个线圈

将连续的多个线圈或离散输出设置为on/off状态。支持广播模式。起始地址两个字节,寄存器数量由两个字节构成。
请求码:15(0x0F)
测试内容:设置从00005开始到00016的状态如下(使用大端字符序存储)



由于一共12位,所以需要2个字节16位存储,起始地址从00005开始计算,所以二进制表示为10101011 00000111,十六进制为AB 07。
请求报文:017-Tx:00 01 00 00 00 09 01 0F 00 05 00 0C 02 AB 07
0F:请求码,一个字节
00 05:寄存器起始地址,2个字节
00 0C:寄存器个数,2个字节
02:后续字节数
AB 07:具体设置的状态值。
响应报文:018-Rx:00 01 00 00 00 06 01 0F 00 05 00 0C(如果设置成功,响应报文包括请求码,起始地址和寄存器个数)


写多个保持寄存器

用于设置或写入从设备保持寄存器的多个连续的地址快(1123),支持广播模式。起始地址由2个字节;寄存器数量2个字节,取值范围0x00010x007B。
请求码:10
测试内容:测试地址从00010开始到00016结束。设置00010~00016地址范围内寄存器的值如下


请求报文:033-Tx:00 01 00 00 00 13 01 10 00 0A 00 06 0C 00 0A 00 0B 00 0C 00 0D 00 0E 00 0F
00 13:后续字节长度(换算为十进制19)
01:单位标识
10:请求码
00 0A:寄存器起始地址
00 06:写入寄存器数量
0C:后续字节长度
响应报文:034-Rx:00 01 00 00 00 06 01 10 00 0A 00 06(设置成功后响应报文中包含功能码,起始地址,寄存器个数)


掩码写入寄存器

使用AND掩码和OR掩码更新指定寄存器的内容。可以用来设置或者清除寄存器中各个位。
请求码:22(0x16)
请求报文:Tx:000176-2D 79 00 00 00 08 01 16 00 00 F9 5A FF AA
16:请求码
00 00:寄存器地址
F9 5A:and掩码
FF AA:or 掩码
通过and和or的计算公式:
Result = (Current Contents AND And_Mask) OR (Or_Mask AND (NOT And_Mask))
响应报文:001-Rx:00 01 00 00 00 08 01 16 00 00 F9 5A FF AA(设置成功后响应报文中包含功能码,寄存器地址,and掩码和or掩码)


读写多个寄存器

将读和写功能放在同一个modbus会话里。
请求码:23(0x17)
请求报文:Tx:000190-35 2B 00 00 00 1B 01 17 00 00 00 08 00 00 00 08 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
17:功能码
00 00:读寄存器的起始地址,占2字节
00 08:读寄存器的个数,占2字节
00 00:写寄存器的起始地址,占2字节
00 08:写寄存器的个数,占2字节
10:后续字节,1个字节
00 00 00 00 00 00…:从起始地址开始每个寄存器设置的值,占2字节。
响应报文:001-Rx:00 01 00 00 00 13 01 17 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00(设置成功后响应报文中包含功能码,后续字节数,每个寄存器的值。)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342