private void SerialPortSendAsString(string sendData) { if (serial.IsOpen == false) { //statusTextBlock.Text = "请先打开串口"; //return; if (Open_Port() == false) { return; } } if (sendQueue.Count > 10) { statusTextBlock.Text = "发送队列已满"; return; } SendSetStr SendSet = new SendSetStr(); SendSet.SendSetData = sendData; SendSet.SendAscill = true; sendQueue.Enqueue(SendSet); return; try { serial.Write(sendData); if (showSendCheckBox.IsChecked == true) { receiveTextBox.AppendText(sendData); } //更新发送数据计数 sendBytesCount += (UInt32)sendData.Length; statusSendByteTextBlock.Text = sendBytesCount.ToString(); statusTextBlock.Text = "发送成功"; } catch (Exception ex) { autoSendCheckBox.IsChecked = false;//关闭自动发送 statusTextBlock.Text = ex.Message; } }
//发送数据 private void SerialPortSendAsHex(string sendData) { if (serial.IsOpen == false) { //statusTextBlock.Text = "请先打开串口"; //return; if (Open_Port() == false) { return; } } if (sendQueue.Count > 10) { statusTextBlock.Text = "发送队列已满"; return; } SendSetStr SendSet = new SendSetStr(); SendSet.SendSetData = sendData; SendSet.SendAscill = false; sendQueue.Enqueue(SendSet); return; try { sendData = sendData.Replace(" ", ""); sendData = sendData.Replace("0X", ""); sendData = sendData.Replace("0x", ""); sendData = sendData.Replace("\r", ""); sendData = sendData.Replace("\n", ""); sendData = sendData.Replace("\t", ""); byte[] sendByte = new byte[sendData.Length / 2 + sendData.Length % 2]; for (int i = 0; i < (sendData.Length - sendData.Length % 2) / 2; i++) //转换偶数个 { sendByte[i] = Convert.ToByte(sendData.Substring(i * 2, 2), 16); //转换 } if (sendData.Length % 2 != 0) //单独处理最后一个字符 { sendByte[sendByte.Length - 1] = Convert.ToByte(sendData.Substring(sendData.Length - 1, 1), 16); } try { serial.Write(sendByte, 0, sendByte.Length); //更新发送数据计数 sendBytesCount += (UInt32)sendByte.Length; statusSendByteTextBlock.Text = sendBytesCount.ToString(); if (showSendCheckBox.IsChecked == true) { receiveTextBox.AppendText("\n" + sendData + "\n"); } } catch (Exception ex) { statusTextBlock.Text = ex.Message; autoSendCheckBox.IsChecked = false;//关闭自动发送 return; } statusTextBlock.Text = "发送成功"; } catch (Exception e) { e.ToString(); autoSendCheckBox.IsChecked = false;//关闭自动发送 statusTextBlock.Text = "请输入16进制"; return; } }
private void SendQueueTask() { while (true) { if (sendQueue.Count <= 0) { Thread.Sleep(100); continue; } SendSetStr SendSet = (SendSetStr)sendQueue.Dequeue(); string sendData = SendSet.SendSetData; if (SendSet.SendAscill) { try { serial.Write(sendData); Dispatcher.Invoke(() => { if (showSendCheckBox.IsChecked == true) { receiveTextBox.AppendText(sendData); } //更新发送数据计数 sendBytesCount += (UInt32)sendData.Length; statusSendByteTextBlock.Text = sendBytesCount.ToString(); statusTextBlock.Text = "发送成功"; }); } catch (Exception ex) { Dispatcher.Invoke(() => { autoSendCheckBox.IsChecked = false;//关闭自动发送 statusTextBlock.Text = ex.Message; }); } } else { try { sendData = sendData.Replace(" ", ""); sendData = sendData.Replace("0X", ""); sendData = sendData.Replace("0x", ""); sendData = sendData.Replace("\r", ""); sendData = sendData.Replace("\n", ""); sendData = sendData.Replace("\t", ""); byte[] sendByte = new byte[sendData.Length / 2 + sendData.Length % 2]; for (int i = 0; i < (sendData.Length - sendData.Length % 2) / 2; i++) //转换偶数个 { sendByte[i] = Convert.ToByte(sendData.Substring(i * 2, 2), 16); //转换 } if (sendData.Length % 2 != 0) //单独处理最后一个字符 { sendByte[sendByte.Length - 1] = Convert.ToByte(sendData.Substring(sendData.Length - 1, 1), 16); } try { serial.Write(sendByte, 0, sendByte.Length); //更新发送数据计数 sendBytesCount += (UInt32)sendByte.Length; Dispatcher.Invoke(() => { statusSendByteTextBlock.Text = sendBytesCount.ToString(); if (showSendCheckBox.IsChecked == true) { receiveTextBox.AppendText("\n" + sendData + "\n"); } statusTextBlock.Text = "发送成功"; }); } catch (Exception ex) { Dispatcher.Invoke(() => { statusTextBlock.Text = ex.Message; autoSendCheckBox.IsChecked = false;//关闭自动发送 }); } } catch (Exception e) { e.ToString(); Dispatcher.Invoke(() => { autoSendCheckBox.IsChecked = false;//关闭自动发送 statusTextBlock.Text = "请输入16进制"; }); } } } }