手順3値の読み書き

<< Click to Display Table of Contents >>

マニュアル > サーバ作成ガイド > インターフェース編 > OPCインターフェース > VisualBasic.NETからのOPC接続 >

手順3値の読み書き

手順3 値の読み書きを行う

読み出し

 
OPCサーバから値を読み出す場合、複数の方法が用意されています。

 

方式

メソッド/プロパティ

説明

同期読み出し

SyncRead

グループ内アイテムのデータ値、品質フラグ、タイムスタンプを同期読み出しします。

非同期読み出し

AsyncRead

内アイテムのデータ値、品質フラグ、タイムスタンプを非同期読み出しします。結果はAsyncReadCompleteイベント経由で返されます。

変化通知

Subscription

データに変化があった場合、OPCサーバよりOPCクライアントに値通知が行われます。結果はDatachangeイペント経由で返されます。

 

サンプルでは、接続時にコンボボックスでどの方式かを選択します。

同期読み出し、非同期読み出しはタイマー処理で一定周期の間隔で値読み出しを行うようになっています。

 

c_interface_0208

 

 

■同期読み出し

 

同期読み出しは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を定義して受け取ってください。

 

 

hint

配列を使用する事で、1つのタグで大量のデータをブロックとして扱うことができます。例えば、1万ワードのデータを授受する場合、1万点のタグを個別に作成するのではなく、配列タグを1つ用意して通信を行う事で負荷を下げる事ができます。配列タグの値を読み書きする場合には、配列形式の変数を使用して値をやり取りする必要があります。ただし、OPCプログラミングでは複数のアイテムをやり取りするために、引数の形式として配列形式の変数が使用されています。その為、ここで更に配列タグを使用する場合には、二次元配列の変数を扱う必要があります。例えば、「SyncRead」メソッドの使用例の場合、「mvoV(1)」と記述してアイテムの値を参照していましたが、配列タグの場合には、「mvoV(1)(1)」のように記述する事で、配列タグの要素の各デバイス値を参照する事ができます。VB.NETでの配列の使用方法については、VB.NETのヘルプを参照してください。