嵌入式生成代码

2024-05-31

嵌入式生成代码(精选7篇)

嵌入式生成代码 第1篇

Matlab是英文MATrix LABoratory(矩阵实验室)的缩写,它是由美国Math Works公司推出的用于数值计算和图形处理计算系统环境,专门以矩阵的形式处理数据。除了具备卓越的数值计算能力外,它还提供了专业水平的符号计算,文字处理,可视化建模仿真和实时控制等功能,是国际公认的和Mathematica、Maple并列的三大数学软件之一,其强项就是其强大的矩阵计算以及仿真能力。

2 Matlab代码生成

2.1 代码生成工具

在Matlab产品族中,自动化的代码生成工具主要有Real-Time Workshop(RTW)和Stateflow Coder,这两种代码生成工具可以直接将Simulink的模型框图和Stateflow状态图转换成高效优化的程序代码。利用RTW生成的代码简洁、可靠、易读。目前RTW支持生成标准的C语言代码,并且具备生成其他语言代码的能力。整个代码的生成、编译以及相应的目标下载过程都是自动完成的,用户需要做得仅仅使用鼠标点击几个按钮即可。Math Works公司针对不同的实时或非实时操作系统平台,开发了相应的目标选项,配合不同的软硬件系统,可以完成快速控制原型(Rapid Control Prototype)开发、硬件在回路的实时仿真(Hardware-in-Loop)、产品代码生成等工作。

2.2 Real-Time Workshop代码生成

2.2.1 Real-Time Workshop工作过程

Real-Time Workshop在Simulink中建模:

1)离散系统;

2)连续系统;

3)异步系统(事件驱动)。

用Real-Time Workshop生成代码:

1)生成标准C代码;

2)生成针对目标的makefile。

编译成为目标平台可执行代码:

使用makefile生成的代码在目标平台上运行应用程序:

1)参数调节;

2)信号监测。

2.2.2 Real-Time Workshop的用途

Real-Time Workshop是一个功能强大,应用面极广的产品。其应用方向可归结为这么三种类型:

快速原型:

1)支持代码监视;

2)支持在线调参;

3)快速原型目标。

嵌入式系统设计:

1)针对运行速度和存储空间占用进行优化;

2)适用于产品开发;

3)仍然可以监视并进行参数调整。

快速仿真:

1)自动进行仿真;

2)参数的批量装载。

2.2.3 Real-Time Workshop实现途径

Real-Time Workshop可用来做系统实现工具,提供了从Simulink系统级设计到硬件实现的直接途径。这大大加快了设计的步伐,降低了成本。

2.3 Stateflow Coder——从Stateflow状态图中生成代码

2.3.1 Stateflow Coder代码生成

Stateflow Coder是一个单独提供的与Stateflow结合使用的工具,可以生成嵌入式整型,浮点型,或生成用于单机的固定点C代码。使用Stateflow和Stateflow Coder,用户可以生成Simulink模型中的Stateflow部分特有的代码,也可以生成易于插入到已有程序中的子程序代码。并且这些生成的代码可读性强并带有完整的注释。

Stateflow Coder允许用户把自定义的C代码结合到Stateflow状态图中以提高Simulink和Stateflow的仿真能力。也允许用户定义并包括自定义的整体变量,这些变量可以被Stateflow生成代码和用户自定义的代码所共享。

由Stateflow Coder生成的代码可以整合到由Real-Time Worshop生成的代码中。用于快速控制原型、硬件在回路仿真、嵌入式应用当中。

2.3.2 Stateflow Coder代码生成特点

Stateflow Coder可以直接从Simulink模型的Stateflow部分生成定制化的C代码。它有以下特点:

1)支持所有的Stateflow语法;

2)支持所有的Stateflow语法;

3)支持所有的Stateflow语法;

4)用户的注释传递到生成的代码中;

5)与外部的C代码结合使用;

6)为最小的脚本和最快的运行生成高度优化的代码;

7)使用bitset选项来减少内存的需求;

8)生成多实例兼容的代码,使用户在不同的情况下无须复制代码就实现功能;

9)可以指定在生成代码中内嵌图形函数最大限度提高代码效率;

10)图形函数中的不必要的初始化部分被删除;

11)优化简单的if语句和for循环的使用。

摘要:嵌入式系统是计算机技术,通信技术,半导体技术,微电子技术,语音图象数据传输技术,甚至传感器等先进技术和具体应用对象相结合后的更新换代产品。Matlab作为美国MathWorks公司开发的用于概念设计,算法开发,建模仿真,实时实现的理想的集成环境。其强项就是其强大的矩阵计算以及仿真能力。该文简要介绍了Matlab嵌入式系统的代码生成。

关键词:Matlab,嵌入式系统,驱动程序

参考文献

[1]探矽工作室.嵌入式系统开发圣经[M].中国铁道出版社,2002.

[2][美]巴耳(Barr.M).C/C++嵌入式系统编程[M].于志宏,译.北京:中国电力出版社,2001.

感受代码生成之美 第2篇

一、什么是代码生成

代码生成就是利用工具或程序, 通过简单配置, 快速生成程序代码、数据库脚本、数据字典等的编码方式。代码生成通常与数据库相关项目联系在一起。通过简单配置, 可以快速生成增删改查、分页等基础处理类库, 甚至U I页面也可生成, 整个过程无需编码。生成的代码风格统一, 无需测试。

二、常规开发面临的问题

代码大量重复。在程序开发过程当中, 程序员会经常做着重复性的工作, 最常见的是访问数据库, 程序员要经常编写增、删、改、分页之类的操作。为了避免这个问题, 节省大量机械录入的时间和重复劳动, 提高工作效率, 而将精力集中于核心业务逻辑的开发。一个适合于自己使用的代码生成器显得非常重要。

项目严重超期。越来越多的压力使得一个软件项目无论是最终用户、企业、开发团队都希望在最短的时间完成, 可事与愿违的是软件项目的时间延期问题普遍存在, 一些调查表明, 70%的项目超出了估算的时间。大型项目平均超出计划交付时间的20%到50%, 项目越大, 超出计划的时间越长。一直以来开发速度的问题都是软件开发业的头等问题。那怎样才能在保证软件质量的同时又缩短开发速度呢?

1. 代码生成的好处

编码效率高。可以在1分钟内生成几万行代码, 把人从重复劳动解放出来, 用更多的精力去关注更核心的业务逻辑, 系统的优化;代码质量高。因为代码都是一个生成器模板生成出来的, 代码风格一致, 便于以后维护。

2. 代码生成器有哪些

(1) IBM Rational Rose

Rose实际上一个建模工具, 但具有代码生成功能。

Rational Rose是一个完全的, 具有能满足所有建模环境 (Web开发, 数据建模, Visual Studio和C++) 需求能力和灵活性的一套解决方案。R o s e允许开发人员、项目经理、系统工程师和分析人员在软件开发周期内在将需求和系统的体系架构转换成代码, 消除浪费的消耗, 对需求和系统的体系架构进行可视化、理解和精练。通过在软件开发周期内使用同一种建模工具可以确保更快更好的创建满足客户需求的可扩展的、灵活的并且可靠的应用系统。

