C

区域式暖通空调控制

"QtAA Zoned HVAC Control Example Screenshot"

构建和部署示例

请参阅有关构建和部署 Qt for Android Automotive 示例的特定步骤

概述

此示例使用 Android Automotive 的 Qt IF 生成器扩展 的区域功能。有关详细信息,请参阅暖通控制文档。

本页仅涵盖区域的使用。

启用区域配置文件的准备

首先,在 .qface 文件中,组件的 zoned 属性必须设置为 true

@config: { zoned: true, id: "io.qt.qtif.android.ClimateControl/1.0", ... }

其次,要能够在不同的区域访问特定的 VHAL 属性,必须将其分配给这些区域。在以下示例中,QIfClimateControltargetTemperatureSet 属性将存在于 DriverPassenger 区域。

QtIfAndroidVehicleFunctions.QIfClimateControl#targetTemperatureSet:
    config_android_automotive:
        vhalId: HVAC_TEMPERATURE_SET
        zone:
            - DRIVER_ZONE_ID
            - PASSENGER_ZONE_ID
        mightNeedConversion: true

编译的是 DRIVER_ZONE_IDPASSENGER_ZONE_ID 区域别名 (Android Automotive 区类型)。

zoneAliases:
    - DRIVER_ZONE_ID = VehicleAreaSeat.SEAT_ROW_1_LEFT | VehicleAreaSeat.SEAT_ROW_2_LEFT
        | VehicleAreaSeat.SEAT_ROW_2_CENTER
    - PASSENGER_ZONE_ID = VehicleAreaSeat.SEAT_ROW_1_RIGHT
        | VehicleAreaSeat.SEAT_ROW_2_RIGHT
    - SEAT_ALL = DRIVER_ZONE_ID | PASSENGER_ZONE_ID
    - REAR_WINDSHIELD = VehicleAreaWindow.WINDOW_REAR_WINDSHIELD
    - FRONT_WINDSHIELD = VehicleAreaWindow.WINDOW_FRONT_WINDSHIELD

用于 QML(例如,DriverPassenger 等)的区域名称在区域映射部分定义。

zoneMappings:
    "": SEAT_ALL
    Driver: DRIVER_ZONE_ID
    Passenger: PASSENGER_ZONE_ID
    RearWindshield: REAR_WINDSHIELD
    FrontWindshield: FRONT_WINDSHIELD

运行示例

要从 Qt Creator 运行示例,请打开 欢迎 模式并从 示例 中选择示例。有关更多信息,请参阅 Qt Creator:教程:构建和运行

在 QML 中使用区域

HVAC 控制 示例一样,到后端的连接在单独的 QML 文件中定义:ClimateControlFacade.qml

在 QML 中访问特定区域的属性很直接。生成的 ClimateControl 组件提供了 zoneAt 属性,它随后提供了名为区域的附加属性(Driver、Passenger 等)。此属性是 ClimateControl 组件的实例。然而,只有分配给特定区域的属性才是活动属性。因此,您可以分配 Driver 的除雾器值,但它不会产生任何效果。

由于区域是独立的对象,我们必须为每个区域单独进行连接。

    Connections {
        target: climateControl.zoneAt.Driver
        ignoreUnknownSignals: true
        function onTargetTemperatureSetChanged(targetTemperatureSet) {
            facade.targetTemperatureSetDriver = targetTemperatureSet
        }
    }

    Connections {
        target: climateControl.zoneAt.Passenger
        ignoreUnknownSignals: true
        function onTargetTemperatureSetChanged(targetTemperatureSet) {
            facade.targetTemperatureSetPassenger = targetTemperatureSet
        }
    }

要将区域属性的值传递到后端,我们必须考虑包含这些属性的区域能否做到。

    Connections {
        id: ui2vhal
        target: facade

        // Defrosters
        function onDefrostFrontOnChanged() {
            climateControl.zoneAt.FrontWindshield.defroster = facade.defrostFrontOn
        }
        function onDefrostRearOnChanged() {
            climateControl.zoneAt.RearWindshield.defroster = facade.defrostRearOn
        }
        // Temperatures
        function onTargetTemperatureSetDriverChanged() {
            climateControl.zoneAt.Driver.targetTemperatureSet = facade.targetTemperatureSetDriver
        }

        function onTargetTemperatureSetPassengerChanged() {
            climateControl.zoneAt.Passenger.targetTemperatureSet =
                    facade.targetTemperatureSetPassenger
        }

在特定 Qt 许可证下可用。
了解更多信息。