图文详解ModbusTCP协议
概述
Modbus由MODICON公司于1979年开发,是一种工业现场总线协议标准。1996年施耐德公司推出基于以太网TCP/IP的Modbus协议:ModbusTCP。Modbus协议是一项应用层报文传输协议,包括ASCII、RTU、TCP三种报文类型。标准的Modbus协议物理层接口有RS232、RS422、RS485和以太网接口,采用master/slave方式通信。
A
Modbus TCP数据帧
ModbusTCP的数据帧可分为两部分:MBAP+PDU。
(一)报文头MBAP:MBAP为报文头,长度为7字节,组成如下:
(二)帧结构PDU:PDU由功能码+数据组成。功能码为1字节,数据长度不定,由具体功能决定。
(1)功能码: Modbus的操作对象有四种:线圈、离散输入、保持寄存器、输入寄存器。
(2)根据对象的不同,Modbus的功能码有:
(3)说明更详细的表:
B
PDU详细结构
(1)0x01:读线圈:在从站中读1~2000个连续线圈状态,ON=1,OFF=0 请求:MBAP 功能码 起始地址H 起始地址L 数量H 数量L(共12字节) 响应:MBAP 功能码 数据长度 数据(一个地址的数据为1位) 如:在从站0x01中,读取开始地址为0x0002的线圈数据,读0x0008位
00 01 00 00 00 06 01 01 00 02 00 08 回:数据长度为0x01个字节,数据为0x01,第一个线圈为ON,其余为OFF
00 01 00 00 00 04 01 01 01 01
(2)0x05:写单个线圈:将从站中的一个输出写成ON或OFF,0xFF00请求输出为ON,0x000请求输出为OFF。 请求:MBAP 功能码 输出地址H 输出地址L 输出值H 输出值L(共12字节) 响应:MBAP 功能码 输出地址H 输出地址L 输出值H 输出值L(共12字节) 如:将地址为0x0003的线圈设为ON
00 01 00 00 00 06 01 05 00 03 FF 00 回:写入成功
00 01 00 00 00 06 01 05 00 03 FF 00
(3)0x0F:写多个线圈:将一个从站中的一个线圈序列的每个线圈都强制为ON或OFF,数据域中置1的位请求相应输出位ON,置0的位请求响应输出为OFF。 请求:MBAP 功能码 起始地址H 起始地址L 输出数量H 输出数量L 字节长度 输出值H 输出值L 响应:MBAP 功能码 起始地址H 起始地址L 输出数量H 输出数量L
(4)0x02:读离散量输入:从一个从站中读1~2000个连续的离散量输入状态。 请求:MBAP 功能码 起始地址H 起始地址L 数量H 数量L(共12字节) 响应:MBAP 功能码 数据长度 数据(长度:9+ceil(数量/8)) 如:从地址0x0000开始读0x0012个离散量输入
00 01 00 00 00 06 01 02 00 00 00 12 回:数据长度为0x03个字节,数据为0x01 04 00,表示第一个离散量输入和第11个离散量输入为ON,其余为OFF
00 01 00 00 00 06 01 02 03 01 04 00
(5)0x04:读输入寄存器:从一个远程设备中读1~2000个连续输入寄存器。 请求:MBAP 功能码 起始地址H 起始地址L 寄存器数量H 寄存器数量L(共12字节) 响应:MBAP 功能码 数据长度 寄存器数据(长度:9+寄存器数量×2) 如:读起始地址为0x0002,数量为0x0005的寄存器数据
00 01 00 00 00 06 01 04 00 02 00 05 回:数据长度为0x0A,第一个寄存器的数据为0x0c,其余为0x00
00 01 00 00 00 0D 01 04 0A 00 0C 00 00 00 00 00 00 00 00
(6)0x03:读保持寄存器:从远程设备中读保持寄存器连续块的内容。 请求:MBAP 功能码 起始地址H 起始地址L 寄存器数量H 寄存器数量L(共12字节) 响应:MBAP 功能码 数据长度 寄存器数据(长度:9+寄存器数量×2) 如:起始地址是0x0000,寄存器数量是 0x0003
00 01 00 00 00 06 01 03 00 00 00 03 回:数据长度为0x06,第一个寄存器的数据为0x21,其余为0x00
00 01 00 00 00 09 01 03 06 00 21 00 00 00 00
(7)0x06:写单个保持寄存器:在一个远程设备中写一个保持寄存器。 请求:MBAP 功能码 寄存器地址H 寄存器地址L 寄存器值H 寄存器值L(共12字节) 响应:MBAP 功能码 寄存器地址H 寄存器地址L 寄存器值H 寄存器值L(共12字节) 如:向地址是0x0000的寄存器写入数据0x000A
00 01 00 00 00 06 01 06 00 00 00 0A 回:写入成功
00 01 00 00 00 06 01 06 00 00 00 0A
(8)0x10:写多个保持寄存器:在一个远程设备中写连续寄存器块(1~123个寄存器)。 请求:MBAP 功能码 起始地址H 起始地址L 寄存器数量H 寄存器数量L 字节长度 寄存器值(13+寄存器数量×2) 响应:MBAP 功能码 起始地址H 起始地址L 寄存器数量H 寄存器数量L(共12字节) 如:向起始地址为0x0000,数量为0x0001的寄存器写入数据,数据长度为0x02,数据为0x000F
00 01 00 00 00 09 01 10 00 00 00 01 02 00 0F 回:写入成功
00 01 00 00 00 06 01 10 00 00 00 01
C
Modbus TCP示例报文
ModBusTcp与串行链路Modbus的数据域是一致的,具体数据域可以参考串行Modbus。这里给出几个ModbusTcp的链路解析说明,辅助新人分析报文。
D
Modbus TCP通信
(一)通信方式
Modbus设备可分为主站(poll)和从站(slave)。主站只有一个,从站有多个,主站向各从站发送请求帧,从站给予响应。在使用TCP通信时,主站为client端,主动建立连接;从站为server端,等待连接。 主站请求:功能码+数据 从站正常响应:请求功能码+响应数据 从站异常响应:异常功能码+异常码,其中异常功能码即将请求功能码的最高有效位置1,异常码指示差错类型 需要超时管理机制,避免无期限的等待可能不出现的应答 IANA(Internet Assigned Numbers Authority,互联网编号分配管理机构)给Modbus协议赋予TCP端口号为 502 ,这是目前在仪表与自动化行业中唯一分配到的端口号。
(二)通信过程 connect 建立TCP连接 准备Modbus报文 使用send命令发送报文 在同一连接下等待应答 使用recv命令读取报文,完成一次数据交换 通信任务结束时,关闭TCP连接
E
仿真软件 Modbus poll 和Modbus slave是一组Modbus仿真软件,可以实现Modbus RTU、TCP、串口仿真等。 仿真软件网址:https://modbustools.com/download.html 在ModbusTCP中,Modbus poll 作为客户端请求数据,Modbus slave 作为服务器端处理请求。 使用c语言编写客户端连接Modbus slave时,注意数据格式,一条指令一次性发出,否则连接会出错。 使用软件时,需要指定功能码,在setup->slave definition或者poll definition中进行设置。
– slave ID:从站编号(事务标识符)
– function:功能码,0x01对应线圈操作,0x02对应离散量操作,0x03对应保持寄存器操作,0x04对应输入寄存器操作
– address:开始地址
– quantity:寄存器/线圈/离散量 的数量
贝弗利得知斯马特成为DPOY后很愤怒北京时间10月8日,在勇士球员德雷蒙德格林最新一期的TheVolume节目当中,作为嘉宾的湖人后卫帕特里克贝弗利谈到,上赛季在得知马库斯斯马特最终摘得自己渴望已久的DPOY之后,自
国乒势如破竹!陈梦30横扫日本新星,世乒赛女团中国队领先日本2022年10月8日,世乒赛继续进行,女团决赛开打,中国队再战日本队,争夺最终的冠军,第一盘单打结束,奥运冠军陈梦先声夺人,轰出30横扫日本新星木原美悠,取得10领先。就在去年东京
42岁金卡戴珊又升级,减重21斤,穿特制皮带短裙,把詹娜比下去时间来到十月上旬,NBA季前赛正在如火如荼地进行中。最近,菲尼克斯太阳队连续遭遇麻烦,主力前锋克劳德确定将会离队,球队老大布克的状态也有点糟糕。布克在场上的状态低迷,球迷们并不意外
寒咳丨热咳!燥咳丨风咳丨化痰止咳食疗方法深秋正浓,逐渐干燥的天气很容易耗伤津液,更容昜秋燥伤肺而咳嗽。中医将咳嗽分为外感咳嗽和内伤咳嗽,其中外感咳嗽较为常见,季节交替,天气变化异常都会导致外邪侵犯而咳嗽。外感咳嗽根据所受
肾透支了,中医教你如何补回来?现在的年轻人生活都不是很节制,结果就造成肾透支了,那么肾虚了,该如何把它补回来呢?我们说要针对性地补,这样药证相符,效果才能见效。首先大家要分清阴阳之精气,到底是哪个虚了。一般由于
肾炎患者不能吃哪些肉类?肾炎患者不建议吃的肉类食物包括脂肪含量高的肉类,蛋白含量高的肉类,海鲜类,属于发物的肉类,腌制过以及重口味肉类。1。油腻的肉类,比如猪肥肉,鸭肉的皮。2。高蛋白的肉类,比如牛肉,羊
天一冷坐骨神经就疼痛难忍?这个中医名方可治,值得收藏大家好,我是中医骨科阎医生。今天是寒露,寒露意味着天气越来越寒凉了。天气冷,骨头不太好的朋友,就容易出问题,明显节后来找我看病的比往常要多。今天,有好几个病人因为天凉坐骨神经痛来找
午评沪指跌0。39险守3000点,科创50指数重挫3。28金融界10月10日消息周一A股三大指数集体小幅高开,盘初一小时市场震荡下挫,沪指退守3000点,深成指创业板指跌超1,随后指数低位震荡拉锯,午前小幅反弹。截止午间收盘,沪指跌0。3
谁是今生渡你之人谁是今生渡你之人,对你最不好的那个人就是。拿我来说吧!我和我先生就是这样的,我们同是属鸡的,我无论做什么事,说什么话,在我先生那里基本都是错的,我们会经常吵架搞得生活一团糟。其实我
学会分享,温暖人间今日读书看到这句西蜀樱桃也自红,野人相赠满筠笼,仿佛看到了鲜红的樱桃装在质朴的竹筐中,欢笑着送给那个孤寂的诗人,冰冷的草堂里顿时温暖起来。看着鲜红的樱桃,诗人想起了当初在门下省供职
三孩政策,真的是为了鼓励生三孩吗?2021年5月31日,中共中央政治局会议决定进一步优化生育政策,实施一对夫妻可以生育三个子女的政策。这一政策立刻引起了全国人民的热议。很多人都在思考三孩政策的有效性,网上也出现各种