(2) Sybase Power Designer

PowerDesigner实际上一个建模工具, 但具有代码生成功能。

PowerDesigner是Sybase公司的CASE工具集, 使用它可以方便地对管理信息系统进行分析设计, 它几乎包括了数据库模型设计的全过程。利用PowerDesigner可以制作数据流程图、概念数据模型、物理数据模型, 可以生成多种客户端开发工具的应用程序, 还可为数据仓库制作结构模型, 也能对团队设备模型进行控制。

Sybase PowerDesigner还是一个“一站式”的企业级建模及设计解决方案, 它能帮助企业快速高效地进行企业应用系统构建及再工程 (Re-engineer) 。I T专业人员可以利用它来有效开发各种解决方案, 从定义业务需求到分析和设计, 以至集成所有现代RDBMS和Java、.NET、PowerBuilder和Web Services的开发等。PowerDesigner是结合了下列几种标准建模技术的一款独具特色的建模工具集:业务流程建模、通过UML进行的应用程序建模以及市场占有率第一的数据建模, 这些建模技术都是由功能强大的元数据管理解决方案提供支持的。

(3) 动软.Net代码生成器

动软.N e t代码生成器是一款为C#数据库程序员设计的自动代码生成器, Codematic生成的代码基于面向对象的思想和三层架构设计, 结合了Petshop中经典的思想和设计模式, 融入了工厂模式, 反射机制等等一些思想。主要实现在对应数据库中表的基类代码的自动生成, 包括生成属性、添加、修改、删除、查询、存在性、M o d e l类构造等基础代码片断, 支持不同3种架构代码生成。

(4) ASP.NET Maker

ASPMaker是一款自动化的ASP代码产生工具, 它提供了一种方便快捷的可视化操作环境, 使用者即使没有任何的网络编程经验, 只要提供Microsoft Access数据库或是ODBC数据源, 就可以在五步之内快速地自动生成一整套ASP (Active Server Pages) 程序。利用产生的ASP代码, 用户能够在Web上容易地查看、编辑、搜索、加入和删除数据库记录。ASPMaker具有高度的灵活性, 几个选项使你能够产生最符合你需求的ASP应用程序。产生的代码是干净的、直接的并易于定制。

ASP.NET Maker是一套非常容易使用的代码生成工具, 同ASPMaker一样, 它能快速地根据数据库连接资料来源中生成一套完整的ASP.NET程序。

它支持以下数据库:M i c r o s o f t A c c e s s、Microsoft SQL Server、Oracle、或任何具ADO或ODBC连接的数据库。

(5) CodeSmith

CodeSmith一款国际知名度最高的基于模板的代码生成器, 模板采用类似C#的脚本语言。

它主要特点在于模板的定制能力强, 你完全可以像使用C#语言开发程序一样, 编写属于自己的模板。如果嫌麻烦, 在网上完全可以找到想要的模板, 稍加修改就可以变成适合自己的了。你一些ORM (NHibernate、IBatis、LINQ) 、三层架构 (Petshop、NTiers) 、数据库 (分页、CRUD存储过程、生成基础数据) 、架构 (CSLA.NET) 、Ajax等等。几乎覆盖了所有应用, 可以说“只有想不到, 没有做不到”。

网上有很多共享的模板, 其中.Net Tiers尤为著名。

三、代码生成工具的使用

本文以CodeSmith为例, 结合.NetTiers模板来介绍代码生成工具的使用。首先从网上下载CodeSmith, 当前最新的版本为:5.2。参照以下流程安装, 如图1所示。

如果需要将CodeSmith集成到VSTS (Visual Studio Team Suite) 中, 安装CodeSmith之前最好先安装VSTS, 如图2所示。

安装完毕得到两个应用程序:Code Smith Studio和Code Smith Explorer, CodeSmith Explorer是知识模板浏览器, 可内嵌在Code Smith Studio、VSTS中, CodeSmith Studio是CodeSmith的集成开发环境可以编辑模板文件。

下面我们使用.NetTiers模板, 连接数据库, 设置相关参数来生成项目代码, 学习CodeSmith的使用方法。工作流程, 如图3所示:

1. 添加模板文件夹

CodeSmith是基于模板文件来工作的, 模板可是自行编写, 也可以“拿来主义”。CodeSmith已经内置了许多模板文件, 其他模板文件在使用之前, 需要组织到CodeSmith中来, 这就是在CodeSmith中为模板文件夹添加快捷方式, 方法如下:

(1) 在打开CodeSmith, 找到Explorer面板。

(2) 单击面板上的按钮, 浏览到.NetTiers模板文件所在目录。

2. 建立数据连接

(1) 在CodeSmith中连接数据库之前, 假定您的数据库已经部署并建立完成。图4是我们演示的数据库表结构。

(2) 从菜单中执行命令“V i e w-S c h e m a Explorer”打开数据库连接管理面板。

(3) 在S c h e m a E x p l o r e r面板中, 单击按钮“Manager Data Source”打开“Data Source Manger”对话框。

(4) 在“Data Source Manager”对话框中, 单击“Add”, 打开“Data Source”数据源设置对话框。

(5) 在数据源设置对话框中, 填写“n a m e (连接别名) ”参数, 选择“Provider Type (数据库连接提供程序) ”类型, 本例使用Sql Server, 所以选择“SqlSchemaProvider”, 最后单击“Connection String:”后面的“…”按钮, 填写数据库连接信息。

(6) 在“Connection Properties”对话框中填写SQL Server服务器地址, 登录账号信息, 选择要连接的数据库;单击“OK”返回。

(7) 返回后, 连接字符串已经自动生成。

(8) 可以单击“T e s t”测试数据库连接, 确保成功。

(9) 测试成功, 返回“Data Source Manger”对话框, 可以看到刚才添加的别名“d e m o”已经出现在列表中。单击“Close”返回。

(10) 在“Schema Explorer”中也有了刚才建立的连接。

3. 设置生成参数

(1) 打开“CodeSmith Explorer”, 或者在CodeSmith中, 找到“Template Explorer”面板, 依次展开“CodeSmith 5.2 Samples-FrameworksNetTiers”, 找到“NetTiers.cst”模板文件。

(2) 在“NetTiers.cst”模板文件上右击, 弹出菜单, 选择“Execute”执行该模板文件。

(3) 弹出该模板的属性设置窗口, 如图5所示。

(4) 首先设置数据源, 单击“C h o o s e SourceDatabase”选项后面的按钮“…”, 弹出数据源选择对话框

(5) 设置好数据源后, 暂时只要设置“M a p p i n g F i l e (映射文件路径) ”和“OutputDirectory (代码生成输出目录) ”两个选项即可, 如果需要特殊设置, 可以设置其他选项。

4. 生成项目代码

(1) 参数设置完毕, 单击窗口下部的“Generate”按钮开始生成代码, 如图6所示。

(2) 任务执行完毕, 会自动弹出任务执行报告。报告中包括:任务执行汇总信息、项目使用配置信息、API使用案例、生成代码详细信息。

(3) 模板输出信息如下, 可以看到项目代码生成在指定目录。

(4) 打开输出目录, 可以看到生成的解决方案和项目。

