第 3 课: KONNEKTING 的结构

第 3 课: KONNEKTING 的结构

1.CONNECTING KNX

在第 1 课的基本硬件连接第 2课的 KNX 收发器芯片BCU之后,第 3 课现在是关于 KONNEKTING 设备项目的结构。
一句话KONNEKTING是一种DIY KNX系统的软件,通过KNX系统库可以构建实现相应供能knx硬件。
首先,KONNEKTING 旨在设计一种 KNX“设备”——与其他 KNX 设备一样——可以通过 KNX 总线进行编程/调整。
KONNEKTING 试图尽可能接近 KNX ETS软件的流程和模式。
如果您想在 KNX 世界中安装新的 KNX 设备,您必须从设备制造商处以(自 ETS4 以来).knxprod 文件的形式获取产品数据库。您将设备本身连接到总线,在您的计算机上启动 ETS 软件并使用产品数据库文件添加设备。然后在 ETS 中设置设备的物理地址,根据自己的需要设置设备的参数,并将通信对象与组地址连接起来。然后按下设备上的编程按钮,开始在 ETS 中编程。完成的。

它与 KONNEKTING 的工作方式类似。但是,这里的“产品数据库”并不是一个.knxprod文件,而是一个以“.kdevice.xml”结尾的文件。您将 KONNEKTING 设备连接到总线,启动编程软件“ KONNEKTING Suite ”,使用 .kdevice.xml 文件添加新设备,根据自己的需要设置参数,将通讯对象与组地址连接。然后按下设备上的编程按钮,开始在套件中编程。完成的。
在这里插入图片描述

你注意到什么了吗?这与 ETS 中的工作方式完全相同。只有产品数据库有不同的结尾,套件使用它与 ETS 略有不同。

因此,一台 KONNEKTING 设备需要一个产品数据库。这对于 KONNEKTING用户来说已经足够了。但是如果要开发KONNEKTING 设备,则必须处理产品数据库 .kdevice.xml 的格式。

2. 身份证的事

与 ETS 一样,KONNEKTING 也有“设备制造商”。您不能将制造商 A 的产品数据库应用于制造商 B 的设备。为了确保这一点,设备以及产品数据库都知道它来自/为哪个制造商。简而言之:ID 必须存储在某处。KONNEKTING 也是如此。
每个设备都分配给一个制造商。并且每个设备也有一个“设备ID”和一个“修订版”。这是必要的,因此制造商 A 的产品数据库 X 不能在制造商 A 的设备 Y 上使用。如果设备 X 出现在一个新的改进版本中(例如,需要更改硬件),那么这里还必须确保设备 X 版本 1 不能与设备 X 版本 2 的产品数据库一起使用。
设备唯一身份标志:

  1. 制造商编号 ManufacturerId=“57005”
  2. 设备编号 DeviceId=“3”
  3. 修订序号 Revision=“0”
    ID 是一个 16 位的值
    并且这个3 元组 在设备和产品数据库中必须是已知的。
    原则上,每个开发人员都可以考虑自己的 ID。但是,如果设备随后以开源/开放硬件 的方式在网络上“共享”,则很快就会出现 ID 冲突。

3 .kdevice.xml 格式

到目前为止,我们知道 KONNEKTING 的行为与 KNX/ETS 类似,并且需要类似的信息才能正确识别。

ETS 产品数据库格式 .knxprod 或多或少是一个伪装的 ZIP 文件,其中包含大量描述设备的相当复杂的XML文件。
不过也有基于.knxprod文件的制作方法等待时机成熟可以学习一下。

