【VB.NET】ソケットクラスを用いてPLCと通信

パソコン

どうも、もももです!

VB.NETでソケットクラス(System.Net.Sockets.Socket)でPLCと通信を行う方法について、サンプルプログラムをまとめます。

サンプルプログラム

''' <summary>
''' ソケット通信を行うサンプル
''' </summary>
Public Sub SocketCommunication()
    'ソケット生成
    Dim socket As New System.Net.Sockets.Socket(System.Net.Sockets.AddressFamily.InterNetwork,
                                                System.Net.Sockets.SocketType.Stream,
                                                System.Net.Sockets.ProtocolType.Tcp)

    'ソケット接続
    Dim ipAddr As String = "" '接続先のIPアドレス
    Dim portNo As Integer = 0 '接続先のポート番号
    socket.Connect(ipAddr, portNo)

    '送信メッセージ作成
    Dim byteSendMsgs As Byte() '送信Byte配列
    'case1 文字列を変換
    'Dim sendMsg As String = "" '送信文字列
    'byteSendMsgs = System.Text.Encoding.ASCII.GetBytes(sendMsg)

    'case2 文字列配列を変換
    'Dim sendMsgs As String() '送信文字列配列
    'For i = 0 To sendMsgs.Length - 1
    '    byteSendMsgs(i) = Convert.ToByte(sendMsgs(i), 16)
    'Next i

    'メッセージ送信
    socket.Send(byteSendMsgs,
                byteSendMsgs.Length,
                System.Net.Sockets.SocketFlags.None)

    'メッセージ受信
    Dim byteReciveMsgs As Byte()
    Dim intResSize As Integer = 0
    Do
        byteReciveMsgs = New Byte(socket.Available - 1) {}
        intResSize = socket.Receive(byteReciveMsgs,
                                    byteReciveMsgs.Length,
                                    System.Net.Sockets.SocketFlags.None)
    Loop While intResSize = 0

    'ソケット接続解除
    socket.Close()

End Sub

※とりあえず動けばいいや程度のプログラムなので例外処理等は省略しています。

各処理を抜粋して作成したので動作未検証です。

ソケット接続

・11~13行目

IPアドレスとポートNoを指定して接続を行います。

メッセージ送信

・16~25行目

送信メッセージを作成します。

case1:keyence製PLCとの通信時

case2:三菱、OMRON製PLCとの通信時

などに使用しています。

・28~30行目

上記で作成した送信メッセージ(Byte配列)を送信します。

メッセージ受信

・33~40行目

送信メッセージに対しての返答を受信します。

受信データサイズがReceive()メソッドの戻り値として取得できるのでデータを受信するまでループ処理を行います。

ソケット接続 解除

・43行目

ソケット接続を解除します。

活用事例

三菱 PLC MCプロトコル サンプル

KEYENCE PLC 上位リンク通信 サンプル

イーサネットリモートI/O Modbus/TCP サンプル

まとめ

VB.NETでソケットクラス(System.Net.Sockets.Socket)で送受信を行う方法について、サンプルプログラムを紹介しました。

コメント

タイトルとURLをコピーしました