5. 测试编译项目

(1) 在VSTS中打开解决方案“demo.sln”, 选中“*.W e b S i t e”网站项目, 设置为启动项目。按“Ctrl+F5”执行, 浏览测试网站。

(2) 弹出网站默认页面, 5秒钟后将会自动转向管理后台, 左侧是所有的数据表, 单击任一表名可以查看该表中的数据。

(3) 单击下面的“Add New”按钮可以对该表添加新记录, 如图7所示。

6. 建立注册页面

(1) 在网站根目录建立页面:“Reg.aspx”。

(2) 打开“~/Admin/TUserEdit.aspx”页面代码, 拷贝如图8选中部分代码。

代码参考 (仅参考, 实际可能不同) 如下:

(3) 打开“~/R e g.a s p x”页面代码, 在“<div></div>”之间插入上一步拷贝的代码。

(4) 打开“~/Admin/TUserEdit.aspx”后台代码, 拷贝如下部分代码。

(5) 打开“~/Reg.aspx”后台代码, 将如下图选中的命名空间替换为上一步拷贝的代码。

(6) 参照以下几步修改代码。

a.打开“~/R e g.a s p x”页面代码, 在“<d a t a:M u l t i F o r m V i e w>”标签后部加上“DefaultMode="Insert"”, 表示该表单默认是插入模式。

b.删除如下代码, 表示删除“Update”按钮。

(7) 刷新页面, 如图9所示。

(8) 用户可以注册了, 大功告成。

参考文献

[1]Peter Vogel.Practical Code Generation in.NET[M].美国:Addison-Wesley Professional, 2010.

SQL代码自动生成方法的研究 第3篇

现有的代码生成器都不能满足于企业的需求, 许多代码生成器都是借助SQL中的metadata信息来生成代码并存于生成器的模块上, 然后基本的查找、修改、删除、增加代码都是从生成器模板中生成。企业如果要在已成的模板上再添加常用查找、修改、删除、增加代码, 就只能借助手动的方式来修改代码。代码生成工作流程图如下图1所示。

因此, 对于这种模式生成的代码存在缺陷, 在一次生成代码后只能以手动方式进行二次代码生成。那么, 如何解决代码缺陷, 让二次代码能自动生成, SQL智能解析代码生成就能解决这个问题, 为企业提高效率。

2 SQL智能解析

(1) 处理SQL中的Ibatis动态构造要让条件语句生效, 可以使用ibatis动态构造完成, user Id不能为空 (is Not Empty) 。Prepend属性可以在条件生效后增加, 同时dynamic节点又能够执行动态删除AND, 例如:prepend属性是在条件生效后增加的前缀.而dynamic节点则可以为我们动态的删除AND, 如where and user_id=#user Id#变成where user_id=#user_id#。

正常转换SQL语句, 把现有的语句最大化构造出一条完整的SQL语句, 让其动态条件全部生效, 以便我们能对语法更好的执行检查。要把所有匹配X M L tag的动态条件找出, 并对XML tag进行删除, 可以通过一个正则表达式, 为执行语法检查提供方便, 而且还能在动态SQL面前把prepend等这样的语句前缀附加上去, 以便能够得到一条完整的SQL语句。

(2) 参数名称解析。我们需要对两类对数名称进行解析: (1) s e x=? (2) a g e>#m i n A ge#

上述, 对于 (2) 需要我们对参数名#m i n A ge#作出解析, 但 (1) 的参数名称s e x我们就可以从左边的列推导出来。

(3) 类型的推导。通过前面的执行步骤, 可以获取各个参数名称。

比如:s e x=?表达式的s e x参数, 通过数据表u s e r i n f o来查询元数据。获取u s e r i n f o表中的相关列信息, 再推导出Integer为sex的类型, 那么a g e>#m i n A ge#也是同一道理, 可以得出左边a g e的名称, 再到数据里查找列类型, 推导出来的类型号为Integer。

(4) 随机填充参数值。数据库对于参数值的设置问题, 可以为每个参数生成一个随机值, 因为我们已获取参数的类型, 就差生成一个随机值, 生成的这个随机值的长度范围同样可以根据数据库列类型中获得。

(5) 跳过数据库完整性异常。在于数据库的完整性结束后, 如果生成的随机数值是insert和update语句, 比如:外键唯一性的约束, 就会导致SQL执行失败。那么, 我们就应该检查S Q L E x c e ption的error Code, 而且跳过数据库完整性异常。因为随机值也有可能生成不符合外键的约束。所以忽略掉这种类型的异常。

(6) SQL解析的完整图/生成流程图--图2。

(7) SQL解析结果。通过SQL解析, 我们可以获取以下几个输入参数:

String password

String username

Integer sex

Integer min Age

获取select查询返回的Result列表, 可以读取数据库的元数据。

Integer user_id

String password

String username

依据上述解析获取输入参数及输出参数, 来生成代码。

2.2引擎方法

2.2.1模板路径可以引用相关变量

用引擎解决生成器所带来的问题, 如生成器不能将存放模板的目录名称及文件名称利用起来, 导致还需配置每个模板文件生成的文件名及目录结构, 引擎通过用模块的文件路径引用相关变量。示例:

dao/${basepackage_dir}/${class Name}。java

依据此变量生成输出文件, 如果我们的变量值为:

basepackage_dir=com/company/project

class Name=Blog

那么生成的完整路径则为:

dao/com/company/project/Blog。java

2.2.2代码生成

通过freemarker, 对模板设置好数据, 编写好模板, 并调用其API, 就可以生成代码。图 (3) 为freemarker模板生成的基本原理。

3 结束语

充分利用数据库现有的特性, 配合对SQL语句的解析, 并结合ibatis本身对动态构造SQL的支持。为代码生成增加了一种新的应用方式。并且可以基于此做二次开发, 如开发一套Eclipse插件这样的GUI工具, 为基于信息管理的企业应用开发加速。

摘要:目前大部分企业都选择数据库的应用, SQL的创建与查询以及相关的数据操作非常频繁, 利用SQL智能动态解析, 不仅能构造SQL还能进行随机数值的配置, 再通过数据库执行该条语句, 就能获得对SQL配置的参数值和参数值的类型, 并且把查询的数据返回到列, 再依据返回的数据生成代码, 提高企业对数据开发的效率, 以及提搞企业数据驱动应用开发的速度。

关键词:SQL,智能动态解析,生成代码,构造

参考文献

[1]霍斯特曼.JAVA2核心技术, 卷II:高级特性[M]机械工业出版社, 2006:354.

嵌入式生成代码 第4篇

基于虚拟现实技术的虚拟培训系统的发展,解决了传统的培训方式受现实局限无法达到某些功能的问题,以其所具有的节约成本,生动形象,及时反馈,使受训者身临其境等的鲜明特点,受到越来越多的关注。作为虚拟装配培训系统的开发过程至关重要的一环,虚拟装配仿真动画影响着培训的效果和质量,决定着培训的内容。

研究基于宝山区科学技术委员会产学研合作项目———电梯安装虚拟培训系统的开发过程,针对解决VRML为平台的虚拟装配仿真动画在开发中需要编程,且难度大、效率低、抽象、工作量大的困难,利用VR代码生成技术,以插件式开发平台的形式,在CAD软件装配仿真开发环境下实现装配仿真动画的快速生成。

