<< Click to Display Table of Contents >> マニュアル > サーバ作成ガイド > インターフェース編 > OPCインターフェース > VisualBasic.NETからのOPC接続 |
概要
VisualBasic.Netによって開発した独自のOPCクライアントアプリケーションから、Panel ServerのOPCインターフェースに対して、OPC接続するための設定例及び、アプリケーションの開発例を紹介します。
ここで紹介する手順としては、大きく分けて以下の3ステップです。尚、OPCサーバとしての接続方法は事前に行って下さい。
タグ登録設定を行います。 |
|
VB.NETからOPC接続などをする上で必要な定義を行います。 |
|
VB.NETから任意のタイミングでアイテム値の読み書きを行えるようにします。 |
この機能のサンプルは、以下からご利用頂けます。
なお、サンプル及び詳細の説明は、VB.Net2010で行います。
Panel Serverを起動して以下の手順に従ってタグの設定を行って下さい。ここでは、PLCの代わりに仮想デバイスを使用します。もし、PLCが手元にあれば、PLCのタグを設定しても構いません。
1.ユニットの追加
画面左側のツリーから「Driver」を右クリックしてメニューを表示し、「ユニット追加」を選択してください。
選択ダイアログが表示されるので、「メモリ」の「仮想通信」「仮想デバイス」を選択して、「OK」を押してください。
2.フォルダ追加
「U01」を右クリックしてメニューを表示し、「フォルダ追加」を選択します。
3.タグ追加
「F01」を右クリックしてメニューを表示し、「タグ追加」を選択します。 「T01」というタグが追加されます。
4.タグのプロパティ設定
リストから「T01」を右クリックしてメニューを表示し、「プロパティ」を選択します。
「アドレス設定」タブから「04 - D データレジスタ」を選択し、「OK」を押してください。以下は例として、D0000(ワードレジスタ)を数値タグとして設定しています。
5.ここまでの作業で設定ファイルを保存し、アプリケーションをオンラインにしてください。
VB.NET側の基本的な作成内容について説明します。概要のみの説明となっているため、詳細はサンプルと見比べながら確認してください。
サンプルでは、OPCに関する処理をCommonクラス(Common.vb)に定義しています。一通りの接続から値の読み書きの処理コードを含めております。これからの作成方法では、そのCommonクラスを利用する形での構築方法を記載しています。 |
本項目で利用する「OpcRcw.Comm」と「OPCRcw.Da」の参照ライブラリは、Panel Serverをインストールすることで、VB.NETなどで参照できるようになります。 |
1.参照設定を行う
OpcRcw.ComnとOPCRcw.Daの参照を追加ボタンから行ってください。
2.コード内でOpcRcwのインポートを行う
Imports OpcRcw.Da
3.Commonクラスの定義を行う
Dim WithEvents EvCSvr As Common
'Setting Class If EvCSvr Is Nothing Then EvCSvr = New Common End If
4.自動的に値を更新するかどうかの設定を行う
「mvCheckState」にTrueを設定した場合、自動更新が有効になります。
サンプルでは画面上でチェックが入っている場合、自動更新を行うようにしています。
自動更新の必要がなければこの処理は必要ありません。
'Auto Update Mode Setting If chcAuto.CheckState = 1 Then EvCSvr.mvCheckState = True Else EvCSvr.mvCheckState = False End If
5.OPCサーバーへのコネクション処理を定義する
コネクションは、「FnConnect」で行います。コネクションの成功とともにAddItemを行い、アイテムの登録を行います。
サンプルではConnectボタン押下で接続を行います。
なお、ProgIDなどが設定されていない場合は処理を行わないなど、エラーチェックも行っています。
'------------------------------------------ ' OPC Connect '------------------------------------------ Private Sub btnConnect_Click(sender As System.Object, e As System.EventArgs) Handles btnConnect.Click 'Configuration Check If cmbProgID.Text = "" Then MessageBox.Show("ProgID is not set correctly", "Exclamation", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) cmbProgID.Focus() Exit Sub End If If txtUpdateRate.Text = "" Then MessageBox.Show("UpdateRate is not set correctly", "Exclamation", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) txtUpdateRate.Focus() Exit Sub End If If Not IsNumeric(txtUpdateRate.Text) Then MessageBox.Show("UpdateRate set a numerical value", "Exclamation", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) txtUpdateRate.Focus() Exit Sub End If 'Auto Update Mode Setting If chcAuto.CheckState = 1 Then EvCSvr.mvCheckState = True Else EvCSvr.mvCheckState = False End If 'Connect If EvCSvr.FnConnect(cmbProgID.Text, txtServerName.Text, (txtUpdateRate.Text)) = True Then For i = 0 To mcItemCount - 1 mvcH(i) = i Next If EvCSvr.FnAddItem(mvItemName, mvcH, mvsH) = False Then MessageBox.Show("Failed to AddItems!!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) EvCSvr.FnDisConnect() Exit Sub End If mvConnectFlg = True 'Change Enabled Call SbChangeEnabled(False, True) For i = 0 To mcItemCount - 1 txtValue(i).Enabled = True Next Else MessageBox.Show("Failed to Connect!!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) EvCSvr.FnDisConnect() Exit Sub End If End Sub
6.OPCサーバーへのディスコネクション処理を定義する
ディスコネクションは「FnDisConnect」で行います。
'------------------------------------------ ' OPC DisConnect '------------------------------------------ Private Sub btnDisConnect_Click(sender As System.Object, e As System.EventArgs) Handles btnDisConnect.Click If EvCSvr.FnDisConnect() = False Then MessageBox.Show("Failed to DisConnect!!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) Exit Sub End If mvConnectFlg = False 'Change Enabled Call SbChangeEnabled(True, False) For i = 0 To mcItemCount - 1 txtValue(i).Enabled = False txtValue(i).Text = "" Next End Sub
7.自動更新有りの時の設定を行う
「DataChange」イベントの定義を行います。
「mvCheckState」がTrueである場合、DataChangeイベントがUpdateRateの周期で発生します。
自動更新の必要がなければこの処理は必要ありません。
サンプルではエディットボックスに取得したタグの値を設定します。
'------------------------------------------ ' Event - DataChange '------------------------------------------ Private Sub EvCSvr_DataChange(vwTransID As Integer, _ vItemCount As Integer, _ vClientHds() As Integer, _ vValues() As Object, _ vftTimeStamps() As OpcRcw.Da.FILETIME, _ vwQualities() As Short, _ vpErrors() As Integer) Handles EvCSvr.DataChange Dim i As Integer = 0 Dim j As Integer = 0 For i = 0 To vItemCount - 1 For j = 0 To mcItemCount - 1 If mvcH(j) = vClientHds(i) Then If vpErrors(i) = 0 Then mvoV(j) = vValues(i) End If Exit For End If Next Next For i = 0 To mcItemCount - 1 mvTarget = i txtValue(mvTarget).Invoke(New D_UpdTextBox(AddressOf SbUpdTextBox), CStr(mvoV(mvTarget))) Next End Sub
任意のタイミングでアイテム値の読み書きを行う方法を紹介します。概要のみの説明となっているため、詳細はサンプルと見比べながら確認してください。
読み込み
任意のタイミングでアイテム値の読み込みを行います。特に自動更新を無効にしており、必要なタイミングのみ値が取得したい場合などに活用します。読み込みは「FnSyncRead」で行います。
サンプルではReadボタン押下で値の読み込みが行われます。
'------------------------------------------ ' OPC Read '------------------------------------------ Private Sub btnRead_Click(sender As System.Object, e As System.EventArgs) Handles btnRead.Click Dim i As Integer If EvCSvr.FnSyncRead(OPCDATASOURCE.OPC_DS_DEVICE, mvsH, mvoV, mvdT, mvwQty) = False Then MessageBox.Show("Failed to Read!!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) Exit Sub End If For i = 0 To mcItemCount - 1 txtValue(i).Text = mvoV(i) Next End Sub
書き込み
任意のタイミングでアイテム値の書き込みを行います。読み込みは「FnSyncRead」で行います。
サンプルではWriteボタン押下で値の書き込みが行われます。
'------------------------------------------ ' OPC Write '------------------------------------------ Private Sub btnWrite_Click(sender As System.Object, e As System.EventArgs) Handles btnWrite.Click Dim i As Integer For i = 0 To mcItemCount - 1 mvoV(i) = txtValue(i).Text Next If EvCSvr.FnSyncWrite(mvsH, mvoV) = False Then MessageBox.Show("Failed to Write!!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) Exit Sub End If End Sub
配列を使用する事で、1つのタグで大量のデータをブロックとして扱うことができます。例えば、1万ワードのデータを授受する場合、1万点のタグを個別に作成するのではなく、配列タグを1つ用意して通信を行う事で負荷を下げる事ができます。
配列タグの値を読み書きする場合には、配列形式の変数を使用して値をやり取りする必要があります。ただし、OPCプログラミングでは複数のアイテムをやり取りするために、引数の形式として配列形式の変数が使用されています。 その為、ここで更に配列タグを使用する場合には、二次元配列の変数を扱う必要があります。例えば、「SyncRead」メソッドの使用例の場合、「mvoV(1)」と記述してアイテムの値を参照していましたが、配列タグの場合には、「mvoV(1)(1)」のように記述する事で、配列タグの要素の各デバイス値を参照する事ができます。VB.NETでの配列の使用方法については、VB.NETのヘルプを参照してください。 |
Commonクラス(Common.vb)に記述してあるソースコードの中で、重要となるメソッドは以下となります。
|