代码自动生成技术
代码自动生成技术(精选9篇)
代码自动生成技术 第1篇
基于虚拟现实技术的虚拟培训系统的发展,解决了传统的培训方式受现实局限无法达到某些功能的问题,以其所具有的节约成本,生动形象,及时反馈,使受训者身临其境等的鲜明特点,受到越来越多的关注。作为虚拟装配培训系统的开发过程至关重要的一环,虚拟装配仿真动画影响着培训的效果和质量,决定着培训的内容。
研究基于宝山区科学技术委员会产学研合作项目———电梯安装虚拟培训系统的开发过程,针对解决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.
自动备份web程序的编程代码 第2篇
1.cd /home/back
2.rm -f *.tar
3.today=`date +“%Y-%m-%d”`
4.file=webappsback$today
5.tar -cvf $file.tar/home/httpd
6.ftp -n<
7.open 218.56.78.90
8.user ftpuser ftppass
9.binary
10.prompt off
11.cd yourdir
12.hash
13.lcd /home/back
14.mput *
15.bye
代码自动生成技术 第3篇
近年来电脑控制簇绒机的应用越来越广泛,使得各种簇绒CAD/CAM系统迅速发展起来,然而对花型文件的选择、处理以及生成控制文件的算法和处理的方法多种多样,但各有优缺点。笔者针对电脑簇绒控制代码自动生成过程中的几个问题提出了自己的想法。
1 花型设计时文件格式的选择
目前的簇绒CAD系统一般采用单独的花型文件格式,这种花型的文件格式是系统自定义的。系统自带花型数据库,用户可以调用库中的花型,也可以通过该系统设计花型。显然,这种花型文件格式只有在该系统中才能被识别和打开,这给实际操作带来了诸多不便。首先,生产商和客户相距较远,双方不便在花型的设计和修改等问题上进行沟通,因为文件格式是专用的,所以需要双方均安装该软件;其次,使用单独的文件格式对图像来源的获取非常不便,要想从外界获得图形,就需要在系统中加入一些识别和读取通用图像文件的模块,这增加了系统设计的难度。所以,近年来出现了通用的花型文件格式(如BMP等),并迅速地得到了广泛的应用。
1.1 使用BMP格式存储簇绒花型
采用Windows位图文件BMP 格式来存储簇绒花型,可以有效地解决前面提到的问题。BMP格式文件是一种广泛使用的通用文件格式,在Windows系统中能被识别,该文件还可以利用一些常见的图像处理软件来进行设计和修改。这样在商业活动中,就不需要在客户端安装专用的CAD系统,降低了成本,提高了效率。
1.2 使用BMP格式的关键问题及解决方法
选择BMP格式作为花型存储文件格式,需要在系统中编写BMP读取、编辑和保存模块。我们所熟悉的机械行业CAD系统,对图形文件的编辑和存储是矢量形式,与Windows的位图有很大区别。矢量形式是把图形中的基本元素(如点、线、圆等)作为一个个基本单元用链表来存储,而BMP位图一般是采用点阵形式来存储图像。如果既要使用传统的CAD绘图方法,同时又要使之保存为BMP格式,这样文件保存就成了使用BMP格式作为花型文件格式的关键问题。我们可以在绘图之前先在内存中预建一个空的BMP位图,显然其数据区是空白的,画图时,只要将屏幕上的图形映射到内存中的数据空白区,就能实现BMP文件数据的自动填充,从而解决了这个问题。使用VC++6.0函数库中的函数Create DIB Section能创建一个空的位图,并分配预定的内存空间,在编辑图形时,就象在内存中绘图,而保存图形时,程序直接从内存中获得数据。
2 对BMP图颜色的处理
一般的BMP位图颜色非常丰富,而在簇绒工艺里,所织地毯包含的颜色是非常少的,颜色过多,工艺上难以实现,因此需要处理BMP图颜色过多、过杂的问题。首先对BMP位图进行颜色的处理,把颜色信息丰富的BMP图像转化为只包含少量颜色的图,也就是从BMP图像众多的颜色中提取工艺要求的几种主色来生成新的位图,同时要求新图与原BMP图像形状尽量相似。
2.1 运用数字图像学进行分色
运用数字图像学的知识对BMP图像进行处理,使用一种改善后的K-means聚类算法对BMP图像进行分色,用集中的少量颜色来代替分散的、丰富的色彩,并且具有较小的失真度。
数据挖掘中的聚类分析是一类较好的分色方法,其中K-means算法原理如下:随机选取一些代表点作为聚类的中心,然后把其他的待分点按某种方法分到各类中去,完成初始分类;初始分类完成后,重新计算各聚类中心,把各点按初始判据重新分到各类,完成了第一次迭代;然后再修改聚类中心,进行下一次迭代,对上一次分类结果进行修改;如此进行反复,直到所得结果满足某个阈值函数为止。
考虑到K-means算法中初始点是随机选取的,可能会得到完全不同的聚类结果,甚至会导致分色后图像的严重失真,因此合理选择初始聚类中心是解决最佳划分问题的关键。为了尽可能多地保留图像的原始信息,所以对算法聚类中心初始值选取的方法做有效的修正,使用一种对K-means改善后的聚类算法,即:在三维欧氏空间中(RGB颜色体系),把拥有T种颜色的图像分色为K种颜色时,先把T个颜色样本作为初始聚类中心,事先指定的样本点应是样本集合中频度最高的前P个样本点;然后在其余的样本集合中再找出一个与初始类聚类中心欧氏距离最大的样本点作为补充的类代表点,依此类推,直到找出K个聚类中心为止,把它们作为初始聚类中心。对于P,要根据该彩色图像直方图的特征选取,如果该图像的颜色分布不均匀,则P=K/3时分色效果较理想;如果颜色分布均匀,则P=K/2时分色效果比较好[1]。
2.2 分色具体算法
分色的具体算法如下:
(1)统计整幅图像的颜色样本,建立存储各颜色的动态数组,并得到颜色直方图,颜色样本对应的频度为h(i),i=1,2,,T。
(2)颜色样本频度较多的前P个颜色样本作为初始类聚类中心,即Zundefined,Zundefined,,Z1P。
(3)其余K-P个初始类聚类中心的选取,按以下步骤进行:
第一步:设Z为所有颜色样本,则Z1={Zundefined,Zundefined,,Zundefined},Z2=Z-Z1。
第二步:计算Z2中所有的样本点与Z1中各聚类中心的最短距离,并进行比较。最大距离的样本作为新的初始类聚类中心插入到Z1,同时在Z2中去掉该颜色样本。两个颜色样本点的距离为undefined。其中,ri、gi、bi为第i个颜色样本的R、G、B的颜色值;rj、gj、bj为第j个颜色样本的R、G、B的颜色值。
第三步:若|Z1|
(4)Z1中的K个初始类聚类中心选取后,按照K-means聚类分色算法,求全体颜色样本中其他颜色样本X与初始类聚类中心最小距离,然后将X按最小距离原则分配给K个聚类中心的某一个Zundefined,即若‖X-Zj‖<‖X-Zi‖,则X∈Sj。其中:i,j=1,2,,K,i≠j;Sj表示第j个聚类,其聚类中心为Zundefined。然后计算各新的聚类中心值,把各聚类域中所包含样本的均值作为新的聚类中心,即:
undefined。 (1)
其中:Nj为当前第j个聚类所有颜色样本的像素个数之和。Zundefined的向量作为新的聚类中心,如果Zundefined≠Zundefined,则将样本逐个重新分类,重复迭代[2]。建议迭代次数不宜过多,以避免原初始聚类中心的颜色与最终聚类中心的颜色相差太大,一般迭代10次效果较好。至此,便可以从拥有T种颜色的彩色图像中得到K种最佳的代表色,从而得到K种颜色的分色效果。
图1为原始输入图像,图2为采用改进聚类分色后的图像,图3为采用改进聚类分色后保留的颜色。由于选作类中心颜色值分布范围广,而其他颜色仅在本子空间中作颜色归并,这样聚类后图像中像素颜色的差异就小,颜色分布较合理,图像失真度也较小。
3 由BMP图到控制文件转化过程中的数据结构和算法
由BMP图到控制文件的转化是CAM中工艺和算法最复杂的部分,在文件转化过程中会碰到大量且彼此有紧密联系的数据流,而且工艺过程复杂,CAM系统设计者采用了各种各样的算法和数据结构来实现这一功能。
3.1 簇绒机工作原理
簇绒机由纱架、簇绒机构、卷绕机构等组成。簇绒机工作时,绒纱从插在纱架上的锥形筒子上引出,经输纱管、喂纱罗拉进入簇绒头。底布从喂入侧的布辊上退出,在底布托板上方通过。偏心轴带动针座上、下运动,带动簇绒针穿过底布做垂直往复运动,簇绒针向下刺穿底布,向上从底布中拔出。簇绒机某个时刻的状态由驱动信号决定,而驱动信号是根据分色处理后的BMP图生成的,所以BMP图的数据组织形式以及转化为控制信号的算法是问题的关键。
3.2 BMP图数据的表示方法及控制数据生成
根据BMP文件确定花型的列高H和行宽W,例如有一个HW=1010的花型,可用矩阵表示如下:
由此矩阵可以看出此花型有5种颜色,分别用1、2、3、4、5来表示,矩阵的每个元素与驱动器信号一一对应,可以根据每个元素的值控制簇绒过程中簇绒头的运动状态,这样可以得到簇绒头连续的运动状态值,从而组成簇绒机的控制文件。有了它就可以控制簇绒机按照BMP图簇出预定的花型。
4 结束语
本文针对簇绒机控制代码自动生成过程中的几个突出问题做了一定深度的探讨,提出了一些创新性的思路。限于篇幅,本文没有对工艺流程和系统框架做详细的介绍,没有深入到具体的实现技术和细节问题,敬请谅解。
摘要:讨论了簇绒机控制代码自动生成过程中的3个主要问题,包括花型文件存储格式的选择、花型颜色的处理以及由图像如何转化为控制文件。介绍了使用一种改善后的K-means聚类算法对BMP图像进行分色处理,以及处理后BMP图的数据表示方法和控制文件的数据生成。
关键词:BMP,簇绒机,CAM
参考文献
[1]梁道雷,黄国兴,金健.聚类分析在彩色像景织物分色处理中的应用[J].计算机科学,2006,33(11):154-156.
代码自动生成技术 第4篇
另一种方法是在控件找到它的约束变量,用代码调整值即可,后者更为简单,因为我可以在Storyboard 针对大部分机型设置好变量,然后在小屏幕机型,微调一下即可。
两者测试均可实现,我现在实现后一种:
//查找对应的约束常量,注意分清是firstItem,还是secondItem.这个在Storybord能看说明,比哪区中对齐时,被对齐的控件是secondItem.+(NSLayoutConstraint *) findFirstConstraint:(UIView *)parentView firstItem:(id)firstItem attribute:(NSLayoutAttribute)attribute{ for (NSLayoutConstraint *constraint in parentView.constraints) { constraint.priority, constraint.secondItem); if((constraint.firstItem == firstItem) && (constraint.firstAttribute == attribute)){NSLog(@“find! %@”,firstItem);return constraint; } } return nil;}+(NSLayoutConstraint *) findSecondConstraint:(UIView *)parentView secondItem:(id)secondItem attribute:(NSLayoutAttribute)attribute{ for (NSLayoutConstraint *constraint in parentView.constraints) { if((constraint.secondItem == secondItem) && (constraint.secondAttribute == attribute)){NSLog(@“find! %@”,secondItem);return constraint; } } return nil;}
在创建方法中,判断一下是否是iPhone4S 小屏,如果将约束常量和字体均缩小,以便能加入,
这里将对齐偏移量由21变成15,字号也缩小了2号
恶意代码行为自动化分析技术探析 第5篇
关键词:恶意代码,自动化分析,行为监控,行为关联
0 引言
恶意代码行为分析是恶意代码应急响应、计算机取证的基础。通过分析恶意代码的功能、目的, 快速地为系统恢复、损失评估提供详细信息。传统方法是分析人员使用调试器跟踪代码并理解其行为。然而, 随着互联网的发展, 恶意代码也在不断发展。在攻击性不断增强的同时, 现代恶意代码通常采用多态、变型、反调试等手段提高自身隐蔽性;另外, 随着一些恶意代码自动化生成工具的出现和攻击代码的公开, 恶意攻击也变得简单容易。由此可见, 手工分析具有严重滞后性, 也使得恶意代码行为自动化分析成为研究热点。
1 恶意代码分析技术
恶意代码分析技术分为静态分析和动态分析。
静态分析利用Debug等反汇编工具把恶意代码反汇编成汇编代码, 通过查看反汇编代码进行分析。静态分析的优点在于可以检查恶意代码所有的执行路径, 具有较高的准确性, 但分析难度较大, 难以分析采用了多态、变型、加壳手段的恶意代码。
动态分析是在受控环境下执行恶意代码来分析行为特征, 不受多态、变形或加密等手段的影响。CWSandbox[1]在虚拟机VMware中分析样本, 采用API Hook技术跟踪程序行为, 自动化产生分析报告。TTAnalyze[2]的分析环境建立在QEMU[3,4]上, 后者是一个面向完整PC系统的开源仿真器, 除了仿真处理器外, QEMU还允许仿真所有必要的子系统, 如连网硬件和视频硬件等。Norman Sandbox[5]提供在线病毒分析服务, 包括行为检测, 特征码扫描, 是进行病毒 (特别是未知) 分析、处理的有力工具。
2 恶意代码行为自动化分析技术
2.1 行为监控跟踪技术
系统中的资源由操作系统统一管理。在操作系统的外层或用户程序中, 凡是与资源有关的操作 (如分配内存, 进行I/O传输等) 都必须通过某种方式向操作系统提出服务请求, 并由操作系统代为完成。因此, 操作系统必须提供某种形式的接口, 以便让外层软件通过这种接口使用系统提供的各种功能, 这种接口称为系统调用。系统调用可以看成是用户或系统程序在应用程序级请求操作系统为之服务的一种手段。它是系统中真正被所有进程所使用的内核通信方式。程序要实现自己的功能, 需要使用操作系统提供的内核服务, 而系统调用是程序与内核进行通信的唯一手段。因此跟踪系统调用, 即系统调用挂钩技术, 可以达到监控程序行为的目的。
系统调用挂钩技术, 包括:导入地址表挂钩 (IAT Hook) 、系统服务描述符表挂钩 (SSDT Hook) 、中断描述符表挂钩 (IDT Hook) 、驱动输入输出请求报文处理挂钩 (IRP Hook) 、内嵌函数挂钩 (Inline Function Hook) 等。这些方法又有内核态和用户态之分。但是, 无论采用哪一种方法, 无论是在用户态或是核心态挂钩系统调用, 本质是相同的, 即是劫持程序的执行路径, 将程序的执行路径控制在本身范围之内, 从而实现监控的目的。劫持执行路径的方法可以是修改函数指针为自己的函数地址, 当调用原函数时, 真正调用的是自己的函数, 在自己的函数中再调用原函数, 并控制返回结果。例如, IAT Hook, SSDT Hook即属于这一类;也可以是在原函数内部跳转到自己函数里以实现控制, 例如, Inline Hook。
2.2 恶意行为分析
提供有效而完备的分析结果, 将有助于恶意代码后期处置, 而目前大多数分析工具的分析结果仅简单罗列样本的各种行为, 如文件访问行为, 网络行为等, 缺乏更高一级的综合的自动化判断。本文所指的恶意行为分析包括行为分类分析和恶意行为判定。
2.2.1 行为分类分析
根据行为的作用范围, 分析所捕获的系统调用序列。具体包含未知二进制程序文件的基本信息、进程/线程信息、内存信息、文件信息、注册表信息、网络信息和模块信息。
基本信息:包括未知二进制程序的文件大小, 创建日期, 模块信息, PE文件信息等。
进程/线程信息:包含了该二进制程序在运行过程中创建的新进程/线程, 结束的进程/线程, 访问的远程进程/线程等。
内存信息:针对一些特殊内存区域的访问, 如物理内存直接访问行为, 操作系统核心关键内存区域的访问行为等。
文件信息:主要是包括了对系统目录文件的访问, 如创建隐蔽的文件于系统目录之中, 或是修改系统目录下的关键文件信息。还包括恶意程序创建的所有新文件、修改或移动过的文件等。
注册表信息:主要是包含了与自启动相关的注册表项和键值的修改、创建等, 因为恶意程序往往通过修改注册表来使得系统重新启动后仍然能够继续执行恶意程序副本。
网络信息:主要包括与外界的通信情况, 包括远程访问的网络地址, 本地监听的网络端口, 以及传输的网络信息内容。还包括一些上层应用的网络信息, 如远程端口扫描行为, 枚举邮件列表中的所有地址以发送邮件, 访问网上邻居等行为。
模块信息:包含了对动态链接库文件和驱动文件加载行为和卸载行为的记录。为了隐藏进程, 恶意程序往往会以动态链接库的形式将执行代码驻入到远程进程空间里面, 最后在操作系统中存在的就是已知进程执行了恶意程序在动态链接库中的代码, 未产生新的进程。为了提升权限, 恶意代码往往会加载驱动程序, 使得有访问操作系统内核的能力。
2.2.2 恶意程序判定
恶意程序判定需要结合恶意行为规则库。为建立恶意行为规则库, 需要对恶意代码行为进行归纳、分类和建模。恶意行为可分类三类:隐藏行为, 传播行为, 破坏行为。每个行为作为规则库中的一个规则单元。部分规则单元见表1:
这些是大多数恶意程序的常见行为, 但也被少数正常程序使用, 因此不能独立作为判断恶意程序标准。本文将两个或两个以上的规则单元进行关联, 形成恶意行为规则。例如, 在关键区域创建文件和修改注册表自启动项都是规则单元, 但是一个程序仅仅包括了这两个动作并不能被判定成一个恶意程序, 还需要基于数据流的关联条件。例如, 采用基于数据流的关联后, 这条规则用伪代码表示如下:
if ( (创建文件类型属于EXE||DLL||SYS) && (创建文件路径属于磁盘根目录||系统 (子) 目录||用户 (子) 目录) )
3 恶意代码行为自动化分析的应用范围
恶意行为自动化分析产生的输出是行为分析报告。然而, 在恶意程序应急响应链中, 分析报告并不是样本行为分析的最终点, 它将作为恶意代码后期处置的直接参考资料。本文从更多的角度进一步挖掘分析报告价值, 说明自动化分析的意义。
3.1 危害程度评估
评估恶意代码对环境所造成的危害, 分析恶意代码的传播趋势是安全领域的一个重要的应用。以行为分析报告为据, 安全专家再借助模糊数学等原理, 可以更高效, 更准确的评估恶意代码对系统和网络的影响。
3.2 自动化生成修复工具
为了缩短从发现未知恶意代码到生成补丁之间的时差, 迫切需要一个针对某种恶意代码的修复工具自动化生成应用程序。若以自动化分析的分析报告作为输入, 一个这样的应用程序并不难实现。
删除工具需要恢复恶意程序对系统各方面的修改, 分析报告记录了样本终止程序, 停止服务, 修改文件, 替换注册表键值等行为, 这样的工具首先针对作用范围相同的修改记录自动化生成对该类的修复模块, 例如, 分析结果显示, 样本对注册表的修改行为如下:将注册表键A的某个键值A1修改为为a, 删除注册表键B, 创建新注册表键C, 那么可以根据这一修改行为轨迹自动化生成注册表系统修复模块, 该模块首先删除新创建的注册表键值, 恢复原有的注册表键B及B下的各值, 最后将A的键值为a的项还原成A1。将生成的各单一类别的修复模块进行整和, 便可生成针对该样本的系统修复工具。
3.3 自动化生成行为特征码
传统的基于特征码的恶意程序检测工具在面对具有迷惑技术的恶意程序时具有较大的局限性, 并且特征码的提取需要极大程度的人工干涉, 自动化程度很低, 具有较大的滞后性。从本质上说, 行为特征码本身能够对抗采用多态/变形技术的恶意程序, 进一步, 如果能够自动生成行为特征码, 那么将能够极大程序的弥补特征码扫描的缺陷。从需求分析, 行为特征码自动提取工具需要样本的各种恶意行为记录, 而这样记录已经体现在了分析报告中。
4 结论
本文对恶意代码自动化分析技术进行了有益的探索。恶意代码自动化分析技术是安全应急响应中的关键环节, 其产生的分析报告, 为恶意代码后期处置, 如特征提取, 清除方案等, 提供直接资料, 更进一步提高安全应急响应的速度, 为全方位安全防御系统铸下坚实的基础。
参考文献
[1]C.Willems.CWSandbox:Automatic Behaviour AnalysisofMalware[EB/OL].http://www.cwsandbox.org/, 2006.
[2]U.Bayer, C.Kruegel, E.Kirda.TTAnalyze:A Tool for Ana-lyzing Malware[J].In 15th Annual Conference of the Euro-pean Institute for Computer Antivirus Research, 2006.
[3]Fabrice Bellard.Qemu[EB/OL].http://fabrice.bellard.free.fr/qemu/, 2005.
[4]Fabrice Bellard.Qemu, A Fast and Portable DynamicTranslator[J].In USENIX AnnualTechnical Conference, 2005.
[5]Norman.Normal Sandbox[EB/OL].http://sandbox.norman.no/, 2006.
[6]田畅, 郑少仁.计算机病毒计算模型的研究[J].计算机学报, 2001, 24 (2) :158-163.
代码自动生成技术 第6篇
控制器的研究开发是新型汽车电动助力转向系统的关键部分。要保证开发的电动助力转向系统拥有良好的安全性能与实用性,就给专业技术人员带来了关于硬件设计是否过关、软件功能是否完善、控制策略制定是否合理等诸多方面的硬性要求[1⁃2]。目前汽车生产市场的竞争进入白热化阶段,设计出性能完美、成本低廉的产品以迎合消费者成为了重中之重。同传统的液压助力转向系统相比,汽车电子控制系统可以更好地实现汽车在高速和低速时不同的转向力感调节,同时也更加节约成本并降低油耗。而传统汽车电子控制系统是由开发人员手工编写软件进行设计,存在耗时高、调试困难、控制误差高的缺陷[3⁃5]。
当前研究出的汽车电子控制方法都存在一定的问题,如文献[6]基于汽车实际运行状态同理想状态间的误差反馈,调控汽车的横摆力矩,但是该方法采用传感器无法获取全部的车辆运行状态数据,存在一定的局限性。文献[7]通过横摆角速度和汽车侧偏角控制间的相平面获取稳定范围,实现车辆的控制,但该方法容易受到车辆内部因素和外界环境因素的干扰,存在较高的控制偏差。文献[8]制定了车辆侧滑速度的的预测策略,通过车辆动力学波动情况对车辆稳态输出进行定位,但该方法对车辆运行的稳定性要求较高,并且控制精度较低。文献[9]依据轮胎和汽车动力性试验的管理方案,通过直接横摆力矩增强汽车的控制质量,但其控制过程较为复杂,控制效率低。
针对上述方法存在的问题,本文采用自动代码生成技术设计并实现汽车电子控制系统,设计以MPC5634M芯片为控制核心的汽车电子控制器硬件电路,在Matlab平台上开发MPC5634M芯片的自动代码生成环境以及控制系统所需的驱动模块。将μC/OS⁃Ⅱ实时操作系统嵌入Matlab/Simulink下的自动代码生成环境底层文件中,进而开发汽车电子控制系统的软件模型。
1 基于自动代码技术的汽车电子控制系统设计
1.1 控制系统的自动代码生成环境配置
设计的汽车电子控制系统采用处理芯片来自于飞思卡尔公司的MPC5634M单片机系列。塑造飞思卡尔MPC5634M芯片的自动代码生成开发环境,同时开发MPC5634M不同功能的驱动模块,可实现汽车电子控制系统控制软件的自动代码生成环境的开发。Matlab/Simulink平台中的Embedded Coder功能块可为开发人员修改在系统的底层TLC文件提供服务,并且直接生成用户自定义代码。
但是,在Matlab中并不包含MPC5634M的驱动模块,因此需要通过系统函数S⁃Function设计单片机的驱动模块,采用该系统函数自动生成代码情况下,S⁃Func⁃tion则需要通过面向该模块编写的TLC文件产生相关的代码和注释。采用Inlined S⁃Function编写方法设计单片机的驱动模块,为各S⁃Function模块配置一个TLC文件,并将模块的底层驱动代码依据相应的规范写入TLC文件内。自动代码生成过程中,通过TLC文件内的代码替换C⁃MEX S⁃Function内的代码,确保设计的S⁃Function模块符合汽车电子控制系统设计的需求,并依据用户需求获取自定义底层C代码,再通过相应的编译器下载到目标硬件中。用于开发汽车电子控制系统自动代码生成环境的底层文件编写示意图如图1所示。
1.2 汽车电子控制系统硬件电路设计
汽车电子控制系统硬件电路是系统控制策略运行的载体,其基本结构如图2所示。汽车电子控制系统对外部方向盘扭矩信号、电机电流和电压信号、车速信号以及发动机信号进行提取、滤波后,将信号变换成数字信号输入单片机中进行操作,依据相应的控制方法进行运算,并输出控制信号,再采用驱动电路对电机进行合理控制。
控制系统的硬件电路包括控制电路板和驱动电路板。控制电路板由单片机、模拟信号采集电路等构成,驱动电路板由电源模块和继电器控制电路等构成。不同模块的设计过程如下所述。
1.2.1 MPC5634M单片机的电源和复位电路设计
控制核心部分选择的是飞思卡尔公司生产的MPC5634M单片机。其集成了FLASH和RAM存储空间,拥有70 MHz的主频。这种控制核心采用4 V以上的供电,可以将控制板上的外部10 V供电模块调成4 V,使用这种电源模块进行供电。这种电源模块输出的4 V电压需要进行滤波处理,才能给单片机提供必须的能源输出。复位电路示意图和控制芯片电源电路如图3所示。
1.2.2 信号采集电路的设计
汽车电子控制系统通过电阻方法采集电流信号,电路如图4所示。把采集到的电阻样本加入到电机电路中,电阻样本中的电压通过可以限压的二极管和RC滤波器,从而进入到信号放大器中,经过信号的放大将电阻样本降压,最后整理得到汽车电子控制系统在运作过程中所产生的真实的电流数据情况反映。
汽车电子控制系统电路中的母线电压与电机电压的采集都是通过如图5所示的控制器完成。在单片机的A/D采集模块中,分压二极管、限压二极管和π型滤波器都对电压信号进行了相应的处理。控制系统依靠上述过程采集得到的电机电压值和母线电压值,采用变增益PI控制策略进行控制分析。
1.2.3 驱动控制电路的设计
汽车电子控制系统的驱动控制电路如图6所示。其中的H桥驱动电路由4个MOSFET组成,驱动控制电路选择的是MC33883预驱动器,它的优势在于电路板面积小,能明显节约成本;但驱动运转能力却不容小觑,5~60 V的电压都可以兼容,PWM输出值可达到120 k Hz,是驱动控制电路中的不二选择。
1.3 汽车电子控制系统软件实现
依据1.1节开发的汽车电子控制系统的自动代码生成环境,设计汽车电子控制系统控制软件,并依据μC/OS⁃Ⅱ实时操作系统的软件架构,增强控制系统软件代码的开发效率。对μC/OS⁃Ⅱ操作系统在MPC5634M芯片上的移植,完成μC/OS⁃Ⅱ操作系统同Matlab/Simulink自动代码生成环境的融合。塑造完软件开发环境后,可塑造汽车电子控制系统控制软件模型,并且通过变增益PID控制策略,采用模糊控制器实现控制系统中PI参数的调整。
1.3.1 汽车电子控制系统的变增益PI控制模块
电机助力电流对目标电流的跟随控制算法是汽车电子控制系统的关键控制算法,采用变增益PI控制方法对助力电机目标电流进行定位监测,如图7所示。可以看出变增益PI控制模块通过Matlab模糊编辑器获取电流差值同P,I参数的关系曲线,在模型中采用查表实时调控P,I参数。
1.3.2 汽车电子控制系统控制逻辑设计
利用塑造的含有μC/OS⁃Ⅱ实时操作系统的Simu⁃link自动代码生成环境,塑造使用μC/OS⁃Ⅱ实时操作系统架构的汽车电子控制系统软件模型。将控制系统在μC/OS⁃Ⅱ操作系统中分割成控制任务和通信任务。设置控制任务的运行时间为3 ms,由信号采集、数据处理、目标电流分析、电流定位等功能模块构成,是汽车电子控制的主要实现手段。设置通信任务的运行周期是8 ms,其通过CAN将系统内的信号周期性反馈到上位机,对总体汽车电子控制参数进行及时监测。设计的总体汽车电子控制系统模型如图8所示。
图8中的Set Task Time模块设置控制任务和通信任务的运行时间,Activate Task模块设置任务的使用权重以及名称,采用信号线完成两个任务的信号沟通,通过Protected RT模块实现信号传输的同步。Control Logic模块中包含汽车电子控制系统中的关键逻辑模块如图9所示。
2 实验分析
为了验证本文提出的基于自动代码生成技术的汽车电子控制系统的有效性,实验将本文设计的系统程序在MPC5634M芯片上移植成功,并且测试通过,并对比分析手动移植的控制系统控制程序,获取二者代码数量的优劣,结果如表1所示。
分析表1可得,本文采用自动代码生成技术设计的汽车电子控制系统能够增强软件的开发效率,降低算法调试难度并且代码生成量高,相对于手动编写方法极大提高了系统开发效率。
2.1 汽车电子控制系统试验台
为了在开发过程中验证汽车电子控制系统的控制策略,设计了控制系统的简易试验台,其结构如图10所示。其由转向盘、蓄电池、助力电机与控制器等组成,通过这种装置能实时监控本文设计的汽车电子控制系统的参数情况。
2.2 实验结果分析
2.2.1 电流阶跃实验结果分析
电流阶跃实验的前提是必须固定PI的参数值。步骤如下:首先设定目标的电流值,将实验装置的方向盘固定好后,开启电机助力转向系统。将PI值设定为0.03和0.001,效果如图11所示。0.5 s目标电流产生较大波动,此时采用固定PI控制方法无法通过高P值,完成电流的定位,该方法定位目标电流用了0.15 s,超调量为0.9 A左右。接下来用本文设计的PI控制策略的方法进行实验,实验结果如图12所示。图中显示电流值到达目标电流时的时间为0.05 s,超调量为0.08 A,电流也比固定PI控制方法节约了0.2 A左右,并且之后的电流值极接近目标电流,趋于平稳。把这两种实验方法得出的数据进行比较,能明显看出本文方法能够增强汽车电子控制系统的动态响应效果。
2.2.2 慢速转向实验结果分析
慢速转向实验可以检测PI控制对系统中电流稳定性的影响,采用慢速转动装置中方向盘的方法,根据电流值的变化可看出效果。首先在EPS实验台装置上慢慢转动方向盘,得到实时电流值并跟目标电流对比,得到的结果如图13所示。可以看出,实际电流值对目标电流值的跟随度很差,稳定性不良好。而图14显示的是用本文PI控制策略方法检测出的曲线图像,可以看出其对电流的跟随度高,转向平滑,实际电流也十分贴合目标电流。
根据实验结果能够很直观地看出本文PI控制策略法无论在性能,还是效果上都优于固定PI控制方法。将本文设计的控制系统用于实际汽车的控制过程中,助力的效果会有明显改善。
3 结论
本文采用自动代码生成技术设计并实现汽车电子控制系统,开发汽车电子控制系统的自动代码生成环境,在Matlab平台上开发MPC5634M芯片的自动代码生成环境以及控制系统所需的驱动模块。设计以MPC5634M芯片为控制中心的汽车电子控制器硬件电路,并分析硬件电路中各模块的设计原理。
采用基于μC/OS⁃Ⅱ实时操作系统的软件架构,通过自动代码生成技术将μC/OS⁃Ⅱ实时操作系统,嵌入Matlab/Simulink下的自动代码生成环境底层文件中,在此基础上开发汽车电子控制系统的软件模型,采用模糊控制器实现控制系统中PI参数的调整。实验结果表明,所设计系统在软件代码开发数量和效率上具有较大优势,并且系统在实际控制过程中具有较好的稳定性和阻力效果。
参考文献
[1]孙颖,王建俊,张承瑞.基于AUTOSAR的汽车电控系统代码自动生成技术[J].重庆理工大学学报(自然科学版),2014,28(3):33-38.
[2]洪晓君,朱磊.基于Matlab/RTWEC自动代码生成技术整车控制器快速原型开发[J].机电一体化,2014,20(8):47-52.
[3]李伟锋,杨李,陈锦涛,等.基于代码生成的单相VSR整流器串级控制系统[J].自动化应用,2015(3):53-55.
[4]赵柏林.基于自动控制系统的汽车电子技术分析[J].科技经济市场,2015(7):9.
[5]张冬晖,王欣.浅谈基于自动控制系统的汽车电子技术[J].中国科技博览,2014(42):336.
[6]纪淑玲.发动机电控自动代码生成应用技术研究[D].长春:吉林大学,2015.
[7]宋艳芳.试析基于Simulink RTW的汽车电子控制系统[J].黑龙江科技信息,2014(24):24.
[8]孔得雨,罗锋,林伟波,等.一种基于Velocity的代码自动生成技术研究[J].计算机应用与软件,2014(10):20-23.
[9]程龙.电流比较仪式电桥自动代码技术[D].上海:上海交通大学,2014.
代码自动生成技术 第7篇
日渐复杂的电控系统的需求对传统的开发模式提出了挑战,催生了快速控制原型的开发方法。它的基本原理是利用快速原型控制器硬件来代替产品的控制器硬件,在建模仿真平台上搭建并修改系统模型,通过自动代码生成工具自动生成模型源代码并将其经过编译链接后下载到快速原型控制器中,进行算法仿真和验证,快速原型技术能缩短研发周期,降低研发成本,提高电控系统的质量。自动代码生成技术是快速原型开发中的关键环节,控制模型源代码通过代码生成工具自动生成,无需手动编写系统的控制程序,虽然目前成熟的技术是利用RTW工具自动生成控制模型源代码[1],但是对于实时系统的开发来说,用来与目标芯片展开通信的设备驱动模块程序还需要用户手动编写,然后添加到控制算法的模型源代码中,这样势必导致控制系统的开发[2]、调试及测试难度大以及控制算法维护成本高。针对这一问题,本文提出一种驱动代码快速生成的方法,在RTW程序创建过程中,将驱动代码嵌入到算法模型源代码中,真正实现电控系统从仿真模型到应用程序的一步生成[8]。
1 RTW体系架构
RTW是一个开放式体系架构,它所生成的代码支持多种不同的操作系统和目标芯片。许多方式都能实现配置和丰富RTW功能的目的,RTW的体系架构如图1 所示。
RTW的程序创建过程[3]包括: 分析Simulink模型、使用目标语言编译器自动生成模型源代码、编译链接源代码。如图1 所示,模型分析阶段将模型框图转换为中间描述文件model. rtw,目标语言编译器会根据中间描述文件来转换C代码,由系统tlc( target language compiler) 文件来控制整个转换过程,对于模型中的模块,会根据模块对应的tlc文件来生成相应的C代码。RTW支持将用户自行编写的S函数模块加入Simulink模型,从而在RTW的程序创建过程中将自定义的模块程序嵌入到Simulink的模型源代码中,在编译链接阶段,创建访问实例控制编译器执行。
2 驱动代码快速生成技术
在RTW的基础上,为了实现驱动代码快速生成,须完成两方面的工作,针对特定目标硬件设计它的目标系统、针对各驱动函数接口设计设备驱动模块,总体方案流程如图2 所示。
2. 1 实时目标系统设计
实时目标系统用于配置RTW的程序创建过程,它主要包括三部分: 系统目标文件、脚本文件及Hook文件。
1) 系统目标文件用于设置代码生成的参数及目标硬件相关的专用数据。
该文件由四部分组成: 浏览器注释行、tlc配置变量、目标语言编译器程序的入口点、RTW_OPTIONS部分。浏览器注释行为系统目标浏览器和程序的创建过程提供了必要的信息,tlc配置变量部分配置了影响代码生成过程的tlc全局变量,入口点允许修改从而调用自己的tlc文件,RTW_OPTIONS部分定义了rtwoptions结构体数组和rtwgensettings结构体,rtwoptions结构体数组控制RTW选项卡中的显示效果,rtwgensettins结构体存放写入中间文件中的信息,同时声明程序创建过程中的其他设置。
2) 脚本文件用于创建访问实例,通过COM(Component Object Model) 组件[4]在MATLAB中实现对编译器的操作。为了在模型代码生成完毕后,指定编译器对其进行编译链接操作,脚本文件需要实现的功能有: 复制编译器文件夹到模型源代码文件夹中、在工程中添加模型源代码、编译目标工程文件。
3) Hook文件的设计是实时目标系统设计的重要环节,用于在代码生成过程中调用脚本文件将自动生成的模型源代码链接到编译器中,经过编译链接下载到目标板中执行。Hook文件的执行分为六个阶段,贯穿了整个RTW的程序创建过程,分别是:
(1) entry阶段开始RTW的程序创建过程,检查模型中的各模块; (2) before_tlc阶段生成模型的中间描述文件,同时RTW调用目标语言编译器TLC自动生成模型源代码; (3) after_tlc阶段自动生成创建目录的信息文件,并将其存放到创建的文件夹中; (4) before_make阶段生成程序创建过程必须的库文件; (5) after_make阶段更新创建信息对象; (6) exit阶段根据脚本文件com组件调用编译器对模型源代码进行编译链接及下载。前五个阶段都可以由RTW自动执行,只有exit阶段的执行是需要设计的。
为了减少RTW程序创建过程的风险,需要将定制的目标硬件的目标系统存放在一个单独的文件夹中,并将其添加到MATLAB的工作路径。
2. 2 设备驱动模块设计
设备驱动模块的设计是实现驱动代码快速生成的关键,设备驱动模块的功能是在RTW程序创建过程中将驱动程序内嵌到模型源代码中,其中生成的驱动模块程序与模块tlc文件有关,模型源代码的功能与原始的目标硬件驱动程序有关。驱动模块的设计包括以下阶段: 将目标硬件驱动程序封装成静态库、根据模块参数及输入输出端口数来设计模块的S函数[5],并对其进行封装和加入Simulink模块库,通过编写S-Function使得在RTW的程序创建过程中能将自定义的模块程序嵌入到模型源代码中、设计模块tlc文件用于定制模块程序,tlc文件通过获取模块中的参数值来定制驱动程序并将其嵌入到自动生成的模型源代码中,全程不需要人为对代码做任何修改,如果不设计模块tlc文件,创建的S函数模块只能用于仿真而不能用于生成代码。
以MPC5634 的模数转换模块和通用定时器模块为例,介绍驱动模块设计方法。
模数转换驱动模块的设计分成两步: (1) 设计S-function,SFunction通常由定义与包含、回调函数、Simulink / RTW接口三部分组成。定义与包含和最后的接口部分是固定的,不同特征模块的差异体现在回调函数中。该模块无需设置输入端口,设置一个输出端口,用于将转换结果传递给下一级模块,另外设置两个参数,分别用于获取通道号和转换精度。(2) 设计模块tlc文件,在程序创建过程中获取模块参数,并对指定通道进行模数转换,最后将结果传递给下一级模块。在tlc文件中设计各个函数实现需要的功能。模数转换模块tlc文件中包含四个函数:Block Type Setup实现符合标准的原型声明; Start函数用来实现Adc_Init并添加到模型的初始化函数initialize中; Outputs函数获取模块通道号和转换精度进行转换且把转换结果传给下一模块,最后把代码添加到自动生成的模型step函数中; Terminate函数中的代码在经过程序创建过程后会存放到模型的terminate函数中。
通用定时器( GPT) 用来实现系统和应用软件的定时功能,MPC5634 的GPT模块包含一个32 位的增量计数器和四个32位的比较通道,每个比较通道都有一个单独的中断源,因此MPC5634 的GPT模块由四路GPT所组成。通用定时器驱动模块的设计分成两步: (1) 设计S-function,该模块需要设置一个输出端口,该端口用来连接函数调用子系统( Function-Call) 模块,每个定时周期内执行一次该Function-Call模块,同时还需要设置三个参数实现GPT模块的定时功能,这三个参数分别为: GPT通道、定时周期和模块分频值。为了允许连接Function-Call模块,需要在S-Function中对其进行相应的设置,GPT模块没有输入端口,为了保证仿真结果的正确性,必须设置模块的采样时间为无穷大。(2) 设计模块tlc文件,在程序创建过程中获取模块通道号、定时周期和预分频值,执行GPT模块的定时功能,每个定时周期执行一次GPT中断处理程序,用于调用Fucntion-Call模块中自动生成的代码。在tlc文件中设计各个函数实现需要的功能,通用定时器模块tlc文件包含三个函数: 函数BlockType Setup和函数Start实现的功能跟模数转换模块类似,进行声明和初始化; Outputs函数用来将Fucntion-Call模块中生成的代码添加到GPT的任务函数中,然后再将该任务函数创建在RTW自动生成的源文件中。由于涉及到定时器中断,必须设计中断函数tlc文件,其主要功能是在中断函数中调用GPT的任务函数,具体操作如下: 检查Simuink模块中的GPT模块,获取通道号; 根据模块通道号,生成相应的中断函数; 在主函数中装载中断函数。
需要注意的是,上述模块tlc文件必须和对应的模块S函数文件同名。
3 MPC5634 芯片驱动代码快速生成实例验证
MPC5634 微处理器因其优越的性能被汽车电子领域、航空航天等高端嵌入式控制领域广泛使用。对驱动代码快速生成技术进行功能验证及实际应用实例测试,将其应用于MPC5634 芯片模数转换模块和通用定时器模块等驱动程序的开发,设计功能验证实例通过RTW程序创建过程之后能够自动后台调用Code Warrior编译器对所生成的模型源代码进行编译链接,下载到目标板中,验证驱动代码的功能正确性[6]。
首先按上述方法设计MPC5634 芯片的实时目标系统,其中脚本文件调用的是Code Warrior编译器,然后分别开发各功能模块。MPC5634 硬件驱动程序静态库是已有的。将驱动模块加入Simulink模块库,用示波器、下载器、开发板搭建好硬件平台,并创建如图3 所示的功能验证实例模型。
通过RTW生成模型源代码,经过自动编译链接下载到目标板MPC5634 中之后,对其进行功能测试,将Adc21 号通道连接到开发板的1. 2 V参考电压上,将Adc22 号通道连接到开发板的3. 3 V参考电压上,用示波器观测Pwm8 号和14号通道的输出波形如图4 所示。示波器上方波形代表Pwm8号通道的输出,其波形频率为1. 26 k Hz,占空比0. 126。示波器下方波形代表Pwm14 号通道的输出,其波形频率为3 . 3 k Hz,占空比0 . 5 。
该结果与模型期望的的输出信号一致,经以上验证可知本文驱动代码快速生成技术是实用的。
快速驱动代码生成技术是与长安汽车合作项目的中间关键技术,已成功应用到长安汽车公司车身控制系统的实际应用开发中,针对车身控制需求,开发车身控制BCM ( Body Control Model) 模块,包括车窗、车灯、雨刮等。利用控制模块搭建控制模型,经仿真后添加已开发的驱动模块和操作系统模块,自动生成代码编译下载到STM8 目标控制芯片,经实车反复测试代码能正确控制车身部件后,现已应用于实际量产过程,体现了其实际生产应用价值。
4 结语
RTW是开放式架构,许多方式都能实现配置和丰富RTW功能的目的。控制算法模型的代码生成已经不能满足电控系统快速开发[7]的要求,本文介绍的快速生成驱动代码的技术大大提高了快速控制原型的效率,经验证,该方法确实高效可行,简单易学,对各种芯片通用,对快速控制原型系统开发具有指导意义。
参考文献
[1]杨涤,李立涛,杨旭,等.系统实时仿真开发环境与应用[M].北京:清华大学出版社,2002:1-37.
[2]陈婷,张烈平.基于MATLAB/RTW的实时控制器快速开发方法的研究[J].科学技术与工程,2008,8(17):5071-5074.
[3]张晓辉.基于RTW的AMT代码自动生成技术研究[D].济南:山东大学机械工程学院,2012.
[4]田丽华,曾航.基于COM组件的MATLAB与VC++混合编程[J].科技创新导报,2009(31):27-28.
[5]北京恒润科技公司.S-Function的编写[M].北京:北京恒润科技公司,2010:33-53.
[6]齐振恒,孙中杰,李涛.RTW嵌入式代码自动生成机制与代码结构分析[J].计算机测量与控制,2010,18(3):639-642.
[7]Hu Jinhui,Hu Dabin,Xiao Jianbo.Study of Real-Time Simulation System Based on RTW and Its Application in Warship Simulator[C].The Ninth International Conference on Electronic Measurement&Instruments,2009:966-970.
代码自动生成技术 第8篇
关键词: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.
代码自动生成技术 第9篇
关键词:组织机构代码,语音咨询,语音盒
1 绪论
1.1 新疆组织机构代码业务现状分析
随着我国国民经济的不断发展,组织机构代码管理工作任务越来越重,银行、税务、交管、社保、海关等部门在其业务管理过程中,使用组织机构代码作为单位的“身份证”,在对单位办理各项业务中成为极为重要的审核依据。目前新疆组织机构代码应用部门的日益增加,用户容量不断扩大,随之而来的咨询、换证等工作也日趋繁重。由于到期未换证单位涉及面广,特别是企业单位经常变更地址,以及单位代码经办人员变动等,从而导致人工邮寄通知提醒效果不佳、及时性差。
尤其是2012年年底新疆代码中心改变了年检方式,按办证日期对年验的组织机构进行分流,实现全年年检的工作方式。为了配合新的工作模式的需要,呼叫、催办服务是最直接与用户沟通的方式。其目的也是为了更好地服务于新疆地区各组织机构,在社会上树立新疆质量技术监督的良好形象。
1.2 代码语音自动系统研究的意义
工作模式的科学高效化,为代码工作自身节约了人力物力成本,更符合当今提倡的“低碳环保”。各组织机构用户在家就可以明确地了解办理组织机构代码证的相关要求,可提前做好相应的准备工作,减少工作人员作解释说明的压力。
采用新技术、新理念、新方法,主动为所有代码客户提供咨询和提醒服务,一方面提高工作效率,及时维护代码数据的完整性、准确性和有效性;另一方面能更有效地促进代码共享平台的推广应用。
2 相关术语
2.1 组织机构代码
组织机构代码[1]是对中华人民共和国内依法注册、依法登记的机关、企、事业单位、社会团体和民办非企业单位颁发一个在全国范围内唯一的、始终不变的代码标识,是一个单位的合法“身份证号”。组织机构代码由各级质量技术监督部门代码机构依法采集地址、电话、注册资金、经济行业、经营(业务)范围等多项基本信息。
2.2 模拟电话语音控制器技术
连接模拟电话线路,实时检测电话线号,并通过USB传输至PC,从而实现摘挂机检测、来电显示、电话录音、PC拨号等功能。该语音盒是在语音卡基础上继承和发展起来的一款新型模拟接口电话语音盒,在硬件上采用了新的超大规模集成电路设计技术,避免了语音卡存在的一些缺陷,使语音盒的电话语音控制器整体性能有了质的飞跃。
2.3 Visual Basic
Visual Basic是一种常用的编程开发工具。它的基础是编程语言Basic,Visual Basic简单点来说就是微软为了更好的让人们学习编程,应用上Basic开发语言的一套工具,简称就是VB。
3 代码语音自动系统的设计
3.1 系统开发与用户环境
新疆组织机构代码语音自动受理系统,采用最先进的计算机电话语音系统集成技术,将各项业务需要电话操作的自动语音咨询、自动电话通知等业务融为一体,建立完备的电话服务平台。最终研发出的系统由用户操作层、系统功能层、数据层组成。其中,系统功能层是整个系统的功能核心,开发的咨询提醒系统的功能实现就是在该层进行数据处理。
操作系统可运行于win2000、windows XP平台,适用于单机版。
数据库接口最终可支持:FOXPRO系列、DBF、ORACLE、SYBASE、ACCESS、INFORMIX、SQL Server、EXCEL等。
电话接口要求与普通市话网相连。基本单元为1端口(1条外线),并可以根据工作需要方便地扩充为4端口、8端口等。
系统硬件设计采用模拟电话语音控制器(USB语音盒)技术,语音盒符合USB2.0协议,即插即用,自动识别,可带电插拨。数据管理方式为通用、标准开放式数据库结构。
3.2 系统总体设计
语音自动服务系统是由语音咨询和语音提醒通知两个子系统组成。
3.2.1 语音咨询子系统
是本系统的重要组成部分,用户用电话或手机通过按键的方式达到与系统互动的功能。图1给出了语音咨询子系统的功能组成。
当用户需要了解办理组织机构代码或者其他业务相关情况时,可拨打咨询热线,听到问候语后系统即可为用户自动播放需要咨询的业务内容。用户也可通过投诉建议语音留言,直接给管理部门留言。具备语音自动咨询、电话拨入分类日志、分类统计查看功能。
3.2.2 语音通知提醒子系统
系统自动从指定的需提醒用户数据文件中提取用户电话号码,自动顺序向各过期未办理的用户拨号或发送短信,拨通后自动播放提醒通知。对重复拨叫不通的用户系统自动统计汇总,进行人工联系。
功能分四部分:第一部选择数据表并导入系统数据表;第二部分是按设定条件查询出需提醒的客户单位数据;第三部分对各需要提醒的单位进行电话或短信提醒操作,在整个提醒操作中无需人工干涉,并可根据不同的需求设定某些客户单位不进行提醒操作和设定提醒时间;第四部分对催办的情况进行统计汇总操作。图2给出了语音通知提醒子系统的功能组成。
3.3 组织机构代码语音自动系统整体业务流程
图3给出了机构代码语音自动系统整体业务流程。
系统扫描代码库,判断待通知机构是否有电话号码,若无将此信息存至未成功信息库,若有则将此信息存至待拨打库,并将循环拨打此库中的机构;若拨打成功则信息存至成功库,若不成功继续拨打三次后,拨打成功的存至成功库,拨打失败的存至未成功库。
4 代码语音自动系统解决的问题
4.1 提高代码工作效率
将组织机构代码管理有关要求(如办证咨询,提醒通知客户验证、换证)等代码业务工作通过电话语音处理自动应答,将代码数据库中有关业务数据导入本系统后自动提醒服务。解决了业务咨询、到期换证、验证量大面广的问题,代码工作主动性增强,自动提醒通知后顾客能够及时响应,代码数据完整性、准确性、有效性可明显提高。
4.2 代码工作管理科学化
系统以加强组织机构代码管理为中心,以电话网络为平台,将智能化语音技术、软件技术等高新技术综合应用于组织机构代码管理工作中。能全天候、全方位、远距离、高清晰地进行组织机构代码咨询、催办过程。从而告别传统靠人力的堆积来提高代码管理能力的时代,使代码管理逐步迈入“数字时代”。
4.3 具有良好的通用性和实用性
该系统具有信息存储量大、保密性强、操作简便、扩展性强等特点,不仅适合代码业务的科技化管理,也同样适用于条码、文献以及其他各行各业需要咨询提醒的业务应用。
5 总结与展望
5.1 总结
本系统研究了代码业务的自动语音咨询服务,主动对未按时登记验证换证的单位发送各种通知、通告、提醒等。服务主要采用语音电话和短信平台两种方式,既可人工服务,也可自动批量服务。改变了之前只能在固定的工作时间和办公地点咨询组织机构代码证的相关事宜的状况,示范出更加科学、高效、人性化的服务模式。
5.2 展望
随着质监事业逐步电子化的发展,我们将利用更先进的计算机技术手段结合政务工作的实际需求,对系统不断改造,并将其向更多的地域及领域推广使用。同时,在组织机构代码自动语音咨询与提醒安全方面,还需不断地在语音技术上改进与尝试,逐步建立更加人性话的服务模式。
参考文献
[1]顾迎建.组织机构代码管理信息系统建设与维护指南[M].北京:中国计量出版社.2009.
[2]孙家广,刘强.软件工程—理论、方法与实践[M].北京:高等教育出版社.2005.
代码自动生成技术
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。