1 提出利用代码自动生成技术的背景

1.1 快速生成虚拟装配仿真动画的需求分析

用于培训系统的虚拟装配技术是指利用虚拟现实技术,为操作人员构造一个虚拟的零部件装配环境,使其能够通过眼睛、耳朵来感受零部件的具体装配过程,具有身临其境的感觉。

因为具有生动、交互等特点,虚拟装配技术作为虚拟制造的关键技术之一,具有广阔的应用前景,得到发达国家全面深入的研究和应用。

作为虚拟装配培训系统制作的关键一环,虚拟装配仿真动画实际上是一个VRML语言编写的代码文件,在特定的动画浏览器如BS Contact中运行代码文件就可以看到虚拟装配仿真动画。传统的VRML代码文件编写方法是在机械设备装配体建模完成的基础上,将模型从三维CAD软件中导入到VRML中,运用VRML语言,手工编写VRML动画脚本代码。

而手工编写VRML动画脚本代码,存在着以下缺点:

(1)由于装配工艺繁多复杂,手工编写代码费时费力。

(2)代码编写和动画演示不同步,不能实时判断所写代码正确与否。

(3)手工编写VRML脚本代码,对编写人员的专业要求高。

基于以上缺点,研究提出用于虚拟装配动画演示的VRML代码快速生成技术。

1.2 代码自动生成技术的概述

代码自动生成技术即通过先定义一个独立于任何技术的抽象的模型,再使用代码生成器生成相关的框架程序或部分具体代码的技术。这项技术缩短了开发周期,提高了开发效率。但是因为代码生成器的多样性,代码生成的应用程序也有多样性。其中一种方法是观察代码生成器的输入和输出。在输入端可以通过代码或设计模型作为输入,在输出端可以根据一些条件创建输出,或者设计部分可实现的新的代码。本研究中使用的代码生成技术就是一种由Solidworks软件装配体界面作为输入端,输出VRML代码,来实现虚拟装配仿真动画代码文件的快速生成。

1.3 实现代码自动生成技术的基础

(1)Solidworks装配体界面所构建的装配模型的特点

作为输入端,Solidworks基于实体特征的建模功能,通过拉伸、旋转及打孔等操作来构建零件模型,最终得到位于装配环境下的装配体模型。除包含几何数据以外,还能够表达各几何体之间的层次关系,用以映射产品、零部件所构成的装配层次结构。同时为了映射装配操作,可以对装配体进行二次开发,使其能够直接访问装配模型的底层数据,导出装配模型的装配对象信息、对象层次信息、装配对象的关系信息等包含几何元素之间的配合情况。

(2)Solidworks的运动仿真功能

Solidworks本身具有运动仿真的功能,可以生成AVI等格式的仿真动画。主要有两种基本的方法:一种是利用Solidworks运动算例工具栏中的一个工具———运动仿真动画,利用该工具可以自动生成模型简单的旋转、爆炸、解除爆炸四种类型的动画。二是添加键码点生成动画。通过在Solidworks动画工具栏中的键码点设置界面中,设置给定产品中机构运动所经过的一系列位置点(路径点),指定运动机构的路径运动,灵活性较大,适用于虚拟装配仿真动画的生成。需要注意的是,这种方式是利用旋转和移动来指定零部件的运动位置点的,因此,建模时机构的自由度必须与实际相符。

例如,通过对Solidworks进行二次开发,制作运行“VRML动画制作”模块,如图1所示的界面,系统会自动通过遍历装配体的形式把零件的名称按照一定的规则列在界面中,以方便虚拟装配动画的制作,通过点击相应的零件进行该零件的装配动画制作时相关参数的设置。动画参数设置界面如图2所示。

2 基于模板的代码自动生成技术的实现

2.1 可使用基于模板的代码生成技术的原因

在虚拟装配的仿真动画制作中可使用基于模板的代码生成技术原因有三点:第一点,需使用的模板类型少。装配仿真动画的动画类型少,基本是旋转、平移、透明度、高亮的结合,把所有的动画类型包含在动画模板中是可行的。第二点,模板的可扩展能力强。根据不同动画不同的动作要求,分类归纳动画模板的编写方法。在需要添加新的代码时,只要增加相应的模板。第三点,模板与具体参数是可分离的。仿真动画代码中的具体数据是可更改的,并不会对模板产生影响。

2.2 基于模板的代码生成技术的设计思路

首先要了解,模板是指在生成源代码时使用的框架,框架又指代码生成引擎定义的描述模板的语言。一个框架中可以包含若干个模板及模板参数。在生成源代码时,代码生成引擎同时读取模板及相应的提供模板参数的模型,通过解析模型,将模型的具体数据替换到相应的模板参数上去,替换完成后输出文本生成源代码。所以先确定生成目标代码中的重复代码部分,使其以模板形式实现。基于模板的代码生成技术的框架如图3所示。

2.3 基于模板的代码生成技术设计流程

目标生成的VRML代码包括五部分:模型节点代码、动画原型节点PROTO、数据定义文件、动画代码和动画连续播放脚本代码。模型节点代码是模型的描述信息,是使用Solidworks导出工具将装配体模型导出生成VRML使用的代码;动画原型节点是一个自定义的节点,用来定义动画的参数和内部逻辑关系,需要被封装在自定义的模板中;数据定义文件是通过对话框输入或键码定义的形式对动画参数暂存的文件,其数据量不大,只需定义一个矩阵存放,不需单独存放;动画代码是把动画原型节点的输入参数实例化所生成的装配动画代码;动画连续播放脚本代码是指为使按照装配步骤制作的每步动画能够连续播放,且每一步的动画对应每一步的装配而生成的代码。

最终生成的代码文件是通过函数creatVRML()新建一个VRML文档,然后将模型节点代码、动画原型节点PROTO、动画代码、动画连续播放脚本代码的参数分别复制给四个文本参数,最后将四个文本参数整合到新建的VRML文档中。

使用基于模板的代码生成模块的流程如图4所示。

2.4 基于模板的代码自动生成技术分块程序

(1)代码生成函数

compose VRML_Code(animation Data()As anima-tionData,tag As Integer),在使用函数时,传入自定义类型的animationData()和决定零件名称的索引tag。使得animationData()中的数据可以生成该索引所指的动画代码。

(2)VRML代码生成平台使用模板

在制作装配仿真动画时,为使按照装配步骤制作的每步动画能够连续播放,且每一步的动画对应每一步的装配,具体使用的代码模板如下:

接下来是一步装配动画的模板代码,其中的time1、Time1和Node9_STEP都是可变参数。

(3)输入文件的定义

针对零件的每步动作所设置的参数,是需要保存的,用来生成代码。因此,在vba中声明一个自定义类型的变量:

设置好每一步动作后,用以上形式代码保存在自定义类型的变量中。然后将按语法规则生成的vrml代码存储到该变量的vrmlcode成员中。其中vrmlcode代码可以调用上述的comepose VRML_Code函数来生成。

(4)代码导出功能的程序实现