在 KONNEKTING,这更容易一些。产品数据库 .kdevice.xml 直接是一个“可读”的 XML 文件。理想情况下,他在为他的设备开发固件或草图之前执行此操作。
可以在此处找到包含示例元素的详细 .kdevice.xml 文档。
但让我们从一个简单的例子开始。我们想开发一种测量温度并定期将其发送到总线的设备。我们需要什么?
指定发送间隔的参数。未来的用户应该能够设置他希望多久查看一次总线上的温度值。
用户可以提供组地址并用于发送温度值的通信对象。
第 1 点非常简单。您必须考虑为此需要什么类型的数据。我们以数据类型“uint32”为例。所以“无符号整数32位”。或者简单地说:一个整数,长度为 32 位的正数值。也就是允许取值 0 到 4294967295 的数字类型。这应该足以存储两个温度读数之间等待的秒数。如果这对您来说太多了,只需使用 uint16 或 uint8。

注意:数据类型也是后来在 Arduino 代码中使用的类型。

如果您不知道如何处理 uint32、uint16、…,最好在这里阅读:Arduino - UnsignedInt

第 2 点稍微复杂一些。毕竟这是一个通讯对象(简称KO)。也许您已经从 ETS 知道您可以为 KO 设置“标志”。就像是

K-Flag (通讯)
L-Flag (读取)
S-Flag (写入)
Ü-Flag(发送)
A-Flag(更新)
根据这些标志的设置方式,KO 的行为会有所不同。总而言之,入门只有两个重要的星座:

传感器配置-> K+L+Ü
执行器配置 -> K+S+A
因此,当值更改时(传感器配置),KO 将数据发送到总线,或者 KO 等待来自总线的电报,以便设备可以对其执行某些操作,例如切换输出(参与者配置文件)。对于我们这里的示例,传感器配置文件是相关的。

最后但并非最不重要的一点是,您必须考虑 KO 具有哪种数据类型或 DPT。KNX 电报可以传输各种各样的信息。DPT1 例如用于切换过程,DPT9 用于温度之类的东西,…
在这里,您可以最好地了解 KNX 世界中用于 DPT 的类似/可比设备。相关信息可在设备的相应手册和产品数据库中找到。

以下 XML 示例(Beta4 Format!):
KONNEKTING_SimpleSensor.kconfig.xml文件

<KonnektingDevice xmlns="http://konnekting.de/xml/KonnektingDevice/v0">
    <Device ManufacturerId="57005" DeviceId="3" Revision="0">
        <ManufacturerName>KONNEKTING</ManufacturerName>
        <DeviceName>SimpleSensor</DeviceName>
        <Parameters>
            <ParameterGroup Name="Temperatur" Id="0">
                <Parameter Id="0" IdName="tempPollingTime">
                    <Description>Cycle [s]</Description>
                    <Value Type="uint32" Default="0000001E" Options="" Min="00000000" Max="000FFFFF"/>
                </Parameter>
            </ParameterGroup>
        </Parameters>
        <CommObjects>
            <CommObject Id="0" IdName="tempValue">
                <Name>Temperature</Name>
                <Function>Value</Function>
                <DataPointType>9.001</DataPointType>
                <Flags>52</Flags>
            </CommObject>
        </CommObjects>
    </Device>
    <Configuration ManufacturerId="57005" DeviceId="3" Revision="0">
        <IndividualAddress Address="1.1.3" Description="KONNEKTING SimpleSensor"/>
        <CommObjectConfigurations>
            <CommObjectConfiguration Id="0" GroupAddress="1/1/12" Description="WEMDU" active="true"/>
        </CommObjectConfigurations>
        <ParameterConfigurations>
            <ParameterConfiguration Id="0" Value="00000005"/>
        </ParameterConfigurations>
    </Configuration>
</KonnektingDevice>

带有元素“Device”的行(元素在 XML 中称为由 <> 包围的部分)包含制造商 ID、设备 ID 和设备修订版的属性。属性在元素内使用AttributeName="AttributeValue"定义。
参数总是分配给一个组。这有助于处理许多参数。我们这里只有一个参数。我们将关联的组称为“温度”。出于“内部”目的,许多元素还具有“Id”属性。有关详细信息,请参阅详细文档。
然后参数在参数组内跟随。“描述”是参数的描述,因为它稍后会在KONNEKTING Suite中列出。
“价值”元素有点棘手。
在这里你必须指定参数类型(在我们的例子中是“uint32”)。为了套件为用户提供一个合理的默认值,你应该用“Default=”指定标准应该是什么。规范以十六进制进行符号!

