private void MainComPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { sw.Start(); byte[] Length = new byte[4]; int DataLength = 0; int OutputLength = 0; int ReadByteCount = MainComPort.BytesToRead; byte TempBuff = 0x00; if (MainComPort.BytesToRead > 0) { for (int j = 0; j < ReadByteCount; j++) { TempBuff = (byte)MainComPort.ReadByte(); RxBuffer[NRXCOUNT] = TempBuff; if (RxBuffer[0] == STX) { NRXCOUNT++; if (NRXCOUNT >= 5) { if (DataLength == 0) { for (int i = 0; i < 4; i++) { Length[i] = RxBuffer[i + 1]; } DataLength = ByteToInt(Length); OutputLength = Complex.TransSize(DataLength / 8); } if (NRXCOUNT == DataLength + 6) { if (RxBuffer[NRXCOUNT - 1] == ETX) { ParsingData(DataLength + 6, OutputLength); NRXCOUNT = 0; } else { NRXCOUNT = 0; } } } } else { NRXCOUNT = 0x00; } } } }
private void SendData(double[] Data, int InputLength) { byte[] TxBuffer = new byte[(InputLength + 1) * 8]; byte[] TempData = new byte[8]; byte[] Length = new byte[4]; byte[] Temp = new byte[2]; byte[] CheckSum = new byte[2]; int nTxCount = 5; int nTempCount = 0; Int16 intCheckSum = 0; Length = IntToByte(InputLength * 8 + 2); TxBuffer[0] = STX; TxBuffer[TxBuffer.Length - 1] = ETX; for (int i = 0; i < 4; i++) { TxBuffer[i + 1] = Length[i]; } try { for (int i = 0; i < InputLength; i++) { TempData = DoubleToByte(Data[i]); for (int j = 0; j < 8; j++) { TxBuffer[nTxCount + j] = TempData[j]; } nTxCount += 8; } // Checksum intCheckSum = 0x00; for (int i = 5; i < TxBuffer.Length - 3; i++) { Temp[nTempCount] = TxBuffer[i]; nTempCount++; if (nTempCount == 2) { intCheckSum += BitConverter.ToInt16(Temp, 0); nTempCount = 0; } } CheckSum = BitConverter.GetBytes(intCheckSum); TxBuffer[TxBuffer.Length - 3] = CheckSum[0]; TxBuffer[TxBuffer.Length - 2] = CheckSum[1]; MainComPort.Write(TxBuffer, 0, TxBuffer.Length); } catch (Exception) { } }
private void BtnSerialDisconnect_Click(object sender, EventArgs e) { MainComPort.Close(); BtnSerialConnect.Enabled = true; BtnSerialDisconnect.Enabled = false; StatusPortName.Text = ""; StatusBaudRate.Text = ""; StatusDataBits.Text = ""; StatusStopBits.Text = ""; StatusParityBits.Text = ""; StatusHandShake.Text = ""; StatusPort.Text = "CLOSED"; }