使用一个animationData()数组来存储每一步动作的参数设置,当需要生成代码时,就触发如下代码的执行:

在上述的代码中,将UserForm2.VRML_code所代表的代码追加到只含有模型几何信息的wrl格式文件中,就完成了虚拟装配动画的vrml代码的自动生成。

(5)连续播放脚本的使用

VRML_codes的值通过以下的代码来赋值:

上述代码将每一步的动画代码,集合起来,一起赋值给VRML_codes。

2.5 基于代码自动生成技术实现装配仿真动画生成遇到的问题及解决方法

(1)Solidworks运动仿真中的参数与模板中的变量的对应关系

每一步装配仿真动画的生成过程,实际上就是将Solidworks运动仿真中对应的参数赋值给模板中的变量的过程。Solidworks键码与代码生成模板变量的对应关系如表1所示。

(2)统一Solidworks与VRML两空间坐标系

为了提取Solidworks中对应的参数,可以通过设计一个参数输入界面,从CAD软件导出.wrl文件代码取得。在实际的开发中,发现由Solidworks软件中读取到的参数是可以直接赋值的,但是坐标属性会出现偏差。进一步研究,发现Solidworks软件与VRML的空间坐标系不同,Solidworks环境下是用卡式右手立体坐标系统描述空间位置,而VRML场景中模型的空间位置是通过设置transform节点下的translation和rotating值。这就需要在对变量赋值前统一两个坐标系。虽然可以通过联系Solidworks环境下的三维变换矩阵经过矩阵变换,将仿真动画中模型的空间位置值解析出来,但是计算量很大而且容易出错。为此,需要利用Solidworks API函数获取矩阵中每个元素值,通过Vrml Pad编辑器里的API函数接受所有值,从而获得虚拟场景中所需要的translation和rotation值。

这样,就把Solidworks三维场景中的模型位置关系转换成了VRML虚拟场景中的识别参数,实现了两者坐标的统一。

3 代码自动生成技术的应用

现以三荣电梯虚拟培训系统中,层门安装这一具体的仿真动画步骤来说明代码自动生成步骤的应用。

首先,用Solidworks打开定义了约束关系的层门及相关配件的三维模型。接着,运行“VRML动画制作”模块,系统自动通过遍历,把层门的零件的名称按照一定的规则列在VRML动画制作界面中,以方便虚拟装配动画的制作。然后在动画参数设置界面,进行层门零件的装配动画制作时相关参数的设置。

当对所有零件进行动作设置后,便可生成层门整个装配体的虚拟装配动画。生成动画完成后,该装配动画的VRML文件被默认保存在相应文件夹。用Vrmlpad打开,可根据需要浏览编辑代码,层门安装动画这一部件的代码文件如图5所示。

最后生成的仿真动画如图6所示。

4 结束语

以上便是在虚拟装配仿真动画生成平台中,装配仿真动画生成的过程。如果是手动编写这个简单的平移动画,需要先定义Timesensor,再定义关键点Key和关键值KeyValue,再编写动画路由ROUTE,相当繁琐。通过使用仿真动画的代码自动生成技术,可以得出虚拟仿真动画的代码自动生成技术相较于传统的手工编写装配动画VRML文件的优点:

(1)提高了装配动画的制作效率,尤其对比步骤复杂的动画,更能突显其高效性。

(2)操作简单,对操作人员的技术水平要求低。

(3)制作完成的装配动画VRML文件标准化,可读性强,方便对VRML文件的应用。

(4)运动关键点参数易于扑捉确定,可视化界面下,所见即所得。

使用了自动代码生成技术的三荣电梯装配培训系统,通过在实际中的应用,反应良好,培训达到预期目标,表明了自动代码生成技术作为一种提高虚拟装配仿真动画代码编制效率的方法,值得在虚拟装配环境下仿真动画代码的开发中加以利用。

摘要:针对传统的虚拟装配培训系统在开发中代码编制开发周期长,费时费力,复用率较低,对开发人员的要求高,不利于推广的问题,基于电梯安装虚拟培训系统的实际开发过程和成果,提出了用于虚拟装配仿真动画的基于模块的代码自动生成技术。通过设计代码生成模块的思路和流程,以及代码结构特点相应的代码模板,最终实现虚拟装配仿真动画的生成。

关键词:仿真动画,代码生成技术,虚拟装配,基于模板

参考文献

[1]杜宝江.虚拟制造技术[M].上海:科学技术出版社,2007.

[2]朱名铨,张树生.虚拟制造系统与现实[M].西安:西北工业大学出版社,2001.

[3]袁婧,吴恩启.基于单晶炉的机械装备工作原理动画自动生成方法[J].上海理工大学学报,2013,35(3):281-284.

[4]唐勇.基于组件的管理信息系统中代码自动生成技术的研究[D].武汉:武汉理工大学,2007.

[5]邵胜利.虚拟现实系统的三维建模技术[J].计算机世界报,1995(39):28-32.

[6]史建成,刘检华.虚拟装配系统中的模型数据管理与优化[J].计算机集成系统,2010,16(11):2416-2422.

[7]陈纯杰.基于VRML的起重机仿真系统的研究及实现[D].武汉:武汉理工大学,2006.

[8]袁婧.虚机实电技术在虚拟培训中的应用研究[D].上海:上海理工大学,2013.

嵌入式生成代码 第5篇

随着嵌入式系统性能要求越来越高, 系统中代码的尺寸也在不断增长。而存储器一向是嵌入式系统中最稀缺的资源, 因此代码压缩的技术在近些年一直是热门的研究领域。目前有很多种方法可以减少代码尺寸, 主要分类如下[1]:

(1) 编译器技术。

这种技术可以在编译的阶段就产生很精简的代码, 比如使用寄存器重命名以及程序间优化的方法。其好处是不需要在程序运行时进行实时的解压, 减少了运行时的开销, 同时也不需要对处理器的硬件结构做任何修改。

(2) 指令集修改。

这是通过修改或定制指令集来取得代码的压缩, 比如ARM公司的Thumb和MIPS公司的MIPS16指令集。这种方式需要花费很大的精力来设计指令集, 并且要重新设计处理器内部的指令译码单元。另外, 外部的软件开发工具链, 包括编译器等都需要大的修改。

(3) 代码压缩技术。

该方法是引入一些数据压缩的技术来对编译产生的可执行程序进行压缩。它不需要修改编译器和处理器内部结构, 只是在指令送往处理器过程中加一个解码单元。本文中就使用这种代码压缩技术, 另外它也可以和上面两种方法同时使用来更好的减小代码尺寸。

2代码压缩技术的相关工作

第一个用于嵌入式处理器的代码压缩系统是CCRP[2]。它规定指令存储器中存储压缩后的代码, 而在指令cache中存储未压缩的代码。在指令cache和指令存储器之间存在一个解码单元, 每次在出现指令cache缺失时解码一个cache行。 文献[3]中使用了字典编码的方式, 代码被压缩成指向字典的索引, 在指令执行期间利用索引来访问字典以完成解压, 其优点是解压电路设计简单, 解压给系统速度带来的影响很小。Lekatsas提出了SAMC的算法[4], 它根据马尔科夫模型进行算术编码, 基于单个位来进行压缩, 并且考察了指令间的相关性, 取得了很好的压缩效果, 但缺点是译码速度较慢。针对VLIW结构的代码压缩算法也有很多研究。文献[5]是第一篇针对现代VLIW处理器提出统计压缩方法的论文。后来文献[6]中提出了针对VLIW结构的算术编码方法, 主要实现了并行的译码结构。

