电能表接口
从Windows 10开始,驱动程序可以实现能源计量接口 (EMI) ,以向客户端公开能耗数据。 此接口由一组标准化 IOCTL 组成,供客户端获取能源数据以及有关计量硬件和按流量计费的硬件的数据。
板载能量计定期测量导轨上的电压和电流,计算电源积,并集成随时间推移消耗的总能量。 这些电表不同于现有的 功率计接口 概念,因为功率计具有全局平均间隔。 能量表允许多个使用者通过返回截至目前的总能耗,根据自己的需求确定不同间隔内的平均功率。
EMI 接口为感兴趣的客户端应用程序和服务消耗的能源数据提供了管道。 客户端通过从最新值中减去以前的值来计算自上次查询以来的能耗,并选择性地通过简单除法转换为平均功率。
发现实现 EMI 的设备
客户端通过调用 SetupDiEnumDeviceInterfaces 和 SetupDiGetDeviceInterfaceDetail 来发现支持 EMI 的设备。 为每个符合 EMI 要求且存在于系统中的能源计量设备创建 EMI 设备接口的一个实例。
EMI 设备接口的 GUID 为 {45BD8344-7ED6-49cf-A440-C276C933B053},如 emi.h 中定义。 代码也可以使用 GUID_DEVICE_ENERGY_METER 来指定此 GUID。
使用 EMI 接口
客户端代码通常使用以下过程与 EMI 交互:
调用 IOCTL_EMI_GET_VERSION ,并在返回的 EMI_VERSION 值中验证设备支持的 EMI 接口版本。 在 Windows 10 中,设备可以支持EMI_VERSION_V1。 在 Windows 10 版本 1809 中,设备还可以支持EMI_VERSION_V2。 将来的操作系统版本可能会引入更高版本。
调用 IOCTL_EMI_GET_METADATA_SIZE 以获取 EMI 元数据的大小。
分配所需 EMI 元数据大小的缓冲区并调用 IOCTL_EMI_GET_METADATA。 验证返回的EMI_MEASUREMENT_UNIT是否为 EmiMeasurementUnitPicowattHours。 Windows 10之后的版本可能会定义其他单位类型。
若要测量总能耗,请调用 IOCTL_EMI_GET_MEASUREMENT。 返回 的EMI_CHANNEL_MEASUREMENT_DATA结构 中的 AbsoluteEnergy 值是总累计能量(以 picowatt-hours 为单位,具有一些任意零点)。 通常,需要比较两个不同时间的样本,并减去该间隔内能耗的能量值。
若要测量平均功耗,请在所需间隔的开头和结尾调用 IOCTL_EMI_GET_MEASUREMENT 。 减去后一个样本从早期样本返回的 EMI_CHANNEL_MEASUREMENT_DATA 结构的 AbsoluteEnergy 和 AbsoluteTime 值。
有关详细信息,请参阅这些主题。
EMI IOCTLs - 本部分介绍能源测量接口 (EMI) 支持的 I/O 控制代码 (IOCTL) 。
EMI 枚举和结构 - 本部分介绍能源测量接口 (EMI) 支持的枚举和结构。