|
分類:[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);
}
}
}
}
|