跳转到内容

脚本

基于node.js环境中TypeScript/JavaScript的脚本。 我们使用ts进行语法检查,使用esbuild构建脚本,构建脚本位于.ScriptBuild文件夹中。

编辑器

推荐使用Vscode编辑脚本,您可以安装TypeScript扩展以获得语法检查和智能提示功能。 alt text

TIP

我们还计划提供一个vscode扩展,让您可以直接在vscode中构建脚本。

构建脚本

alt text 如果脚本中有任何错误,您可以在Message窗口中获取构建错误信息。 alt text

脚本API

您可以打开API窗口获取API信息。 alt text

或查看此在线文档API

脚本使用

Node.js功能

初始化

Init函数是脚本的入口点,在脚本加载时会被调用。

typescript
Util.Init(() => {
  console.log('Init')
})

定时器

定时器是node.js的内置功能,您可以使用它来执行一些周期性工作。 有关定时器的更多详细信息,请参阅Timer

typescript
// periodical output can message
let timer = setInterval(() => {
  outputCan(canMsg)
}, 1000)

// stop the timer
clearInterval(timer)

//refresh the timer
timer.refresh()

按键事件

监听按键事件,您可以在按键被按下时执行一些操作。

typescript
// listen to the key event
Util.OnKey('s', () => {
  outputCan(canMsg)
})

CAN消息监听

监听CAN消息,您可以在接收到CAN消息时执行一些操作。

typescript
// listen to the can message
Util.OnCan(0x1, (msg) => {
  console.log(msg)
})
// listen all can message
Util.OnCan(true, (msg) => {
  console.log(msg)
})

事件监听

监听UDS消息。 ${tester name}.${service item name}.recv用于监听接收到的UDS消息。 ${tester name}.${service item name}.send用于监听发送的UDS消息。

typescript
// listen to the uds message
Util.On('Can.DiagRequest.recv', (msg) => {
  //receive diag response
})
Util.On('Can.DiagRequest.send', (msg) => {
  //receive diag request
})

示例

在脚本初始化时发送10条CAN消息,然后在30秒延时后发送另一条消息
typescript
async function sendCanMessage(msgId: number, targetId: number, dataPattern: string) {
    console.log(`sendCanMessage called with msgId: ${msgId}, targetId: ${targetId}`);

    const dataBytes = Buffer.from(dataPattern.repeat(8), 'hex');
    console.log("Total Length:", dataBytes.length);

    const fdMsg: CanMessage = {
        id: targetId,
        dir: 'OUT',
        data: dataBytes,
        msgType: {
            idType: CAN_ID_TYPE.STANDARD,
            brs: true,
            canfd: true,
            remote: false,
        }
    };

    try {
        await output(fdMsg);
    } catch (error) {
        console.error(`CAN FD 发送失败 (ID: ${msgId}):`, error);
    }

}

Util.Init(async () => {
    console.log("Init");
    // 循环 10 次,定义不同的消息 ID 和数据内容
    for (let i = 0; i < 10; i++) {
        const msgId = 0x510 + i;
        const targetId = 0x520 + i;
        const dataPattern = i % 2 === 0 ? '1234567890ABCDEF' : 'FFAABBCCDDEE5599';
        await sendCanMessage(msgId, targetId, dataPattern);
    }

    setTimeout(() => {
        console.log("Timeout triggered, preparing to send CAN message...");
        const msgId = 0x510 + 10;
        const targetId = 0x520 + 10;
        const dataPattern = 'DEADBEEFCAFEBABE';
    
        sendCanMessage(msgId, targetId, dataPattern);
    }, 30000); // 延时 30 秒
})