绑定、波形与 3D#

绑定模型#

所有可视化控件通过绑定引用数据面板中的通道。

绑定方向

可选通道

行为

接收

RX + GX

控件只读显示通道当前值,随设备上报或公式结果刷新。

发送

TX + GX

用户操作控件后写回通道,再由 TX 帧或协议发送给设备。

位绑定

通道 bit 0 至 bit 7

LED 可按位点亮,开关可按位写入或按位显示。

右键绑定菜单#

多数控件在控件区域右键会弹出绑定菜单。菜单中通常有两组通道选择:接收发送。两者互斥,选择接收后控件由 RX/GX 驱动,选择发送后控件操作会写回 TX/GX。

接收绑定

可选 RX/GX。控件变成只读显示,设备上报或公式刷新后,控件每帧读取通道值。

发送绑定

可选 TX/GX。拖动、点击或输入后写回通道,再由 TX 帧手动或 Auto 发送。

位绑定

LED 和开关可选择 bit 0 到 bit 7。LED 读位显示,开关可读位或写位。

自动斜坡

发送模式下部分控件显示浮点/整型斜坡,支持递增、递减和往返测试。

控件

右键菜单

常见用法

Gauge

接收/发送绑定、弧度样式、浮点/整型斜坡。

绑定 RX_00 显示转速,或绑定 TX_00 做目标转速下发。

Ruler

接收/发送绑定、水平/垂直方向、斜坡选项。

做位置、距离或角度的一维调节。

Battery

接收/发送绑定、水平/垂直方向、斜坡选项。

绑定电量百分比,低于阈值自动进入告警配色。

Temp

接收/发送绑定、方向、标记线和斜坡选项。

显示温度,并用 marker 标注告警线。

Volume

接收/发送绑定、水平/垂直方向、反向点亮和斜坡。

显示强度、电平、负载比例。

LED

RX/GX 通道选择、bit 位选择、亮灭颜色。

显示故障位、运行位、使能位。

ToggleSwitch

TX/RX 模式切换、通道、bit 位、方向。

TX 模式写使能位,RX 模式只读显示状态位。

DigitDisplay

文本/七段风格、小数位、接收通道。

只读显示关键数值,不承担发送。

ValueInput

TX/GX 通道选择。

输入目标值,点击发送后写入绑定通道。

LabelImage

文本/图像模式、文本样式、图片路径。

面板标注、Logo、静态示意图,不参与通道绑定。

可视化控件#

圆形仪表

适合转速、速度、角度、压力等连续量,可设置量程和告警区。

标尺

适合水平/垂直刻度型数据,例如位置、距离或角度。

电池

适合电量、电压百分比和低电量状态展示。

温度计

适合温度、热状态和参考标记线显示。

音量条

适合分段状态、强度或比例值展示。

LED

适合状态位、告警位和使能位显示。

拨动开关

可作为 TX 写 bit,也可作为 RX 读 bit 状态展示。

数码管 / 数值输入

适合关键数值显示、参数输入和控制量下发。

标签 / 图片

适合静态标识、设备分区和说明性图标。

Plot 波形#

Plot 可开多个窗口,每个窗口显示多通道曲线。曲线名称、颜色和数据源在数据面板的 Plot Channels 中配置,采样触发通常发生在协议帧解析完成后。

常用交互:

  • 侧栏眼睛图标:显示或隐藏曲线。

  • 颜色色块:修改曲线颜色。

  • 鼠标拖动:平移视图。

  • 滚轮:调整 X 轴可见点数 tail

  • 测量线 / 十字光标:读取坐标、差值和趋势。

Plot 源码能力包括 ManualRealtimeSlideAutoFitData 三类 X 轴模式,支持测量标记、选择区域、CSV 导入/导出,以及按通道独立显示/隐藏。数据缓冲采用环形写入,旧样本会在容量达到上限后自然覆盖。

3D 视图#

3D 视图可加载场景与模型,并通过通道绑定驱动姿态或节点参数。退出前与 3D 相关的状态可随档案系统保存。

源码中 3D 视图基于 DirectX 11 渲染目标,并使用 Assimp 加载模型或场景;视图状态包含相机 yaw/pitch/distance/target、灯光、材质参数、模型路径和顶点统计。通道绑定最终会写入节点或全局参数,适合姿态可视化、机构状态演示和设备数字孪生预览。

