本变频器使用的Modbus协议通信数据格式分为RTU(远程终端单元)模式和ASCII(American Standard Code for Information International Interchange)模式两种。

10.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Ω终端电阻。

10.3.2 RTU模式

blob.png

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

blob.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个字节的传输时间)

10.3.3 ASCII模式

名称

定义

编码系统

通讯协议属于16进制,ASCII的信息字符意义:“0”…“9”,“A”…“F”每个16进制都用对应字符的ASCII信息表示:

blob.png

数据格式

起始位、7/8个数据位、校验位和停止位。数据格式的描述如下表:

blob.png

10-bit字符帧:

blob.png

在ASCII模式中,帧头为“:”(“0x3A”),帧尾缺省为“CRLF”(“0x0D”“0x0A”)。在ASCII方式下,除了帧头和帧尾之外,其余的数据字节全部以ASCII码方式发送,先发送高4位位元组,然后发送低4位位元组。ASCII方式下数据为8位长度。对于‘A’~‘F’,采用其大写字母的ASCII码。此时数据采用LRC校验,校验涵盖从从机地址到数据的信息部分。校验和等于所有参与校验数据的字符和(舍弃进位位)的补码。

blob.png

ASCII帧的标准结构:

START

‘:’(0x3A)

Address   Hi

通讯地址:

8-bit 地址由2个ASCII码组合

Address   Lo

Function   Hi

功能码:

8-bit 地址由2个ASCII码组合

Function   Lo

DATA(N-1)

DATA(0)

数据内容:

nx8-bit 数据内容由2n个ASCII码组合

n<=16,最大32个ASCII码

LRC   CHK Hi

LRC检查码:

8-bit 检验码由2个ASCII码组合

LRC   CHK Lo

END   Hi

结束符:

END Hi=CR(0x0D),END Lo=LF(0x0A)

END Lo

10.3.4 RTU通讯帧错误校验方式

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

10.3.4.1 字节位校验

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

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

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

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

10.3.4.2 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空间较大,对程序空间有要求的场合,请谨慎使用。

10.3.4.3 ASCII模式的校验(LRC Check)

校验码(LRC Check)由Address到Data Content结果加起来的值,例如上面2.2.2通讯信息的校验码:0x02+0x06+0x00+0x08+0x13+0x88=0xAB,然后取2的补码=0x55。

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

Static unsigned char 

LRC(auchMsg,usDataLen)

unsigned char *auchMsg;

unsigned short usDataLen;

{

unsigned char uchLRC=0;

while(usDataLen--)

uchLRC+=*auchMsg++;

return((unsigned char)(~((char)uchLRC)));

}


上一章节 下一章节