1

背景:

我正在使用适用于 .NET 的 Motorola EMDK v2.5 从 MC 919Z 手持式扫描仪获取 rfid 扫描数据。只要用户按下设备上的按钮,我就想继续获取 rfid 标签数据。一旦他的手指从按钮上移开,我就想停止读取 RFID 数据。

我正在使用的 eMDK 事件:

现在摩托罗拉曝光了两个事件:

  • StatusNotify :在按钮状态(按下或未按下)更改时触发的事件。
  • ReadNotify :为读取 rfid 标签而触发的事件。

问题:

这两个事件似乎是先发制人,以免被触发。如果正在读取标签,则不会触发按钮状态更改事件。如果按钮状态更改事件正在触发,则不会读取标签。

所以,问题是如何确保两个事件同时触发。

4

1 回答 1

1

您需要做一些事情(对于 VB 代码很抱歉,但转换为 C# 应该很简单):

  • 无论您是使用Actions.Inventory.Perform()还是Actions.TagAccess.OperationSequence.PerformSequence()需要TriggerInfo定义并传递给这些方法,而不是常规的无参数调用。该结构包含实际的触发事件。

    Imports Symbol
    Imports Symbol.RFID3
    Imports Symbol.RFID3.Events
    Imports Symbol.RFID3.TagAccess
    
    Private Sub DoRead()
        triggernfo = New TriggerInfo()
        triggernfo.TagReportTrigger = 1
        triggernfo.StartTrigger.Type = START_TRIGGER_TYPE.START_TRIGGER_TYPE_HANDHELD
        triggernfo.StartTrigger.Handheld.HandheldEvent = HANDHELD_TRIGGER_EVENT_TYPE.HANDHELD_TRIGGER_PRESSED
        triggernfo.StopTrigger.Type = STOP_TRIGGER_TYPE.STOP_TRIGGER_TYPE_HANDHELD_WITH_TIMEOUT
        triggernfo.StopTrigger.Handheld.HandheldEvent = HANDHELD_TRIGGER_EVENT_TYPE.HANDHELD_TRIGGER_RELEASED
        triggernfo.StopTrigger.Handheld.Timeout = 0 'Default handheld timeout value
    
    'Then you need to pass it to the Perform() OR PerformSequence() call:
        _Reader.Actions.TagAccess.OperationSequence.PerformSequence(Nothing, triggernfo, Nothing)
    'OR
        _Reader.Actions.Inventory.Perform(Nothing, triggernfo, Nothing)
    End Sub
    

重点是你现在不需要每次都调用Perform()或开始阅读,你只需定义一个连接阅读器并在其中调用触发器的过程,它只会在触发器时自动激活用来。根据您编码的方式,我认为您可以按原样使用当前的委托回调,如果使用 Read 委托(我现在在推测,因为我还没有看到您的代码)。PerformSequence()Form.LoadPerform()GetReadTags()

最后,在您的 Status 委托调用中,您现在可以将 aSymbol.RFID3.Events.STATUS_EVENT_TYPE.HANDHELD_TRIGGER_EVENT作为 EventData。如果你进一步挖掘,你会发现里面eventData.HandheldTriggerEventData.HandheldTriggerEvent可以是HANDHELD_TRIGGER_EVENT_TYPE.HANDHELD_TRIGGER_PRESSEDHANDHELD_TRIGGER_EVENT_TYPE.HANDHELD_TRIGGER_RELEASED。无需对此事件执行任何操作即可实际读取标签,这是毫无价值的,即使您在这里什么也不做,触发和读取仍然会发生。

实际上,弄乱事件(比如停止或开始读取)可能会使触发器引发错误,所以除非你有迫切的需要(就像我今天有的那样),否则请使用 TriggerInfo 对象并单独留下 Status 委托;)

于 2014-01-21T01:25:40.330 回答