电力系统是一个综合化的系统,作为一个熟练的电工,对于通信有着一定的认识。否则很多问题,我们将无从下手。首先我们从广泛应用于现场的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字符时间的停顿时间,接受设备将刷新不完整的信息帧并认为存在丢包现象。
通过不同的网络波特率来调整不同的间隔时间,这是最容易实现的。其帧格式及传输过程示意图如下所示:
说明:
波特率是指模拟线路信号的速率,以波形每秒的振荡数来衡量。
如果数据不压缩,波特率等于每秒传输的数据位数,与比特率相等。
如数据进行了压缩(为了提高通信速率),被压缩的数据形成码元(根据调制方式不同,码元的位数不一)。
下面举一个例子来说明调制
现在有如下一串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。大多数设备只利用其中一部分功能码。下行帧中,通过功能码告诉从机执行什么动作。在上行帧中,从机发送的功能码与主机发送来的功能码一样,并表明从机已响应主机进行的操作,否则表明从机没有响应操作或发送出错。其常用功能码如下所示:
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除法”的运算,如下图示:
上述算式的商为11,余数为1。
B、CRC校验步骤
1、先选择一个用于在接收端进行校验