2. 开发环境搭建:Vector DaVinci Developer安装、配置许可、创建第一个SWC工程

好,咱们正式开始动手了。这一章我带你把吃饭的家伙先支起来——Vector DaVinci Developer。说实话,这工具我第一次用的时候也觉得有点懵,菜单多、术语多,但摸清楚套路之后,你会发现它其实挺顺手的。

2.1 安装前的准备工作

别急着双击安装包。先花五分钟检查三件事,能省掉后面一堆麻烦。

检查项 要求 我的建议
操作系统 Windows 10 64位 或 Windows 11 别用家庭版,专业版或企业版最稳
内存 至少8GB,推荐16GB 我开三个工程同时对比时,16GB都感觉有点紧
硬盘空间 至少20GB空闲 装完工具+几个工程,10GB就没了
.NET Framework 4.7.2或更高 Windows Update打全了基本没问题
⚠ 特别注意: 路径中不要有中文、空格或特殊字符。我见过有人把工程放在"桌面"上,结果编译报错找了半天——就是路径里的中文闹的。

2.2 安装DaVinci Developer

安装过程其实不复杂,但有几个关键点我得跟你提一下。

  1. 以管理员身份运行安装程序。右键→"以管理员身份运行",别偷懒。
  2. 选择安装组件时,默认是全选的。如果你只是做SWC开发,保留核心模块就行,文档可以后面再补。
  3. 安装路径我建议用默认的 C:\Vector\DaVinci Developer\,别改到奇奇怪怪的地方去。
  4. 安装过程中会弹几次命令行窗口,那是它在注册COM组件,别关掉,等它自己跑完。
💡 小技巧: 安装完成后,先重启一次电脑。有些环境变量需要重启才能生效,别问我怎么知道的——有一次我硬是折腾了半小时才发现没重启。

2.3 配置许可(License)

嗯,这一步是很多人卡住的地方。DaVinci Developer的许可方式有好几种,我挑最常见的两种说。

2.3.1 网络浮动许可(Network License)

公司里一般用这种。你需要拿到许可服务器的IP地址和端口号。

  1. 打开DaVinci Developer,第一次启动会自动弹出License配置向导。
  2. 选择 "Network License"。
  3. 输入服务器地址,格式如 @192.168.1.100(前面加@符号)。
  4. 点击"Test Connection",看到绿色勾就对了。

我遇到过的情况: 测试连接成功,但打开工程时还是报"No license available"。后来发现是公司VPN没连上,许可服务器根本ping不通。先确认网络连通性,再查许可。

2.3.2 本地节点锁定许可(Node-Locked License)

个人电脑或离线环境用这种。你会拿到一个 .lic 文件。

  1. 打开DaVinci Developer,进入 Help → License Manager。
  2. 点击 "Install License File"。
  3. 选择你的 .lic 文件,确认。
  4. 重启工具,在Help→About里能看到许可有效期。
⚠ 注意: 节点锁定许可是绑定机器指纹的。换了网卡、重装了系统,许可可能就失效了。需要联系Vector重新生成。

2.4 认识DaVinci Developer界面

安装配置搞定,咱们打开看看。第一次启动会有一个欢迎页,关掉它,咱们直接进工作区。

DaVinci Developer 主界面布局 菜单栏 / 工具栏 工程浏览器 ▶ MyFirstSWC ├─ Components │ ├─ SwcEngineControl │ └─ SwcBodyControl ├─ Ports │ ├─ RPort_Speed │ └─ PPort_Torque ├─ Runnables │ ├─ Runnable_Init │ └─ Runnable_10ms └─ DataTypes └─ EngineSpeed_T 组件设计视图 SWC: SwcEngineControl SwcEngineControl Runnable_10ms RPort_Speed PPort_Torque 属性面板 属性 Name: SwcEngineControl Type: ApplicationSwc Cycle: 10 ms Ports: 2 端口详情 RPort_Speed (uint16) PPort_Torque (uint16) 输出窗口 / 日志 / 错误列表

界面分四大块,我简单说一下:

  • 工程浏览器(左):这里看到的是你的SWC、端口、Runnable、数据类型。说白了就是你的工程目录树。
  • 组件设计视图(中):拖拖拽拽画SWC的地方。你在这里定义端口、连接Runnable。
  • 属性面板(右):选中一个元素,这里就显示它的详细属性。比如Runnable的周期、端口的数据类型。
  • 输出窗口(底):编译信息、错误提示都在这里。养成习惯,每次操作完扫一眼这里。