3代码压缩

3.1SDSP处理器结构

SDSP是4发射超长指令字结构, 每个指令包128bit, 包含4个32bit的指令槽。片式指令cache和数据cache分离, 指令cache是4KB大小的2路组相联结构, 每个cache line共32字节。处理器内核采用7级流水线, 支持推断推测技术, 包含整数运算部件及乘累加部件等共8个功能单元, 还拥有一个片上的SIMD协处理器。由于SDSP指令集设计时为了便于内核译码单元的设计简单采用了正交指令集的设计方式, 因此编译后产生的程序代码冗余度较大, 存在压缩的空间。

在大多数压缩技术中, 基本都要求解压缩结构不修改处理器内核, 否则可能会影响处理器的整体性能。另一个关键问题是要求针对原来处理器的程序能够正常执行且性能上没有太大影响, 否则包括编译器在内的整套工具都需要修改。鉴于以上考虑, 本文采用文献[2]中的方式, 在存储器中存放压缩的指令, 在指令cache中存放解压后的指令, 以每个指令cache行作为基本的压缩单元, 在每次cache行访问缺失时进行解压缩, 并把解压结果保存到指令cache, 保证处理器仍然可以按照原来的方式访问cache。由于解压的过程都在指令cache缺失时进行, 不在关键路径上, 因此对性能影响不大。采用这种方式就不需要修改处理器内核, 只要在指令cache装载的路径上加一个解压单元。最后经过修改的处理器结构如图1所示, 阴影部分就是新添加的解码单元。当指令Cache访问缺失时, 需要通过地址映射机制确定该指令cache行在存储器中对应的地址, 因为经过代码压缩后该指令存放的位置已经发生了变化, 具体的映射机制参见3.3节。

3.2压缩技术

无损压缩的方法有很多, 目标都是使压缩的结果更接近信源的熵。但是在数据压缩中的很多技术不能用到代码压缩中, 因为指令执行过程中要求局部可译码, 即单独取出任意子块都可以独立解压缩。本文采用统计编码方法, 针对SDSP处理器实现了三种不同的压缩方式, 在压缩的效果以及解压缩的开销方面进行了比较。考虑到Huffman编码方法可以取得接近最优的压缩效果, 以及它相对可以接受的解压开销, 本文选用它作为压缩编码方法。

这里比较了三种不同的压缩方式。第一种是采用传统的以字节为单位的压缩方法, 把VLIW指令划分成以字节为单位的块, 一个字节组成一个码元符号, 统计这些符号在程序中出现的概率大小, 然后进行Huffman编码。图2是这种划分方式的示意图。但是这种严格的划分方式没有考虑到指令内部编码的相关性, 会增加统计结果中符号的数目, 影响压缩效果。第二种方法是基于域划分的方法, 因为指令集在定义时各bit位都具有明确的含义, 因此指令中特定的域有更好的重复性, 如果把各个域独立的进行压缩, 会取得更好的效果。图3中就是按照SDSP指令集的特点把它分成3个特定的域, 很好的提取了指令内部的相关性。第三种方法是直接把32位的指令作为独立的符号进行压缩, 它最大限度的考虑了指令内部的相关性, 因此压缩效果最好, 但是它的解压表也最大, 加大了硬件开销的负担。因此在总体考虑压缩结果和解压表时, 它不一定取得最好的效果。

3.3地址映射

压缩后的程序的地址发生了改变, 这样跳转指令就不能跳转到正确的位置, 因此需要某种地址映射机制完成这种转换。一种方式是修改分支的地址, 在第一步完成编码压缩后就可以确定分支指令在当前压缩代码中的目标地址, 第二步以此来修改所有的分支指令, 使其跳转到新的目标地址, 这就要求分支指令不能被压缩, 否则第二步中的修改可能会导致地址映射再次改变[7]。另一种方式是采用行地址表 (LAT) 来完成映射的方式。它存储了每个指令cache行在压缩之后的起始地址, 可以在代码压缩的同时得到这种映射, 并把LAT和压缩后的代码一起存储在最后的程序段内。这里要求每个cache行有一个可以寻址的地址, 因此压缩时要把cache行压缩的结果调整到字节边界上。通过这种方式, 可以不需要修改处理器寻址方式来正常的访问压缩代码, 只是增加了额外的LAT的开销。本文就采用LAT的地址映射方式。LAT和压缩代码一起放在存储器中, 为了减少其访问延时, 还提出了一种类似虚实地址转换部件TLB的结构, 称为CLB。它采用全相联的方式, 保存LAT最近访问的几项, 在每次指令cache访问时, 都同时访问CLB, 因此当cache访问缺失时, 就可以得到该行对应的地址映射是否在CLB中。如果存在, 则直接利用相应的地址访问存储器中指令来加载指令cache行, 如果不存在, 再访问LAT, 并按照一定的算法把相应的项替换到CLB中。实验结果表明, 使用这样的结构可以减少很多LAT的访问, 从而节省实际。具体的实现可参考文献[2]。LAT会产生额外的开销, 需要计入压缩代码内, 通常会占原代码的3%。

3.4实验结果

本文把上面介绍的3种压缩方法用到SDSP处理器中, 通过压缩FFT程序来比较它们的压缩率。压缩率的定义如公式1所示, 通常用它来衡量压缩的效果。

Compression_Ratio=Compressed_program_sizeΟriginal_program_size (1)

图5给出了3.2节所述三种方法压缩的结果对比, 都已经包含了LAT以及解压缩表的开销。从图中可以看到, 采用域划分方法的压缩效果要明显好于基于字节划分的效果。另外, 把32bit指令作为符号来压缩并没有取得最好的压缩效果, 因为虽然它的压缩输出结果最小, 但是解压表的开销很大。

4结论和展望

本文针对自主研发的DSP处理器核应用代码压缩技术, 减小了代码尺寸, 节约了系统中存储器资源。其中, 基于域划分的技术最适合使用, 因为它充分考虑了指令内部的相关性, 压缩效果最好。但它仍然只是一种基于经验的域划分, 并不能获得最优的划分方案。本研究接下来会考虑如何建立一个模型来获取指令内部的相关性, 并以此来得到最优的域划分。

参考文献

[1]Y. Xie. Code Compression for Embedded VLIW Processors Using Variable-to-Fixed Coding[J]. IEEE Transactions On Very Large Scale Integration (VLSI) Systems, May 2006.

[2]Wolfe. Executing compressed programs on an embedded RISC architecture[C]. In MICRO 1992.

[3]P. Bird. An instruction stream compression technique. Technical report of EECS University of Michigan, 1996.

[4]H. Lekatsas. SAMC: A code compression algorithm for embedded processors[J]. IEEE Transactions On Computer-aided Design of Integrated Circuits and Systems, December 1999.

