Modbus是一种单主/多从的通信协议,即同一时间只能有一个主设备,但可以有一个或多个(最多247个)从设备。通信必须由主设备发起,从设备只有当收到主设备发来的请求,才会发送数据。从设备之间不能相互通信
ASCII格式:每个8bit的字节都作为两个ASCII字符发送,消息以冒号开始(ASCII码0x3A),以回车CR,换行LF结束(ASCII码0x0D,0x0A)
RTU格式:在RTU中,消息的发送和接收以至少3.5个字符时间的停顿间隔为标志。如果一个消息中两个字符之间时间间隔超过1.5个字符时间则认为报文帧不完整,该报文将被丢弃。通常情况下在串行通信中1个字符包括1位起始位、8位数据位、1位校验位(或者没有)、1位停止位(一般情况下),这样一般情况下3.5个字符就包括3.5*11=38.5位,当波特率低于19200需要严格遵守时间间隔,反之使用固定值,建议1.5字符时间间隔为750μs,帧间时间间隔为1750μs。
Modbus是一个请求/应答协议,并且提供统一的功能码用于数据传输服务。
PDU是Modbus定义的一个简单的与基础通信层无关简单协议数据单元(功能码+数据)
APU则是Modbus在特定总线或网络上引入一些附加域来实现完整而准确的数据传输(PDU基础上加上必要的前缀(如地址码)与必要的后缀(如差错检验))
主机设备或客户端创建Modbus ADU形成查询报文,其中功能码向从机设备或服务器端指示将执行哪种操作。功能码占用一个字节(1~255,其中128~255为异常响应保留),创建完毕向从机或服务器端发送报文,从机或服务器端接收到报文后,根据功能码做出相应的动作,并将响应报文发送回给主机或客户端(正确接收Modbus ADU,不出现与请求Modbus功能有关的差错则返回正常的响应报文,否则响应报文的功能码位将返回一个和原始功能码相同但是最高有效位设置为1的异常码)
主设备发送Modbus请求报文的两种方式
1、 单播模式:主设备仅仅寻址单个从设备。从设备接收并处理完请求之后,向主设备返回一个响应报文,即应答。
2、 多播模式:主设备可以向所有的从设备发送请求指令。从设备接收到广播指令之后,仅进行相关指令的事务处理而不要求返回应答。由此请求指令必须是Modbus标准功能中的写指令。广播地址0
Modbus寄存器借鉴了PLC寄存器的概念
Modbus TCP消息帧格式
Modbus TCP/IP协议从串行链路的主/从设备变为了客户端/服务器端设备。并从一主多从演变为多客户端/多服务器端模型,通常使用端口502作为接收报文的端口。
Modbus TCP/IP和Modbus 链路的区别就在于Modbus TCP/IP多了一个报头,并且没有结束标志。
Modbus规定了三种功能码,分别为:
1、 公共功能码
2、 用户自定义功能码
3、 保留功能码
功能码可分为位操作和字操作两类。位操作的最小单位为一位,字操作的最小单位为两个字节
Modbus对于查询报文的四种处理反馈:
1、正常接收,正常处理,返回正常响应报文
2、因为通信错误等原因,造成从站设备没有接收到查询报文,主站报文将按超时处理
3、从站设备接收到的查询报文存在通信错误(例如LRC、CRC错误等),此时从站设备将丢弃报文不响应,主站设备将按超时处理
4、从站设备接触到正确的报文,但是超过处理范围(例如不存在的功能码或寄存器等),此时从站设备将返回包含异常码(Exception Code)的响应报文
异常响应报文由从站地址、功能码以及异常码构成,功能码最高有效位设为1