拓扑关系如何管理?
在设备对接涂鸦的云端过程中,一部分设备由于自身资源或硬件配置,无法直接连接云端。而是需要通过网关进行中转,由网关代理实现和云端进行数据交互,间接实现设备接入云端。这样的设备也称为子设备。
要想实现网关代理子设备接入云端,子设备和网关需要先建立关联关系,也称为 拓扑关系。
方式对比
建立拓扑关系有三种方式,您可以根据实际情况,选择其中一种,并且注意不要混用。

| 名称 | 适用场景 | 接口 | 特点 |
|---|---|---|---|
| 动态发现 |
| 网关绑定子设备 | 全自动 |
| 网关建立拓扑 |
| 建立拓扑关系 | 半自动 |
| 平台管理 |
| 建立拓扑关系 | 全手动 |
本文主要介绍用于网关设备侧管理拓扑关系的协议内容,并详细说明每个协议。
网关绑定子设备(动态发现)
网关动态发现子设备,请求云端注册子设备并建立拓扑关系,云端返回请求结果。这对应方式对比章节的 动态发现 方式。
交互流程

设备发送消息
设备检测到子设备连接,主动向云端发送绑定子设备消息。
topic: tylink/${deviceId}/device/sub/bind
{"msgId":"45lkj355123****","time":1626197189600,"version":"1.0","data":[{"productId":"a123b456****","clientId":"123455asdf****"},{"productId":"a123b457****","clientId":"453455asdf****"}]
}
参数说明
| 参数 | 类型 | 说明 | 必选 | 备注 |
|---|---|---|---|---|
| ${deviceId} | String | 设备 ID | 是 | 发起子设备绑定的网关设备 ID。 |
| version | String | 协议版本 | 否 | 默认 1.0,当前仅支持 1.0。 |
| msgId | String | 消息 ID | 是 | 总长度不超过 32 位的字符,上报和订阅消息通过该值建立应答关系。 |
| time | Number | 消息时间戳 | 是 | 消息发送时的 Unix 时间戳,10 位秒级或 13 位毫秒级。 |
| data | Array | 子设备参数列表 | 是 | 多个子设备绑定参数,子设备数量不超过 100 个。 |
| data[].productId | String | 子设备的产品 ID | 是 | 需要绑定在子设备的产品 ID。 |
| data[].clientId | String | 设备端唯一 ID | 是 | 此处主要用于子设备硬件的唯一标识,可以是设备的 MAC、SN 等,至少保证产品下唯一,将显示在 设备管理 > 注册 ID 字段。 |
设备接收消息
设备订阅接收绑定子设备消息回复。
topic: tylink/${deviceId}/device/sub/bind_response
{"msgId":"45lkj3551234****","time":1626197189640,"version":"1.0","code":0,"data":[{"productId":"a123b456****","clientId":"123455****","deviceId":"6c828cba434ff40c07****"},{"productId":"a123b457****","clientId":"123456****","deviceId":"6c828cba434ff40c07****"}]
}
参数说明
| 参数 | 类型 | 说明 | 必选 | 备注 |
|---|---|---|---|---|
| ${deviceId} | String | 设备 ID | 是 | 发起子设备绑定的网关设备 ID。 |
| version | String | 协议版本 | 否 | 默认 1.0,当前仅支持 1.0。 |
| msgId | String | 消息 ID | 是 | 总长度不超过 32 位的字符,上报和订阅消息通过该值建立应答关系。 |
| time | Number | 消息时间戳 | 是 | 消息发送时的 Unix 时间戳,10 位秒级或 13 位毫秒级。 |
| code | Number | 响应状态码 | 否 |
|
| data | Array | 子设备绑定结果列表 | 是 | - |
| data[].productId | String | 产品 ID | 是 | 子设备的产品 ID。 |
| data[].clientId | String | 子设备硬件的唯一表示 ID | 是 | 子设备的唯一标识,需保证产品下唯一。 |
| data[].deviceId | String | 云端分配的唯一设备 ID | 是 | 同一个 clientId、同一个网关设备 ID,多次绑定只会生成同一个设备 ID,否则会重新生成一个新的设备 ID。 |
状态码说明
| 状态码 | 说明 |
|---|---|
| 0 | 默认状态,代表成功。 |
| 1001 | 服务异常。 |
| 1002 | 请求参数校验不合法。 |
| 1004 | 设备不存在。 |
| 2401 | 产品不存在。 |
| 2402 | 网关绑定了多个设备组。 |
| 2403 | 拓扑信息存在,子设备信息不存在。 |
| 2404 | 授权码数量不足, 获取授权码失败。 |
| 2405 | 获取网关设备组异常。 |
| 2406 | 子设备重新注册时,必须先解绑。 |
| 2410 | 同一个网关绑定子设备的数量,不能超过 2000 个。 |
网关删除子设备
网关通过动态发现注册的子设备,可支持网关请求云端删除对应的子设备。云端接收到该请求后,会校验并删除该子设备,同时删除网关和子设备的拓扑关系。由于是设备端发起的删除操作,针对已绑定家庭或资产的子设备,支持网关直接删除子设备。

