예제 #1
0
 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("激光控制接收数据格式异常!!!");
     }
 }
예제 #2
0
        //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);
        }