C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


■96596 / )  SerialPort 受信できない
□投稿者/ tkit (1回)-(2020/12/23(Wed) 16:55:30)

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


返信 編集キー/


管理者用

- Child Tree -