售前咨询-朱:19381904226
售前咨询-杨:19381903226 English
前沿资讯 真实、准确的物联网、互联网行业新闻

Modbus RTU/ASCII通信协议异同点解析,Modbus RTU/ASCII通信协议异同,Modbus RTU通信协议,Modbus ASCII通信协议,Modbus通信协议

你的位置: 网站首页 新闻动态 技术应用
Modbus RTU/ASCII通信协议异同点解析
2021-12-23 09:46:53 阅读: 发布人:纵横智控

Modbus基于串行通信存在两种模式:Modbus RTU与Modbus ASCII模式。不管是RTU模式还是ASCII模式,Modbus信息都以帧的方式传输,每个信息帧有确定的起始点和结束点,使接收设备在信息的起点开始读地址,并确定要寻址的设备 (主机广播时对全部设备),以及信息传输的结束时间。并且可检测部分信息,错误可作为一种结果设定。

RTU

RTU模式与ASCII模式之间的区别在于:

1.开始和结束的标志不同。

RTU模式的开始和结束的标志是传输3.5字节所需要的空闲时间,假设串口通信速率为9600bps,传输一个字节所需的时间为一个毫秒左右(8/9600即/1200秒),3.5个字节的空闲时间大概就是3-4个毫秒,即当波特率为9600bps时,RTU传输空闲时间为6-8毫秒(上一个信息帧结束空闲时间和信息帧开始空闲时间)即可开始一个新的信息帧。而ASCII模式则是采用固定的ASCII字符表示开始(:,冒号,十六进制为3AH)和结束的(CRLF,回车-换行键,十六进制为0D和0AH)。

2.校验模式不同。

RTU模式采用CRC校验码,而ASCII模式则采用LRC校验码,相对来说LRC校验码更加简单易懂。LRC校验码就是将信息帧中除开始结束符(:和回车换行)之外的所有数据按字节叠加取反加1即可。LRC校验码代码如下:

BYTE GetCheckCode(const char*pSendBuf,int nEnd)//获得LRC校验码

 {

 BYTE byLrc=0;char pBuf[4];int nData=0;

 for(i=1;i<end;i+=2)

{

pBuf[0]=pSendBuf[i];

pBuf[1]=pSendBuf[i+1];

pBuf[2]='';

ssanf(pBuf"%X",&nData;byLrc+=nData);

}

bLrc=~bLrc;

bLrc++;

 }

CRC校验码则是每个八位字符都单独和寄存器内容相或(OR),结果向最低有效为移动,最高有效位以0填充,LSB为1,寄存器和预置的值或一下,LSB为0,则不进行,整个过程重复8次,最后一位完成后,下一个8位字节与寄存器的当前值相或,最终寄存器的值就是CRC值。CRC校验码代码如下:

WORD GetCheckCode(const char *pSendBuf,int nEnd)//获取CRC校验码

{

WORD wCrc=WORD(0xFFFF);

 for(inti=0;i<nEnd;i++)

{

wCrc^=WORD(BYTE(pSendBuf[i]));

for(int j=0;j<8;j++)

{

if(wCrc&1)

{

wCrc>>=1;

wCrc^=0xA001;

}

}

else

{

wCrc>>=1;

}

}

return wCrc;

}

3.RTU模式的传输效率高于ASCII模式。

ASCII模式不但需要添加开始结束标志,还需要将十六进制数据转换为ASCII码,比如十六进制0x25转换为ASCII字符则为0x32,0x35,ASCII的表述效率只是RTU表述的一半。RTU模式指令转换为ASCII模式指令:1.将CRC校验码去掉;2.将所有对应的字节转换为对应的两个字节的ASCII字符;3.加上起始标识和结束标识,并计算LRC校验码加上。

友情链接