交互流程

设备发送消息
Topic:tylink/${deviceId}/device/sub/delete
消息内容
{"msgId":"45lkj355123****","time":1626197189600,"version":"1.0","data":["devId123455as****","devId123456ty****"]
}
参数说明
| 参数 | 类型 | 说明 | 必选 | 备注 |
|---|---|---|---|---|
| ${deviceId} | String | 设备 ID | 是 | 发起删除子设备的网关设备 ID。 |
| version | String | 协议版本 | 否 | 默认 1.0,当前仅支持 1.0。 |
| msgId | String | 消息 ID | 是 | 总长度不超过 32 位的字符,上报和订阅消息通过该值建立应答关系。 |
| time | Number | 消息时间戳 | 是 | 消息发送时的 Unix 时间戳,10 位秒级或 13 位毫秒级。 |
| data | Array | 待删除的子设备 ID 列表 | 是 | 子设备 ID 列表,设备数量不超过 10。 |
设备接收消息
Topic:tylink/${deviceId}/device/sub/delete_response
消息内容
{"msgId":"45lkj355123****","time":1626197189640,"version":"1.0","code":0,"data":["devId123455as****","devId123456ty****"]
}
参数说明
| 参数 | 类型 | 说明 | 必选 | 备注 |
|---|---|---|---|---|
| ${deviceId} | String | 设备 ID | 是 | 发起删除拓扑关系的网关设备 ID。 |
| version | String | 协议版本 | 否 | 默认 1.0,当前仅支持 1.0。 |
| msgId | String | 消息 ID | 是 | 总长度不超过 32 位的字符,上报和订阅消息通过该值建立应答关系。 |
| time | Number | 消息时间戳 | 是 | 消息发送时的 Unix 时间戳,10 位秒级或 13 位毫秒级。 |
| code | Number | 响应状态码 | 否 | 0 代表成功,非 0 代表失败,默认 0。 |
| data | Array | 被删除的子设备 ID 列表。 | 是 | / |
状态码说明
| 状态码 | 说明 |
|---|---|
| 0 | 默认状态,代表成功。 |
| 1001 | 服务异常。 |
| 1004 | 设备记录不存在。 |
| 2407 | 子设备列表为空。 |
| 2408 | 子设备数量超限。 |
建立拓扑关系
对于已经在云端注册的子设备,拿到子设备注册信息后烧录到子设备。网关运行后动态发现子设备,请求云端建立拓扑关系,云端返回请求结果。这对应方式对比章节中的 网关建立拓扑 方式。
交互流程

