监听变量的变化,发送Lin信号并手动设置错误的CheckSum 
感谢Alex提供示例
CAPL分析 
给到的CAPL示例如下:
ts
on envVar EnvChecksumError  
{
  if (1 == getValue(EnvChecksumError))  // Checksum err
  {
     write("Checksum err");
    linSetManualChecksum(frmAC_1, linGetChecksum(frmAC_1) - 1);
    //linSetManualChecksum(frmReq, linGetChecksum(frmReq) - 1);
    
    //output(frmReq);
    output(frmAC_1);
  }
}CAPL代码解析 
这段CAPL脚本的核心逻辑如下:
- 环境变量监听:
on envVar EnvChecksumError监听名为EnvChecksumError的环境变量变化 - 条件判断:当变量值为1时,触发错误注入逻辑
 - 错误注入: 
linGetChecksum(frmAC_1)获取正确的CheckSum值linSetManualChecksum(frmAC_1, checksum - 1)手动设置一个错误的CheckSum(减1)output(frmAC_1)发送带有错误CheckSum的Lin消息
 
NOTE
- 技术要点:Lin总线的CheckSum机制是保证数据完整性的重要手段。通过故意设置错误的CheckSum,可以测试接收节点的错误处理能力。
 - 测试设备:这里我们选择LinCable作为测试设备,因为它可以灵活的注入各种LIN错误。
 
EcuBus-Pro中的变量配置 
第一步:创建环境变量 
要实现变量监听功能,首先需要在EcuBus-Pro中创建对应的环境变量。环境变量是脚本与用户界面交互的重要桥梁。
操作路径:Others → Variable → Add Variable

变量配置要点:
- 变量名称:
EnvChecksumError(需与CAPL脚本中的变量名保持一致) - 变量类型:整型(Integer)
 - 初始值:0(表示正常状态)
 - 取值范围:0-1(0=正常,1=触发错误)
 
第二步:验证变量创建 
创建完成后,可以在变量列表中查看和管理已创建的变量:

在变量列表中,您可以:
- 查看变量的当前值
 - 修改变量配置
 - 删除不需要的变量
 - 导出/导入变量配置
 
用户界面控制面板配置 
第三步:创建控制面板 
为了方便在测试过程中动态控制变量值,我们需要创建一个用户界面面板。通过图形化界面,测试人员可以实时切换变量状态,无需修改代码。
操作路径:Home → Panel → Add Panel

面板设计建议:
- 使用开关按钮或切换按钮来控制0/1状态
 - 按钮文字设置为"发送CheckSum错误帧"等描述性文字
 - 合理布局,确保操作直观易懂
 
第四步:变量绑定 
创建面板控件后,需要将其与环境变量进行绑定,建立控件与变量之间的双向数据关联。

绑定配置:
- 目标变量:选择之前创建的 
EnvChecksumError变量 - 控件类型:布尔型开关(Boolean Switch)
 - 映射关系:OFF=0(正常),ON=1(触发错误)
 
第五步:界面预览 
配置完成后,可以预览最终的用户界面效果:

界面特点:
- 实时显示当前变量状态
 - 支持一键切换操作
 - 直观的视觉反馈
 
EcuBus-Pro TypeScript脚本实现 
第六步:编写TypeScript脚本 
现在我们将CAPL逻辑转换为EcuBus-Pro的TypeScript脚本。相比CAPL,TypeScript提供了更好的类型安全和开发体验。
typescript
Util.OnVar("EnvChecksumError", ({ value }) => {
    if (value == 1) {
        console.log("Checksum err");
        const msg: LinMsg =
        {
            frameId: 0x3c,
            direction: LinDirection.SEND,
            data: Buffer.from([0x60, 0x01, 0xb5, 0xff, 0xff, 0xff, 0xff, 0xff]),
            checksumType: LinChecksumType.CLASSIC,
            lincable:{
                checkSum:3,//错误的校验和
            }
        }
        output(msg);
    }
});脚本详细解析 
1. 变量监听机制
typescript
Util.OnVar("EnvChecksumError", ({ value }) => {
    // 回调函数,当变量值改变时触发
});Util.OnVar()是EcuBus-Pro提供的变量监听API- 支持解构赋值语法,直接获取 
value参数 - 回调函数在变量值发生变化时自动触发
 
2. Lin消息构造
typescript
const msg: LinMsg = {
    frameId: 0x3c,              // Lin帧ID(十六进制)
    direction: LinDirection.SEND, // 发送方向
    data: Buffer.from([...]),    // 数据字节数组
    checksumType: LinChecksumType.CLASSIC, // 校验和类型
    lincable: {
        checkSum: 3             // 手动设置的错误校验和
    }
}3. 关键参数说明
| 参数 | 说明 | 示例值 | 
|---|---|---|
frameId | Lin帧标识符 | 0x3c (60) | 
direction | 消息方向 | LinDirection.SEND | 
data | 数据负载 | 8字节数据数组 | 
checksumType | 校验类型 | CLASSIC 或 ENHANCED | 
checkSum | 手动校验和 | 3(故意设置错误值) | 
4. 错误注入原理
正常情况下,Lin消息的CheckSum应该根据数据内容自动计算。但在测试场景中,我们通过 lincable.checkSum 手动指定一个错误的值(如3),从而模拟传输错误,测试接收节点的错误处理能力。
测试运行与验证 
第七步:运行测试 
完成所有配置后,就可以运行测试了。通过界面上的开关按钮控制变量值,观察Lin消息的发送情况。
