どうも、もももです。
今回はVB.NETでKEYENCE社PLCと上位リンク通信で通信を行う方法について紹介します。
上位リンク通信 読み書きコマンド
上位リンク通信のコマンドについては下記で紹介しているので参照下さい。
構成イメージ
PCとPLCをEthernetケーブルで接続します。
サンプルプログラム
Imports System.Net.Sockets Imports System.Text Public Class Form1 Dim _socket As Socket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim ipAddress As String = "192.168.0.10" Dim portNo As Integer = 8501 _socket.Connect(ipAddress, portNo) End Sub Private Sub Form1_FormClosed(sender As Object, e As FormClosedEventArgs) Handles MyBase.FormClosed _socket.Close() End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click '送信メッセージ作成 Dim sendMessage = "RD R000" + vbCr 'メッセージ送信&受信 Dim byteReciveMessage = SendAndRecieve(sendMessage) Me.TextBox1.Text = Encoding.ASCII.GetString(byteReciveMessage, 0, 1) End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click '送信メッセージ作成 Dim sendMessage = "" If Me.RadioButton1.Checked Then sendMessage = "WR R000 1" + vbCr Else sendMessage = "WR R000 0" + vbCr End If 'メッセージ送信&受信 Dim byteReciveMessage = SendAndRecieve(sendMessage) End Sub Private Function SendAndRecieve(sendMessage As String) As Byte() '送信メッセージを変換 String⇒Byte Dim byteSendMessage As Byte() = Encoding.ASCII.GetBytes(sendMessage) 'メッセージ送信 _socket.Send(byteSendMessage, byteSendMessage.GetLength(0), SocketFlags.None) '応答メッセージを受信 Dim byteReciveMessage As Byte() Dim reciveSize As Integer = 0 Do byteReciveMessage = New Byte(_socket.Available - 1) {} reciveSize = _socket.Receive(byteReciveMessage, byteReciveMessage.GetLength(0), SocketFlags.None) Loop While reciveSize = 0 Return byteReciveMessage End Function End Class
コード解説
上記は「Bit読み取り」ボタンを押下すると、「R000」の内容を「Bit読み取り」 テキストに表示(ON=1/OFF=0)し、「Bit書き込み」ボタンを押下するとラジオボタンの状態に応じて 「R000」 をON/OFFするサンプルプログラムです
・フォーム ロードイベント(9~14行)
画面起動時にソケット通信を確立します。
KV STUDIOでPLCのIPアドレスと上位リンクのポート番号を確認し、設定して下さい。
下記ではIPアドレスやポート番号の確認方法を紹介しています。
・フォーム クローズドイベント(16~18行)
画面終了時にソケット通信をクローズします。
・Bit読み取りボタン クリックイベント(20~30行)
Bit読み取りの要求メッセージ(R000)をString配列で作成⇒送信し、応答メッセージの内容をテキストボックスに反映します。(ONの場合は1、OFFの場合は0)
応答メッセージ(Byte配列)の内容は
- ONの場合:[49, 13, 10]
- OFFの場合:[48, 13, 10]
後ろ2つの要素は改行コードなので1つ目の要素のみ文字列に変換しています。
・Bit書き込みボタン クリックイベント(32~45行)
Bit書き込みの要求メッセージをString配列で作成⇒送信しています。
・メッセージの送受信処理(47~64行)
引数のString配列をByte配列(ASCIIコード)に変換して要求メッセージとして送信し、応答メッセージを戻り値として返します。
上位リンクはASCIIコード交信のため、String配列からByte配列の変換はASCIIコード変換で行います。
また、ソケット通信の詳細については下記でも紹介しています。
まとめ
VB.NETでKEYENCE社PLCと上位リンク通信で通信を行う方法についてまとめました。
三菱PLCのMCプロトコル通信に比べて操作コマンドが簡単に編集できます。
コメント