modbus协议

工控安全入门(一)—— Modbus协议

岁酱吖の 提交于 2019-12-06 10:06:39
modbus基础知识 modbus协议最初是由Modicon公司在1971年推出的全球第一款真正意义上用于工业现场的总线协议,最初是为了实现串行通信,运用在串口(如RS232、RS485等)传输上的,分为ModbusRTU、Modbus ASCII两种,后来施耐德电气将该公司收购,并在1997年推出了基于TCP/IP的Modbus TCP。现在使用最多的就是Modbus TCP了,我们今天的主角也是它。 Modbus作为一种通信协议,它和我们之前介绍的Zigbee有很大不同,Zigbee有自己完整的协议栈,而Modbus是一种应用层的报文传输协议,它既可以在物理层面上选择串口进行简单的串行通信,也可以使用TCP的方式进行传输。 上图可以看到Modbus的协议栈仅仅是在传统ISO/OSI模型的基础上对数据链路层和应用层做了定义。也正是因为modbus是应用层的协议,所以它的安全漏洞并不只是它本身,TCP/IP的漏洞也可以利用在modbus上,最典型的就是18年工控比赛的题目,中间人。 modbus是一种主从协议,主设备的一方向从设备的一方下达指令,从设备的一方根据指令做出反应并回复主设备,主设备可以有多个从设备。具体来说,工作人员的计算机可认为是master,而PLC之类的具体设备就是slave了。每个设备有自己的“代号”,主设备通过“代号”来找到某一个对应的设备

Modbus读取MF5700系列流量计

别说谁变了你拦得住时间么 提交于 2019-12-06 08:25:53
本人主要从事web开发,从来没有做过和硬件相关的程序,入职新公司后主要搞的是smt制造业,要做一个读取流量计的数据的程序。说明书如下: (坑爹的说明书, 数据位都写错了 ,最后联系卖家说他们印错了,不是1位是8位,卧槽) 使用modbus协议,对modbus协议不是很懂,百度搜了一下也是模棱两可,对于什么寄存器,功能码来说也比较生疏。就想着有没有modbus相关的类库,找到了一个NModbus的类库,发现效果不是很好。偶然的机会看到了农码一生写的一个iotclient,开源地址如下: https://gitee.com/zhaopeiym/IoTClient 经过测试发现还是不行,农码大神他们公司已经在用了,但我这里为啥不行了呢,发送数据也是ok的,但是收到的数据不对。 找到了流量计的厂家,说明了情况,把报文发给了厂家,厂家说没有问题。真是奇怪。在google的帮助下,搜到了以下答案:(翻译之后) #1)波特率不匹配-我认为这不是您的问题,因为如果主站发送“垃圾”(这是不正确的波特率数据的样子),则Modbus设备将无法应答。 #2)RS-485接地不正确,这意味着由于没有接地线并且接地电势接近过电压水平,所以误解了比特/字节。 #3)RS-485上没有线路偏压,这意味着当主机停止发送&在从属装置开始响应之前,RS-485线路浮动

2019.11.17 学习总结

天涯浪子 提交于 2019-12-04 19:49:51
1、网上看到了赵炯博士的oldlinux的网站,其电子版和《linux0.11内核注释》是很不错的书籍,而且还有配套的实验环境,因此将来需要学习的话,很适合的一本书 另外,《Linux内核源代码情景分析》也是很不错的书籍,书中说基于linux2.4的,其实对于了解linux的机制是基本相同的,上面的一本书还是0.11的呢,小而精,linux的精髓学会了,就已经是向前一大步了。 这两本都是比较好的国内书籍。 2、c#的继承和多态,还有new的隐藏方法还没有学习,总的一点就是和c++很类似,因此上半年的学习c++还是很有帮助的,后面也要继续学习。 3、modbus的功能码2借助两个分析工具写了一篇博客。算是我第学习协议的开始,目前工作中,就是参考了modbus的一些原理,通信机制也是参考了的,因此类似的串口协议就基本上能够理解了。 4、看了《心的起源》博客 《 嵌入式学习笔记 》,还是很有收获的,说的感同身受~~ 来源: https://www.cnblogs.com/CodeWorkerLiMing/p/11880139.html

Modbus异常响应

