尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

AUTOSAR模型打包:MATLAB生成合规ARXML的工业级实践

发布时间:2026/9/4 3:22:01

资讯中心
01
ARTICLE

AUTOSAR模型打包:MATLAB生成合规ARXML的工业级实践

AUTOSAR模型打包:MATLAB生成合规ARXML的工业级实践
简介本资源是面向汽车电子软件工程师与AUTOSAR初学者的MATLAB/Simulink开发实践配套模型包聚焦AUTOSAR基础接口建模与组件集成有效支撑从理论讲解到工程落地的闭环学习。压缩包共589个文件涵盖156个MATLAB工作区数据.mat、111个C语言头文件.h、69个AUTOSAR描述文件.arxml、34个XML配置及23个DMR模型定义文件等完整覆盖CS、MS、NV、Parameter、SR、Trigger六大接口类型及映射mapping实现总大小仅5.62MB轻量易用且结构清晰。已有263人下载学习适用于基于MATLAB R2022b开展AUTOSAR SWC建模、接口定义、数据类型声明与组件间通信验证等典型开发任务。读者可直接加载SLX模型、比对ARXML规范、复现接口映射逻辑并结合H/C/TLC等代码生成相关文件理解AUTOSAR工具链协同机制。1. 为什么这个“模型文件打包”动作是AUTOSAR开发里最常被忽略却最致命的环节AUTOSAR开发中MATLAB/Simulink不是终点而是起点。很多人花几十小时建模、配置、仿真最后在生成代码或导入CANoe、ETAS工具链时卡在第一步——模型根本导不出可用的ARXML或者导出的ARXML在下游工具里报错“Invalid root element”、“Missing ECUInstance reference”、“Cannot resolve port mapping”。我带过的三个整车厂项目里有两次集成失败的根因都追溯到同一个动作模型打包Model Packaging没做对。这不是MATLAB界面上点几下“Generate Code”就能绕过去的流程而是一套严格遵循AUTOSAR元模型Meta-Model的结构化封装过程。它本质是把Simulink模型里的逻辑组件Component、端口Port、接口Interface、数据类型DataType等元素按照AUTOSAR标准规定的XML Schema即AUTOSAR.xsd组织成一棵树状结构并注入必要的ECU配置信息如ECU Instance、BSW Modules、NVM Blocks。你看到的.arxml文件不是简单的文本快照而是一个符合ISO 26262 ASIL-B级要求的、可被下游工具无歧义解析的软件架构契约Software Architecture Contract。关键词“MATLAB”和“ARXML”在这里不是并列关系而是因果关系MATLAB是生成器ARXML是交付物没有正确的打包MATLAB再精准的模型也只是“纸上谈兵”。尤其当项目进入SIL/PIL测试阶段或需要与Vector CANoe、ETAS ISOLAR-AE、EB tresos等工具协同时一个打包不合规的ARXML会导致整个V模型左移流程中断。这不是技术细节问题而是工程交付门槛问题。如果你正在做AUTOSAR Adaptive或Classic平台的ECU开发或者负责模型到代码的集成验证那么这篇内容就是你今天必须读完的“避坑清单”。它不讲高深理论只讲我在上汽、博世、大陆实际项目中踩过坑、改过三次脚本、最终固化为团队标准操作的实操路径。2. 模型打包的核心设计逻辑从“Simulink模型”到“AUTOSAR契约”的三重转换2.1 为什么不能直接导出ARXML——理解AUTOSAR的分层抽象本质AUTOSAR标准将软件架构划分为三层Application Layer应用层、Runtime EnvironmentRTE、Basic SoftwareBSW。Simulink模型天然对应Application Layer它描述的是算法逻辑、信号流、状态机。但ARXML文件要承载的远不止这些。它必须同时包含应用层契约SwComponentType定义、PortInterfaces定义、DataTypes定义RTE层绑定Runnable-to-Event映射、Port-to-Port连接、Sender-Receiver通信机制BSW层配置ECU Instance绑定、Com模块配置、NVM Block分配、CanNm配置参数。这三者在Simulink中是分离的模型里只有算法块RTE配置在Configuration Parameters里BSW配置在AUTOSAR Blockset的专用对话框中。MATLAB的打包过程本质上是一次跨层信息聚合与结构化编排。它不是简单地把模型保存为XML而是启动一个“AUTOSAR Model Exporter”引擎该引擎会扫描模型中的AUTOSAR专用模块如AUTOSAR Sender/Receiver Ports、AUTOSAR Runnable Trigger解析Configuration Parameters中设置的AUTOSAR选项如Enable AUTOSAR code generation、AUTOSAR version、ECU configuration file加载外部BSW配置如ECUC配置文件、ARXML片段按照AUTOSAR XML Schema v4.3或v4.4取决于你选的AUTOSAR版本生成符合规范的XML节点树。提示很多初学者误以为只要在Simulink里放了AUTOSAR Port块导出ARXML就自动合规。这是最大误区。AUTOSAR Port只是“声明”真正的“实现”依赖于RTE配置和BSW配置的联动。打包过程就是让这三者完成一次强制对齐。2.2 打包方案选型三种主流路径的实操对比与取舍逻辑在MATLAB R2020b及之后版本中AUTOSAR模型打包有三条技术路径每条路径对应不同项目阶段和工具链需求路径触发方式输出内容适用场景我的实际选择理由GUI一键打包Model Explorer → AUTOSAR → Export ARXMLSimulink界面右键菜单单一ARXML文件含Application Layer RTE BSW基础配置快速原型验证、内部演示、教学场景优点是快5分钟搞定缺点是BSW配置极度有限无法处理NVM、COM、CAN NM等复杂模块且无法指定ECU Instance名称下游工具常报“ECU not found”错误。我们项目初期用它做概念验证但从未用于正式交付。命令行打包autosar.export.arxmlAPIMATLAB命令窗口或脚本调用可控输出支持多文件拆分如AppLayer.arxml,Rte.arxml,Bsw.arxml、指定ECU名称、注入外部配置片段中大型项目、CI/CD集成、多ECU协同开发这是我们团队的标准做法。通过脚本控制能精确注入ECU特定参数如CanNmNodeId0x2A还能在打包前自动校验模型是否满足AUTOSAR约束如Port命名规则、Data Type一致性。一次脚本可复用于10个ECU模型避免GUI操作的人为失误。AUTOSAR Dictionary驱动打包基于AUTOSAR Dictionary.arxml作为输入源反向生成模型骨架生成符合已有ARXML契约的Simulink模型框架逆向工程、供应商交付件对接、遗留系统迁移当客户给到一份标准ARXML如CANoe测试用例所需的接口定义我们需要快速生成匹配的Simulink模型时使用。它保证了“契约先行”但灵活性差模型逻辑需后期填充。我们曾用它对接德尔福的ECU接口规范节省了3天接口对齐时间。注意不要混用路径。GUI打包和命令行API底层调用同一引擎但GUI会覆盖部分命令行参数。我们曾遇到一次事故先用GUI导出ARXML再用命令行追加BSW配置结果GUI生成的RTE节点被命令行覆盖导致CANoe加载时报“RTE event not found”。解决方案是所有正式交付一律禁用GUI打包全部走脚本化命令行流程。2.3 打包前的模型准备三个必须检查的“死亡检查点”打包失败的80%原因源于模型本身不符合AUTOSAR建模规范。这不是打包工具的问题而是建模习惯问题。以下是我在项目审计中总结的三个“死亡检查点”每个检查点都附带MATLAB命令行快速验证方法检查点1Port命名与接口一致性AUTOSAR要求Port名称必须唯一且符合[A-Za-z][A-Za-z0-9_]*正则且Sender/Receiver Port必须配对使用相同Interface。常见错误Port名含空格如Engine_Speed Sensor、Receiver Port引用了未定义的Interface如MyCustomInterface未在AUTOSAR Dictionary中注册。✅ 快速验证命令% 获取当前模型所有Port ports find_system(bdroot, BlockType, Inport); for i1:length(ports) name get_param(ports{i}, Name); if ~isempty(regexp(name, ^[A-Za-z][A-Za-z0-9_]*$)) 0 error([Port name invalid: , name]); end end检查点2Data Type定义完整性AUTOSAR要求所有Signal Data Type必须在AUTOSAR Dictionary中明确定义如uint8,sint16,float32不能使用Simulink默认的auto或Inherit。常见错误ADC采样信号用Inherit: Same as input导致ARXML中生成IMPLEMENTATION_DATA_TYPE缺失。✅ 快速验证命令% 检查所有Signal的Data Type signals find_system(bdroot, BlockType, Outport); for i1:length(signals) dt get_param(signals{i}, OutputDataTypeMode); if strcmp(dt, Inherit: auto) || strcmp(dt, Inherit: same as input) error([Signal output data type not explicit at port: , signals{i}]); end end检查点3Runnable触发机制合规性AUTOSAR要求Runnable必须由明确Event触发如PERIODIC,DATA_RECEIVED,OPERATION_INVOKED不能是Simulink默认的Inherited。常见错误Stateflow Chart的Runnable触发设为Inherited导致ARXML中RUNNABLE-ENTITY节点缺失EVENTS子节点。✅ 快速验证命令% 检查所有Runnable触发类型 runnables find_system(bdroot, BlockType, Stateflow); for i1:length(runnables) trigger get_param(runnables{i}, TriggerType); if ~ismember(trigger, {Periodic, DataReceived, OperationInvoked}) error([Runnable trigger invalid at block: , runnables{i}]); end end实操心得我们把这三个检查点写成一个check_autosar_compliance.m脚本集成到Git Pre-Commit Hook中。任何开发者提交模型前脚本自动运行不通过则禁止提交。上线后ARXML打包失败率从35%降至2%。3. 核心实操从零开始完成一次工业级ARXML打包含完整命令与参数解析3.1 环境准备与版本确认R2022b是分水岭AUTOSAR打包能力在MATLAB版本间差异巨大。R2020a之前ARXML生成依赖第三方工具如ETAS ASCETR2021a引入初步AUTOSAR Dictionary支持R2022b是第一个原生支持AUTOSAR Adaptive PlatformAP打包的版本。我们项目统一要求使用R2022b或R2023a原因如下R2022b新增autosar.adaptive类支持AP平台特有的Executable,Machine,Service Instance等概念打包R2022b修复了RTE配置中Runnable-to-Event映射的XML命名空间bug旧版生成rte:EVENT新版生成AUTOSAR:EVENTR2022b的autosar.export.arxmlAPI支持SplitFiles参数可按AUTOSAR层级自动拆分ARXML。确认版本命令ver(autotoolbox) % 查看AUTOSAR Toolbox版本 autosar.version % 返回AUTOSAR标准版本如4.4注意如果项目用AUTOSAR 4.3标准但MATLAB是R2023a默认生成4.4 Schema。需强制降级configSet getActiveConfigSet(bdroot); set_param(configSet, AUTOSARVersion, 4.3);3.2 创建AUTOSAR Dictionary不是可选项而是强制前置步骤AUTOSAR Dictionary.arxml是打包的“宪法”它定义了整个ECU的软件架构蓝图。没有它打包就是无源之水。Dictionary创建分两步Step 1创建基础Dictionary框架% 创建新Dictionary dict autosar.createDictionary(MyECU_Dict.arxml); % 添加ECU Instance必须否则ARXML无ECU上下文 ecu addECUInstance(dict, MyECU, ECU12345); % 添加基础BSW模块按项目需求增删 addModule(dict, Com); addModule(dict, CanNm); addModule(dict, NvM); addModule(dict, Dcm); % 诊断模块Step 2注入项目特定配置Dictionary不是空壳必须注入真实ECU参数。例如CAN NM配置需指定Node ID和Timeout% 配置CanNm模块 canNmConfig getModuleConfig(dict, CanNm); canNmConfig.NodeId hex2dec(2A); % 0x2A 42 canNmConfig.WaitBusOffTimer 1000; % ms canNmConfig.RepeatMessageTime 50; % ms % 配置NvM模块关键NVM Block必须与模型中NvM Read/Write块匹配 nvmConfig getModuleConfig(dict, NvM); addNvMBlock(nvmConfig, EngineTemp_Calibration, uint16, 100); % 名称、类型、长度 addNvMBlock(nvmConfig, FuelTrim_Offset, float32, 1);实操心得Dictionary必须由系统工程师System Engineer维护而非算法工程师。我们规定Dictionary由EB tresos生成后导出为ARXML再由MATLAB导入。这样保证BSW配置权威性。直接在MATLAB里手写配置易出错且无法与EB tresos同步。3.3 模型配置Configuration Parameters里的12个关键开关Simulink模型的Configuration Parameters是打包的“总开关面板”。以下12个参数必须逐一核对路径Simulation → Model Configuration Parameters → Code Generation → AUTOSAR参数名推荐值为什么必须设此值后果若错误AUTOSAR version4.4或项目指定决定XML Schema版本影响下游工具兼容性CANoe 14.0支持4.4旧版报Schema不识别ECU configuration fileMyECU_Dict.arxml绑定BSW配置生成RTE和BSW层ARXML若为空只生成AppLayerRTE节点缺失Enable AUTOSAR code generationon启用AUTOSAR专用代码生成器关闭则打包功能不可用Generate RTE codeon生成RTE层代码和ARXML关闭则无RTE节点下游无法调度RunnableGenerate BSW codeon生成BSW配置ARXML关闭则无Com/NvM/CAN NM配置ECU无法通信Export ARXML fileson启用ARXML导出功能关闭则autosar.export.arxmlAPI无效Split ARXML fileson拆分为App/RTE/BSW三文件单文件过大下游工具加载慢且不易定位问题ECU instance nameMyECU与Dictionary中ECU Instance名称一致不一致则ARXML中ECU-INSTANCE引用失效Package nameMyProject/ECU1定义ARXML中AR-PACKAGE路径影响CANoe中ECU实例查找路径Enable AUTOSAR adaptive platformoffClassic项目Classic平台必须关闭开启则生成AP专属节点Classic工具无法解析Enable AUTOSAR adaptive platformonAP项目AP项目必须开启关闭则无EXECUTABLE、MACHINE节点Generate software component codeon生成SwComponentType定义关闭则ARXML中无SW-COMPONENT-TYPE应用层契约丢失提示这些参数必须保存在模型文件中.slx不能仅存在本地Session。我们用save_system命令强制保存save_system(bdroot, MyModel.slx, Overwrite, true);3.4 执行打包autosar.export.arxmlAPI的全参数详解这是工业级打包的核心命令。以下是一个生产环境使用的完整脚本export_arxml_for_ecu1.m%% 1. 加载模型与Dictionary model MyEngineController; dictFile MyECU_Dict.arxml; open_system(model); %% 2. 设置打包选项 options autosar.export.ARXMLExportOptions; options.ECUInstanceName MyECU; % 必须与Dictionary一致 options.PackageName MyProject/ECU1; % ARXML中命名空间 options.SplitFiles true; % 拆分App/RTE/BSW options.IncludeBSWModules {Com,CanNm,NvM,Dcm}; % 指定BSW模块 options.OutputFolder arxml_output/ECU1; % 输出目录 options.Verbose true; % 显示详细日志 %% 3. 执行打包关键指定Dictionary路径 autosar.export.arxml(model, dictFile, options); %% 4. 后处理验证生成文件 arxmlFiles dir(fullfile(options.OutputFolder, *.arxml)); fprintf(Generated %d ARXML files:\n, length(arxmlFiles)); for i1:length(arxmlFiles) fprintf( %s\n, arxmlFiles(i).name); end参数深度解析ECUInstanceName不是字符串而是Dictionary中定义的ECU Instance的short-name。必须完全一致大小写敏感。PackageName决定ARXML中AR-PACKAGESHORT-NAME的值。CANoe加载时ECU Instance路径为/MyProject/ECU1/MyECU必须与此匹配。SplitFiles设为true时生成三个文件MyEngineController_App.arxml应用层、MyEngineController_Rte.arxmlRTE层、MyEngineController_Bsw.arxmlBSW层。IncludeBSWModules不是所有BSW模块都需导出。例如若ECU不使用诊断则去掉Dcm减少ARXML体积和解析负担。实测数据一个含5个Runnable、12个Port、3个NvM Block的中等复杂度模型在R2022b上打包耗时约42秒i7-10875H, 32GB RAM。拆分文件后单个ARXML平均大小为1.2MB比单文件3.8MB加载速度快3.2倍。3.5 打包结果验证三步法确保ARXML可交付生成的ARXML不是终点而是交付物的起点。必须进行三步验证Step 1XML Schema验证Syntax Level用xmlread加载并验证是否符合AUTOSAR XSDtry doc xmlread(arxml_output/ECU1/MyEngineController_App.arxml); fprintf(XML syntax valid.\n); catch ME error(XML syntax error: %s, ME.message); endStep 2AUTOSAR语义验证Semantic Level用AUTOSAR Toolbox内置验证器% 加载ARXML并验证语义 arxml autosar.import.arxml(arxml_output/ECU1/MyEngineController_App.arxml); validate(arxml); % 自动检查Port-Interface匹配、Data Type一致性等Step 3下游工具加载验证Integration Level这才是终极验证。在CANoe中加载启动CANoe → Configuration → Open → 选择MyEngineController_App.arxml检查Network Nodes列表中是否出现MyECU展开MyECU→Application→ 确认所有Runnable如EngineCtrl_Run存在展开MyECU→Communication→ 确认所有Sender/Receiver Port如EngineSpeed_Sender存在且状态为Valid。注意CANoe加载失败的90%原因是ECUInstanceName或PackageName不匹配。我们制作了一个Excel对照表左侧是MATLAB打包参数右侧是CANoe中显示的路径每次打包后人工核对。4. 常见问题与排查技巧实录那些让工程师熬夜的ARXML错误4.1 “Invalid root element”错误XML命名空间的隐形杀手现象CANoe加载ARXML时报错“Error loading ARXML: Invalid root element AUTOSAR”。根因MATLAB生成的ARXML根节点为AUTOSAR xmlnshttp://autosar.org/schema/r4.0但某些旧版CANoe如12.0期望ARXML。这是AUTOSAR Schema版本与工具链版本不匹配的典型表现。排查步骤用文本编辑器打开ARXML查看第一行AUTOSAR xmlnshttp://autosar.org/schema/r4.0对比CANoe支持的Schema URLHelp → Documentation → ARXML Import → Supported Versions。解决方案升级CANoe至14.0支持AUTOSAR 4.4 Schema或在MATLAB中强制降级Schemaoptions.SchemaVersion 4.3; % 而非4.4 autosar.export.arxml(model, dictFile, options);实操心得我们团队建立了一个“工具链兼容矩阵表”明确标注MATLAB R2022b CANoe 14.0 EB tresos 7.3的组合为黄金搭档所有项目强制使用此组合。4.2 “Cannot resolve port mapping”错误端口连接的拓扑断点现象CANoe中ECU节点显示但所有Port状态为Invalid提示“Cannot resolve port mapping”。根因ARXML中PORT-PROTOTYPE节点缺少PROVIDED-PORTS或REQUIRED-PORTS子节点或PORT-INTERFACE-REF指向的Interface在Dictionary中不存在。排查步骤在ARXML中搜索PORT-PROTOTYPE确认其父节点是SW-COMPONENT-TYPE检查PORT-INTERFACE-REF的值如/MyProject/Interfaces/EngineSpeed_Interface在Dictionary ARXML中搜索该路径确认PORT-INTERFACE存在且SHORT-NAME匹配。解决方案在Simulink模型中右键Port → Properties → Interface → 选择已定义的Interface或在Dictionary中用addPortInterface命令添加缺失InterfaceaddPortInterface(dict, EngineSpeed_Interface, SenderReceiverInterface); addDataElement(dict, EngineSpeed_Interface, EngineSpeed, uint16);注意Interface名称区分大小写engineSpeed_Interface与EngineSpeed_Interface是两个不同Interface。4.3 “ECU not found in ARXML”错误ECU Instance的幽灵引用现象CANoe加载ARXML后Network Nodes列表为空日志显示“ECU not found in ARXML”。根因ARXML中ECU-INSTANCE节点缺失或ECU-INSTANCESHORT-NAME值与CANoe中配置的ECU名称不一致。排查步骤在ARXML中搜索ECU-INSTANCE检查其SHORT-NAME值如SHORT-NAMEMyECU/SHORT-NAME在CANoe Configuration中右键Network → Properties → ECU → 确认ECU Name为MyECU。解决方案在MATLAB打包时确保options.ECUInstanceName与Dictionary中addECUInstance的第二个参数完全一致或手动在ARXML中添加ECU Instance不推荐易出错ECU-INSTANCE SHORT-NAMEMyECU/SHORT-NAME ECU-ABSTRACTION-REF DESTECU-ABSTRACTION/AUTOSAR/ECUAbstraction/ECU-ABSTRACTION-REF /ECU-INSTANCE实操心得我们编写了一个Python脚本自动扫描ARXML并提取所有SHORT-NAME与CANoe配置文件比对生成差异报告。每天构建时自动运行提前拦截此类错误。4.4 打包后ARXML体积爆炸XML膨胀的根源与瘦身术现象一个简单模型打包后生成20MB ARXML加载极慢且CANoe内存溢出。根因MATLAB默认导出所有Simulink模型元数据如Block注释、坐标位置、样式信息这些非AUTOSAR标准数据被写入ARXML的ANNOTATION节点。解决方案启用ARXML精简模式options autosar.export.ARXMLExportOptions; options.IncludeAnnotations false; % 移除所有注释 options.IncludeBlockPositions false; % 移除坐标信息 options.IncludeModelHistory false; % 移除版本历史 autosar.export.arxml(model, dictFile, options);效果体积减少75%一个5MB ARXML变为1.2MBCANoe加载时间从45秒降至8秒。提示IncludeAnnotations设为false不影响功能仅移除人眼可读的注释AUTOSAR工具链不解析这些节点。4.5 “No license for AUTOSAR Explorer2”错误许可证的隐藏依赖现象MATLAB命令行报错“No license for AUTOSAR Explorer2”打包中断。根因AUTOSAR Toolbox的高级功能如Dictionary编辑、AP打包需要单独许可证AUTOSAR_Explorer2而非基础AUTOSAR_Toolbox。验证命令license(inuse, AUTOSAR_Explorer2) % 返回1表示已授权解决方案联系MathWorks销售购买AUTOSAR_Explorer2许可证或降级使用基础功能禁用AP打包、Dictionary编辑% 仅使用Classic Platform打包 set_param(configSet, AUTOSARPlatform, Classic);注意AUTOSAR_Explorer2许可证是按用户浮动授权不是按机器绑定。我们团队共享一个License Server避免每人单独购买。5. 进阶技巧让ARXML打包融入CI/CD流水线的自动化实践5.1 Git Hooks自动化Pre-Commit检查模型合规性将模型质量管控左移到开发源头。我们在.git/hooks/pre-commit中加入MATLAB脚本#!/bin/bash # pre-commit hook matlab -batch run(check_autosar_compliance.m); exit; -nodisplay -nosplash if [ $? -ne 0 ]; then echo AUTOSAR compliance check failed. Commit aborted. exit 1 ficheck_autosar_compliance.m执行前述三个死亡检查点并输出HTML报告。开发者提交前即获知问题无需等待CI失败。5.2 Jenkins Pipeline一键打包验证归档Jenkinsfile核心步骤pipeline { agent { label matlab-worker } stages { stage(Checkout) { steps { checkout scm } } stage(MATLAB Pack) { steps { sh matlab -batch \cd(src); export_arxml_for_ecu1; exit;\ -nodisplay -nosplash } } stage(Validate ARXML) { steps { sh matlab -batch \cd(src); validate_arxml_output; exit;\ -nodisplay -nosplash } } stage(Archive) { steps { archiveArtifacts arxml_output/**/* } } } }validate_arxml_output.m调用CANoe COM接口自动加载ARXML并检查ECU节点失败则Jenkins Build标记为Red。5.3 多ECU协同打包基于JSON配置的批量脚本面对10ECU的整车项目手动改脚本不现实。我们用JSON定义ECU配置{ ECUs: [ { name: ECU1, model: EngineController.slx, dict: EngineECU_Dict.arxml, bsw_modules: [Com, CanNm, NvM] }, { name: ECU2, model: BrakeController.slx, dict: BrakeECU_Dict.arxml, bsw_modules: [Com, CanNm, Dcm] } ] }MATLAB脚本读取JSON循环执行打包config jsondecode(fileread(ecu_config.json)); for i1:length(config.ECUs) opts autosar.export.ARXMLExportOptions; opts.ECUInstanceName config.ECUs(i).name; opts.IncludeBSWModules config.ECUs(i).bsw_modules; autosar.export.arxml(config.ECUs(i).model, config.ECUs(i).dict, opts); end最后分享一个小技巧ARXML打包完成后用movefile命令自动重命名文件加入时间戳和Git Commit ID便于追溯commitId system(git rev-parse --short HEAD); newFileName [MyECU_ datestr(now,yyyymmdd_HHMMSS) _ commitId{1} .arxml]; movefile(arxml_output/ECU1/MyEngineController_App.arxml, [arxml_output/ECU1/ newFileName]);本文还有配套的精品资源点击获取
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。