Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
记分板数据传输串行端口c#_C# - Fatal编程技术网

记分板数据传输串行端口c#

记分板数据传输串行端口c#,c#,C#,有一些过时的软件被用来控制我当地田径场的记分牌,我的任务是创建一个新的高级记分牌。然而,我似乎无法让记分板按照我的要求去做 我已经在我的笔记本电脑上安装了原始软件,它工作正常,但是,当我运行通过串行端口向电路板发送数据的测试软件时,它并不是我想要的 我有“记分板数据协议”由制造商提供,我一直遵循这一点。我将把代码提供给我的测试程序,我一直在用它来看看我是否能让它工作,我还将提供数据协议 在文本框中,我键入010D0201SPAIN和003C630并将其发送到电路板,但这不起作用 public p

有一些过时的软件被用来控制我当地田径场的记分牌,我的任务是创建一个新的高级记分牌。然而,我似乎无法让记分板按照我的要求去做

我已经在我的笔记本电脑上安装了原始软件,它工作正常,但是,当我运行通过串行端口向电路板发送数据的测试软件时,它并不是我想要的

我有“记分板数据协议”由制造商提供,我一直遵循这一点。我将把代码提供给我的测试程序,我一直在用它来看看我是否能让它工作,我还将提供数据协议

在文本框中,我键入
010D0201SPAIN
003C630
并将其发送到电路板,但这不起作用

public partial class Form1 : Form
    {

        private SerialPort m_port;

        public Form1()
        {
            InitializeComponent();
            m_list.Items.AddRange(SerialPort.GetPortNames()); // Adds ports to combobox

            m_port = new SerialPort();
            m_port.BaudRate = 9600;
            m_port.DataBits = 8;
            m_port.Parity = Parity.Even;
            m_port.StopBits = StopBits.One;
            //m_port.Handshake = Handshake.None;
            m_port.Encoding = new ASCIIEncoding();

            m_port.RtsEnable = true;
            m_port.DtrEnable = true;

            m_port.ReceivedBytesThreshold = 1;
            m_port.DataReceived += DataReceivedEvent;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            m_port.Close();
            m_port.PortName = (string)m_list.SelectedItem;

            try
            {
                m_port.Open();
                m_sendbutton.Enabled = true;
                button2.Enabled = true;
            }catch(UnauthorizedAccessException ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void m_sendbutton_Click(object sender, EventArgs e)
        {
            m_port.Write(m_textbox.Text);
        }
        private void DataReceivedEvent(object sender, SerialDataReceivedEventArgs args)
        {
            Invoke(new EventHandler(DoUpdate));
        }

        private void DoUpdate(object s, EventArgs e)
        {
            label1.Text += m_port.ReadLine();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            byte[] r_bytes = Encoding.ASCII.GetBytes(m_textbox.Text);
            m_port.Write(r_bytes, 0, r_bytes.Length);
        }
    }
}


代码:

以下是如何在消息周围以字节数组的形式添加STX和ETX

   private void button2_Click(object sender, EventArgs e)
    {
        var msg = Encoding.ASCII.GetBytes(m_textbox.Text).ToList();
        msg.Insert(0, 0x02); // STX at the start
        msg.Add(0x03); // ETX at the end
        m_port.Write(msg.ToArray(), 0, msg.Count);
    }

“它没有做我想做的事。”-你能解释一下会发生什么,你希望它做什么吗?好吧,现在,当我从上面的程序发送信息时,它什么也不做,但是当我从2004年的旧软件发送消息时,它工作得很好。所以我的代码有问题。我通过我的程序发送
010D0201SPAIN
003C630
,这应该会显示单词SPAIN(如数据协议所述),但它没有发生。您没有尝试实现该协议。不可能猜出问题可能是什么,你需要问一个具体的问题。@HansPassant在文本框中,我输入
010D0201SPAIN
003C630
,计分板没有按照协议中的说明做,这是显而易见的,但协议中说你不需要这样做。阅读有关指示消息开始和结束的信息。使用Read and Write而不是Read/WriteLine()。@Jack B-使用“msg.Count”行吗?那会更整洁。