同样,可以在套件中输入的最小值 (“Min=”) 和最大值 (“Max=”)。例如,如果您不想完全耗尽 uint32 数据类型的长度(最长为 4294967295),这将非常有用。然后套件不允许任何超出最小/最大范围的值。在此示例中,属性“Options=”不是必需的,并且保持为空(您当然可以在文档中找到有关此的更多详细信息…)。

KO 列在 CommObjects 元素中。每个 KO 都位于其自己的“CommObject”元素中。子元素“名称”和“功能”是准自由文本元素。在这里,您可以以文本形式指定 KO 的名称和功能。“DataPointType”表示KO的DPT。在示例“9.001”中,我们的温度值。最后但同样重要的是,“标志”元素。这在细节上有点棘手。但由于我们这里主要只有两个“配置文件”,因此您可以为传感器 KO 输入 52 或为执行器 KO 输入 42。您猜对了,可以在文档中找到有关如何获取这些数字的详细信息。

XML 就是这样。还有一些其他元素可用于限制 KO 和参数的可见性,具体取决于其他参数。但这与这么小的初学者示例无关,可以省略。

4. 还有什么?

套件中包含的工具可用于从 .kdevice.xml 生成头文件,该文件接管 Arduino 草图中用于参数和 KO 的必要代码部分。但这将在下一课中出现,即为设备编写 Arduino 草图。
在这里插入图片描述

5. XML标准解释

<?xml version="1.0" encoding="UTF-8" Standalone="yes"?> 
<KonnektingDevice xmlns="http://konnekting.de/xml/KonnektingDevice/v0" 
    xmlns:xsi="http:// www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://konnekting.de/xml/KonnektingDevice/v0 http://konnekting.de/xml/KonnektingDevice/KonnektingDeviceV0.xsd"> 

    <!--
        在这里,您必须提供您的 ID 和设备版本。
        这必须与您的 Arduino Sketch 中的定义相匹配。
        否则编程失败。
        ID 需要以无符号整数值的形式提供。
        Revision = 通常为“1 (uint8)
                    您可以使用
                        0 表示开发阶段,
                        1 表示第一个版本,并且
                        每次更改都使用 2...255,这会破坏兼容性。
    --> 
    <Device ManufacturerId="12345" DeviceId="123" Revision="123"> 
        <!--
            提供制造商名称和设备名称是可选的。
            但如果没有,您的设备将不会在 KONNEKTING SUite 中显示供应商/名称
        --> 
        <ManufacturerName>You Manufacturer Name您的制造商名称</ManufacturerName> 
        <DeviceName>Your Device Name您的设备名称</DeviceName>
         <!--
            如果您的设备需要用户应该能够配置的任何参数,
            您必须将它们放在这里。
        --> 
        <Parameters> 
            
            <!--
                参数被分组。不允许有没有组的参数。
                每个组都需要一个 ID 和可读名称。第一组必须有 Id="0"
                ID 必须以可读整数的形式提供,并且不能有 ID 间隔。
                该名称显示在 KONNEKTING 套件中。
                您可以拥有任意数量的组。好的,实际上限制是 256
                但这应该足够了。
            -->
            <ParameterGroup Name="A Parameter Group" Id="0"> 
 
                <!--
                    每个参数都需要一个ID。第一个参数必须有 Id="0"
                    ID 必须以可读整数形式提供。

                    您可以按任何顺序在组中分配参数。
                    重要的是:
                        - 如果您有参数,则必须有一个 Id="0" 的参数,
                        - 没有 Id-gaps
                    如果您有一个过时的参数:
                        - 将名称更改为“未使用”或“已弃用”或其他,
                        - 默认为 00
                        - 最小值为 00 
                        - 最大值为 00
                    这只会在你的草图中浪费你的 EEPROM 内存的一个字节。
                    IdName 是可选的,可以与 KONNEKTING 代码创建器一起使用以自动创建 Arduino 代码。确保 IdName 属性只有字母字符,没有空格、特殊字符等。
                --> 
                <Parameter Id="0" IdName="aParameter"> 
                    <!-- 如果参数当然需要名称,您可以定义这里 --> 
                    <Description>A Parameter 一个参数</Description>
                    <!--
                        除了名称之外,您必须至少提供:
                        - 类型:
                            数字参数的变量类型
                            uint8:无符号 8 位整数:0..255 
                            int8:有符号 8 位整数:-128..127 
                            uint16:无符号 16 位整数:0..65535 
                            int16:有符号 16 位整数:-32768..32767 
                            uint32:无符号 32 位整数:0..4294967295 
                            int32:有符号 32 位整数:-2147483648..2147483647
                            还有是原始数据的一种类型,称为“原始”。这很有用
                            如果您有 IR 十六进制代码或 1-wire 序列号等参数。
                            套件将让您以 HEX 形式输入数据。
                            raw1:1 字节原始数据
                            raw2:2 字节原始数据
                            
                            raw11:11 字节原始数据
                            string11:最大值。11 字节 ISO-8859-1 编码字符串/文本。未使用的尾随字符填充为 0x00
                            此属性是强制性的,并且 - 除了 DEFAULT - 没有其他可能的属性!
                        - 默认
                            默认值的十六进制表示,
                            根据给定的类型,包括。前导/尾随零,fi
                            一个 16 位类型需要四个十六进制字符: 00FF
                            一个 32 位类型需要八个十六进制字符: 000000FF
                            一个 11 字节字符串: 666F6F2062617200000000 ("foo bar")
                            这个属性是强制性的。
                        可选:
                        - 选项
                            如果要为参数显示一组选项,
                            可以使用“选项”属性。为此的价值
                            属性是一组“管道”分隔的值键对:
Options="value=key_1|value=key_2|value=key_n" 
                            “键”是用户将在
                            KONNEKTING Suite 的下拉框中看到的内容,也称为“ value" 是内部将被选为
                            参数的值(如果选择)。
                            示例:您要为用户预设“启动延迟值”:
                            10ms、30ms、60ms、120ms、无延迟
                            那么选项可能如下所示:
                            Options="
                            您的 arduino 草图需要知道如何解释这些值,并且
                            02hex 值实际上意味着 60 毫秒,而 FFhex 意味着没有延迟。
                        - 最小值/最大值
                            只能在未设置选项属性且具有数字类型时使用。这将限制
                            用户在 Min  Max 之间输入的值。根据类型,提供的
                            值需要再次为十六进制,并带有前导零。
                    --> 
                    <Value Type="uint8" Default="01" Options="" Min="00" Max="0A"/> 
                    
                </Parameter>

                <Parameter Id="1" IdName="anotherParameter"> 
                    <Description>Another Parameter另一个参数</Description> 
                    <Value Type="int16" Default="0001" Options=""/> 
                </Parameter> 

                <Parameter Id="2 " IdName="yetAnotherParameter"> 
                    <Description>Yet Another Parameter又一个参数</Description> 
                    <Value Type="uint8" Default="00" Options="00=10ms|01=30ms|02=60ms|04=120ms|FF=无延迟"/> 
                </Parameter> 

                <Parameter Id="3" IdName="activate1">
                    <Description>Activate 'Another Parameter'激活“另一个参数”</Description> 
                    <Value Type="uint8" Default="01" Options="00=disabled|01=enabled"/>
                </Parameter> 

                <Parameter Id="4" IdName="activate2"> 
                    <Description>Activate 'Another Parameter Group'激活“另一个参数组”</Description> 
                    <Value Type="uint8" Default="01" Options="00=disabled|01 =enabled"/> 
                </Parameter> 

                <Parameter Id="5" IdName="activate3"> 
                    <Description>Activate 'My Second Com Object'</Description> 
                    <Value Type="uint8" Default="01" Options="00=disabled|01=enabled"/>
                </Parameter>                 
            </ParameterGroup> 

            <ParameterGroup Id="1" Name="另一个参数组"> 
                <ParameterId="6">
                    <Description>Another parameter in another parametergrou另一个参数组中的另一个参数</Description> 
                    <Value Type="uint8" Default="02" Options="00=Aus|01=An|02=letzter Wert|04=Helligkeitswert"/> 
                </Parameter> 
            </ParameterGroup> 

        </Parameters> 

        <CommObjects> 
            <!--
                一台普通的KNX设备应该至少有一个通讯对象。
                与参数一样,ID 必须从 0 开始,并且不能有 ID 间隙。
                comm 对象的最大数量为 256。Id 必须以可读整数的形式提供。
            --> 
            <
                <!-- 您应该提供一个合理的名称 --> 
                <Name>My First Com Object</Name> 
                <!-- 以及该 comm 对象的功能描述--> 
                <Function>Test-Function #1< /Function> 
                <!--
                    此处您必须提供此 CommObject
                    格式的数据点类型:
                        x.yyy
                    其中 x = 主类型编号,不带前导零
                    ,yyy​​ = 子类型编号,前导零最多可填充 3 个字符值 [0..999]
                --> 
                <DataPointType>1.001</DataPointType>
                <!-- 
                    ComObj 通信标志。
                    “标志”是单个字节(整数值),
                    通过设置/取消设置该字节的单个位来指示 ComObj 的设置通信标志。

                    标志是:
                        C Communication 
                        R Read 
                        W Write 
                        T Transmit 
                        U Update 
                        I Init 

                    (有关标志的更多详细信息,请阅读:http://www.knx.org/fileadmin/template/documents/downloads_support_menu/KNX_tutor_seminar_page/Advanced_documentation/02_Flags_E1008a.pdf )

                    B7 B6 B5 B4 B3 B2 B1 B0(位号)
                    128 64 32 16 8 4 2 1(整数值)
                    xx xx CRWTUI(标志)
                     B6  B7 未使用。
                    常见标志组合:
                        *“传感器配置文件”-> C+R+T -> 32+16+4 = 52(整数值)
                        *“逻辑输入配置文件”-> C+W+U -> 32+8+2 = 42 (整数值) 
                --> 
                <Flags>52</Flags> 
            </CommObject> 

            <CommObject Id="1"> 
                <Name>My Second Com Object 我的第二个 Com 对象</Name>
                <Function>Test-Function #2</Function>
                <DatPointType>1.001</DataPointType> 
                <Flags>42</Flags> 
            </CommObject> 
        </CommObjects> 
        <!--
            如果要根据参数值隐藏CommObjects、Parametergroups或Parameters,
            可以在这里定义依赖关系。

            ParameterDependency:
                一个参数的可见性取决于另一个参数的值
                * ParamId 引用受影响的Parameter 
            ParameterGroupDependency:   
            CommObjectDependency:CommObject       
                的可见性取决于参数的值
                * CommObjId 引用受影响的 CommObject
            所有三种依赖类型都具有三个公共属性:
                * 测试:
                    eq = 等于
                    ne = 不等于
                    gt = 大于
                    lt = 小于
                    ge = 大于或等于
                    le = 小于或等于
                * TestParamId:为设置可见性而测试
            其值的参数 * TestValue:测试参数的值
            有一个限制:用作依赖项
            的参数(= TestParamId 引用)需要参数类型“uint8”。不支持其他类型。
        --> 
        <Dependencies> 
            <ParameterDependency ParamId="1" Test="eq" TestParamId="3" TestValue="01"/> 
            <ParameterGroupDependency ParamGroupId="1" Test="eq" TestParamId="4" TestValue=" 01"/> 
            <CommObjectDependency CommObjId="1" Test="eq" TestParamId="5" TestValue="01"/> 
        </Dependencies> 
    </Device> 
</KonnektingDevice>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值