[5]S. Larin. Compiler-driven cached code compression schemes for embedded ILP processors[C]. In MICRO 1999.

[6]Y. Xie. A code decompression architecture for VLIW processors[C]. In MICRO 2001.

嵌入式生成代码 第6篇

关键词:XML脚本,代码生成,TSL模板,图形化用户交互系统

在软件工程发展过程中,计算机科学家为了降低软件开发得强度,缩短开发周期,减少代码的重复书写,从而减轻程序员的编程负担,一直以来都致力于代码自动生成方面的研究。随着现代化信息环境日趋复杂,各种应用软件的开发难度随之加大,这需要更有技巧,更有方法地从事软件开发,开发团队之间也必须更无障碍地沟通,否则极可能无法在有限的开发时间中完成任务。由于时间上的压力,一般人只注重程序的编写速度,却忽略其完成后的实用性与维护性,加上大型程序多人共同参与开发,每个人都有各自的程序风格,容易造成严重的差异性,随着系统规模越来越大,这将造成系统完成后在测试及维护上沉重的负担,代码自动生成技术更显出了其显著的优越性。尽管这些应用没有代码生成工具也能开发完成,但利用代码生成技术可以大大加速软件的开发进度,提高软件的质量。

1 自动代码生成技术

1.1 自动代码生成原理

自动代码生成的基本原理是利用一个代码生成器读取并解析数据定义文件,按照一定的规则,翻译成符合规范的代码。图1是一个典型的代码生成器模型。

1) 代码生成器:

代码生成技术的核心,用于读取业务领域数据文件,解析模板文件,根据一定的规则翻译成固定格式的代码并输出。

2) 数据文件:

保存软件业务领域的自定义数据信息,作为代码生成器的输入。可以是各种文件格式,目前通常是XML文件。

3) 模板文件:

负责控制输出文件的格式。规范了输出代码文件的格式。

4) 输出代码:

生成器最后输出的代码文件。

由此可见,代码生成过程实际上是把和软件平台无关的业务数据翻译成与软件平台相关的具体代码的过程。他的优点在于能够在一定程度上减少冗繁的重复代码编写工作,使软件开发人员可以集中精力于更富有创造性的工作上去。

1.2 基于XML的代码生成技术

基于XML技术的代码生成技术是代码生成技术领域的一个具体应用技术。该技术以XML文件作为输入的数据文件,描述特定领域的业务模型;以XSLT作为模板文件,定义XML数据输出格式;利用现有的XSL解析器充当代码生成器的角色,完成代码解析和翻译的任务。

XSLT是针对转换的扩展样式表语言,它的转换标准本质上来讲是一个转换机制,它让你指定将一个XML标记转换成什么并用来显示。根据提供的一个到多个程序模板,代码生成器可以连续地结合输入的XML文件,生成所需要的代码。而且在反复生成代码的过程中,可以不断获取反馈信息,纠正代码生成器的输入文件和模板,从而保证了代码生成器的正确性。

XSLT是一个十分强大的XML翻译工具,但是在代码生成领域有其自己不利的地方:

1)XSLT主要面向于XML文档的翻译,对于代码生成和格式化输出方面存在一定缺陷,通常不能够简单直观的形成最终的代码。

2)XSLT语法复杂,不利于开发人员快速学习和快速掌握,而且生成的XLST文件复杂,可维护性较差。

针对XSLT交互性和功能性方面的缺陷,本文提出了一种新的XML脚本控制语言,用简单的脚本标记就可以完成对XML格式文档的解析,并嵌入到模板文件中,方便的生成最终代码文件。

2 基于XML脚本的自动代码生成技术

2.1 XML脚本标记语言

XML脚本语言可以在很大程度上简化自动代码生成的过程[引用codegen]。在总结了对XML文件的基本的操作过程基础上,我们提出一种新的XML脚本标记语言,只需要通过几个简单的语法标记,就可以完成操纵XML数据的任务。

该脚本标记语言基本语法可以分为两类:

1) 过程控制语法:

每行以字母“@”开头

①every<元素名>:递归查找指定元素;

②for<元素名>:循环查找指定元素;

③if:条件判断语句;

④xml<输入文件名>:指定输入XML文件名;

⑤output<输出文件名>:指定输出文件名;

⑥include<模板文件>:指定嵌套的模板文件。

2) XML节点操纵语言:

①$(::xxx)获取节点属性名,xxx为属性名;

②$(.xxx)获取子节点的值,xxx为子节点名字;

③$(->parent)获取父节点2。

通过这几个关键脚本,我们可以完成基本的代码生成任务。下图表示了一个简单的例子,从hello.xml文件中提取信息,并根据hello.tsl文件生成最终的hello.result文件。

2.2 TSL模板脚本语言文件

TSL(Template Script Language)简称模板脚本语言文件,是我们自定义的一种格式文件。它是模板和脚本语言的混合文件。这个文件类似于xlst文件的作用,但是其优点在于:

1)以代码自动生成为主要目的,利用模板技术,提供了产生最终代码框架的简单方法。

2)语法简单,可读性强,通过几个关键字就可以完成基本的XML数据解析任务。

TSL文件中以@字符开头的行是过程控制语法的内容,并不会输出到结果中,它的作用是用来控制整个解析流程。比如在图2中,“@for HELLO”这一行的意思是,找到XML文件中所有的名字为“HELLO”的节点,然后循环处理。

没有以@字符开头的行作为普通的文本,原原本本的输出到结果。其中遇到$()格式的内容,解析器会根据节点操纵语法填充相应的内容。所以,TSL将XML数据与具体的软件平台和业务联系到一起,需求的改变只需要调整相应的TSL文件即可,无需修改代码生成器程序,这样就使代码生成器彻底摆脱了与业务领域的耦合,提高了其通用性。

3 在图形化用户交互系统中的应用

现代软件开发过程中,图形化用户交互系统是一个复杂而多变的系统。我们常常会利用各种底层的GUI库提供的接口,编写出各种重复控件,同时,界面需求的不断变化导致了控件不断修改。

为了减少冗繁的重复代码编写和修改工作,我们在实际的项目中,将交互界面与应用逻辑分离。交互界面代码由代码生成器自动产生,而开发人员只需要关注内部逻辑即可完成开发任务。

图3所示了一个对话框的生成过程。

图3显示了一个对话框的XML描述,它通过属性结构组织数据,包含了两个按钮OK和CANCEL,同时指定了按钮的名字,位置等各种属性。TSL文件负责控制最终代码的输出形式。

图4显示了生成器输出的C++代码片段,以及程序在运行时刻输出对话框形式。

4 结语

本文针对代码重复编写问题,提出了一种基于XML脚本模板的自动代码生成技术。该技术采用XML文件描述软件业务领域的数据关系,提出了控制XML文件的通用脚本语言,操纵XML文件数据,并结合模板技术控制输出代码的格式。通过实际的软件开发过程证明,该技术在很大程度上减轻了开发人员编写重复代码的负担,提高了软件开发的效率和质量。

参考文献

[1]陈翔,王学斌,吴泉源.代码生成技术在MDA中的实现[J].计算机应用研究,2006(1):147-150.

