//数据接收 private void Com_DataReceived(object sender, SerialDataReceivedEventArgs e) { byte[] ReDatas = new byte[ComDevice.BytesToRead]; ComDevice.Read(ReDatas, 0, ReDatas.Length);//读取数据 //接收数据处理 将ReDatas 转化为 String //该方式回丢弃数据 //ASCII编码只能包含0-127的数据,高出的数据将丢弃 //ReceiveData = new ASCIIEncoding().GetString(ReDatas); //byte[] Rec_Data = null; //Rec_Data = Encoding.ASCII.GetBytes(ReceiveData.Trim()); //接收的Byte数据 返回 Receive_Byte = new byte[ReDatas.Length]; Receive_Byte = (byte[])ReDatas.Clone(); //异常输出 if (Receive_Byte.Length == 0) { MainView.Log.WriteError("Rs232 通讯数据格式异常!!!"); } else { //置位接收标志 Rec_Flag = true; //执行数据处理 Receive_Event?.Invoke(); } }
public void Receive_Data(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { Exchange = true; Data_Receive = new byte[Port.BytesToRead]; Result = new float[Register_Count]; Port.Read(Data_Receive, 0, Port.BytesToRead); if (ModRTU_CRC(Data_Receive)[Data_Receive.Length - 2] != Data_Receive[Data_Receive.Length - 2] || ModRTU_CRC(Data_Receive)[Data_Receive.Length - 1] != Data_Receive[Data_Receive.Length - 1]) { return; } if (Data_Receive[1] == 0x04) { for (int x = 0; x < Register_Count; x++) { Result[x] = BTF.Out(Data_Receive[3 + x * 4], Data_Receive[4 + x * 4], Data_Receive[5 + x * 4], Data_Receive[6 + x * 4]); } } if (Now != null && Data_Receive[1] == Now[1]) { Now = null; } Receive_Event?.Invoke(); }
//数据接收 private void Com_DataReceived(object sender, SerialDataReceivedEventArgs e) { if (Closing) { return; //正在关闭串口,结束接收 } int len = ComDevice.BytesToRead; //接收数据长度 if (len <= 0) { return; //数据长度小于等于0,退出接收 } byte[] ReDatas = new byte[len]; //初始化接收数组 ComDevice.Read(ReDatas, 0, len); //读取数据 //接收的Byte数据 返回 byte[] ReceiveData = new byte[ReDatas.Length]; ReceiveData = (byte[])ReDatas.Clone(); //置位接收标志 Rec_Flag = true; //执行数据处理 Receive_Event?.Invoke(ReceiveData); //接收数据处理 将ReDatas 转化为 String //该方式回丢弃数据 //ASCII编码只能包含0-127的数据,高出的数据将丢弃 //ReceiveData = new ASCIIEncoding().GetString(ReDatas); //byte[] Rec_Data = null; //Rec_Data = Encoding.ASCII.GetBytes(ReceiveData.Trim()); }
public void Receive(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { Exchange = true; if (Port.BytesToRead < Receive_Length || Port.BytesToRead < 3) { return; } Data_Receive = new byte[Receive_Length > 3 ? Receive_Length : 8]; try { Port.Read(Data_Receive, 0, Receive_Length); Port.DiscardInBuffer(); } catch (Exception) { return; } Result = new float[Length + 1]; if (ModRTU_CRC(Data_Receive, Data_Receive.Length - 2) != (short)((short)Data_Receive[Data_Receive.Length - 2] | ((short)Data_Receive[Data_Receive.Length - 1] << 8)) || Data_Transmit[0] != Data_Receive[0] || Data_Transmit[1] != Data_Receive[1]) { Error++; return; } switch (Data_Receive[1]) { case 0x02: if (Data_Receive[2] != ((Data_Transmit[5] - 1) / 8 + 1)) { Error++; return; } if (Data_Interrupt != null && Data_Interrupt[1] == 0x02) { Data_Interrupt = null; } break; case 0x03: if (Data_Receive[2] != (Data_Transmit[5] * 2)) { Error++; return; } if (Data_Interrupt != null && Data_Interrupt[1] == 0x03) { Data_Interrupt = null; } break; case 0x04: if (Data_Receive[2] != (Data_Transmit[5] * 2)) { Error++; return; } if (Data_Interrupt != null && Data_Interrupt[1] == 0x04) { Data_Interrupt = null; } break; case 0x06: for (int count = 0; count < Data_Transmit.Length; count++) { if (Data_Receive[count] != Data_Transmit[count]) { Error++; return; } } if (Data_Interrupt != null && Data_Interrupt[1] == 0x06) { Data_Interrupt = null; } break; case 0x10: for (int count = 0; count < 6; count++) { if (Data_Receive[count] != Data_Transmit[count]) { Error++; return; } } if (Data_Interrupt != null && Data_Interrupt[1] == 0x10) { Data_Interrupt = null; } break; } for (int x = 0; x < Length; x++) { Result[x] = BTF.Out(Data_Receive[3 + x * 4], Data_Receive[4 + x * 4], Data_Receive[5 + x * 4], Data_Receive[6 + x * 4]); } Receive_Array = "Прием: "; foreach (byte a in Data_Receive) { Receive_Array += a.ToString("X2") + " "; } Receive_Event?.Invoke(); }