匿名 (未验证) 提交于 2019-12-03 00:37:01
当客户机设备向服务器设备发送请求时,客户机希望一个正常响应。从主站询问中出现下列四种可能事件之一: 异常响应报文有两个与正常响应不同的域: 错误代码表 代码 名称 含义 01 非法功能 对于服务器(或从站)来说,询问中接收到的功能码是不可允许的操作,可能是因为功能码仅适用于新设备而被选单元中不可实现同时,还指出服务器(或从站)在错误状态中处理这种请求,例如:它是未配置的,且要求返回寄存器值。 02 非法数据地址 对于服务器(或从站)来说,询问中接收的数据地址是不可允许的地址,特别是参考号和传输长度的组合是无效的。对于带有100个寄存器的控制器来说,偏移量96和长度4的请求会成功,而偏移量96和长度5的请求将产生异常码02。 03 非法数据值 对于服务器(或从站)来说,询问中包括的值是不可允许的值。该值指示了组合请求剩余结构中的故障。例如:隐含长度是不正确的。modbus协议不知道任何特殊寄存器的任何特殊值的重要意义,寄存器中被提交存储的数据项有一个应用程序期望之外的值。 04 从站设备故障 当服务器(或从站)正在设法执行请求的操作时,产生不可重新获得的差错。 05 确认 与编程命令一起使用,服务器(或从站)已经接受请求,并且正在处理这个请求,但是需要长持续时间进行这些操作,返回这个响应防止在客户机(或主站)中发生超时错误,客户机(或主机

Modbus 功能字 01H 02H 03H 05H 06H 0FH 10H 解析 及其 格式

匿名 (未验证) 提交于 2019-12-03 00:22:01
Modbus 协议规约 功能码及其示例格式 功能码01H :读输出开关量。位操作,可以读单个也可以多个。 发送指令 从机 地址 功能码 起始地址高8 位(位) 起始地址低8 位(位) 寄存器数量高8 位(位) 寄存器数量低8 位(位) CRCH CRCL 0X01 0X01 0X00 0X08 0X00 0X0C 0XBD 0XCD 响应 从机 地址 功能码 返回字节数 Data1 Data2 CRCH CRCL 0X01 0X01 0X02 0X66 0X88 0X9A 0X93 Data1:0X66 BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 0 1 1 0 0 1 1 0 Data2:0X08 不够8位,字节高位填充0 BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 0 0 0 0 1 0 0 0 功能码02H :读输入开关量。位操作,可以读单个也可以多个。与01H 功能码相似,此处略 功能码03H :读保持寄存器。字节操作,可以读单个也可以多个。 发送指令 从机 地址 功能码 起始地址H 起始地址L 数据数量H 数据数量L CRCH CRCL 0X01 0X03 0X00 0X06 0X00 0X02 0X24 0X0A 响应 从机 地址 功能码 返回字节数 Data1H Data1L Data2H

Modbus常用功能码协议详解

匿名 (未验证) 提交于 2019-12-03 00:14:01
Modbus常用功能码协议详解 1)描述:读从机线圈寄存器,位操作,可读单个或者多个; 2)发送指令: 假设从机地址位0x01,寄存器开始地址0x0023,寄存器结束抵制0x0038,总共读取21个线圈。协议图如下: 3)响应: 返回数据的每一位对应线圈状态,1-ON,0-OFF,如下图; 上表中data1表示0x0023-0x002a的线圈状态,data1的最低位代表最低地址的线圈状态,可以理解为小端模式; data2表示地址0x002b-0x0033的线圈状态,如下表: data3表示地址0x0034-0x0038的线圈状态,不够8位,字节高位填充为0,如下表: 1):读离散输入寄存器,位操作,可读单个或多个,协议类似功能码0X01协议,此处省; 1)描述:读保持寄存器,字节指令操作,可读单个或者多个; 2)发送指令: 从机地址0x01,保持寄存器起始地址0x0032,读2个保持寄存器 3)响应: 数据存储顺序 1)描述:读输入寄存器,字节指令操作,可读单个或者多个; 2)发送指令:同03H; 3)响应:同03H; 1)描述:写单个线圈,位操作,只能写一个,写0xff00表示设置线圈状态为ON,写0x0000表示设置线圈状态为OFF 2)发送指令: 设置0x0032线圈为ON; 3)响应: 同发送指令; 1)描述:写单个保持寄存器,字节指令操作,只能写一个; 2)发送指令:

工业上的通讯协议之Modbus

