0
コントローラと通信するプログラムを作成しようとしています。コントローラは、接続が正常に確立されたときには「ようこそ」メッセージを送信し、実際には通信ソフトウェアを使用して接続したときにコントローラに通知します。しかし、以下の.NETコードを使用すると、ウェルカムメッセージは表示されません。それを超えて、それは動作します。どのように私はこのメッセージをキャプチャすることができます。それは接続が確立された瞬間に送信されるようです。接続時にシリアルウェルカムメッセージをキャプチャする#
また、私は接続後にコントローラと正常に通信することができますが、接続が開かれた瞬間に送信されるウェルカムメッセージが表示されないようです。
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ハンドシェーク信号がオンになるのを待っています。マニュアルを確認するか、電話を使用してください。あるいは、何も受け取っていないだけであれば、ハンドシェイクプロパティを無視したときの結果になります。 –
Sinatr、私は接続時にコントローラと通信することができます。私はそれにコマンドを送ることができます(textBox1経由)とヒッチをせずに応答を受信します。唯一の問題は、私が最初の歓迎メッセージを得ることができないということです。このメッセージには、基本的にキャプチャしたいコントローラのバージョン番号が含まれています。 'シリアル'のその他のパラメータは問題ありません。実際には、これはUSBデバイスです。 –