【理论】一文看懂Modbus通信协议(上)

目录

前言

1. 基于RS-485的Modbus通信协议

1.1 一主多从模式

2. Modbus的数据结构

2.1 Modbus-RTU协议

2.1.1 Modbus-RTU协议的基本格式(主机查找从机)

2.1.2 Modbus-RTU从机回应数据基本格式(从机回应主机)

2.2 Modbus-ASCLL协议

2.2.1 Modbus-ASCLL协议的基本格式(主机查找从机)


前言

Modbus是Schneider Electric公司于1979年开发的一种常用于工业领域的串行通信协议,根据上一节的介绍我们可以了解到Modbus类属软件层通信协议,因此明确软件层通信协议的功能至关重要,既然它是一种行业通用的一种标准通信格式,那么它的功能要满足以下三点要求:

(1)主机寻址从机并向从机发送数据;

(2)主机寻址从机获取从机数据;

(3)从机如何向主机发送数据。

总结一下软件层通信特点:主机和从机上电时均处于接收状态;主机向从机发送寻址帧后迅速恢复为接收状态,目的是等待所寻址的从机按照指定格式做出数据回应。

1. 基于RS-485Modbus通信协议

1.1 一主多从模式

Modbus规定其工作方式为一主多从模式,即一个系统中有且只有一个主机,每个从机有且只有一个地址,地址范围为(0~247),其中的地址0赋给主机称为广播地址,当主机向0号地址发送数据时,主机则像广播一样把该数据发送给所有从机,但由于多个从机接收到主机发送的数据时,无法通过一根总线做出回应同时还会造成数据冲突,因此当主机向0号地址发送数据时从机不予以回应。当主机发送除地址0之外的从机地址时,对应从机接收到主机的寻址帧后便返回一组数据,该回应数据通过RS-485总线进行传递,因为其他从机数据线也接在RS-485总线上,在被寻址从机做出反馈时,其他从机也能同时接收到被寻址从机发给主机的反馈数据,为防止其他从机接收到被寻址从机发出的反馈数据而产生误动作,应在被寻址从机的反馈数据内加入被寻址从机的数据地址,这样其他从机虽然收到了被寻址从机返回给主机的数据,但该返回数据的数据地址与自己不符,从而其他从机不做出响应。因此总结一下设置地址的目的:

(1)方便主机对指定从机的通信;

(2)使被寻址从机对主机做出数据反馈时,其他从机不能误接收。

2. Modbus的数据结构

Modbus的数据结构也就是主机寻址帧的格式,Modbus有两种传输方式:一种是Modbus-RTU协议、一种是Modbus-ASCLL协议。

2.1 Modbus-RTU协议

Modbus-RTU协议也称为16进制方式,例如要发送0x05,则为0000 0101,只需要发送8位即可(效率高)。采用RS-485通信则需要加上起始位和终止位共10位。

2.1.1 Modbus-RTU协议的基本格式(主机查找从机)

从机地址功能码(MODBUS共有128种功能指令)+数据1、数据2、数据n并将上述数据格式进行CRC16数据较验,该校验就是将上述数据按照CRC16方式进行运算,计算后得到一个16位的二进制数,这个16位的二进制数反映了上述数据组的一种规则特征。并在上述数据后组后面将该16位二进制数填入末尾我们称之为校验码

【问题一】从机如何确定主机是否发送完一组数据帧?即帧的结束标志。应当注意,当上电时主从设备都处于接收状态,如果主机向指定一个从机按照上述数据格式发送数据,但从机在接收数据时不会判断何时结束数据的接收,Modbus中并未规定主机发送的数据串何时终止以及从机如何去判断主机发送完毕一组数据串,即Modbus-RTU协议没有明确的结束标志。

【解决方法】通过计算主机向从机发送数据后的停止时间作为本次发送数据的结束标志,当本次数据完成后的停止时间超过了3.5个字符时间则认为本次发送结束,同时从机停止接收数据。(从机以接收数据停止时间达到3.5个字节以上,就认为主机的寻址帧完成,并使从机进行数据处理)

【问题二】3.5个字符时间如何计算?

【解决方法】举例:假设选择波特率为9600bit/s,表示数据传输速度为每秒传输9600位。可以得到每一位的数据传输时间位1000000us/9600=104us(微秒),也就是主机每发一位数据(发一个0或1)用时104 us(微秒),串口协议数据格式如下。

