Пример #1
0
        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;
            }
        }
Пример #2
0
        //发送数据
        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;
            }
        }
Пример #3
0
        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进制";
                        });
                    }
                }
            }
        }