跳到主要内容

C 小程序设计

ETStudio 的小程序功能基于开源 VS Code,具有良好的可扩展性。理论上支持多种语言,但为符合当前用户的使用习惯,主要支持 C++ 与 C 语言的小程序设计、编译与运行。小程序使用标准的 C/C++ 编译器,除可调用软件提供的函数接口外,用户也可以引用 Windows 系统资源或其他现有库进行扩展。

小程序的主要用途

小程序是 ETStudio 的重要扩展机制,使 ETStudio 能满足仿真、分析、测试与诊断等复杂需求,并持续扩展其功能。小程序的典型用途包括:

  1. 使用易理解的编程语言模拟节点或模块;
  2. 生成事件报文、周期报文或带有附加条件的重复报文;
  3. 使用 PC 键盘模拟操作按钮等人工操作事件;
  4. 模拟节点的定时或网络事件;
  5. 模拟多个时间驱动事件,每个事件实现特定行为;
  6. 模拟常规操作、诊断或生产流程;
  7. 模拟物理参数或报文的变化;
  8. 模拟模块或网络故障以评估容错/防错机制;
  9. 提供网络测试、诊断等功能性测试库。

代码编辑器简介

可通过主界面 Tools 下的 Code Editor 图标打开代码编辑器界面:

也可以双击节点或在节点上右键选择 Editor 打开代码编辑器:

界面要点

1. 活动栏(Activity Bar) 位置:界面左侧垂直栏。 功能:提供若干图标用于快速访问核心功能:

  • 文件资源管理器:浏览项目文件与目录结构。
  • 搜索:在项目中搜索代码或文件。
  • 源代码管理:集成 Git 等版本控制操作(提交/推送)。
  • 运行与调试:执行或调试程序。
  • 扩展市场:浏览并安装扩展插件。

操作:点击图标切换功能视图,右键可自定义活动栏顺序。

2. 侧边栏(Sidebar) 位于活动栏右侧,展示所选图标对应的内容(例如文件树、扩展市场等)。可拖动边缘调整宽度。

3. 编辑区(Editor Area) 位于界面中间,是主要的代码编辑区域,支持多文件并排编辑、语法高亮与代码补全。

4. 状态栏(Status Bar) 位于界面底部,显示编码、语言模式、行列号、错误/警告提示等信息。

5. 命令面板(Command Palette)Ctrl+Shift+P 或通过 View → Command Palette 调用,可执行各种命令(如切换语言、安装扩展等)。

6. 菜单栏(Menu Bar) 包含 FileEditViewRunTerminal 等菜单,用于创建文件、保存、运行任务与打开设置等。

7. 终端(Terminal) 内置终端用于运行命令行操作(例如 npm install、运行 Python 脚本等),支持创建多个终端并切换 shell 类型(PowerShell、bash 等)。

8. 界面自定义 可通过命令面板或设置调整主题、布局、字体与快捷键等偏好。

9. 实用技巧

  • 多光标编辑:Alt+ClickCtrl+Alt+↑/↓ 添加多个光标。
  • 代码折叠:点击左侧折叠控制收起或展开代码块。
  • 快速打开文件:Ctrl+P 后输入文件名快速定位。

创建并运行最小结构的小程序

File 菜单中点击 New File,创建例如 test.cpptest.c 的小程序文件:

新建文件后会生成对应的编辑视图:

最小的 C 小程序示例(扩展名必须为 .cpp ,代码可以兼容C和C++):

#include "BaseMiniProgram.h"

void OnStart(){

}
void OnExit(){

}

添加示例输出代码:

#include "BaseMiniProgram.h"

void OnStart(){
show_console_message("started application...\\n");
}
void OnExit(){
show_console_message("finished application...\\n");
}

运行小程序时,会先执行 OnStart() 中的语句;程序结束时执行 OnExit(),上述示例将在控制台输出运行与结束信息:

访问全局变量

在 ETStudio 中通过 Setup → Global Variables 创建的系统变量,可在小程序中引用。示例:命名空间为 Test,变量名为 Button_1Led_1

在小程序中需要包含系统变量相关的头文件:

#include "BaseMiniProgram.h"
#include "SystemVariable.h" // 小程序的系统变量头文件

void OnStart(){
show_console_message("started application...\\n");
}
void OnExit(){
show_console_message("finished application...\\n");
}

给系统变量赋值:

Test::Button_1 = 1;

读取系统变量值:

testvalue = Test::button_1;

访问 DBC 与报文信号

发送报文

  1. 通过 dbc / ldf 文件导入

点击 Add 并选择要导入的 dbc 文件;对 ldf 文件的操作相同。

报文接收事件

报文定义与发送

具体的报文定义和发送示例请参考 C 小程序示例。

事件类型与用法

具体的代码配置可参照示例工程中的实现。

定时器的使用

定时器相关的定义与发送请参考 C 小程序示例。

小程序与仪表盘的交互

小程序编译与调试

将脚本绑定到节点的建议流程:先确保编译通过,然后启动工程并运行测试。 运行前请先启动项目。