本变频器使用的Modbus协议为RTU模式,网络线路为RS485。

11.3.1 RS485

RS485接口工作于半双工,数据信号采用差分传输方式,也称作平衡传输。它使用一对双绞线,将其中一线定义为 A(+),另一线定义为 B(-)。通常情况下,发送驱动器 A、B之间的正电平在+2~+6V表示逻辑“1”,电平在-2V~-6V表示逻辑“0”。

变频器端子板上的485+对应的是A,485-对应的是B。

通讯波特率(P14.01)是指用一秒钟内传输的二进制bit数,其单位为每秒比特数bit/s(bps)。设置波特率越高,传输速度越快,抗干扰能力越差。当使用0.56mm(24AWG)双绞线作为通讯电缆时,根据波特率的不同,最大传输距离如下表:

波特率

传输最大距离

波特率

传输最大距离

2400BPS

1800m

9600BPS

800m

4800BPS

1200m

19200BPS

600m

RS485远距离通讯时建议采用屏蔽电缆,并且将屏蔽层作为地线。

在设备少距离短的情况下,不加终端负载电阻整个网络能很好的工作,但随着距离的增加性能将降低,所以在较长距离时,建议使用120Ω终端电阻。

11.3.1.1 单机应用

图11-1为单台变频器和PC组建的Modbus现场接线图。因为计算机一般都不带RS485接口,所以必须将计算机自带的RS232接口或USB接口通过转换器转换为RS485。将RS485的A端接到变频器端子板上的485+端口上,将RS485的B端接到变频器端子板上的485-端口上。建议尽量用带屏蔽的双绞线。当采用RS232-RS485转换器时,计算机上的RS232接口与RS232-RS485转换器上的RS232接口相接时,线长应尽量短,最长不要超过15m,建议直接将RS232-RS485转换器对插在计算机上。同理当采用USB-RS485转换器时,线也应尽量短。

当将线路接好后,将计算机上的上位机选择正确的端口(接RS232-RS485转换器的端口,比如COM1),并将通讯波特率和数据位校验等基本参数设为与变频器一致。

image.png

图11-1 RS485单机应用时的物理接线图

11.3.1.2多机应用

实际多机应用中,一般采用菊花接法和星形接法。

RS485工业总线标准要求各设备之间采用菊花链式连接方式,两头必须接有120Ω终端电阻,如图11-2所示。图11-3为简化接线图。图11-4为实际运用图。

image.png

图11-2菊花接法现场接线图

image.png

图11-3菊花简化接线图

image.png

图11-4菊花接法运用图

