<< Click to Display Table of Contents >> マニュアル > サーバ作成ガイド > インターフェース編 > OPCインターフェース > VisualBasic.NETからのOPC接続 > 手順3値の読み書き |
手順3 値の読み書きを行う
読み出し
OPCサーバから値を読み出す場合、複数の方法が用意されています。
方式 |
メソッド/プロパティ |
説明 |
同期読み出し |
SyncRead |
グループ内アイテムのデータ値、品質フラグ、タイムスタンプを同期読み出しします。 |
非同期読み出し |
AsyncRead |
内アイテムのデータ値、品質フラグ、タイムスタンプを非同期読み出しします。結果はAsyncReadCompleteイベント経由で返されます。 |
変化通知 |
Subscription |
データに変化があった場合、OPCサーバよりOPCクライアントに値通知が行われます。結果はDatachangeイペント経由で返されます。 |
サンプルでは、接続時にコンボボックスでどの方式かを選択します。
同期読み出し、非同期読み出しはタイマー処理で一定周期の間隔で値読み出しを行うようになっています。
■同期読み出し
同期読み出しはOPCグループオブジェクトに対して、SyncReadメソッドを発行することで行います。
Private Sub timSyncRead_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles timSyncRead.Tick Try Dim Errors As Array = Nothing Dim ItemValues As Array = Nothing Dim Qualities As Array = Nothing Dim TimeStamps As Array = Nothing mvGroup.SyncRead(OPCAutomation.OPCDataSource.OPCDevice, mcItemCount, mvSHandles, ItemValues, Errors, Qualities, TimeStamps) SbDrawData(mcItemCount, mvCHandles, ItemValues, Qualities, TimeStamps)
■非同期読み出し
非同期読み出しはOPCグループオブジェクトに対して、AsyncReadメソッドを発行することで行います。
Private Sub timAsyncRead_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles timAsyncRead.Tick Try Dim Errors As Array = Nothing mvReadTxId = mvReadTxId + 1 mvGroup.AsyncRead(mcItemCount, mvSHandles, Errors, mvReadTxId, mvReadCancelId)
結果は、AsyncReadCompleteイベントで受け取ります。
Private Sub Group_AsyncReadComplete(ByVal TransactionID As Integer, ByVal NumItems As Integer, ByRef ClientHandles As Array, ByRef ItemValues As Array, ByRef Qualities As Array, ByRef TimeStamps As Array, ByRef vErrors As Array) Handles mvGroup.AsyncReadComplete SbDrawData(NumItems, ClientHandles, ItemValues, Qualities, TimeStamps)
■変化通知
OPCグループオブジェクトのIsActiveプロパティをTrueにすると、グループがアクティブ状態になります。
Select Case CmbType.SelectedIndex Case 0 'SyncRead timSyncRead.Enabled = True Case 1 'AsyncRead timAsyncRead.Enabled = True Case 2 'Subscription mvGroup.IsActive = True End Select
UpdateRateの周期でグループ内アイテムのデータ値、または品質フラグに変化が起きると、Datachangeイベントが発生します。
Private Sub Group_DataChange(ByVal vTransactionID As Integer, ByVal NumItems As Integer, ByRef ClientHandles As Array, ByRef ItemValues As Array, ByRef Qualities As Array, ByRef TimeStamps As Array) Handles mvGroup.DataChange SbDrawData(NumItems, ClientHandles, ItemValues, Qualities, TimeStamps) End Sub
書き込み
OPCサーバに値を書き込む場合、複数の方法が用意されています。
方式 |
メソッド/プロパティ |
説明 |
同期書き込み |
SyncWrite |
グループ内サーバーハンドルで指定されたアイテムにデータを同期書込みします。 |
非同期書き込み |
AsyncWrite |
グループ内サーバーハンドルで指定されたアイテムにデータ値を非同期書込みし、同時にトランザクションIDを発行します。 書き込み結果はAsyncWriteCompleteイベント経由で返されます。 |
■同期書き込み
同期書き込みは、OPCグループオブジェクトに対して、SyncWriteメソッドを発行することで行います。
Private Sub btnSyncWrite_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSyncWrite.Click Dim vServerHandles(mcItemCount) As Integer Dim vItemValues(mcItemCount) As Object Dim vNumItems = FnGetInputData(vServerHandles, vItemValues) If vNumItems > 0 Then Dim Errors As Array = Nothing mvGroup.SyncWrite(vNumItems, vServerHandles, vItemValues, Errors) End If End Sub
■非同期書き込み
非同期書き込みは、OPCグループオブジェクトに対して、AsyncWriteメソッドを発行することで行います。
Private Sub BtnASyncWrite_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnASyncWrite.Click Dim vServerHandles(mcItemCount) As Integer Dim vItemValues(mcItemCount) As Object Dim vNumItems = FnGetInputData(vServerHandles, vItemValues) If vNumItems > 0 Then Dim Errors As Array = Nothing mvWriteTxId = mvWriteTxId + 1 mvGroup.AsyncWrite(vNumItems, vServerHandles, vItemValues, Errors, mvWriteTxId, mvWriteCancelId) End If End Sub
書き込み結果を受け取る場合は、AsyncWriteCompleteを定義して受け取ってください。
配列を使用する事で、1つのタグで大量のデータをブロックとして扱うことができます。例えば、1万ワードのデータを授受する場合、1万点のタグを個別に作成するのではなく、配列タグを1つ用意して通信を行う事で負荷を下げる事ができます。配列タグの値を読み書きする場合には、配列形式の変数を使用して値をやり取りする必要があります。ただし、OPCプログラミングでは複数のアイテムをやり取りするために、引数の形式として配列形式の変数が使用されています。その為、ここで更に配列タグを使用する場合には、二次元配列の変数を扱う必要があります。例えば、「SyncRead」メソッドの使用例の場合、「mvoV(1)」と記述してアイテムの値を参照していましたが、配列タグの場合には、「mvoV(1)(1)」のように記述する事で、配列タグの要素の各デバイス値を参照する事ができます。VB.NETでの配列の使用方法については、VB.NETのヘルプを参照してください。 |