LLRPCSHARP / READER SDK PUBLIC API REFERENCE
Reader SDK API 参考文档
LlrpSdk 提供参考 Impinj Octane 设计的高层托管客户端,支持协议版本自适应、强类型不可变配置模型、独占流式标签消费以及 C1G2 标签内存完整操作。
架构与核心能力
快速符号索引 (Quick Jump)
Reader SDK 核心门面与生命周期
LlrpReader Class命名空间:
LlrpSdk · 实现: IAsyncDisposable代表与单个物理或虚拟 LLRP 读写器的托管客户端会话。管理连接生命周期、协议版本自动探查、硬件能力查询、不可变配置下发与异步标签流分发。
核心方法与签名
| 方法签名 | 说明与契约 |
|---|---|
Task ConnectAsync(CancellationToken cancellationToken = default) |
建立底层 TCP 连接,探查并协商协议版本,初始化 Capabilities。若已连接则直接返回。 |
Task<ReaderSettingsDefaults> GetDefaultSettingsAsync(CancellationToken cancellationToken = default) |
基于当前已连接设备的硬件能力表(天线数、功率表、RF 模式)生成推荐的默认配置基线。 |
Task ApplySettingsAsync(ReaderSettings settings, ResourceTakeoverPolicy takeoverPolicy = PreserveForeign, CancellationToken cancellationToken = default) |
校验并将配置意图部署到读写器(部署后保持停止状态)。默认仅替换 SDK 自有资源。 |
Task<InventorySession> StartInventoryAsync(InventorySettings? settings = null, CancellationToken cancellationToken = default) |
启动托管盘点并返回 InventorySession 会话实例。支持独占异步消费标签流。 |
Task StopAsync(CancellationToken cancellationToken = default) |
停止当前正在运行的托管盘点,保留已下发的配置定义。 |
实战代码示例 (C# Code Sample)
using LlrpSdk;
// 1. 构建并连接读写器
await using var reader = LlrpReader.CreateBuilder("192.168.1.100")
.WithPort(5084)
.WithConnectTimeout(TimeSpan.FromSeconds(5))
.Build();
await reader.ConnectAsync();
// 2. 获取基于该设备真实能力生成的默认设置并下发
ReaderSettingsDefaults defaults = await reader.GetDefaultSettingsAsync();
await reader.ApplySettingsAsync(defaults.Settings);
// 3. 启动盘点并消费标签流
await using InventorySession session = await reader.StartInventoryAsync();
await foreach (TagReport tag in session.ReadReportsAsync())
{
Console.WriteLine($"[天线 {tag.AntennaId}] EPC: {tag.EpcHex}, RSSI: {tag.PeakRssi} dBm");
}
LlrpReaderBuilder Class命名空间:
LlrpSdk提供流式链式调用以配置并创建 LlrpReader 实例。
实战代码示例 (C# Code Sample)
using LlrpSdk;
using LlrpSdk.Extensions.Impinj;
var reader = LlrpReader.CreateBuilder("192.168.1.100")
.WithPort(5084)
.WithConnectTimeout(TimeSpan.FromSeconds(10))
.UseImpinj()
.Build();
ReaderCapabilities Class命名空间:
LlrpSdk存储连接建立后从读写器查询并归一化的硬件能力(天线数、功率索引表、RF 调制模式表)。
配置管理与托管盘点流
ReaderSettings Record命名空间:
LlrpSdk不可变的读写器配置意图 Record,包含设备级心跳与 Inventory 盘点参数。
实战代码示例 (C# Code Sample)
ReaderSettings baseSettings = (await reader.GetDefaultSettingsAsync()).Settings;
ReaderSettings customSettings = baseSettings.Edit(b => b
.Inventory(inv => inv
.Antennas(1, 2)
.Mode(modeIndex: 1000)
.Session(2)
.Population(64)
.ReportEveryTag()));
await reader.ApplySettingsAsync(customSettings);
InventorySession Class命名空间:
LlrpSdk · 实现: IAsyncDisposable代表单次托管盘点会话。实现 IAsyncDisposable,在退出作用域时自动停止盘点。
TagReport Record命名空间:
LlrpSdk统一的标签报告投影,包含 EPC 十六进制字符串、天线号、RSSI、变长 PC 字与 Access 结果。
C1G2 标签操作 (Tag Access)
TagAccessRequest / TagSelection Records命名空间:
LlrpSdk标准 Gen2 内存读写锁灭请求族,支持通过 EPC/TID 掩码过滤目标标签。
实战代码示例 (C# Code Sample)
// 1. 匹配目标标签
var selection = new TagSelection
{
MemoryBank = TagMemoryBank.ElectronicProductCode,
BitPointer = 32,
BitLength = 96,
Mask = Convert.FromHexString("FFFFFFFFFFFFFFFFFFFFFFFF"),
Data = Convert.FromHexString("E28011910000000000000001")
};
// 2. 向 User 存储区 Word 0 写入 2 个字
TagAccessResult writeResult = await reader.WriteTagMemoryAsync(new WriteTagRequest
{
Selection = selection,
MemoryBank = TagMemoryBank.User,
WordPointer = 0,
WriteData = [0x1234, 0x5678],
AccessPassword = "00000000"
});
专家通道与厂商扩展
IRoSpecService / IReaderProtocolAccess Interfaces命名空间:
LlrpSdk提供对底层 ROSpec 资源的直接控制与桥接运行,以及直发直收二进制 LLRP 帧的逃生通道。
厂商扩展与核心枚举 Extensions// 启用 Impinj 扩展
var reader = LlrpReader.CreateBuilder("192.168.1.100").UseImpinj().Build();
// 核心枚举:
// ResourceTakeoverPolicy: PreserveForeign (默认) / ReplaceAll
// TagMemoryBank: Reserved(0), ElectronicProductCode(1), TID(2), User(3)
// TagLockMode: Accessible, AlwaysAccessible, SecuredWrite, AlwaysUnwriteable