记分板数据传输串行端口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”行吗?那会更整洁。