modbus协议和串口服务器,Modbus RTU通信模式与Modbus ASCII通信模式的异同点

本文详细介绍了Modbus通信的两种主要模式——RTU和ASCII模式。RTU模式利用3.5个字节空闲时间作为起始和结束标志,采用CRC校验,而ASCII模式则使用冒号和CRLF作为标识,采用LRC校验。RTU模式由于无需额外字符转换,其传输效率高于ASCII模式。在转换ASCII模式时,需去除CRC校验,转换为ASCII字符并添加开始和结束标识,重新计算LRC校验码。
摘要由CSDN通过智能技术生成

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

{

pBuf[0]=pSendBuf[i];

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

pBuf[2]='\0';

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

{

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校验码加上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值