2.5 创建第一个SWC工程

好,重头戏来了。咱们创建一个最简单的SWC工程,感受一下整个流程。

2.5.1 新建工程

  1. 点击 File → New → DaVinci Project。
  2. 输入工程名称,比如 MyFirstSWC。
  3. 选择工程保存路径。记住我之前说的——不要有中文和空格。
  4. 点击 Finish。

几秒钟后,你会看到一个空白的工程。嗯,现在它还是个空壳子。

2.5.2 创建SWC(Software Component)

  1. 在工程浏览器中,右键 Components → New Component。
  2. 选择 ApplicationSwc 类型。这是最常用的,说白了就是你的应用逻辑所在。
  3. 输入名称:SwcEngineControl。
  4. 点击 OK。
💡 命名规范: 我习惯用"Swc"前缀,后面跟模块名。比如SwcEngineControl、SwcBodyControl。团队里统一命名风格,后面维护起来省心很多。

2.5.3 添加端口(Ports)

SWC需要跟外界通信,端口就是它的"嘴巴"和"耳朵"。

  1. 选中 SwcEngineControl,右键 → New Port。
  2. 选择 ReceiverPort(接收端口),名称填 RPort_Speed。
  3. 数据类型选择 uint16(16位无符号整数)。
  4. 同样的方式再创建一个 SenderPort(发送端口),名称 PPort_Torque,数据类型也是 uint16。

你想想看,这个SWC接收车速信号,输出扭矩请求——一个最简单的控制闭环就有了。

2.5.4 添加Runnable(可运行实体)

Runnable就是SWC里真正干活儿的函数。每个Runnable有它自己的执行周期。

  1. 右键 SwcEngineControl → New Runnable。
  2. 名称填 Runnable_10ms。
  3. 在属性面板中,设置 Cycle 为 0.01(单位是秒,0.01秒=10ms)。
  4. 把刚才的两个端口拖到Runnable上,建立连接。

我个人的习惯: Runnable的命名里带上周期,比如Runnable_10ms、Runnable_100ms。这样一看名字就知道它跑多快,不用点进去查属性。

2.5.5 生成代码框架

设计完了,让工具帮我们生成代码骨架。

  1. 点击工具栏上的 Generate Code 按钮(或者按 Ctrl+G)。
  2. 选择输出路径,一般用默认的 ./generated 目录。
  3. 点击 Generate。

生成完成后,打开输出目录,你会看到类似这样的文件结构:

MyFirstSWC/
├── generated/
│   ├── SwcEngineControl.c
│   ├── SwcEngineControl.h
│   ├── Rte_SwcEngineControl.h
│   └── Rte_SwcEngineControl.c
├── MyFirstSWC.dpa
└── MyFirstSWC.dpa.bak

打开 SwcEngineControl.c,你会看到工具已经帮你生成了Runnable的函数骨架:

/* Runnable: Runnable_10ms */
void Runnable_10ms(void)
{
    /* Read received data */
    uint16 Speed = Rte_Read_RPort_Speed();

    /* TODO: Insert your application logic here */

    /* Write sent data */
    Rte_Write_PPort_Torque(Speed);
}

看到没?端口读写函数都帮你生成了。你只需要在中间填上你的业务逻辑就行。

⚠ 注意: 生成的代码是框架,不要手动修改Rte_开头的文件。那些是RTE(运行时环境)相关的,下次生成会被覆盖。你只需要在 SwcEngineControl.c 里写逻辑。

2.6 验证工程

最后一步,验证一下工程有没有问题。

  1. 点击 Project → Check Consistency。
  2. 看输出窗口,如果全是绿色的"OK",恭喜你,第一个SWC工程搭建成功。
  3. 如果有红色错误,双击错误信息,工具会自动定位到问题位置。
💡 避坑指南: 我曾经遇到一个错误,提示"Port data type not defined"。查了半天,原来是创建端口时选了自定义数据类型,但忘了在DataTypes里定义。后来我学乖了,初期一律用基础类型(uint8、uint16、boolean),等架构稳定了再细化数据类型。

好了,到这里你已经完成了第一个SWC工程的创建。从安装、配置许可,到画SWC、加端口、加Runnable,再到生成代码——这一套流程走下来,后面再创建新工程就是复制粘贴的活儿了。