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