modbus协议和串口服务器,Modbus RTU通信模式与Modbus ASCII通信模式的异同点
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校驗碼加上。
總結
以上是生活随笔為你收集整理的modbus协议和串口服务器,Modbus RTU通信模式与Modbus ASCII通信模式的异同点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 临河天气预报软件测试,临河天气预报15天
- 下一篇: app开发上传文件夹到服务器,uni-a