图11-5为星形连接方式图。此时在线路距离最远的两个设备上必须连接终端电阻(1#与15#设备)。

image.png

图11-5星形接法

多机接法应该尽量采用屏蔽线。RS485线上的所有设备的波特率和数据位校验等基本参数必须一致,地址必须不能有重复。

11.3.2 RTU模式

11.3.2.1 RTU通讯帧结构

当控制器设为在Modbus 网络上以RTU模式通讯,在消息中的每个8Bit字节包含两个4Bit 的十六进制字符。这种方式的主要优点是:在同样的波特率下,可比ASCII 方式传送更多的数据。

代码系统

· 1 个起始位。

· 7或8 个数据位,最小的有效位先发送。 8 位二进制,每个8位的帧域中,包括两个十六进制字符(0...9,A...F)。

· 1 个奇偶校验位,无校验则无。

· 1 个停止位(有校验时),2 个Bit(无校验时)。

错误检测域

· CRC(循环冗长检测)。

数据格式的描述如下表:

11-bit字符帧(BIT1~BIT8为数据位):

起始位

BIT

1

BIT

2

BIT

3

BIT

4

BIT

5

BIT

6

BIT

7

BIT

8

校验位

停止位

10-bit字符帧(BIT1~BIT7为数据位):

起始位

BIT

1

BIT

2

BIT

3

BIT

4

BIT

5

BIT

6

BIT

7

校验位

停止位

一个字符帧中,真正起作用的是数据位。起始位、检验位和停止位的加入只是为了将数据位正确地传输到对方设备。在实际应用时一定要将数据位,、奇偶校验、停止位设为一致。

在RTU模式中,新帧总是以至少3.5个字节的传输时间静默作为开始。在以波特率计算传输速率的网络上,3.5个字节的传输时间可以轻松把握。紧接着传输的数据域依次为:从机地址、操作命令码、数据和CRC校验字,每个域传输字节都是十六进制的0...9,A...F。网络设备始终监视着通讯总线的活动。当接收到第一个域(地址信息),每个网络设备都对该字节进行确认。随着最后一个字节的传输完成,又有一段类似的3.5个字节的传输时间间隔,用来表识本帧的结束,在此以后,将开始一个新帧的传送。

image.png

一个帧的信息必须以一个连续的数据流进行传输,如果整个帧传输结束前有超过1.5个字节以上的间隔时间,接收设备将清除这些不完整的信息,并错误认为随后一个字节是新一帧的地址域部分,同样的,如果一个新帧的开始与前一个帧的间隔时间小于3.5个字节时间,接收设备将认为它是前一帧的继续,由于帧的错乱,最终CRC校验值不正确,导致通讯故障。

RTU帧的标准结构:

帧头START

T1-T2-T3-T4(3.5个字节的传输时间)

从机地址域ADDR

通讯地址:0~247(十进制)(0为广播地址)

功能域CMD

03H:读从机参数;

06H:写从机参数

数据域

DATA(N-1)

DATA(0)

2*N个字节的数据,该部分为通讯的主要内容,

也是通讯中,数据交换的核心。

CRC CHK 低位

检测值:CRC校验值(16BIT)

CRC CHK 高位

帧尾END

T1-T2-T3-T4(3.5个字节的传输时间)

11.3.2.2 RTU通讯帧错误校验方式

数据在传输的过程中,有时因为各种因素使数据发生了错误。如果没有校验,接收数据的设备就不知道信息是错误的,这时它可能做出错误的响应。这个错误的响应可能会导致严重的后果,所以信息必须要有校验。

校验的思路是,发送方将发送的数据按照一种固定的算法算出一个结果,并将这个结果加在信息的后面一起发送。接收方在收到信息后,根据那种算法将数据算出一个结果,再将这个结果和发送方发来的结果比较。如果比较结果相同,证明这信息是正确的,否则认为信息是错误的。

帧的错误校验方式主要包括两个部分的校验,即单字节的位校验(奇/偶校验,也即字符帧中的校验位)和帧的整个数据校验(CRC校验)。

字节位校验(奇偶校验)

用户可以根据需要选择不同的位校验方式,也可以选择无校验,这将影响每个字节的校验位设置。

偶校验的含义:在数据传输前附加一位偶校验位,用来表示传输的数据中"1"的个数是奇数还是偶数,为偶数时,校验位置为"0",否则置为"1",用以保持数据的奇偶性不变。

奇校验的含义:在数据传输前附加一位奇校验位,用来表示传输的数据中"1"的个数是奇数还是偶数,为奇数时,校验位置为"0",否则置为"1",用以保持数据的奇偶性不变。

例如,需要传输数据位为"11001110",数据中含5个"1",如果用偶校验,其偶校验位为"1",如果用奇校验,其奇校验位为"0",传输数据时,奇偶校验位经过计算放在帧的校验位的位置,接收设备也要进行奇偶校验,如果发现接受的数据的奇偶性与预置的不一致,就认为通讯发生了错误。

CRC校验方式---CRC(Cyclical Redundancy Check)

使用RTU帧格式,帧包括了基于CRC方法计算的帧错误检测域。CRC域检测了整个帧的内容。CRC域是两个字节,包含16位的二进制值。它由传输设备计算后加入到帧中。接收设备重新计算收到帧的CRC,并与接收到的CRC域中的值比较,如果两个CRC值不相等,则说明传输有错误。
  CRC是先存入0xFFFF,然后调用一个过程将帧中连续的6个以上字节与当前寄存器中的值进行处理。仅每个字符中的8Bit数据对CRC有效,起始位和停止位以及奇偶校验位均无效。
  CRC产生过程中,每个8位字符都单独和寄存器内容相异或(XOR),结果向最低有效位方向移动,最高有效位以0填充。LSB被提取出来检测,如果LSB为1,寄存器单独和预置的值相异或,如果LSB为0,则不进行。整个过程要重复8次。在最后一位(第8位)完成后,下一个8位字节又单独和寄存器的当前值相异或。最终寄存器中的值,是帧中所有的字节都执行之后的CRC值。

CRC的这种计算方法,采用的是国际标准的CRC校验法则,用户在编辑CRC算法时,可以参考相关标准的CRC算法,编写出真正符合要求的CRC计算程序。

现在提供一个CRC计算的简单函数给用户参考(用C语言编程):

unsigned int crc_cal_value(unsigned char*data_value,unsigned char data_length)

{

   int i;

   unsigned int crc_value=0xffff;

   while(data_length--)

   {

            crc_value^=*data_value++;

            for(i=0;i<8;i++)

            {

                     if(crc_value&0x0001)

                               crc_value=(crc_value>>1)^0xa001;

                     else

                               crc_value=crc_value>>1;

            }

   }

   return(crc_value);

}

在阶梯逻辑中,CKSM根据帧内容计算CRC值,采用查表法计算,这种方法程序简单,运算速度快,但程序所占用ROM空间较大,对程序空间有要求的场合,请谨慎使用。


上一章节 下一章节