如何通过LLRP接收Impinj阅读器温度消息及相关技术实现问询
解答
问题1:温度数据的获取方式
Impinj阅读器的温度属于厂商自定义配置参数,不会主动推送,必须通过主动请求获取,也就是需要轮询:
- 你需要定期发送请求消息触发阅读器返回当前温度,默认情况下阅读器不会主动上报温度变化(除非额外配置温度告警规则,但基础LLRP框架不包含此默认逻辑)。
- 不需要单独配置"报告规则",直接通过对应的请求消息即可获取温度数据。
问题2:适配LLRP的正确消息类型
要获取温度数据,应使用CGET_READER_CONFIG消息,结合枚举中的ImpinjRequestedDataType_Impinj_Reader_Temperature参数:
- 构造
CGET_READER_CONFIG实例,添加CRequestedDataParameter参数,并将其类型设置为ImpinjRequestedDataType_Impinj_Reader_Temperature(数值为2004,Impinj扩展的自定义类型)。 - 发送该消息后,阅读器会返回
CREADER_CONFIG响应,其中包含CImpinjReaderTemperature实例,从中即可提取温度值。
为什么不用CUSTOM_MESSAGE?因为Impinj已将温度参数封装为LLRP配置请求的扩展项,属于阅读器配置范畴,标准的CGET_READER_CONFIG即可满足需求,CUSTOM_MESSAGE多用于更复杂的厂商私有命令,此处无需使用。
核心代码示例
// 构造GET_READER_CONFIG请求 CGET_READER_CONFIG* pGetConfig = new CGET_READER_CONFIG(); // 添加请求数据类型,指定获取温度 CRequestedDataParameter* pReqData = new CRequestedDataParameter(); pReqData->setRequestedDataType((ERequestedDataType)ImpinjRequestedDataType_Impinj_Reader_Temperature); pGetConfig->addRequestedDataParameter(pReqData); // 发送消息(假设pLLRPConnection是已建立的连接实例) pLLRPConnection->sendMessage(pGetConfig); // 处理响应回调 void onReaderConfigResponse(CREADER_CONFIG* pResponse) { // 遍历响应参数,找到温度数据对象 for (size_t i = 0; i < pResponse->getNumParameters(); i++) { CParameter* pParam = pResponse->getParameterAt(i); if (pParam->getTypeDescriptor() == &CImpinjReaderTemperature::s_typeDescriptor) { CImpinjReaderTemperature* pTemp = static_cast<CImpinjReaderTemperature*>(pParam); // 提取温度值(具体方法需参考类的完整实现,比如getTemperature()) float temperature = pTemp->getTemperature(); // 后续温度数据处理逻辑 break; } } }
内容的提问来源于stack exchange,提问作者adc
相关产品推荐
相关产品推荐

