跳到主要内容

介绍

CycBox 是一个强大且高度可扩展的 IoT 调试工具包,旨在帮助开发人员和工程师进行 **IoT 设备开发、协议分析、故障排查和自动化测试 **。 它支持多种通信协议,提供高效的用户界面和灵活的数据可视化方法。同时支持通过 Lua 脚本扩展功能,以满足各种场景的调试需求。

主要功能

  • 多协议支持:支持 Serial、TCP、UDP、MQTT、WebSocket 等多种协议,并且支持同时配置多个连接。
  • 高性能:具有 1ms 高精度计时器和低响应延迟(< 1ms)。
  • 灵活配置:支持可配置的数据收发流程,包括 AT 命令和 Modbus RTU 等标准协议,以及自定义消息帧结构。
  • 脚本支持:使用 Lua 脚本实现消息处理和响应,或编排复杂的自动化调试工作流程。
  • 高效 UI:界面根据协议类型优化数据展示形式和消息发送接口,包含搜索高亮和十六进制转换等实用功能。
  • 数据完整性:内置校验和算法,能够自动为发送数据添加校验位,并验证接收数据。
  • 数据可视化:仪表板支持图表绘制、快照捕获和数据导出。
  • 自动化:支持定时发送和命令序列配置,实现复杂调试流程的一键执行。
  • 跨平台:支持 Windows、Linux 和 Android。
  • WASM 插件:支持通过 WebAssembly 插件扩展编解码器、数据转换器等核心模块(实验性功能)。
  • MCP 接口:提供 MCP 接口,便于 AI Agent 集成用于调试(实验性功能)。

系统架构

CycBox 采用 Flutter + Rust 的技术栈。界面采用 Flutter 构建,确保跨平台的一致用户体验,而核心模块使用 Rust 编写,以实现高性能和安全性。 系统架构如下所示:

架构

CycBox 中的数据收发流程由以下模块组成:

  1. 传输层:负责与外部设备或服务的数据交互。
  2. 数据编解码:处理来自传输层的字节流的解包和封包。
  3. 消息转换:根据特定设备协议从消息体中提取数据字段,或将数据字段组装成消息体。
  4. Lua 脚本:灵活的"粘合"层,用于实现复杂的消息处理和响应逻辑。

传输层

传输层处理与外部设备或服务的交互。CycBox 支持基于流的传输层(如 Serial 和 TCP)以及基于消息的传输层(如 MQTT 和 WebSocket)。

传输层

数据编解码

CycBox 设计用于支持基于流和基于消息的两种协议。对于数据流,CycBox 采用编解码机制来分割和组装数据:

  • 解码器:根据协议规则将数据流分割成独立的消息包(Messages),然后传递给上层进行处理。
  • 编码器:将上层消息转换为字节流,并根据协议规则发送。

CycBox 包含多个内置编解码器,并支持通过 WebAssembly 插件自定义编解码器。

  • 透传(直通):直接传输和接收数据,无需任何编码或解码。
  • 行编解码器:根据换行符分割消息包,适用于文本协议。
  • 超时编解码器:适用于没有特定帧结构但消息传输间隔固定的场景。
  • 帧编解码器:提供灵活可配置的数据帧结构,支持前缀、报头、长度和校验和等字段。它能自动使用选定的算法验证帧数据,并在传输时添加校验和数据。
  • AT 指令编解码器:为基于 AT 命令集的设备调试而设计,支持常见 AT 命令格式的解析和封装。
  • Modbus RTU:内置 Modbus RTU 协议解析和数据验证;发送数据时自动添加校验和。
  • Modbus TCP:内置 Modbus TCP 协议解析。
  • WebAssembly 插件:允许用户通过 encode/decode 接口实现自定义编解码器,以满足复杂的协议需求。

编解码

数据转换

数据转换模块负责从消息包(Messages)中提取数据字段转换为数值,或将数值组装成消息包。CycBox 为数据转换提供三个响应时间点:

  • 编解码器:除了解包和封包外,编解码器还可以为特定协议(例如 Modbus)将数据字段提取为数值。
  • 数据转换器:为常见格式(如空格分隔的数值文本、JSON 文本等)提供的内置转换器。
  • Lua 脚本:CycBox 使用 Lua 脚本为特定设备提供数值解析和转换操作。

数据转换

可视化图表

可视化图表功能允许用户配置 UI,将接收到的数值转换为物理量,并使用折线图实时显示。用户还可以对图表进行快照或将数据导出为 CSV 文件用于离线分析。

可视化图表

Lua 脚本

CycBox 支持 Lua 脚本来实现复杂的消息处理和自定义功能。

通常,Lua 脚本用于读取消息帧数据并将其解析为数值,或根据接收内容动态生成响应消息。它们还可以基于计时器事件和延迟发送 API 实现复杂的自动化调试工作流程。

Lua 脚本

MCP 接口

CycBox 通过命令行应用 cyc 提供 MCP(消息控制协议)接口,便于与 AI Agent 等外部系统的集成以进行调试。 cyc 命令支持通过 YAML 配置启动服务,并为特定协议提供消息收发接口。(注意:MCP 功能目前处于测试阶段。如需使用,请联系 yplam@yplam.com 获取试用。)