0
我正在嘗試編寫一個與控制器通信的程序。當連接成功建立時,控制器應發送「歡迎」消息,事實上,當我使用通信軟件進行連接時,控制器會發出「歡迎」消息。但是,使用下面的.NET代碼,我從來沒有看到歡迎消息。除此之外,它的作品。我如何捕獲此消息。這似乎是在連接建立的那一刻發送的。在C中連接時捕獲串行歡迎消息#
再次,我可以在連接後與控制器進行良好的通信,但我似乎無法獲得連接打開時發送的歡迎消息。
using System;
using System.IO.Ports;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public delegate void AddDataDelegate(String myString);
public AddDataDelegate myDelegate;
SerialPort sp;
public Form1()
{
InitializeComponent();
}
public void AddDataMethod(String myString)
{
richTextBox1.AppendText(myString);
richTextBox1.SelectionStart = richTextBox1.Text.Length;
richTextBox1.ScrollToCaret();
}
private void button1_Click(object sender, EventArgs e)
{
try
{
sp = new SerialPort(comboBox1.SelectedItem.ToString(),Int32.Parse(comboBox2.SelectedItem.ToString()));
sp.DataReceived += SerialPort_OnDataReceived;
sp.Close();
sp.Open();
richTextBox1.AppendText("open\n");
button2.Enabled = true;
button3.Enabled = true;
}
catch (Exception ex)
{
richTextBox1.AppendText(ex.Message);
}
}
void SerialPort_OnDataReceived(object sender,SerialDataReceivedEventArgs args)
{
SerialPort sp = sender as SerialPort;
string s = sp.ReadExisting();
richTextBox1.Invoke(this.myDelegate, new Object[] { s });
}
private void button2_Click(object sender, EventArgs e)
{
sp.WriteLine(textBox1.Text);
textBox1.Text = "";
}
private void button3_Click(object sender, EventArgs e)
{
sp.DiscardOutBuffer();
sp.DiscardInBuffer();
sp.Close();
richTextBox1.AppendText("\nclosed\n");
}
private void Form1_Load_1(object sender, EventArgs e)
{
this.myDelegate = new AddDataDelegate(AddDataMethod);
string[] Ports = SerialPort.GetPortNames();
comboBox2.SelectedIndex = comboBox2.Items.Count - 1;
Array.Sort(Ports, (a, b) => string.Compare(a.Substring(3).PadLeft(3, '0'), b.Substring(3).PadLeft(3, '0')));
foreach (string port in Ports)
{
comboBox1.Items.Add(port);
}
comboBox1.SelectedIndex = 0;
}
}
}
「DataRecevied」中的斷點是否曾經命中?您設置的'SerialPort'配置屬性太少,請檢查波特率,位大小,握手等。也許您的控制器沒有收到任何內容。 – Sinatr
串行端口位於OSI網絡層模型的最底部。他們不知道有關「連接」的豆子,它需要TCP使用的協議類型。一般來說,你必須用* something *來讓控制器變得癢癢,這往往和發送單個「\ r」或「\ n」一樣簡單。在上電後看到您的RTS或DTR握手信號打開的可能性很大。檢查手冊或使用電話。或者你根本就沒有收到任何東西,當你忽略Handshake屬性時可能會有結果。 –
Sinatr,我可以在連接時與控制器通信。我可以發送命令給它(通過textBox1)並且可以毫無困難地接收響應。唯一的問題是我無法獲得最初的歡迎消息。該消息基本上包含我想要捕獲的控制器的版本號。 '串行'的其他參數很好。實際上這是一個USB設備。 –