建议先确认三件事:

  1. 模型与场景资源可以正确加载。

  2. 数据面板中 RX / GX 通道值会随设备数据刷新。

  3. 3D 参数滑块或节点绑定选择了正确通道。

3D 脚本编写#

当前 3D 视图的“脚本”本质是 JSON 场景配置。它描述要加载的 OBJ 模型、每个节点的动作类型、旋转中心、使能轴和父子层级。模型建议在 Blender、SolidWorks 等工具中按关节或运动部件拆成独立 object/group,并保持清晰命名,例如 BaseShoulderElbowWrist

建模原则

一个会独立运动的部件,对应 OBJ 中一个独立节点;JSON 中的节点名必须与 OBJ 节点名一致。机械臂类模型尤其要把每个关节、连杆、末端执行器拆开。

基础结构如下:

{
  "models": [
    {
      "file": "robot_arm.obj",
      "nodes": {
        "Base": {
          "action": "rotation",
          "rotation_coordinates": [0, 0, 0],
          "rotation_axis_enable": [0, 1, 0]
        },
        "Shoulder": {
          "action": "rotation",
          "rotation_coordinates": [0, 0.15, 0],
          "rotation_axis_enable": [1, 0, 0],
          "parent": "Base"
        },
        "EndEffector": {
          "action": "transform",
          "parent": "Shoulder"
        }
      }
    }
  ]
}

字段说明:

字段

是否必填

说明

file

OBJ 文件路径,可用相对 JSON 的路径或绝对路径。

nodes

键是 OBJ 节点名,值是该节点动作配置。

action

rotation 表示关节旋转,transform 表示 6 自由度变换。

rotation_coordinates

rotation 必填

旋转中心,也就是机械关节的物理枢轴点。

rotation_axis_enable

rotation 必填

[x, y, z] 三轴使能,1 表示该轴参与旋转。

parent

指定父节点,构建正向运动学层级,例如 Base -> Shoulder -> Elbow

动作类型差异:

action

占用绑定槽位

用途

rotation

1

单个角度值驱动节点旋转,适合舵机、关节、云台轴。

transform

6

平移 XYZ + 旋转 XYZ,适合末端、平台或整体姿态。

旋转角度单位是度。源码按 Y -> X -> Z 的顺序组合四元数,并围绕 rotation_coordinates 指定的枢轴点旋转。也就是说,如果关节转起来位置不对,优先检查枢轴坐标,而不是先改绑定通道。

3D 绑定流程#

  1. 在数据面板配置 RX 通道,例如 RX_00 为 Base 角度,RX_01 为 Shoulder 角度。

  2. 打开 3D 视图并加载 JSON 场景配置。

  3. 展开姿态控制面板中的节点树,找到 BaseShoulder 等动作节点。

  4. 在对应滑块上右键,选择 接收 并绑定 RX_00RX_01

  5. 连接设备并开启协议后,设备上报角度,RX 通道刷新,3D 节点跟随运动。

如果需要反向控制设备,把滑块右键绑定到 发送 的 TX/GX 通道。此时拖动滑块会写回通道,再由 TX Frames 的 Auto 或手动发送下发。

3D 调试清单#

现象

优先检查

处理方式

模型没有部件树

OBJ 是否拆分 object/group。

回建模软件重新拆分并保留节点名称。

节点不运动

JSON 节点名是否和 OBJ 一致,绑定通道是否有值。

在数据面板确认 RX/GX 值刷新,再检查右键绑定。

旋转中心错误

rotation_coordinates

使用模型坐标系中的关节枢轴点,而不是随意填原点。

方向不对

rotation_axis_enable

调整 X/Y/Z 使能轴,必要时在公式里对角度取负。

绑定数量不够

3D 绑定槽位上限约 32。

优先绑定真正需要实时驱动的节点,transform 节点会占 6 个槽位。

做一个实时面板#

  1. 开启协议并配置 RX Frame。

  2. 添加 RX Channels,确认通道值刷新。

  3. 在数据面板添加 Plot Channels 或 GX 公式。

  4. 打开仪表、LED、数码管、开关或 Plot 窗口。

  5. 右键控件区域选择接收或发送绑定。

  6. 保存档案,复用当前布局与绑定关系。