<< 向前        

ID : 5525

插件事件的接收

插件事件的定义

插件事件是指在插件中存在与主任务非同步进行的处理时,可在任意时间将处理结果或状态向主任务通知的机械装置。

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注册的目标相同的目标。

插件事件的接收样品

使用QR代码插件,在QR代码读取器读取QR代码时,读取数据的接收处理如下所示。
在该样品中,作为读取3个代码后完成的处理进行实际安装。

Dim g_Counter As Integer = 0 '接收个数

Sub Main()
Dim ctrl As Object
ctrl = Cao.AddController( "QR", "CaoProv.DENSO.QRCode", "",
      "Conn=com:6:38400:N:8:1, Mode=5, Protocol=0:0:0" )

'指定接收事件的名称和位置
AddHandler ctrl, "OnMessage", OnMessage 
g_Counter = 0

'事件的接收等待环路
Do
Delay 10
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 & " - CODE = [" & msg.Value & "]"
g_Counter = g_Counter + 1
End Sub

ID : 5525

<< 向前