Modbus通讯协议学习.docx
- 文档编号:25970082
- 上传时间:2023-06-16
- 格式:DOCX
- 页数:9
- 大小:15.90KB
Modbus通讯协议学习.docx
《Modbus通讯协议学习.docx》由会员分享,可在线阅读,更多相关《Modbus通讯协议学习.docx(9页珍藏版)》请在冰豆网上搜索。
Modbus通讯协议学习
Modbus通讯协议学习
了解了它,会使你对串口通信有一个清晰的认识!
通用消息帧ASCII消息帧(在消息中的每个8Bit字节都作为两个ASCII字符发送)十六进制,ASCII字符0...9,A...F消息中的每个ASCII字符都是一个十六进制字符组成每个字节的位1个起始位n个数据位,最小的有效位先发送1个奇偶校验位,无校验则无1个停止位(有校验时),2个Bit(无校验时)错误检测域LRC(纵向冗长检测)RTU消息帧8位二进制,十六进制数0...9,A...F消息中的每个8位域都是一个两个十六进制字符组成每个字节的位1个起始位8个数据位,最小的有效位先发送1个奇偶校验位,无校验则无1个停止位(有校验时),2个Bit(无校验时)错误检测域CRC(循环冗长检测)CRC校验(publicstaticstringCRCCheck(stringval)
{
val=val.TrimEnd('');
string[]spva=val.Split('');
byte[]bufData=newbyte[spva.Length+2];
bufData=ToBytesCRC(val);
ushortCRC=0xffff;
ushortPOLYNOMIAL=0xa001;
for(inti=0;i<bufData.Length-2;i++)
{
CRC^=bufData[i];
for(intj=0;j<8;j++)
{
if((CRC&0x0001)!
=0)
{
CRC>>=1;
CRC^=POLYNOMIAL;
}
else
{
CRC>>=1;
}
}
}
returnMaticsoft.DBUtility.HLConvert.ToHex(System.BitConverter.GetBytes(CRC));
}
///<summary>
///例如把如下字符串转换成字节数组
///AAAAAAAA0A00680006030454212822E5F316BBBBBBBB转换为字节数组
///</summary>
///<paramname="hex">十六进制字符串</param>
///<returns></returns>
publicstaticbyte[]ToBytesCRC(stringhex)
{
string[]temp=hex.Split('');
byte[]b=newbyte[temp.Length+2];
for(inti=0;i<temp.Length;i++)
{
b[i]=Convert.ToByte(temp[i],16);
}
returnb;
}
///<summary>
///将字节数据转换为十六进制字符串,中间用“”分割如:
AAAAAAAA0A00680006030454212822E5F316BBBBBBBB
///</summary>
///<paramname="vars">要转换的字节数组</param>
///<returns></returns>
publicstaticStringToHex(byte[]vars)
{
returnBitConverter.ToString(vars).Replace('-','').Trim();
}
CS校验(累加和)
publicstaticstringCSCheck(stringstr)
{
if(str.Length==0)return"";
elsestr=str.Trim();
byte[]sss=ToBytes(str);
intn=0;
for(inti=0;i<sss.Length;i++)
{
n+=sss[i];
}
returnToHex(n);
}
///<summary>
///ABCD123B转换为字节数组
///</summary>
///<paramname="hex">十六进制字符串</param>
///<returns></returns>
publicstaticbyte[]ToBytes(stringhex)
{
string[]temp=hex.Split('');
byte[]b=newbyte[temp.Length];
for(inti=0;i<temp.Length;i++)
{
if(temp[i].Length>0)
b[i]=Convert.ToByte(temp[i],16);
}
returnb;
}
///<summary>
///转换为符合本程序的十六进制格式
///</summary>
///<paramname="var">123等。
</param>
///<returns>返回十六进制字符串,如果是1-9的话,前面带零</returns>
///<example>例如:
5="05"12="0C"无论何时,都是两位数。
</example>
publicstaticstringToHex(intvar)
{
intcs=var;
stringtmp="";
if(cs==0){tmp="00";}
while(cs>0)
{
intys;
cs=Math.DivRem(cs,256,outys);
tmp=tmp.Insert(0,string.Format("{0}",Right("00"+Convert.ToString(ys,16),2).ToUpper()));
}
returntmp.Trim();
}
publicstaticstringRight(stringstr,intLength)
{
if((Length<=0)||(str==null))
{
return"";
}
intlength=str.Length;
if(Length>=length)
{
returnstr;
}
returnstr.Substring(length-Length,Length);
}
LRC校验(LRC错误校验用于ASCII模式)
///<summary>
///取模FF(255)
///取反+1
///</summary>
///<paramname="writeUncheck"></param>
///<returns></returns>
publicstaticstringLRCheck(stringwriteUncheck)
{
char[]hexArray=newchar[writeUncheck.Length];
hexArray=writeUncheck.ToCharArray();
intdecNum=0,decNumMSB=0,decNumLSB=0;
intdecByte,decByteTotal=0;
boolmsb=true;
for(intt=0;t<=hexArray.GetUpperBound(0);t++)
{
if((hexArray[t]>=48)&&(hexArray[t]<=57))
decNum=(hexArray[t]-48);
elseif((hexArray[t]>=65)&(hexArray[t]<=70))
decNum=10+(hexArray[t]-65);
if(msb)
{
decNumMSB=decNum*16;
msb=false;
}
else
{
decNumLSB=decNum;
msb=true;
}
if(msb)
{
decByte=decNumMSB+decNumLSB;
decByteTotal+=decByte;
}
}
decByteTotal=(255-decByteTotal)+1;
decByteTotal=decByteTotal&255;
inta,b=0;
stringhexByte="",hexTotal="";
doublei;
for(i=0;decByteTotal>0;i++)
{
b=Convert.ToInt32(System.Math.Pow(16.0,i));
a=decByteTotal%16;
decByteTotal/=16;
if(a<=9)
hexByte=a.ToString();
else
{
switch(a)
{
case10:
hexByte="A";
break;
case11:
hexByte="B";
break;
case12:
hexByte="C";
break;
case13:
hexByte="D";
break;
case14:
hexByte="E";
break;
case15:
hexByte="F";
break;
}
}
hexTotal=String.Concat(hexByte,hexTotal);
}
returnhexTotal;
}
publicvoidLRCheck(byte[]code)
{
intsum=0;
foreach(bytebincode)
{
sum+=b;
}
sum=sum%255;//取模FF(255)
sum=~sum+1;//取反+1
stringlrc=Convert.ToString(sum,16);
returnlrc;
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Modbus 通讯 协议 学习