设备发送消息
topic:tylink/${deviceId}/device/topo/add
{"msgId":"45lkj355123****","time":1626197189600,"version":"1.0","data":[{"productId":"a123b456****","deviceId":"123455asdf****","sign":"adstewq35324ds****","signMethod":"HmacSHA256","timestamp":"16067836521"},{"productId":"a123b457****","deviceId":"123456****","sign":"adstewq35324ds****","signMethod":"HmacSHA256","timestamp":"16067836521"}]
}
参数说明
| 参数 | 类型 | 说明 | 必选 | 备注 |
|---|---|---|---|---|
| ${deviceId} | String | 设备 ID | 是 | 发起建立拓扑关系的网关设备 ID。 |
| version | String | 协议版本 | 否 | 默认 1.0,当前仅支持 1.0。 |
| msgId | String | 消息 ID | 是 | 总长度不超过 32 位的字符,上报和订阅消息通过该值建立应答关系。 |
| time | Number | 消息时间戳 | 是 | 消息发送时的 Unix 时间戳,10 位秒级或 13 位毫秒级。 |
| data | Array | 子设备参数列表 | 是 | 多个子设备拓扑参数, 子设备数量不能超过 100 个。 |
| data[].productId | String | 子设备的产品 ID | 是 | - |
| data[].deviceId | String | 子设备的设备 ID | 是 | 注册设备时,获取的设备 ID,云端分配的唯一 ID。 |
| data[].signMethod | String | 签名算法 | 是 | 签名算法, 当前仅支持 HmacSHA256。 |
| data[].timestamp | String | 时间戳 | 是 | 签名时间戳,10 位秒级或 13 位毫秒级。 |
| data[].sign | String | 签名 | 是 | 使用 signMethod 对内容进行签名。例如,HmacSHA256(content, deviceSecret), content 的内容如:productId= a123b456****|deviceId=123455asdf****|timestamp=${签名时间戳}, deviceSecret 为 涂鸦 IoT 开发平台 设备管理中展示的 DeviceSecret 字段。 |
设备接收消息
topic:tylink/${deviceId}/device/topo/add_response
{"msgId":"45lkj355123****","time":1626197189640,"version":"1.0","code":0,"data":[{"productId":"a123b456****","deviceId":"6c828cba434ff40c07****"},{"productId":"a123b457****","deviceId":"6c828cba434ff40c07****"}]
}
参数说明
| 参数 | 类型 | 说明 | 必选 | 备注 |
|---|---|---|---|---|
| ${deviceId} | String | 设备 ID | 是 | 发起建立拓扑关系的网关设备 ID。 |
| version | String | 协议版本 | 否 | 默认 1.0,当前仅支持 1.0。 |
| msgId | String | 消息 ID | 是 | 总长度不超过 32 位的字符,上报和订阅消息通过该值建立应答关系。 |
| time | Number | 消息时间戳 | 是 | 消息发送时的 Unix 时间戳,10 位秒级或 13 位毫秒级。 |
| code | Number | 响应状态码 | 否 |
|
| data | Array | 建立拓扑关系成功的结果列表。 | 是 | - |
| data[].productId | String | 子设备的产品 ID。 | 是 | - |
| data[].deviceId | String | 子设备的设备 ID。 | 是 | - |
状态码说明
| 状态码 | 说明 |
|---|---|
| 0 | 默认状态,代表成功。 |
| 1001 | 服务异常。 |
| 1004 | 设备记录不存在。 |
| 2407 | 子设备列表为空。 |
| 2408 | 子设备数量超限。 |
| 2409 | 签名验证失败。 |
| 2410 | 同一个网关绑定子设备的数量,不能超过 2000 个。 |
删除拓扑关系
网关请求云端删除与指定子设备的拓扑关系,云端返回请求结果。该请求不会删除子设备。删除拓扑关系后,子设备还能和该网关或其它网关再次建立拓扑关系。
交互流程

