RFID 运动





2.00/5 (4投票s)
BizTalk RFID 组件,用于检测标签的定向移动。
引言
本文演示了一个示例 BizTalk RFID 组件,用于检测 RFID 标签的移动方向。
背景
在为库存管理和资产跟踪等应用程序开发 RFID 解决方案时,最常见的需求之一是找到标签的移动方向。我最初使用 BizTalk RFID 框架为我的一个简单演示开发了一个简单的组件。该组件使用简单的内存结构来跟踪标签移动。
然后,我开始收到来自现场的询问,要求提供一个开箱即用的组件来执行此操作。我个人认为,一个开箱即用的组件并不适合所有商业需求。但是,演示如何实现类似的功能会很有趣。因此,这个新的通用且几乎“开箱即用”的解决方案可以检测标签移动的方向性。
使用代码
该组件包含以下部分
- 可以添加到 RFID 流程的 EventHandler DLL
- 用于创建必要数据库结构的 SQL 脚本
- 用于创建测试流程并将其导入 RFID 管理器的流程 XML
- 用于模拟
TagReadEvents
和TagListEvents
以测试组件的测试脚本 - 示例标签 XML 文件
- 组件的源代码
标签运动状态使用以下枚举值维护
public enum TAG_STATUS
{
Error = 0,
MovedIn,
MovedOut,
MovingIn,
MovingOut
}
public enum MOTION_STATUS
{
Normal = 0,
DirectionReversed,
LocationSkipped,
NotMoving
}
标签状态会告诉您标签的定向移动情况。标签正在移出、标签已移出等。运动状态就像一种特殊状态,它会告诉您一些特殊的运动情况,例如未移动或方向反转。
你们中的一些人可能认为枚举结构必须互换。运动状态应该是标签状态,标签状态必须是运动状态。给我打电话,我会解释(anideswandikar@hotmail.com)。
接下来是 EventHandler 参数。两个重要的参数是 Motion Sequence(运动序列)和 Motion Timeout(运动超时)。Motion Sequence 是一个以分号分隔的 DeviceName/SourceName 结构字符串。DeviceName/SourceName 的组合定义了可以检测到标签的唯一位置,因此,每个组合都必须在字符串中是唯一的。位置序列由位置键的位置定义。例如,Device1/Source1;Device1/Source2;Device2/Source1 将转换为
位置键 | 位置序列号 (Loc#) |
Device1/Source1 | 0 |
Device1/Source2 | 1 |
Device2/Source1 | 2 |
因此,从 Loc#0 移动到 Loc#1 的标签将被标记为“正在移出”,从 Loc#1 移动到 Loc#2 的标签将被标记为“已移出”,从 Loc#2 移动到 Loc#1 的标签将被标记为“正在移入”。如果标签从 Loc#0 跳转到 Loc#2,则它将被标记为“已移出”和“位置已跳过”,等等。
Motion Timeout 参数,如果设置为 > 0,则表示如果某个标签在特定位置持续检测到的时间超过此参数中指定的超时分钟数,则该标签将被标记为“未移动”。
标签和运动状态存储在名为“TagMotion”的数据库表中。创建此表以及其他查找表的脚本与代码一起在 SQL 文件夹下提供。目前,查找表模拟 EventHandler 代码中枚举的硬编码值。如果有足够的动力,我将编写一个版本,其中可以使用数据库表配置这些枚举。
要测试组件,请运行 EventHandlerSampleSetup.cmd 以设置 RFIDMotionTest 流程。确保在 RFID 管理器中创建并启动了 RFIDMotionTest 流程。然后运行 EventHandlerSampleTagListEvents.cmd 或 EventHandlerSampleTagReadEvents.cmd,具体取决于您要测试的事件。打开 SQL Server Management Studio,选择在其中创建 TagMotion 和其他表的数据库,然后执行以下查询
SELECT <dbname>..tagmotion.Id,<dbname>..tagmotion.TagID,
<dbname>..tagmotion.LastLocDevice,
<dbname>..tagmotion.LastLocSource,
<dbname>..tagmotion.RecordTime,
<dbname>..tagstatusmaster.StatusDescription,
<dbname>..motionstatusmaster.StatusDescription
FROM <dbname>..tagmotion, <dbname>..motionstatusmaster, <dbname>..tagstatusmaster
where
<dbname>..tagstatusmaster.StatusCode = <dbname>..tagmotion.TagStatus and
<dbname>..motionstatusmaster.StatusCode = <dbname>..tagmotion.MotionStatus
您将看到结果显示了检测到的每个标签的标签状态和运动状态。RFIDMotionTest 应用程序已附加到逻辑设备。如果您有物理设备,则将逻辑设备绑定到物理设备以跟踪真实标签。