主机每发送一个字节需要10位,故发送一个字节用时T=10*104us(微秒)= 1040us(微秒)。因此3.5个字节用时T=3.5*1040 us(微秒)=3645 us(微秒)约4ms(毫秒)。

因此当主机数据停止发送时间超过4ms(毫秒),从机即停止接收数据并对所接收的数据进行分析处理。当主机数据停止发送时间在4ms(毫秒)以内又重新发送新的数据帧,则从机抛弃前一次接收的数据帧并对最新的数据帧进行接收储存。

2.1.2 Modbus-RTU从机回应数据基本格式(从机回应主机)

(1)从机回应主机数据帧的格式与主机查找从机数据帧格式基本一致;

(2)正常回应时功能码与主机发的功能码一致(1-127)。如果是异常回应,功能码要在收到的功能码基础上加128。例如从机受到的功能码为0x03,则从机反馈给主机的功能码有两种情况0x03或0x03+128,第一种是正常返回,第二种则是超出了功能码范围表示从机数据有异常。

要想实现Modbus的从机通信数据帧协议首先应当满足以下两点:在硬件上应当具备串口或RS-485接口;同时硬件上应具备毫秒级定时器。

2.2 Modbus-ASCLL协议

Modbus-ASCLL协议如果要发送0x05,则通过拆分0x05为:‘0’和‘5’并将‘0’和‘5’转换为ASCLL码‘0x30’和‘0x35’,再转化成‘0011 0000’和‘0011 0101’进行发送,则需要发送16位(效率低),但优势是可以通过显示器对总线上数据进行ASCLL码显示,便于人机交互和串口调试。

2.2.1 Modbus-ASCLL协议的基本格式(主机查找从机)

每一帧的开始总是以‘:’的ASCLL码(0x3A)作为起始依据+地址位(与Modbus-RTU协议不同的是RTU协议下的地址位的0x02表示0000 00010,而ASCLL协议则需要将0x02拆分成‘0’和‘2’的ASCLL码方能表示地址位0000 00010+功能码(Modbus共有128种功能指令)+数据1、数据2、数据n紧接其后的是LRC校验码,该校验码取值在(0~255之间)= ~[(地址位+功能码+数据1+数据2+…+数据n)%256]+1;注(~表示取反、%表示取余)即为校验码。校验码结束后还有ASCLL码的换行键13以及回车键10

参考网址:

ASCLL码查询网址推荐

NI公司对于Modbus的介绍

往期博客:

通信的硬件层协议和软件层协议

RS-232、RS-485、RS-422通信接口标准介绍

  • 7
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
SIP(Session Initiation Protocol)是一种用于建立、修改和终止多媒体会话的网络通信协议。它是一种轻量级的协议,用于在IP网络上进行语音、视频、聊天和即时通信等多媒体应用的交互。 SIP协议是基于请求-响应模型的,它使用文本格式的消息进行通信。SIP消息分为请求消息和响应消息,请求消息用于请求执行某个动作,而响应消息则是对请求的响应。 SIP的基本功能包括:发起请求建立会话,邀请参与会话的用户,接受或拒绝邀请,修改会话参数,并终止或撤销会话。它允许用户进行注册和注销,以便在网络上发现对方,并提供一系列的功能和服务以增强会话的质量和效果。 SIP协议使用URI(Uniform Resource Identifier)来标识参与会话的用户和资源。它利用一个SIP服务器来处理请求,这个服务器可以进行注册、转发和路由。SIP还可以与其他应用协议如SDP(Session Description Protocol)和RTP(Real-time Transport Protocol)等配合使用,以实现媒体传输和会话控制。 SIP协议的优点在于其灵活性和可扩展性。它允许用户自己定义不同的请求方法和头部字段,以满足各种复杂的通信需求。此外,SIP还支持使用代理服务器和重定向来提高系统的可用性和可靠性。 总之,SIP协议是一种用于建立和管理多媒体会话的通信协议。通过使用请求-响应模型和文本消息格式,SIP实现了用户注册、会话发起、修改和终止等功能,提供了灵活、可扩展和与其他应用协议配合使用的特点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

米杰的声音

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值