介绍
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 中的数据收发流程由以下模块组成:
- 传输层:负责与外部设备或服务的数据交互。
- 数据编解码:处理来自传输层的字节流的解包和封包。
- 消息转换:根据特定设备协议从消息体中提取数据字段,或将数据字段组装成消息体。
- 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 实现复杂的自动化调试工作流程。

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