匿名 (未验证) 提交于 2019-12-03 00:04:02
工业上的通讯协议之Modbus Modbus通讯协议 当在一Modbus网络上通信时,此协议决定了每个控制器需要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成反馈信息并用Modbus协议发出。在其它网络上,包含了Modbus协议的消息转换为在此网络上使用的帧或包结构。这种转换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。 当在网络上通信时,Modbus协议决定了每个控制器 需要知道它们的设备地址 ,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成应答并使用Modbus协议发送给询问方。 Modbus协议需要对数据进行校验, 串行协议中除有奇偶校验外,ASCII模式采用LRC校验,RTU模式采用16位CRC校验 。另外,Modbus 采用主从方式定时收发数据 ,在实际使用中如果某从站点断开后(如故障或关机),主端可以诊断出来,而当故障修复后,网络又可自动接通。因此,Modbus协议的可靠性较好。 Modbus与OSI参考模型 Modbus之ASCII通讯方式 数据帧 广播模式(只用于写操作) 非广播模式 Modbus之RTU通讯方式 Modbus TCP通讯应用 Modbus TCP通讯应用举例 在读寄存器的过程中,以Modbus TCP请求报文为例,具体的数据传输过程如下: 1) Modbus

modbus字符串的结束符介绍

匿名 (未验证) 提交于 2019-12-03 00:03:02
Modbus协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为一通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程,如何回应来自其它设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式。 当在一Modbus网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成反馈信息并用Modbus协议发出。在其它网络上,包含了Modbus协议的消息转换为在此网络上使用的帧或包结构。这种转换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。 此协议支持传统的RS-232、RS-422、RS-485和以太网设备。许多工业设备,包括PLC,DCS,智能仪表等都在使用Modbus协议作为他们之间的通讯标准。 modbus字符串的结束符 接收到一串字符,总要知道在那个地方结束吧,这就是结束符的作用,接收方不管以后还会收到多少个字符。当接收到结束符时,以后再接收的字符就算是下一轮的东西了,从起始符到结束符之间的字符就是它要分析的字符! MODBUS的ASCII方式结束符是--- Chr$

浅谈-对modbus的理解

匿名 (未验证) 提交于 2019-12-02 23:59:01
一、简介   Modbus由MODICON公司于1979年开发,是一种工业现场总线协议标准。1996年施耐德公司推出基于以太网TCP/IP的Modbus协议:ModbusTCP。   Modbus协议是一项应用层报文传输协议,包括ASCII、RTU、TCP三种报文类型。   标准的Modbus协议物理层接口有RS232、RS422、RS485和以太网接口,采用master/slave方式通信。 二、报文   先来简单分析一条MODBUS报文,例如:01 06 00 01 00 17 98 04    01 06 00 01 00 17 98 04   从机地址 功能码 数据地址 数据 CRC校验   这一串数据的意思是:把数据 0x0017(十进制23) 写入 1号从机地址 0x0001数据地址。   一个报文就是一帧数据,一个数据帧就一个报文: 指的是一串完整的指令数据,就像上面的一串数据。 三、从机地址   Modbus串行链路协议是一个主-从协议。在同一时刻,只有一个主节点连接于总线,一个或多个子节点连接于同一个串行总线。Modbus通信总是由主节点发起。子节点在没有收到来自主节点的请求时,从不会发送数据。 四、功能码   一下是modbus所有功能码作用说明:   功能码 作用   01     读取线圈状态取得一组逻辑线圈的当前状态(ON/OFF)   02    

RS485 MODBUS RTU通信协议

喜欢而已 提交于 2019-12-02 10:35:59
RS485 MODBUS RTU通信协议 1、RS485接口标准 RS485由RS232和RS422发展而来,弥补了抗干扰能力差、通信距离短、速率低的缺点,增加了多点、双向通信能力,即允许多个发送器连接在同一条主线上,同时增加了发送器的驱动能力和冲突保护特性,扩展了总线共模范围。 RS485可以采用二线和四线两种方式,二线制可以实现真正的多点双向通信。其主要特点如下: (1)RS485的接口信号电平比RS231-C低,不易损坏接口电路的芯片,且该电平与TTL电平兼容,方便于TTL电路相连接。 (2)RS485的数据最高传输速率为10Mbps。其平衡双绞线的长度与传输速率呈反比,在100kbps速率下,才可能使用规定的最长电缆长度,只有在很短的距离下才能获得最高传输速率。 (3)RS485接口采用平衡驱动器和差分接收器的组合,抗共模干扰能力强,即抗噪声干扰性好,因而通信距离远,最大传输距离大约为1200m,实际可达3000m。 (4)RS485接口在总线上允许连接多达128个收发器,既具有多站能力。同时需要两个终端电阻,其阻值要求等于传输电缆的特性阻抗。在短距离300m内传输时可不连接终端电阻。 2、MODBUS RTU协议 该协议已经成为通用工业标准,通过协议,控制器与控制器、控制器通过网络(以太网)与其他设备之间可以实现串行通信。RTU即远程终端单元