SerialPort C#通信 [英] SerialPort C# comminication

查看:92
本文介绍了SerialPort C#通信的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好,

我实施了 串行通讯接口在C#中可以正常工作.

I implemented  a serial communication interface  in C# and it works fine.

我的问题是,当我更新发送到该接口的值时,它没有更改,更新前我仍然拥有相同的发送值.

My problem is when I update the value sent to this interface, it doesn't changed, I still have the same value sent before updating.

在下面找到串行数据接收处理程序.

Below you find the serial Data receive Handler.

private void serialPort1_DataReceivedHandler(
                    object sender,
                    SerialDataReceivedEventArgs e)
        {
        
            s = serialPort1.ReadLine();
          
            TB1.Invoke(new EventHandler(delegate
            {
               
                if (s.Length == 6 && s[5] == 'A')  //ADC Data from channel IN0
                {
                     s1 = s.TrimEnd('A');

                     if (M1.Text != "")
                    {
                        e1 = double.Parse(M1.Text) * (double.Parse(s1) * 3.3) / 65535;
                        e1 = Math.Round(e1, 3);
                        TB1.Text = Convert.ToString(e1);
                    }
                }

                if (s.Length == 6 && s[5] == 'B')  //ADC Data from channel IN1
                {
                    s2 = s.TrimEnd('B');

                    if (M2.Text != "")
                    {
                        e2 = double.Parse(M2.Text) * (double.Parse(s2) * 3.3) / 65535;
                        e2 = Math.Round(e2, 3);
                        TB2.Text = Convert.ToString(e2);
                    }
                }

                if (s.Length ==6 && s[5] == 'C')  //ADC Data from channel IN2
                {
                    s3 = s.TrimEnd('C');

                    if (M3.Text != "")
                    {
                        e3 = double.Parse(M3.Text) * (double.Parse(s3) * 3.3) / 65535;
                        e3 = Math.Round(e3, 3);
                        TB3.Text = Convert.ToString(e3);
                    }
                }

                if (s.Length == 6 && s[5] == 'D')  //ADC Data from channel IN3
                {
                    s4 = s.TrimEnd('D');

                    if (M4.Text != "")
                    {
                        e4 = double.Parse(M4.Text) * (double.Parse(s4) * 3.3) / 65535;
                        e4 = Math.Round(e4, 3);
                        TB4.Text = Convert.ToString(e4);
                    }
                }

当我单击连接按钮时,开始交流,代码如下:

The commiseration starts when I click on the button connect, the code is below :

 private void btnConnect_Click(object sender, EventArgs e)
        {
            if (cmbPort.Text == "")  //No Port Selected
            {
                cmbPortToolTip.ToolTipTitle = "COMPort field Empty";
                cmbPortToolTip.UseFading    = true;
                cmbPortToolTip.UseAnimation = true;
                cmbPortToolTip.IsBalloon    = true;
                cmbPortToolTip.ShowAlways   = true;
                cmbPortToolTip.AutoPopDelay = 8000;
                cmbPortToolTip.InitialDelay = 100;
                cmbPortToolTip.ReshowDelay  = 200;
                cmbPortToolTip.SetToolTip(cmbPort, "Please Select the COM Port");
                cmbPortToolTip.Show("Please Select the COM Port.", cmbPort);
            }

            else
            {
                progressBar2.Value ^= 100;

                serialPort1.PortName = cmbPort.Text;
                serialPort1.BaudRate = Convert.ToInt32(cmbBaud.Text);
                serialPort1.Parity   = Parity.None;
                serialPort1.StopBits = StopBits.One;
                serialPort1.DataBits = 8;
                serialPort1.Encoding = Encoding.GetEncoding("Windows-1252"); //Windows-1252,28591
                serialPort1.RtsEnable = true;
                serialPort1.DtrEnable = true;
                // Set write timeout
                serialPort1.WriteTimeout = 5000;

                serialPort1.Open();
                serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceivedHandler);
                btnConnect.Enabled    = false;
                btnDisconnect.Enabled = true;

            }       
        }

您知道如何解决此问题吗?

Do you have an idea how Can I resolve this problem?

预先感谢您的帮助.

最诚挚的问候


推荐答案

您的代码与msdn稍有不同.首先尝试一下,看看是否可以将数据发送到串行端口.

Your code is slight difer from the msdn one. Try this first and see if you can send data to your serial port.

https://msdn. microsoft.com/en-us/library/system.io.ports.serialport.baudrate(v=vs.110).aspx

chanmm


这篇关于SerialPort C#通信的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