[2]Codagen Technologies Corp.CodagenMDA-Final[EB/OL].http://www.codagen.com.

嵌入式生成代码 第7篇

MATLAB自动代码生成的优势是实现图形化编程, 让编程方式变的简单和容易操作。

在汽车网络中, CAN网络技术是一个成熟的技术, 以它为载体的CCP协议是一个通用的接口标准, 它使得在汽车电子设备研发过程中相关的测试、标定、诊断方法及工具能够兼容并互换。

CCP的全称是CAN Calibration Protocol (CAN标定协议) , 是基于CAN总线的ECU标定协议规范。CCP协议遵从CAN2.0B通信规范, 支持11 位标准与29 位扩展标识符。该通信协议采用主-从式通信方式, 主设备通过CAN总线与多台从设备相连接, 主设备是测量标定系统, 从设备是需要标定的ECU。

CCP协议的标定诊断工具与ECU的通信有Polling模式和DAQ模式, 由于Polling模式是一问一答的通讯模式, 通讯时间长, 效率低。本文采用DAQ模式, 这种模式自主向设备传输数据, 数据上传效率高。

支持CCP协议的标定软件主要有:CANape、VISION、Diag RA。

1、CCP命令和通讯方式

1.1 ccp命令标准格式

主设备:标定观测工具;

从设备:ECU;

信息字节:8 字节;

命令接收对象 (CRO) :主设备向ECU发送消息, 格式为“CMD (CRO) +CTR+命令参数域”;

数据传输对象 (DTO) 是从设备反馈给主设备的消息, 格式为“PID+ERR+CTR+参数数据域”;

一般情况下PTD=0x FF, 当命令回复ERR=0x00 时, 表示命令回复正确;当ERR不等于0x00 时, 表示当前命令回复是有误的, 然后对照命令返回码表进行查错。

1.2 Matlab自动代码生成中ccp驱动命令

1.2.1 开始命令

(1) CONNECT连接命令 ( (0x01) 即握手信号;

(2) SET_S_STATUS设置当前通信状态 (0x0C) ;

(3) GET_DAQ_SIZE获取DAQ列表大小 (0x14) 。

这些命令用来建立连接和获得一些DAQ的信息。

1.2.2标定命令

(1) SET_MTA设置MTA地址 (0x02) ;

(2) DNLOAD数据下载 (0x03) ;

(3) UPLOAD数据上传 (0x04) 。

这些命令用来获取标定量的信息和改写标定量的信息。

1.2.3观测命令

(1) SET_S_STATUS设置当前通信状态 (0x0C) ;

(2) GET_DAQ_SIZE获取DAQ列表大小 (0x14) ;

(3) SET_DAQ_PTR设置DAQ列表指针 (0x15) ;

(4) WRITE_DAQ写入DAQ列表 (0x16) ;

(5) GET_S_STATUS获取当前通信状态 (0x0D) 。

这些的命令用来建立DAQ列表。

1.2.4 结束命令

(1) START_STOP开始/终止数据传输 (0x06) ;

(2) DISCONNECT断开命令 (0x07) ;

(3) START_STOP_ALL开始/停止同步数据传输 (0x08) 。

这些的命令用来断开VISION和ECU之间的连接。

1.3 通讯方式

CCP协议的实现只依赖两则CAN消息:命令接收对象 (CRO) 和命令传输对象 (DTO) 。CRO由主设备发给从设备, DTO是从设备反馈的报文, 两者分别通过一个自己的ID标识符进行标识 (CRO_ID与DTO_ID) , 下图是主、从设备通信的架构。

2、CCP协议中的DAQ模式分析

2.1 DAQ模式配置方式

在使用DAQ模式进行通信前, 主设备需要对DAQ列表及ODT列表进行配置, 方法如下:

(1) 获取ECU内所实现DAQ列表数目及ODT数目, DAQ列表数据由数据上传的周期决定, ODT列表数由每个周期下所需上传的数据个数及长度决定。

(2) 向相应的ODT元素中填入内容, 即数据的存储地址和数据长度 (数据长度一般为1 个字节) 。数据将根据其类型及上传周期, 被写在不同DAQ列表的不同ODT元素中。

(3) 根据上传数据的周期, 针对不同的DAQ列表赋以事件通道和预分频。事件通道与上传周期一一对应, 同一个DAQ列表中的不同ODT享有同一个事件通道和预分频值, 即同一个DAQ列表中的所有数据的上传周期相同。通过预分频值可将数据的上传周期成倍扩大。

(4) 启动DAQ模式, 进行数据采集。

2.2上传观测量的实际速率和设置的速率对比

A2L文件中设置的DAQ上传时间的代码如下:

/begin RASTER

"10ms time synchronous""10_ms"041

/end RASTER

这段代码中的4, 1表示的就是10ms。

VISION中实际得到上传时间:

其中, 200ms是总体时间, 10ms是真正获得参数的上传时间。

对比可知, 设置的上传时间和VISION实际得到的上传时间一致。

3、CCP协议的应用

CCP协议在典型系统 (标定诊断) 中所需的硬件如下图所示:

3.1 CCP标定系统的组成

控制器ECU, CCP协议栈驱动的实现, A2L文件, ECU标定和测试工具。

3.2 实现过程

(1) 将控制器的CAN线和kvaser的一端 (九针插头端) 连在一起, 另一端USB端连接在电脑上;

(2) 打开VISION读入ASAP2 (A2L) 文件;

(3) 在VISION的screen里面导入观测量和标定量, 标定量的有蓝红箭头, 余下的变量是观测量, 它们通过CCP协议中的DAQ模式上传;

(4) 在ECU中我们将标定参数放置在EEPROM和RAM区, 当参数需要断电保存时, 选择把标定参数放置在EEPROM区, 当参数不需要断电保存时, 可以把标定参数放置在RAM区。

4、结论

VISION和ECU之间通过CCP协议中的命令进行交互, 且A2L文件采用DAQ模式上传的时间与VISION实际所得到的DAQ上传命令时间一致, 最终完成VISION和ECU之间通讯, 实现控制器参变量的标定和观测。

参考文献

[1]罗峰, 孙泽昌.汽车CAN总线系统原理、设计与应用[M].北京:电子工业出版社, 2009.

[2]孙同景, 陈桂友.Freescale 9S12十六位单片机原理及嵌入式开发技术[M].北京:机械工业出版社, 2008..

[3].丁圣彦, 罗峰, 孙泽昌.基于CCP协议利用CANape进行电控系统标定[J].电子技术应用, 2005 (12) :1-4.

[4]ASAP, Can Calibration Protocol Version 2.1.1999:1-45.

本文来自 99学术网(www.99xueshu.com),转载请保留网址和出处

【嵌入式生成代码】相关文章:

嵌入式构建06-02

嵌入式网络06-25

嵌入式教育06-27

嵌入式监测论文05-24

嵌入式战略论文06-30

学习嵌入式心得06-11

嵌入式论文题目04-08

嵌入式视频监控05-23

嵌入式检测系统06-09

嵌入式应用软件06-27

上一篇:民间非营利组织会计下一篇:记叙文写作指导例谈