尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

如何让knxd与ETS无缝协作:KNX隧道、路由与组播发现机制详解

如何让knxd与ETS无缝协作:KNX隧道、路由与组播发现机制详解 如何让knxd与ETS无缝协作KNX隧道、路由与组播发现机制详解【免费下载链接】knxd项目地址: https://gitcode.com/gh_mirrors/kn/knxd简介knxd是一款运行在 Linux 上的 KNX 协议路由器/网关守护进程负责让 ETSKNX 工程工具软件与本地 KNX 接口无缝协作。它同时实现了 KNXnet/IP 标准中的隧道Tunneling、路由Routing和组播发现Discovery三大机制让 ETS 能够自动发现主机、建立连接并对总线进行编程与调试。项目图标knxd 守护进程标识。一、knxd 是什么一个面向 ETS 的 KNX 路由器KNX 是最常见的楼宇自动化协议既运行在 9600 波特率的专用线路上也通过 IP 组播传输数据。knxd 作为高级路由器/网关可以对接市面上几乎所有 KNX 接口USB 接口、FT1.2 串口、TPUART 等并通过标准化的 KNXnet/IP 协议向 ETS 提供服务。它的架构分为三层对应源码目录 src/libserver/层级作用关键实现后端驱动backend连接物理接口USB/串口/IPsrc/backend/协议核心libserverKNXnet/IP 隧道、路由、发现、组缓存src/libserver/服务接口client本地/远程客户端接入Unix/TCP 套接字src/client/二、组播发现机制ETS 如何看见knxdETS 启动时会向局域网发送 KNX 发现Discovery报文。knxd 的ets_router服务器在开启discover选项后会对这些报文做出响应把自身的服务能力隧道/路由、组播地址、名称等信息广播出去——ETS 列表里出现的条目就来自这一步。核心实现位于 eibnetip.cpp 与 eibnetserver.cpp处理的服务码定义在 eibnetip.hSEARCH_REQUEST / SEARCH_RESPONSE / DESCRIPTION_REQUEST 等。发现机制的三个关键参数组播地址默认224.0.23.12官方保留的 KNX 组播地址可由multicast-address覆盖端口默认 UDP3671名称发现阶段对外展示的名称默认取[main]段中的name选项默认 knxd在 ETS 的设备列表中更易辨识。三、隧道 vs 路由两种连接模式机制适用场景数据方向knxd 配置项隧道 Tunneling单个设备/程序如 ETS 编程、调试点对点 TCP/UDP 会话tunnel section路由 Routing其他 KNX 路由器互联组播转发router section发现 DiscoveryETS 自动发现组播应答discover true隧道ETS 通过隧道连接 knxd 后每个数据包都封装在隧道通道里逐条传输适合单一控制端对总线进行读写、编程模式操作对应 eibnetserver.cpp 中的ConnState通道管理。路由开启后knxd 把本地总线TP1/USB上的数据包以组播形式转发给网络上其他 KNX 路由器实现跨子网/跨设备的总线互联对应EIBnetDriver的组播收发。发现单独开启discover也能让 ETS 找到 knxd但通常与隧道、路由一并配置命令行下等价于-DTRS。⚠️ 注意ets_router服务器不要与ip驱动同时启用除非使用不同的组播地址两者都占用组播通道会产生冲突。四、一份可直接参考的 INI 配置knxd 0.14 使用 INI 风格配置文件格式文档见 doc/inifile.rst。典型的连接 USB 接口 对 ETS 开放隧道/路由/发现配置如下[main] addr 1.1.20 client-addrs 1.1.30:5 connections B.usb, S.ets [B.usb] driver usb [S.ets] server ets_router discover true tunnel T.tunnel router R.router [T.tunnel] [R.router]要点说明addr是 knxd 自身的 KNX 个别地址必填client-addrs为连接它的客户端ETS分配地址段0.14 起为硬错误检查项务必配置。discover true是 ETS 能发现它的关键用knxd_args工具src/server/knxd_args.cpp可从旧版命令行参数一键生成等价 INI 文件。五、与 ETS 协作的常见坑与排错技巧编程失败/丢包ETS 编程时对时序敏感可在usb/ipt驱动前加single过滤filters B.single的过滤链并在路由段前加pace限速过滤见 inifile.rst 的 Filters 章节。看不到 knxd确认discover true、防火墙放行 UDP 3671 与组播地址且 ETS 与 knxd 在同一二层网络组播 TTL 默认 1跨子网需调大multicast-ttl。多台 KNX 路由器共存使用multi-port true让 knxd 使用独立数据端口但注意部分程序包括旧版 ETS会忽略非默认端口的数据包。调试利器在隧道/路由段挂载log过滤可记录完整报文systemctl status knxd应显示全部接口就绪后 knxd 才开始路由v0.14 的启动时序修复保证了这一点。心跳保活隧道客户端超过heartbeat-timeout未发状态包会被断开远程接口建议同时配置retry过滤实现自动重连。六、快速上手清单获取源码并构建依赖 git、autotools、gcc/g、libevgit clone https://gitcode.com/gh_mirrors/kn/knxd cd knxd sh bootstrap.sh ./configure make -j$(nproc) make install创建knxd用户按上文 INI 写入/etc/knxd.ini用 systemd 的 socket 激活启动knxd.socket默认监听 6720 与/run/knx服务单元见 systemd/knxd.service.in打开 ETS → 项目 → 连接即可在设备列表看到名为 knxd 的路由器右键选择连接或进入编程模式即可开始协作。小结knxd 让普通 Linux 主机成为 ETS 的一等公民通过ets_router服务器的组播发现让 ETS 自动发现主机用隧道承载编程与调试流量用路由打通物理总线与 IP 网络。理解这三者的分工配合 doc/inifile.rst 中tunnel、router、discover三个选项你就能让 knxd 与 ETS 实现无缝协作。【免费下载链接】knxd项目地址: https://gitcode.com/gh_mirrors/kn/knxd创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表