NonSoft

COMポート(シリアル)での送受信
サンプル(C#/VB.NET)


 サンプル(ソース/コード)
<このサンプルの概要>
COMポート(RS232C/シリアル)を使用して電文の送受信をするC#/VB.NETのサンプルソースです。

COMポート(RS232C/シリアル)のオープン手順は以下の通りです。
1.シリアルポート指定
2.シリアルポートの通信速度指定
3.シリアルポートのパリティ指定
4.シリアルポートのビット数指定
5.シリアルポートのストップビット指定
6.シリアルポートのオープン

COMポート(RS232C/シリアル)の送信手順は以下の通りです。
1.送信電文作成
2.COMポートにデータ送信

COMポート(RS232C/シリアル)の受信手順は以下の通りです。
1.COMポートの受信待ち
2.COMポートからデータ受信

ちなみにCOMポートのCTSやDSRを確認したい時は以下のようにします。
If SerialPort1.CtsHolding = True Then 'CTSがON
If SerialPort1.DsrHolding = True Then 'DSRがON

また、COMポートのDTRやRTSを設定したい時は以下のようにします。
SerialPort1.DtrEnable = True 'DTRをON
SerialPort1.RtsEnable = True 'RSTをON

RS232C関係のその他のサンプルソースやツールはこちらです。
このサンプルの通信テストでもこちらのツールを使用しました。
通信サンプルやツール(RS232C TCP/IP UDP/IP)

' VB.NETのサンプル
' SerialPortコントロールをフォームに貼り付けています
Public Class Form1
    Private Sub Form1_Load( _
        ByVal sender As System.Object, _
        ByVal e As System.EventArgs) _
        Handles MyBase.Load
        ' シリアルポートのオープン
        SerialPort1.PortName = "COM11"
        ' シリアルポートの通信速度指定
        SerialPort1.BaudRate = 9600
        ' シリアルポートのパリティ指定
        SerialPort1.Parity = IO.Ports.Parity.None
        ' シリアルポートのビット数指定
        SerialPort1.DataBits = 8
        ' シリアルポートのストップビット指定
        SerialPort1.StopBits = IO.Ports.StopBits.One
        ' シリアルポートのオープン
        SerialPort1.Open()
    End Sub

    Private Sub Form1_FormClosed( _
        ByVal sender As Object, _
        ByVal e As System.Windows.Forms.FormClosedEventArgs) _
        Handles Me.FormClosed
        ' シリアルポートのクローズ
        SerialPort1.Close()
    End Sub

    Private Sub Button1_Click( _
        ByVal sender As System.Object, _
        ByVal e As System.EventArgs) _
        Handles Button1.Click
        ' シリアルポートにデータ送信
        Dim dat As Byte() = _
            System.Text.Encoding.GetEncoding("SHIFT-JIS").GetBytes("abcあいう")
        SerialPort1.Write(dat, 0, dat.GetLength(0))
    End Sub

    Private Sub SerialPort1_DataReceived( _
        ByVal sender As System.Object, _
        ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) _
        Handles SerialPort1.DataReceived
        ' シリアルポートからデータ受信
        Dim dat As Byte() = New Byte(SerialPort1.BytesToRead - 1) {}
        SerialPort1.Read(dat, 0, dat.GetLength(0))
        MessageBox.Show( _
            System.Text.Encoding.GetEncoding("SHIFT-JIS").GetString(dat))
    End Sub
End Class

// C#.NETのサンプル
// SerialPortコントロールをフォームに貼り付けています
public partial class Form1 : Form
{
    private void Form1_Load(
        object sender, EventArgs e)
    {
        // シリアルポートのオープン
        serialPort1.PortName = "COM11";
        // シリアルポートの通信速度指定
        serialPort1.BaudRate = 9600;
        // シリアルポートのパリティ指定
        serialPort1.Parity = System.IO.Ports.Parity.None;
        // シリアルポートのビット数指定
        serialPort1.DataBits = 8;
        // シリアルポートのストップビット指定
        serialPort1.StopBits = System.IO.Ports.StopBits.One;
        // シリアルポートのオープン
        serialPort1.Open();
    }

    private void Form1_FormClosed(
        object sender, FormClosedEventArgs e)
    {
        // シリアルポートのクローズ
        serialPort1.Close();
    }

    private void button1_Click(
        object sender, EventArgs e)
    {
        // シリアルポートにデータ送信
        Byte[] dat =
            System.Text.Encoding.GetEncoding("SHIFT-JIS").GetBytes("abcあいう");
        serialPort1.Write(dat, 0, dat.GetLength(0));
    }

    private void serialPort1_DataReceived(
        object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
    {
        // シリアルポートからデータ受信
        Byte[] dat = new Byte[serialPort1.BytesToRead];
        serialPort1.Read(dat, 0, dat.GetLength(0));
        MessageBox.Show(
            System.Text.Encoding.GetEncoding("SHIFT-JIS").GetString(dat));
    }
}