| 分類:[C#]
初めて、C#にて、計測器とRS232C接続し、計測値を取得するアプリを作成中です。 計測器に送信コマンドを送ると既定の動作をするのですが、 [*IDN?]コマンドでIDを受信するのですが、受信できません。 TeraTermでは、送受信可能でしたので、コードの問題です。 C#にて受信できないまま終了後、TeraTerm接続で受信内容が表示されます。 ですので、送信は問題ないのですが、受信ができない状況です。 SerialPort設定は、C#、TeraTerm共通です。
解決するため、お力をお貸しください。
環境 Win10 64bit VisualStudio2019 .NETFramework,Version=v4.7.2 接続:PC-USB_COM変換-インターリンクケーブル-Agilent_34401A
コード
using System; using System.Text;
namespace ConsoleApp1 { class Program { static void Main(string[] args) { Component1 COM = new Component1(); COM.Open(); COM.Send(); Console.WriteLine("WAIT"); Console.ReadKey(); //COM.Receive(); COM.Close(); } } }
using System; using System.ComponentModel; using System.IO.Ports; using System.Text;
namespace ConsoleApp1 { public partial class Component1 : Component {
public Component1() { InitializeComponent(); serialPort1.PortName = "COM6"; serialPort1.BaudRate = 9600; serialPort1.DataBits = 8; serialPort1.Parity = Parity.None; serialPort1.StopBits = StopBits.One; serialPort1.ReadTimeout = 2000; serialPort1.NewLine = "\n"; }
public Component1(IContainer container) { container.Add(this);
InitializeComponent(); }
public void Open() { if (serialPort1.IsOpen) { serialPort1.Close(); Console.WriteLine("既に開いています。"); return; } serialPort1.Open(); Console.WriteLine("OPEN"); }
public void Send() { try { serialPort1.Write("*IDN?" +"\n"); Console.WriteLine("Send"); } catch (Exception ex) { Console.WriteLine(ex.Message); } }
public void Receive() { try { string rec = serialPort1.ReadLine(); Console.WriteLine(rec); } catch (Exception ex) { Console.WriteLine(ex.Message); } }
public void Close() { serialPort1.DiscardOutBuffer(); serialPort1.Close(); Console.WriteLine("CLOSE"); }
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { try { string rec = serialPort1.ReadExisting(); Console.WriteLine(rec); } catch (Exception ex) { Console.WriteLine(ex.Message); } } } }
|