Esempio n. 1
0
        // 按下初始化按钮之后执行的操作,即:发送连接状态查询帧。
        private void InitializeButton_Click(object sender, RoutedEventArgs e)
        {
            // 确认串口已经被打开
            if (serial != null && serial.rs232.ComPortIsOpen)
            {
                // 按钮被按下后进行初始化,发送对应的帧
                // 第一次被按下的时候现实性初始化相关字样
                if (!is_initialized)
                {
                    _output.AppendLine("Initialize process activated." + Environment.NewLine
                                       + "Initializing..." + Environment.NewLine + Environment.NewLine);
                    is_initialized = true;
                }

                // 准备好要发送的帧
                ConnectionStatusInquiryFrame frames_inq = new ConnectionStatusInquiryFrame();

                // 做好帧的赋值工作(这个帧的值都是确定的)
                // 字符串保存即将发出去的帧内容,然后显示
                string outStr = frames_inq.FrameBytesInString();
                _output.AppendLine("Sending inquiry frame......Content: " + outStr + Environment.NewLine + Environment.NewLine);
                TheTextBox.ScrollToEnd();

                // 注册等待接收事件
                serial.rs232.rsr.NewFrame += ComFrameUp;

                // 调用发送方法将其发给串口
                frames_inq.SendFrame(serial);
            }
            else
            {
                MessageBox.Show("未打开串口。");
                return;
            }
        }
Esempio n. 2
0
        private void TestButton2_Click(object sender, RoutedEventArgs e)
        {
            // 确认串口已经被打开
            if (serial != null && serial.rs232.ComPortIsOpen)
            {
                // 按钮被按下后发送对应的测试帧
                // 准备好要发送的帧
                PortParameterInquiryFrame frames_portpara_inq = new PortParameterInquiryFrame();

                // 做好帧的赋值工作(这个帧的值都是确定的)
                // 字符串保存即将发出去的帧内容,然后显示
                string outStr = frames_portpara_inq.FrameBytesInString();
                _output.AppendLine("Sending test frame......Content: " + outStr + Environment.NewLine + Environment.NewLine);
                TheTextBox.ScrollToEnd();

                // 注册等待接收事件
                serial.rs232.rsr.NewFrame += ComFrameUp;

                // 调用发送方法将其发给串口
                frames_portpara_inq.SendFrame(serial);
            }
            else
            {
                MessageBox.Show("未打开串口。");
                return;
            }
        }
Esempio n. 3
0
        }; // 先默认他是四个

        // 当下层帧来的时候在这儿显示一下原始内容
        private void ComFrameUp(object sender, FrameReceivedArgs e)
        {
            // 如果不用下面这一行,我想要的对象还被子线程所拥有,无法用来改变UI层的元素
            // 按这一行这样操作一下就可以了。虽然我也不清楚为什么,C#这边还需要学习。
            // 参考了https://blog.csdn.net/u014117094/article/details/47776165
            Dispatcher.Invoke(new Action(() => {
                _output.AppendLine("Frame received:  " + e.IncomingFrame + Environment.NewLine + Environment.NewLine);
                TheTextBox.ScrollToEnd();

                // 调用FrameClassifier来解析帧
                FrameClassifier.IncomingFrameTypes result;
                FrameClassifier classifier = new FrameClassifier();
                result = classifier.RunClassifier(e.IncomingFrameBytes);
                ProcessClassifyResult(result, e.IncomingFrameBytes);
            }));

            // 显示一次之后就取消委托,下次要再显示下次再添加委托。不然每次“初始化”都增加一个委托,每次都多显示一行同样的内容。
            serial.rs232.rsr.NewFrame -= ComFrameUp;
        }