<< 前へ        次へ >>

ID : 16963

プロバイダイベントの受取り

プロバイダイベントとは

プロバイダイベントとは、プロバイダにおいて、メインのタスクと非同期で行っている処理がある場合、任意のタイミングで処理結果や状態を、メインのタスクに通知するメカニズムのことです。

PacScriptでは、専用のステートメントを使って、このプロバイダイベントを任意のタイミングで受取れるようにしています。

プロバイダイベントの受取り準備

プロバイダイベントを受取れるようにするには、AddHandlerステートメントで、受取るイベント名と受取り先のメソッドを登録します。

プロバイダイベントの受取り待ち

イベントの受取り先を登録したら、メインのタスクでは、必要なイベントを受取り終えるまで、次のような待ちのループを作成して待機させます。

Do
Delay 10
If 終了条件 Then Exit Do
Loop

プロバイダイベントの受取り処理

プロバイダがイベントを発行したら、AddHanlderで登録したメソッドが自動で呼ばれます。このメソッドに渡される引数を使用して必要な処理を実行します。

Sub OnMessage (ByVal Sender As Object, ByVal Args As Variant)

メソッドの各引数は次の通りです。

Sender
イベントを発行したオブジェクトへの参照が代入されます。
Args
イベントを発行した時のパラメータが代入されます。
Argsの値はイベントを発行したオブジェクトに依存しますので、お使いのプロバイダマニュアルを参照ください。

イベント受取り処理とタスクのメイン処理

タスク内のメイン処理(OnMessage以外の処理)では、行が切り替わるタイミングで、イベントの確認が行われます。イベントがあれば、イベント受取りメソッド(OnMessage)がコールされます。そして、イベント受取りメソッドでの処理が終了すると、メイン処理の次の行が実行されます。
メイン処理とイベント受取メソッドを並列実行させたい場合は、それぞれの処理を別々のタスクに分けて実行してください。

プロバイダイベントの受取り終了

プロバイダからのイベントの受取りが不要になった時点で、次のようにRemoveHandlerステートメントを呼び出して、終了処理を行います。

RemoveHandler オブジェクト

オブジェクトは、AddHandlerで登録したオブジェクトと同じものを指定します。

プロバイダイベントの受取りサンプル

RC9プロバイダを使用し、RC9 コントローラのエラー通知や状態通知を受け取る処理は、 次のようになります。
このサンプルでは、3つのイベントを受信すると完了する処理として、実装されています。

Dim g_Counter As Integer = 0 '受取り個数

Sub Main()
    Dim ctrl As Object

    ctrl = Cao.AddController("RC9", "CaoProv.DENSO.RC9", "", "Server=192.168.0.1")
    g_Counter = 0

'受取りイベント名と先の指定
    AddHandler ctrl, "OnMessage", OnMessage

'イベントの受信待ちループ
    Do
        Delay 100
        If g_Counter >= 3 Then Exit Do
    Loop 

 '受取りの解除
    RemoveHandler ctrl

End Sub

'Event Handler for OnMessage
Sub OnMessage(ByVal Sender As Object, ByVal Args As Variant)
    Dim msg as object

    msg = Args(0) '::= CaoMessage object
    PrintDbg "" & Time & " - [EventNo = " & msg.Number & ", Value = 0x" & Hex(msg.Value) & "]"
    g_Counter = g_Counter + 1

End Sub

ID : 16963

<< 前へ        次へ >>