public void Resolve_Com_Data() { byte[] Rec_Data = new byte[Initialization.Initial.Laser_Control_Com.Receive_Byte.Length]; Rec_Data = (byte[])Initialization.Initial.Laser_Control_Com.Receive_Byte.Clone(); //清空数据 Resolve_Rec.Empty(); //数据拆分 if (Rec_Data.Length >= 13) { Resolve_Rec.RW = System.Text.Encoding.Default.GetString(new byte[] { Rec_Data[0], Rec_Data[1] }); Resolve_Rec.DataSize = System.Text.Encoding.Default.GetString(new byte[] { Rec_Data[2], Rec_Data[3] }); Resolve_Rec.Address = System.Text.Encoding.Default.GetString(new byte[] { Rec_Data[4], Rec_Data[5] }); Resolve_Rec.Com_Control = System.Text.Encoding.Default.GetString(new byte[] { Rec_Data[6], Rec_Data[7] }); } //检查格式 if ((Resolve_Rec.RW == "03") || (Resolve_Rec.RW == "02")) //03-Read,02-Write { if (uint.TryParse(Resolve_Rec.DataSize, out uint tmp)) //接收数据大小 { if ((13 + tmp * 2) == Rec_Data.Length) //校验长度 { if (tmp > 0) //DataSize>0 { for (int i = 0; i < tmp * 2; i++) { Resolve_Rec.Data = Resolve_Rec.Data + System.Text.Encoding.Default.GetString(new byte[] { Rec_Data[8 + i] }); //获取Data数据 } Resolve_Rec.Rec = Str_To_Uint16(Resolve_Rec.Data); //获取D1...Dn Uinte16格式 Resolve_Rec.Rec_Byte = StrToHexByte(Resolve_Rec.Data); //获取D1...Dn Byte值 Array.Reverse(Resolve_Rec.Rec_Byte); Resolve_Rec.Crc = System.Text.Encoding.Default.GetString(new byte[] { Rec_Data[8 + tmp * 2], Rec_Data[8 + tmp * 2 + 1], Rec_Data[8 + tmp * 2 + 2], Rec_Data[8 + tmp * 2 + 3] }); //获取Crc校验 } else { Resolve_Rec.Data = null; Resolve_Rec.Crc = System.Text.Encoding.Default.GetString(new byte[] { Rec_Data[8 + tmp * 2], Rec_Data[8 + tmp * 2 + 1], Rec_Data[8 + tmp * 2 + 2], Rec_Data[8 + tmp * 2 + 3] });//获取Crc校验 } } else { return; } } //接收数据组合 Resolve_Rec.Sum = Resolve_Rec.RW + Resolve_Rec.DataSize + Resolve_Rec.Address + Resolve_Rec.Com_Control + Resolve_Rec.Data; //校验数据完整性 if (Crc_Append_Str((ushort)compCRC.Check_Sum(StrToHexByte(Resolve_Rec.Sum))) == Resolve_Rec.Crc) { Prompt.Log.Info("激光控制接收数据 校验OK!!!"); } } else { Prompt.Log.Info("激光控制接收数据格式异常!!!"); } }
//CRC数据校验值添加 public byte[] StrCRC(string inStr) { byte[] data = null; //Check_Sum ushort usCrc16 = (ushort)compCRC.Check_Sum(StrToHexByte(inStr)); /* * 回车(Carriage Return)和换行(Line Feed)区别 * CR用符号\r表示, 十进制ASCII代码是13, 十六进制代码为0x0D * LF使用\n符号表示, ASCII代码是10, 十六制为0x0A * Dos / windows: 回车 + 换行CR / LF表示下一行, * UNIX / linux: 换行符LF表示下一行, * MAC OS: 回车符CR表示下一行. */ //Prompt.Log.Info(inStr + Crc_Append_Str(usCrc16)); //将字符串转换为Byte data = Encoding.ASCII.GetBytes((inStr + Crc_Append_Str(usCrc16)).Trim()); return(data); }