设备发送消息
topic:tylink/${deviceId}/device/topo/delete
{"msgId":"45lkj355123****","time":1626197189600,"version":"1.0","data":["devId123455as****","devId123456ty****"]
}
参数说明
| 参数 | 类型 | 说明 | 必选 | 备注 |
|---|---|---|---|---|
| ${deviceId} | String | 设备 ID | 是 | 发起删除拓扑关系的网关设备 ID。 |
| version | String | 协议版本 | 否 | 默认 1.0,当前仅支持 1.0。 |
| msgId | String | 消息 ID | 是 | 总长度不超过 32 位的字符,上报和订阅消息通过该值建立应答关系。 |
| time | Number | 消息时间戳 | 是 | 消息发送时的 Unix 时间戳,10 位秒级或 13 位毫秒级。 |
| data | Array | 待删除的子设备 ID 列表 | 是 | 子设备 ID 列表, 设备数量不超过 100 个。 |
设备接收消息
topic:tylink/${deviceId}/device/topo/delete_response
{"msgId":"45lkj355123****","time":1626197189640,"version":"1.0","code":0,"data":["devId123455as****","devId123456ty****"]
}
参数说明
| 参数 | 类型 | 说明 | 必选 | 备注 |
|---|---|---|---|---|
| ${deviceId} | String | 设备 ID | 是 | 发起删除拓扑关系的网关设备 ID。 |
| version | String | 协议版本 | 否 | 默认 1.0,当前仅支持 1.0。 |
| msgId | String | 消息 ID | 是 | 总长度不超过 32 位的字符,上报和订阅消息通过该值建立应答关系。 |
| time | Number | 消息时间戳 | 是 | 消息发送时的 Unix 时间戳,10 位秒级或 13 位毫秒级。 |
| code | Number | 响应状态码 | 否 |
|
| data | Array | 被删除的子设备 ID 列表 | 是 | - |
状态码说明
| 状态码 | 说明 |
|---|---|
| 0 | 默认状态,代表成功。 |
| 1001 | 服务异常。 |
| 1004 | 设备记录不存在。 |
| 2407 | 子设备列表为空。 |
| 2408 | 子设备数量超限。 |
查询拓扑关系
网关请求云端查询拓扑关系,云端返回请求结果。
交互流程

设备发送消息
topic:tylink/${deviceId}/device/topo/get
{"msgId":"45lkj355123****","time":1626197189600,"version":"1.0","data":{"startId": 0,"pageSize": 20, "devIds":["devId123455as****","devId123456ty****"]}
}
参数说明
| 参数 | 类型 | 说明 | 必选 | 备注 |
|---|---|---|---|---|
| ${deviceId} | String | 设备 ID | 是 | 发起查询拓扑关系的网关设备 ID。 |
| version | String | 协议版本 | 否 | 默认 1.0,当前仅支持 1.0。 |
| msgId | String | 消息 ID | 是 | 总长度不超过 32 位的字符,上报和订阅消息通过该值建立应答关系。 |
| time | Number | 消息时间戳 | 是 | 消息发送时的 Unix 时间戳,10 位秒级或 13 位毫秒级。 |
| code | Number | 响应状态码 | 否 |
|
| data.startIndexId | Number | 本次查询子设备列表起始值 | 否 | 默认为 0,从第一条开始查询。如果查询第二页, 则该值为第一页查询结果最后一条记录的索引 ID。第三页及以后,以此类推。 |
| data.pageSize | Number | 每次查询的设备数量 | 否 | 默认及最大查询数量均为 100 个。 |
| data.devIds | Array | 本次查询子设备 ID 列表 | 否 | 子设备 ID 列表,设备数量不超过 100 个。 |
设备接收消息
topic:tylink/${deviceId}/device/topo/get_response
{"msgId":"45lkj355123****","time":1626197189640,"version":"1.0","code":0,"data":[{"productId":"a123b456****","deviceId":"6c828cba434ff40c074***","indexId": 1},{"productId":"a123b457****","deviceId":"6c828cba434ff40c074***","indexId": 2}]
}
参数说明
| 参数 | 类型 | 说明 | 必选 | 备注 |
|---|---|---|---|---|
| ${deviceId} | String | 设备 ID | 是 | 发起拓扑关系查询的网关设备 ID。 |
| version | String | 协议版本 | 否 | 默认 1.0,当前仅支持 1.0。 |
| msgId | String | 消息 ID | 是 | 总长度不超过 32 位的字符,上报和订阅消息通过该值建立应答关系。 |
| time | Number | 消息时间戳 | 是 | 消息发送时的 Unix 时间戳,10 位秒级或 13 位毫秒级。 |
| code | Number | 响应状态码 | 否 |
|
| data | Array | 子设备列表 | 是 | - |
| data[].productId | String | 子设备的产品 ID | 是 | - |
| data[].deviceId | String | 子设备的设备 ID | 是 | - |
| data[].indexId | Number | 索引 ID | 是 | 每页最后一条记录的索引 ID,作为下一页查询的 startIndexId。 |
状态码说明
| 状态码 | 说明 |
|---|---|
| 0 | 默认状态,代表成功。 |
| 1001 | 服务异常。 |
| 1004 | 设备不存在。 |
| 2408 | 子设备数量超限。 |
通知拓扑关系变更
云端变更拓扑关系,如往拓扑关系中新增子设备,或把子设备从拓扑关系中删除,发送消息通知网关。
交互流程

