1. EBCompiler

EB(EdgeBus)是一款运行在低功耗MCU上的虚拟机,EB是基于通过TypeScript编程可实现复杂传感器对接业务。EB的详细介绍见 EB compiler SDK 使用说明 。
ThinkLink 提供了EB的云编译平台,用户输入TypeScript代码后,即可实现在线编译成obin文件用于设备升级。
推荐使用 EBHelper 简化开发
手写 EB 表达式需要深入了解 SDK 底层 API,工作量大且容易出错。 EBHelper 是官方提供的"配置即代码"工具集——只需填写一份 JSON 风格的
UserConfUPItem配置,即可自动生成查询事件、上行事件、COV 阈值分配、CRC 规则等全部 EB 代码。 支持 Modbus RTU、DL/T 645-2007、CJ/T 188 等主流协议,大幅降低 EB 开发门槛。
- 文档:EBHelper 使用说明
- 代码示例:EBHelper 示例代码
- 源码:
source/EBSDK/EBCompiler/plugins/EBHelper.ts
1.1. 新增EB代码
注意1 :与使用SDK不同的是,main 函数 编写和运行已经内置到云编译内部,在代码中需要剔除。
注意2 :每个代码要保持BzType 和 BzVersion 的组合是唯一的,否则会造成设备升级失败
注意3 : SwVersion的版本要与设计设备的固件版本保持一致,当前最新的EB版本为31
- [ 1 ] 点击新增后,系统会默认给出一个示例,将编写好的代码将示例代码替换即可。
- [ 2 ] 给EB代码起个名字,加上备注
- [ 3 ] 点击运行后,可生成对应的obin文件
- [ 4 ] 点击保存固件包,可将编译生成的固件包保存到系统中,用于EB升级。
- [ 5 ] 点击保存,可EB的代码保存到系统中

1.2. 使用 EBHelper 快速开发
对于 Modbus、DL/T 645-2007、CJ/T 188 等标准协议,强烈建议使用 EBHelper 代替手写 EB 底层代码。
对比:手写 vs EBHelper
| 方面 | 手写 EB 表达式 | 使用 EBHelper |
|---|---|---|
| 代码量 | 数百行 | 十几行 JSON 配置 |
| CRC 规则 | 需手动配置 | 自动按协议选择 |
| 地址长度 | 需手动设置 | 按协议自动推断 |
| COV 阈值分配 | 需手动管理 APP 段偏移 | 自动分配,不冲突 |
| 上行帧布局 | 需手动计算 txIndex | 自动计算 |
| 周期可调 | 需手动绑定 APP 段 | upPeriodIndex: -1 一行搞定 |
最简示例(Modbus RTU)
typescript
import { EBModel, UserConfUPItem, EventInfoItem } from "@EBSDK/EBCompiler/all_variable";
import { CheckbitEnum, getOtaConfig } from "@EBSDK/otaConfig";
const eventInfo: UserConfUPItem[] = [
{
dataType: "0x23",
upPeriodIndex: -1, // 自动分配 APP 段周期寄存器,支持运行时 RPC 调整
quInfo: [
{
protocol: "modbus",
addr: "0x01",
code: "0x03",
listVal: [
{ start: "0x0000", end: "0x0001", covType: "Uint32BE" }
]
}
]
}
];
let otaConfig = getOtaConfig({
SwVersion: 31, BaudRate: 9600, StopBits: 1,
DataBits: 8, Checkbit: CheckbitEnum.NONE,
BzType: 10001, BzVersion: 1
});
const MAIN_FUNC = (ebModel: EBModel) => {
for (const conf of eventInfo) {
const ev = new EventInfoItem(conf);
ev.upEventSetup();
ev.eventInstall();
}
return JSON.stringify(ebModel, null, 2);
};更多协议示例(DL/T 645-2007、CJ/T 188)参见 EBHelper 示例代码。