能源计量接口

从 Windows 10 开始,驱动程序可以实现能源计量接口(EMI),向客户端公开能耗数据。 此接口由一组标准化 IOCTL 组成,供客户端获取能源数据以及有关计量硬件和正在计量的硬件的数据。

板载能源计量器定期测量铁路上的电压和电流,计算电力产品,并集成随时间推移消耗的总能量。 这些计量不同于现有的 电源计量接口 概念,因为电表具有全局平均间隔。 能源计量允许多个使用者根据需求确定不同间隔的平均功率,方法是将总能耗返回到目前。

EMI 接口提供供感兴趣的客户端应用程序和服务使用的能源数据的管道。 客户端通过从最新值中减去以前的值来计算自上次查询以来消耗的能量,并根据需要通过简单除法转换为平均功率。

发现实现 EMI 的设备

客户端通过调用 SetupDiEnumDeviceInterfacesSetupDiGetDeviceInterfaceDetail 发现支持 EMI 的设备。 为符合 EMI 的每个能源计量设备创建一个 EMI 设备接口实例,并且存在于系统中。

EMI 设备接口的 GUID 为 {45BD8344-7ED6-49cf-A440-C276C933B053},如 emi.h 中定义。 代码也可以使用GUID_DEVICE_ENERGY_METER来指定此 GUID。

使用 EMI 接口

客户端代码通常使用以下过程与 EMI 交互:

  1. 调用 IOCTL_EMI_GET_VERSION ,并在返回 EMI_VERSION 值中验证设备支持的 EMI 接口版本。 在 Windows 10 中,设备可以支持EMI_VERSION_V1。 在 Windows 10 版本 1809 中,设备还可以支持EMI_VERSION_V2。 将来的操作系统版本可能会推出更新的版本。

  2. 调用IOCTL_EMI_GET_METADATA_SIZE以获取 EMI 元数据的大小。

  3. 分配所需 EMI 元数据大小的缓冲区,并调用 IOCTL_EMI_GET_METADATA。 验证返回的EMI_MEASUREMENT_UNIT是否为 EmiMeasurementUnitPicowattHours。 Windows 10 之后的版本可以定义其他单元类型。

  4. 若要测量总能耗,请调用 IOCTL_EMI_GET_MEASUREMENT。 返回的 EMI_CHANNEL_MEASUREMENT_DATA 结构 中的 AbsoluteEnergy 值表示以皮瓦时为单位的总累计能量,并且具有某个任意选定的零点。 一般情况下,需要在两个不同的时间比较样本,并减去该间隔内能耗的能源值。

  5. 若要测量平均能耗,请在所需间隔的开头和结尾调用 IOCTL_EMI_GET_MEASUREMENT 。 从后一个样本中返回的 EMI_CHANNEL_MEASUREMENT_DATA 结构中的 AbsoluteEnergy 和 AbsoluteTime 值中减去前一个样本中的相应值。

有关详细信息,请参阅这些主题。

EMI IOCTLs - 本部分介绍能源测量接口(EMI)支持的 I/O 控制代码(IOCTL)。

EMI 枚举和结构 - 本部分介绍能源测量接口(EMI)支持的枚举和结构。