设备接收消息
topic:tylink/${deviceId}/device/topo/change
{"msgId":"45lkj355123****","time":1626197189600,"data":{"addDevIds":["devId123asdf****","devId456tyiy****"],"delDevIds":["devId789****","devIdyiy****"]}
}
参数说明
| 参数 | 类型 | 说明 | 必选 | 备注 |
|---|---|---|---|---|
| ${deviceId} | String | 设备 ID | 是 | 拓扑关系发生变更的网关设备 ID。 |
| version | String | 协议版本 | 否 | 默认 1.0,当前仅支持 1.0。 |
| msgId | String | 消息 ID | 是 | 总长度不超过 32 位的字符,消息的唯一 ID。 |
| time | Number | 消息时间戳 | 是 | 消息发送时的 Unix 时间戳,10 位秒级或 13 位毫秒级。 |
| data | object | 业务数据 | 是 | - |
| data.addDevIds | Array | 新增的子设备 ID 列表 | 否 | 子设备数量不超过 100 个。 |
| data.delDevIds | Array | 删除的子设备 ID 列表 | 否 | 子设备数量不超过 100 个。 |
相关文章:
拓扑关系如何管理?
在设备对接涂鸦的云端过程中,一部分设备由于自身资源或硬件配置,无法直接连接云端。而是需要通过网关进行中转,由网关代理实现和云端进行数据交互,间接实现设备接入云端。这样的设备也称为子设备。 要想实现网关代理子设备接入云…...
vue的由来、vue教程和M-V-VM架构思想、vue的使用、nodejs
vue vue的由来 vue教程和M-V-VM架构思想 vue的初步简单使用 nodejs vue的由来 # 1 HTML(5)、CSS(3)、JavaScript(ES5、ES6、ES11):编写一个个的页面 -> 给后端(PHP、Python、Go、Java) -> 后端嵌入模板语法 -> 后端渲染完数据 -> 返回数据给前端 ->…...
课程表 循环依赖 拓扑排序 go语言
学会拓扑排序题目的基本解法 res数组 记录上课顺序g 记录学了课程i 能解锁的课程jindeg 记录每个课程的入度q 记录入度为0的课程 for循环q去解放其他课程 本题来自力扣课程表 func findOrder(numCourses int, prerequisites [][]int) []int {res : []int{}//建一个二维数组记…...
【红包雨接口设计】
一、服务器地址 http://rb.atguigu.cn 二、公共请求头参数 参数名称类型是否必选描述tokenString是用户唯一标识 备注:为了方便我们今天演示,服务端接受所有token。 三、接口 1. 创建红包雨 请求方式:GET请求地址:/api/v1/se…...
SSL证书到期更换证书会影响排名吗?
在现代的数字化时代,网络安全和用户体验成为了网站运营商和开发者们需要高度关注的问题。SSL证书作为一种重要的安全协议,对网站的安全性和用户信任起着至关重要的作用。然而,随着SSL证书的有效期限届满,许多网站运营商面临着更换…...
前端常用库之-JavaScript工具库lodash
文章目录 前端常用库之-JavaScript工具库lodash一、什么是lodash二、安装三、lodash使用Lodash 的 pick() 函数介绍和使用react 实例demo:pick结合...展开运算符(spread operator) 前端常用库之-JavaScript工具库lodash 一、什么是lodash 官网: https:…...
Linux- execve()
execve() 是 Linux/UNIX 中的 exec 函数家族中的一个,它允许进程执行一个新的程序。具体地,execve() 替换当前进程的映像为新的程序映像。 函数原型如下: int execve(const char *pathname, char *const argv[], char *const envp[]);pathn…...
007 数据结构_堆——“C”
前言 本文将会向您介绍关于堆Heap的实现 具体步骤 tips:本文具体步骤的顺序并不是源代码的顺序 typedef int HPDataType; typedef struct Heap {HPDataType* _a;int _size;int _capacity; }Heap;初始化 void HeapCreate(Heap* hp, HPDataType* a, int n) {hp-&…...
zabbix的原理与安装
一、Zabbix介绍 1、zabbix 是什么? zabbix是一个开源的IT基础监控软件,能实时监控网络服务,服务器和网络设备的状态,如网络使用,CPU负载、磁盘空间等,主要是包括数据的收集、报警和通知的可视化界面zabbi…...
ReactNative中升级IOS 17版本Crash解决
ReactNative中升级IOS 17版本Crash解决 ReactNative中升级IOS 17版本Crash解决一、问题描述二、原因分析三、解决方案决策3.1 设置宽高为非零值3.2 使用新的UIGraphicsImageRenderer替换就版本的UIGraphicsBeginImageContext 四、可能使用到该API的三方库4.1 react-native-fast…...
MongoDB详解
一、MongoDB概述 MongoDB 是一个基于 分布式文件存储 的开源 NoSQL 数据库系统,由 C 编写的。MongoDB 提供了 面向文档 的存储方式,操作起来比较简单和容易,支持“无模式”的数据建模,可以存储比较复杂的数据类型,是一…...
【SpringCloud微服务全家桶学习笔记-服务注册zookeeper/consul】
SpringCloud微服务全家桶学习笔记 Eureka服务注册 gitee码云仓库 9.其他服务注册框架 (1)zookeeper安装与使用 zookeeper需安装在虚拟机上,建议使用CentOS,安装地址如下: zookeeper镜像源 选择第一个进入后下载ta…...
【滑动窗口】LCR 016. 无重复字符的最长子串
LCR 016. 无重复字符的最长子串 解题思路 窗口内的字符串就是不重复子串每次遇到新的字符 看看窗口内是否存在该字符 如果存在直接剔除 然后调整窗口左边界不存在 添加窗口内部 右边界 class Solution {public int lengthOfLongestSubstring(String s) {if(s.length() < …...
C++中将类成员函数作为变量传递给函数
假设类ClassName有一个成员函数 void ClassName::funcname(int);通过typedef定义一个类成员函数指针类型,参数和返回值类型都要与成员函数对应 typedef void (ClassName::*FuncPtr)(int); // 定义类成员函数指针获取到的参数就是 FuncPtr pf...
2024届数字IC设计秋招面经-鼎信
背景 985硕士,计算机科班,实验室做cpu设计和fpga算法加速,我做处理器安全方向,有项目。 投递 8.25 没有笔试,两轮面试,直接通知下周一面试,草草的准备了下。 一面 技术面 9.4 不到半小时 …...
【数据结构】二叉树的节点数,叶子数,第K层节点数,高度,查找x节点,判断是否为完全二叉树等方法
💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …...
前馈神经网络(FFNN)和多层感知机(MLP)
多层感知器(MLP, Multi-Layer Perceptron)和前馈神经网络(Feed-Forward Neural Network, FFNN)是深度学习中两个经常被使用的术语,它们经常被互换使用。让我们详细地了解这两个术语: 多层感知器 (MLP): M…...
EasySwipeMenuLayout - 独立的侧滑删除
官网 GitHub - anzaizai/EasySwipeMenuLayout: A sliding menu library not just for recyclerview, but all views. 项目介绍 A sliding menu library not just for recyclerview, but all views. Recommended in conjunction with BaseRecyclerViewAdapterHelper Feature…...
优麒麟下载、安装、体验
下载 官网 优麒麟 点击增强版、或者基础版进行下载 虚拟机安装 选择镜像 修改名称和存储路径 设置为50G 下一步,点击完成 开启安装 设置语言 去掉下载更新选项 继续 点击restart now 输入密码 出现下图说明安装成功,可以畅快的使用了...
Appium混合页面点击方法tap的使用
原生应用开发,是在Android、IOS等移动平台上利用官方提供的开发语言、开发类库、开发工具进行App开发;HTML5(h5)应用开发,是利用Web技术进行的App开发。目前,市面上很多app都是原生和h5混合开发,…...
Vue项目里用Frappe-Gantt 0.6.1做项目管理甘特图,我踩过的坑都在这了
Vue项目中集成Frappe-Gantt的避坑指南与工程化实践 在最近的一个敏捷开发项目中,我们需要为产品团队提供一个直观的任务进度管理工具。经过几轮技术选型,最终选择了Frappe-Gantt 0.6.1作为基础组件。这个选择并非一帆风顺——从最初的简单集成到最终形成…...
SystemVerilog进阶:深入探索随机化约束的高级应用
1. 从基础到进阶:SystemVerilog随机化约束的核心价值 在芯片验证领域,随机化验证已经成为提高验证效率的黄金标准。SystemVerilog的随机化约束机制,就像给验证工程师配备了一个智能数据生成器,可以自动产生符合设计规范的测试场景…...
Ludusavi:你的游戏进度守护神,三分钟搞定跨平台存档备份
Ludusavi:你的游戏进度守护神,三分钟搞定跨平台存档备份 【免费下载链接】ludusavi Backup tool for PC game saves 项目地址: https://gitcode.com/gh_mirrors/lu/ludusavi 你是否曾在电脑崩溃后,发现数百小时的游戏进度瞬间归零&…...
电子小白之二极管
很多年前我第一次看到电路图上各种二极管符号时,心里只有一个想法:这玩意儿到底干嘛用的?硬件部门同事告诉我一句话,瞬间就通了: 正向导通,反向截止;整流防反,稳压发光。 今天就用最…...
OpenClaw+ollama-QwQ-32B内容处理:自动生成周报与会议纪要
OpenClawollama-QwQ-32B内容处理:自动生成周报与会议纪要 1. 为什么需要自动化内容处理工具 每周五下午三点,我的日历总会准时弹出"编写本周工作报告"的提醒。这个看似简单的任务,却常常让我陷入两难:要么花半小时手动…...
斗鱼季报图解:营收9亿同比降19% 经调整净利1260万
雷递网 雷建平 3月26日斗鱼(Nasdaq: DOYU)日前发布截至2025年12月31日的全年及第四季度财报。财报显示,斗鱼2025年营收为38.19亿元(约5.46亿美元),较上年同期的42.71亿元下降10.58%。斗鱼2025年毛利为4.9亿元,经调整净…...
告别调参玄学:手把手教你用‘黎卡提方程’为自动驾驶LQR控制器选择Q和R矩阵
自动驾驶轨迹跟踪实战:从黎卡提方程到LQR调参的工程化思考 当你在仿真环境中第一次看到自己设计的LQR控制器让车辆完美跟踪参考轨迹时,那种成就感难以言喻。但更多时候,我们面对的是震荡的超调曲线、缓慢的收敛速度,以及令人抓狂的…...
Llama-3.2V-11B-cot从零部署:Docker镜像运行与端口映射详解
Llama-3.2V-11B-cot从零部署:Docker镜像运行与端口映射详解 1. 项目概述 Llama-3.2V-11B-cot是基于Meta Llama-3.2V-11B-cot多模态大模型开发的高性能视觉推理工具。它针对双卡4090环境进行了深度优化,特别适合想要体验Llama多模态大模型但缺乏专业部署…...
从串口通信到内存总线:手把手拆解‘波特率’、‘比特率’与‘总线带宽’的异同与实战计算
从串口通信到内存总线:深度解析波特率、比特率与总线带宽的实战差异 在嵌入式开发和计算机体系结构领域,数据传输速率的计算是工程师日常工作中无法绕开的基础技能。但令人困惑的是,同样的"速率"概念在不同场景下却有着完全不同的…...
深度学习驱动的图像去雾:2023年最新算法与应用实践
1. 图像去雾技术的现状与挑战 清晨打开窗户,如果外面雾气弥漫,我们往往会等雾散了再拍照。但计算机视觉系统可没这个耐心——自动驾驶汽车必须实时看清路况,无人机巡检得在雾天正常工作。这就是图像去雾技术存在的意义。2023年,随…...
