c语言rtu解析通讯协议,Modbus通讯协议(二)——RTU

本文详细介绍了Modbus RTU通信协议,包括信息帧格式、CRC码计算、数据传输过程和常见报文实例。通过具体例子阐述了如何计算CRC码、如何读取和解析Modbus报文,以及Modbus RTU在电力系统中的应用。
摘要由CSDN通过智能技术生成

电力系统是一个综合化的系统,作为一个熟练的电工,对于通信有着一定的认识。否则很多问题,我们将无从下手。首先我们从广泛应用于现场的Modbus-RTU模式,来开始讲起。

Modbus-RTU模式是指当控制器设为在Modbus网络上以RTU(远程终端模式)模式通信,在消息中的每个8Bit包含两个4Bit的十六进制字符。

说明:

Bit(位),信息的最小单位,简写为b,代表0或1的数位讯号。

Byte(字节),用于计量储存容量的一种计量单位,简写为B,1Byte=8Bits,即1字节等于8位。1字节可以表示的内容个数为2的8次方,即256个。

Word(字),用来计算机一次性处理事务的一个固定长度的位组。对于工业现场控制设备常用的16位系统来说1Word=2Byte=16Bit。在计算机中大多数寄存器的尺寸就是一个字长。

一、信息帧的格式

使用RTU模式注意下面两点:

1、信息帧发送至少要以3.5个字符时间的停顿间隔开始。在最后一个字符传输字符之后,一个至少3.5个字符时间的停顿标定了信息帧的结束。一个新的信息帧可在此停顿之后开始。如果一个新消息在小于3.5个字符时间内接着前个消息开始,接受的设备将认为它是前一信息帧的延续,这将导致CRC码的值出错。

2、整个信息帧必须作为一连续的流传输。如果在帧完成之前有超过1.5字符时间的停顿时间,接受设备将刷新不完整的信息帧并认为存在丢包现象。

通过不同的网络波特率来调整不同的间隔时间,这是最容易实现的。其帧格式及传输过程示意图如下所示:

676744381473

676744381473

说明:

波特率是指模拟线路信号的速率,以波形每秒的振荡数来衡量。

如果数据不压缩,波特率等于每秒传输的数据位数,与比特率相等。

如数据进行了压缩(为了提高通信速率),被压缩的数据形成码元(根据调制方式不同,码元的位数不一)。

下面举一个例子来说明调制

现在有如下一串01001111,共8Bit。

如果一位一位的来看,那就是有两种不同的离散值0和1,只有高、低电平两种幅度。

现在将每两个bit作为一个符号,也就是两位两位的来看,即把这串信号这样看:01 00 11 11。两位两位来看的话,就从之前只有高、低电平幅度(两种不同的离散值)变成了四种不同的幅度(就是概率里面的排列组合得出2*2=4):00(最低)、01(低)、10(高)、11(最高),有了四种不同的离散值。

上述信号也就变成了「低」「最低」「最高」「最高」,四种幅度对应成0、1、2、3,那么信号串就变成了1、0、3、3 。

上述过程就是调制。

那么在数据进行过压缩的情况下,比特率=波特率*log2(N),其中N表示离散值的数量。

示例:波特率为240Baud,有8种电平与之对应,则其与之对应的比特率为240*log2(8)=720bps

下面来分项来说说信息帧中的各部分:

1、地址码

地址码是信息帧的第一个字节(8位),从0到255。每个从机都必须有唯一的地址。在下行帧中,表明只有符合地址码的从机才能接收由主机发送来的信息。在上行帧中,表明该信息来自于何处。

备注:如果地址为0x00,则认为是一个广播命令,就是所有从机要接收主机发来的信息。规约规定广播命令必须是写命令,并且从站也不发送回答。

2、功能码

功能码是信息帧的第二个字节。ModBus通讯规约定义功能号为1到127。大多数设备只利用其中一部分功能码。下行帧中,通过功能码告诉从机执行什么动作。在上行帧中,从机发送的功能码与主机发送来的功能码一样,并表明从机已响应主机进行的操作,否则表明从机没有响应操作或发送出错。其常用功能码如下所示:

676744381473

3、数据

它因不同的功能码及不同的从机而不同。数据区可以是实际数据、状态值、参考地址、数据长度等等。

4、CRC码

CRC码由发送设备计算,放置于发送信息的尾部。接受信息的设备再重新计算接收到的信息的CRC码,比较计算得到的CRC码是否与接收到的相符(或将接收到的信息除以约定的除数,应无余数),如果不相符(有余数),则表明出错。它用于保证主机或从机对传送过程中出错的信息起不了作用,增加了系统的安全与效率。

下面我就来说一下CRC码是如何计算出来的。

在介绍CRC码的计算过程之前,我们先来谈谈“模2除法”。

A、模2运算

“模2除法”与“算术除法”类似,但它既不向上借位,也不比较除数和被除数的相同位数值大小,只要以相同位数进行相除即可。

“模2加法”为1+1=0,1+0=1,0+0=0,0+1=1;

“模2减法”为1-1=0,1-0=1,0-0=0,0-1=1;

大家仔细看看上面的运算,是否觉得非常像一种逻辑运算?

没错,上述运算相当于二进制中的逻辑异或运算。也就是比较后,两者对应位相同则结果为“0”,不同则结果为“1”。下面以100101除以1110为例,为大家展示一下“模2除法”的运算,如下图示:

676744381473

上述算式的商为11,余数为1。

B、CRC校验步骤

1、先选择一个用于在接收端进行校验

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值