matlab串口判断帧头,串口数据解析:帧头,数据提取的优选方案,SerialPort类实现...
private void GetSerialData(){if(mySerialPort.ReadByte()==2)//找到帧头,本来想用0X02,{byte[] D_Buffer=new byte[9];mySerialPort.Read(D_Buffer,0,D_Buffer.Length);byte[] myData=new byte[7];int ID=D_Buffer[0];...
private void GetSerialData()
{
if(mySerialPort.ReadByte()==2)//找到帧头,本来想用0X02,
{
byte[] D_Buffer=new byte[9];
mySerialPort.Read(D_Buffer,0,D_Buffer.Length);
byte[] myData=new byte[7];
int ID=D_Buffer[0]; //数据包标识
//如果通过校验和,则将缓冲区数据取出存入相应数据数组中。
if(Check(D_Buffer,D_Buffer[8])==true);
{
switch(ID)
{
case 1:
for(i=1;i<=7;i++)
myData1[i-1]=D_Buffer[i];
break;
case 2:
for(i=1;i<=7;i++)
myData2[i-1]=D_Buffer[i];
break;
case 3:
for(i=1;i<=7;i++)
myData3[i-1]=D_Buffer[i];
break;
}
}
}
}
//校验函数
private bool Check(byte d_Buffer,byte checkSum)
{
byte sum=0;
for (i=1;i<=7;i++)
{
sum+=d_Buffer[i];
}
if(sum==checkSum)//说明校验和通过,返回true。
return true;
else return false;//说明校验和不通过,返回false;
}请问:这种思路有疏漏,或者,有更优的解决方案吗?
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)