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

时间:2018-11-20 11:10:10

标签: c#

有一些过时的软件可以用来控制我本地田径比赛的记分牌,我的任务是创建一个新的高级游戏。但是,我似乎无法让计分板完成我要求做的事情。

我已经在笔记本电脑上安装了原始软件,并且可以正常工作,但是,当我运行通过串行端口将数据发送到主板的测试软件时,它并没有满足我的要求。

我拥有制造商提供的“记分板数据协议”,并且一直遵循这一原则。我将向我一直在使用的测试程序中提供代码,以查看是否可以正常运行,并且还将提供数据协议。

在文本框中,键入010D0201SPAIN003C630并将其发送到面板,这是行不通的。

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);
        }
    }
}

Scoreboard Data Protocol

代码:https://hastebin.com/epirobuduv.cs

1 个答案:

答案 0 :(得分:0)

这是在消息周围以字节数组添加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);
    }