当前位置:文档之家› 代码自动生成系统

代码自动生成系统

代码自动生成系统
代码自动生成系统

本钢ERP代码自动生成系统的开发

史洪波

(本钢信息自动化公司软件开发事业部)

摘要:本钢ERP系统维护的工作量大,大部分的页面功能类似。在新增业务需求的情况下,可以利用本系统自动修改和生成JSP、Java、XML、SQL、Properties类型的全部代码,生成的代码可以提供新增、修改、删除、导入、树、打印、查询等基本功能。本系统原理是利用各种页面风格的JSP、Java、XML、SQL等文件作为模板,利用配置参数替换掉文件中可变部分,从而形成多种页面风格通用的代码生成系统。本文总结了本钢ERP中常用的6种页面样式,并用Java语言实现了其代码的自动生成过程,只需书写好DAO文件并在系统中填写少许的配置信息,然后点击按钮即可完成代码的产生,节省时间,提高工作效率。

关键词:ERP Java 代码自动生成

Benxi Steel ERP automatic code generation system

Shi Hongbo

(Benxi Steel Information & Automation Co.Ltd Software Development Department)

ABSTRACT:There are a great deal maintain work in Benxi Iron and Steel Co. Ltd. ERP system, most of the page features are similar. In the case of needing new business, the system can automatically generate and modify all of the codes in many types, such as JSP, Java, Xml, SQL, Properties. Codes provide new, modify, delete, import, tree, print, query, and other basic functions and pride many different page styles by replacing the parameter of file. There are 6 common page styles are summarized in the Benxi Iron and Steel Co. Ltd. ERP, and use java language to achieve the automatic code generation process, just to write the file of DAO in the system and a little configuration information, then click the button to complete the code, saved a lot of time and improved the work efficiency.

KEY WORD: ERP Java automatic-code-generation

作者简介:

史洪波,男,出生于1974年7月28日,1998年7月毕业于华东冶金学院工业分析专业,同年到本钢技术中心从事钢铁检验工作。2006年3月调至本钢信息自动化公司软件开发事业部从事软件开发工作。Email:mynameshb@https://www.doczj.com/doc/6818341541.html,

1、引言

本钢ERP系统有着良好的开发规范,命名规则有规律可循,因此在新增业务需求的情况下非常适合用代码自动生成系统来减少开发过程中的工作量,减少了开发人员的Ctrl+C/Ctrl+V操作,节省时间,提高工作效率。本系统原理是利用各种页面风格的JSP、Java、XML、SQL等文件作为模板,利用配置参数替换掉文件中可变部分,从而形成多种页面风格通用的代码生成系统。本系统采用J2SE中的Awt和Swing技术来绘制整个系统的图形界面,使系统界面整洁美观,使用xml文件作为本系统的配置文件,并对XML文件设定了DTD的格式校验,保证XML的格式良好。在系统界面中输入少量的条件即可产生和修改JSP、Java、XML、SQL、Properites等类型的文件,并对已经存在的文件先备份成Bak文件,生成的代码可具有新增、修改、删除、查询、导入、树、打印等功能。由于XML具有便于阅读和理解,可扩展等优点,而DAO文件格式的不规范性,系统中还提供了DAO文件与XML格式的相互转换,转换中使用了XLST技术,简化了转

换操作。系统还提供了即时编辑DAO文件,并另存为DAO文件或XML文件。本系统生成的代码可以在测试环境中直接执行,开发人员可根据业务的需要适当的调整即可应用到ERP中,使开发人员的工作主要集中在数据库和业务逻辑的设计上。

2、需求分析

从整体架构上来分,本钢ERP分成了2种,一种是设备组的Struct+Hibernate架构,另外就是非设备的Structs+Jdbc方式。设备架构实现方式是在IPMS的基础上进行了全面的包装,由于采用了Hibernate,代码布局上已经与非设备系统完全不同,所以在本系统中生成代码时需要区分是否为设备系统,根据系统的不同应该生成不同架构的代码。本系统还需要适应多种多样的页面布局,同时也应该考虑对新增、修改、删除、查询、打印、导入、树等多种功能的定制,以适应不同的需求。

3、系统结构设计

为了减少程序开发人员维护的工作量,本人对ERP的架构进行了分析。ERP的架构分为设备和非设备架构,对常用的页面风格进行了总结,找出了常见的6种页面风格,并对其实现了代码的自动生成。6种页面风格见图1-图6:

图1单个页面无页签

Fig: 1 single page without tab

图 2 多页签(无树无查询)--各页签独立

Fig: 2 Multi-tab (no tree no inquiries) - Every tab are independent

图3多页签(无树无查询)--其他页签均依赖第一页签

Fig: 3 Multi-tab (no tree no inquiries) - Other tab are dependent on the first tab

图4多页签(有树无查询) --各页签均依赖树

Fig: 4 Multi-tab (no inquiries) - Every tab are dependent on the tree

图5多页签(有查询无树)--各页签均依赖查询

Fig: 5 Multi-tab (no tree) - Every tab are dependent on the inquiries

图6多页签(有查询有树) --各页签均依赖查询或树

Fig: 6 Multi-tab (tree and inquiries) - Every tab are dependent on the inquiries or tree

本系统还提供了一个配置参数为“是否为缺省模式”,缺省模式会生成新增、修改、删除、查询、打印、导入、树等多种功能,并可以对各页签名称、页签ID、自然主键、虚拟主键和FLD中Tab名称进行自动生成,如果选择非缺省模式则需手动填写下面的资料,其中的X代表第X个DAO文件:CULNAME_X=mxmxxpage-----------------Tab页标题输出的变量名

DESC_X=取mxmxxno对应的汉字名称-----Tab页标题输出的汉字名

IFRAME_X=mxmxx_List-----------------FLD中Tab页嵌入的文件名

NATUREPK_X=mxmxxno------------------自然主键(默认为mxmxxno)

VIRTUALPK_X=mxmxxid-----------------虚拟主键(默认为mxmxxid)

FUNCTION_INS_X=true-----------------定制新增功能

FUNCTION_UPD_X=true-----------------定制修改功能

FUNCTION_PRTS_X=false---------------不定制打印功能

FUNCTION_QRY_X=false----------------不定制查询功能

FUNCTION_IMT_X=false----------------不定制导入功能

4、详细设计与实现

4.1参数设定

4.1.1下面板参数见图7:

图7 下面板参数

Fig: 7 the panel parameters at the bottom

系统参数分为设备和非设备系统,ERP参数是指当前ERP开发环境的路径,点击红色按钮可以选择目录并设定成新的路径。输入参数是指自动生成代码生成的路径,点击红色按钮可以选择目录并设定成新的路径。ID和用户是在程序注释中的代码撰写者的ID和中文名,字体参数设定JSP页面编码为简体还是繁体,风格参数包括了6种页面布局风格,树层数参数是用来设定生成树状结构的层数,列数参数是表示在JSP中生成的每行栏位数,缺省参数表示是否去定制新增、修改、打印、查询、导入和设定页签ID和名称等功能。

4.1.2右面板参数见图8:

图8 右面板参数

Fig: 8 the panel parameters on the right

DAO数参数最大可以支持8个,也就说一个页面上最多可以使用8个表的数据。下面的参数则是DAO 的名称和对应子系统的位数,输入框中支持鼠标的复制和粘贴操作。增删子系统参数用来输入子系统名实现增加和删除子系统功能,最后列出了目前系统中的子系统名称

4.1.3中间面板如图9:

图9中间面板

Fig: 9 the panel parameters in the middle

中间面板用来显示DAO文件的内容,本人在原有DAO文件的基础上增加了3列,用来表示在列表页面、新增页面、修改页面中字段是否显示在页面上,如果选择N则字段不需要在上述页面中显示。字段ID、字段概述、长度栏位可以手动输入和修改,数据类型、主键、存储格式、缺省、列表显示、新增显示、修改显示、显示类型栏位均可以点击鼠标可以选择。参数1-3作为保留栏位。

4.2功能模块图

本系统包括产生ERP代码、代码导入系统等16个子功能,功能模块图见图10:

图10功能模块图

Fig:10 Function module

4.3类关系图

本系统的主要类之间关系图如图11所示。

图11类关系图

Fig:11 Relation of the Classes

(1)CodeAutoGenGUI类

本系统程序入口类,实现主框架的建立和显示

(2)CodeAutoGenFrame类

主框架类,定义屏幕尺寸、窗口图标、背景颜色等,并把主面板添加到主框架中。

(3)CodeGenTitlePanel类

标题面板类,由主面板类调用,绘制系统标题面板,并添加到主面板中显示。

(4)CodeGenMainPanel类

主面板类,是系统的核心类,主面板分成标题面板、左面板、右面板、下面板以及中间编辑区。主面板类实现了系统图形界面绘制、布局、显示和相应按钮、鼠标动作,实现各种功能。它包括了2个主要方法,CodeGenMainPanel方法、actionPerformed方法。

CodeGenMainPanel方法主要是用来初始化设置面板整体观感和布局、定义和初始化各个面板上控件所使用的变量、设置各面板控件的显示样式、并把各面板布局到主面板中,从而形成美观的图形界面。

actionPerformed方法是用来对下面板、左面板和右面板上的按钮、下拉框及鼠标的动作做出相应,实现功能。右面板上的DAO文件名和子系统长度的TextField中支持鼠标的剪切、复制和粘贴操作。下面板上的ERP路径和输出路径的红色按钮可以弹出目录选择框选择选定的目录,并保存在TextField中显示。改变下面板的下拉列表框的值时,本方法会相应动作取得值并赋予变量中待用。actionPerformed方法还包括了左面板上16个按钮的动作相应,实现功能模块图图10中所示的子功能。

左面板的功能分为系统配置文件的读取与保存、DAO文件与XML文件格式的相互转换、DAO文件的读取与保存、XML格式的DAO文件的读取与保存、清除系统配置信息和中部面板DAO内容、产生ERP代码、导入ERP代码到开发环境、导入SQL语句到数据库中、在系统配置文件中增加与删除子系统代码和退出系统。

(5)ReadAndWriteXml、ReadAndWriteText类

这2个类是用来读取和保存系统配置文件、DAO文件、XML格式DAO文件。其中ReadAndWriteXml类中采用dom4j技术实现XML节点的读取和保存。利用已经设计好的XLST模板,采用XLST技术实现了XML 文件到文本文件的转换。

(6)CreateAllDirectory类

此类是根据设定的输出路径组合出待产生的ERP代码存放的目录,

(7)CreateAllFile类

此类是整个系统的核心类,是实现本钢ERP代码自动生成的关键。它根据系统的配置参数中的是否为设备系统、页面风格类型和是否缺省来定制需要产生的文件,调用相应的CreateBpJavaFile、CreateDaoVoFile、CreateHbmFile、CreateJspFile、CreateScrCrlJavaFile、CreateSqlFile、CreateSrcJavaFile、CreateTreeJavaFile和ModifyFile类来产生和修改Jsp、XML、Java、SQL、Properties 文件,这些文件的生成原理是在6种风格的模板中,利用“子系统别”、“程序别”、“代码长度”、“是否为设备系统”、是否为缺省参数、页面风格等配置参数替换文件中可以变化的部分,利用BufferedWriter类输出到指定的文件中,生成所需的所有文件。

系统生成的主页面pageID命名规则为:

2码系统别:第一个DAO文件的“系统别+JJ+代码别”

3码系统别:第一个DAO文件的“系统别+J+代码别”

在代码导入到开发环境中后在地址栏中输入“http://localhost/erp/系统别/do?_pageId=主页面pageID”就可以看到系统生成的页面了。

(8)CheckErrors

此类是用来在读取DAO、产生ERP代码等操作时检测DAO文件格式、系统配置参数是否有误,并给出出错信息,提醒用户及时修改,以避免输入数据有误的情况下去执行生成代码的操作。

(9)ConnectToDB

此类是用来连接DB2数据库,在config.xml文件中读取数据库的信息后,使用DB2的Type2驱动来连接数据库,并递归搜索选定目录下所有SQL文件,读取SQL语句后到数据库中执行,生成所需要的表。(10)TestCodeAutoGenGUI

此类是JUnit测试类,编写了缺省模式和非缺省模式下的测试用例对代码自动生成系统进行了测试,

5、测试

本系统使用JUnit作为测试工具,对缺省模式和非缺省模式进行了测试,取得了满意的效果,并在随后的erp版本变更中对本系统进行了适应性维护,添加了Log4j作为系统操作的日志记录。

对使用系统前后所节省的时间,进行了评估,得到如下数据:

本次评估结果只包括生成和修改各种JSP、Java、XML、Properties文件的时间,未包括DAO文件的设计、书写时间和根据业务逻辑需要对代码进行设计修改的时间,因为是否使用本系统,这2部分时间都不会被省略掉。评估的结果显示根据DAO个数和页面的风格的不同,未使用本系统开发的工作量会成倍增长,而使用本系统只需书写几个DAO文件名和子系统长度,并选择几个参数,所以时间增加不多,可见使用本系统节省了大量的工作量,提高工作效率。

6、总结

本系统从2007年6月开始需求分析至8月中旬的测试完成,历时2个半月,完成代码16000余行,实现了设备与非设备系统下的6种不同风格的页面的新增、修改、查询、打印、导入、数等功能的代码自动生成,简化了程序开发人员的工作,提高了工作效率,为本钢ERP的维护工作节省了时间。

7、参考文献

[1] 叶乃文,邝劲筠等译,JA V A2核心技术卷I基础知识(原书第7版),2006[5]: 316-455,机械工业出版社

[2] 陈昊鹏,王浩,姚建平等译,JA V A2核心技术卷II:高级特性(原书第7版),2006[5]: 279-816,机械工业出版社

Labview 自动生成程序及应用程序

Labview 自动生成程序及应用程序 周青教主 2011.12.28

一自动生成程序的功能 (1) 二相关背景 (1) 三实际开发应注意以下几点: (1) 四相关函数介绍及具体范例 (2) 1.相关函数 (2) 2.具体范例 (3) 2.1 最简单的一段代码如图 3所示: (3) 2.2 在While循环里面添加Add函数 (4) 2.3在前面板放置RoundButton控件 (4) 2.4在前面板放置簇,并在簇里面放置数值控件 (4) 2.5生成一个显示随机数的波形图表程序,并自动运行 (5) 2.6 将E的程序添加自动整理框图功能 (5) 2.7 连线前面板控件与接线端 (5) 2.8 前面板接线端样式介绍 (5) 3.小结 (5) 五自动生成应用程序 (5) 六应用示例 (6) 1.自动生成一个时钟的应用程序并自动生成相应EXE (6) 2.注意 (6)

Labview 自动生成程序及应用程序一自动生成程序的功能 在使用Labview过程中,我们能接触到各种项目设置、生成向导。如:创建仪器驱动项目向导,创建Labview实时项目向导等。使用向导可以减少用户的学习曲线时间,并能快速、准确和动态的生成代码。Labview VI脚本(VI Scripting)有助于通过编程,生成、编辑并检测Labview代码,便于开发向导程序。 通过LabVIEW 脚本可以实现编程创建、修改并运行LabVIEW 代码。它包含多种新的VI 服务器类、属性和方法,有助创建、移动并连接对象(包括前面板、程序框图、和图标),有助编辑连线板,有助创建新型动态VI。 二相关背景 1.什么是VI Scripting? ●VI Scripting 是Labview中功能强大的特性之一,它允许用 户通过程序去创建或修改Labview程序 ●基于VI Server ●从Labview8.6开始提供给用户使用 2.为什么我们需要VI Scripting? ●制作向导——能通过简单的对话框自动生成代码,减少学 习曲线并且增加生产率 ●支持VI检查——能获取VI内容并检查 ●创建编译器——方便把其它G或C代码转化为G代码 3.用VI Scripting,我们能做什么? ●理论上,我们应该能做任何Labview编辑器能做的事情 ●事实上,你能做如下事情等: ?创建新的VI ?添加新的对象到前、后面板 ?修改前、后面板上的对象 ?将前面板控件和接线面板相关联 三实际开发应注意以下几点: 1)利用Labview VI脚本(VI Scripting)创建Labview向导程序, 此向导程序用于动态生成VI;

从simulink模型到PLC代码的自动生成功能

从simulink模型到PLC代码的自动生成是MATLAB2010提供的功能,目前支持的PLC编程工具有: CoDeSys2.3, CoDeSys3.3, RSLogix5000, B&R Automation Studio 3.0, PLCOpen XML, BeckhoffTwinCat 2.11以及Generic。 本文介绍了MATLAB生成TwinCat 2.11的ST文档的方法,并使用TwinCat 2.11建立相应的工程项目。 2. 使用MATLAB/simulink生成PLC的st语言功能函数的方法 MATLAB提供了很多demo一备参考,本文以MATLAB demo中的plcdemo_simple.mdl为例。首先在MATLAB命令行中执行命令demo,选择simulink PLC coder->Demos->Basic Introductions and Examples->Generating Structured Text for a Simple Simulink Subsystem,然后打开该模型。 打开参数配置面板(Simulation->Configuration Parameters),进入PLC Coder的选项页,将Targer IDE选为BeckhoffTwinCat 2.11。然后应用。 回到模型,右键点击SimpleSystem,选择PLC Coder->Generate Code For Subsystem。如果没有错误,将在当前目录下生成plcdemo_simple.exp文件及诊断对话框。该文件即为ST语言的PLC文档。如下

JToolpad代码生成工具使用说明文档

JToolpad代码生成工具使用说明文档 本文档是使大家能正确使用JToolpad工具,从而缩短开发时间,简化开发流程,生成规范且正确的代码。 1.打开JToolpad 如果本机有此工具则在开始菜单->所有程序中打开即可,若本机没有此程序,则可在局域网内找到,http://192.168.60.21/jtoolpad/ 点击链接即可打开工具。主界面如下:

打开已经编译好的pdm文件,即可导入数据结构

3配置属性 选择菜单中的模型选项,打开属性即可弹出如下对话框 1.应用代码:暂时无具体意义 2.Sysframework基本包名:是工具包的存放路径,随项目变化会相应的发生变化 3.应用基准包名:是具体的应用包的名称,比如上面的这个包platfrom下就会是具体的dto, web,service等 4.Java源代码目录:是具体的Java代码存放位置,此相必须指向component文件夹,在 component文件夹下就是相应的应用基准包名目录,如:component\com\ chinainsurance\application\platform\..... 5.Web应用根目录:是具体的web发布页面的存放位置,此项必须指向webapps文件夹, 在此文件夹下是具体的web发布路径。 配置好以上路径后确定即可。 注意:此项路径必须指向实际开发路径不能指向临时文件夹或备份文件夹。应为部分代码的生成是基于某些已经存在的文件而生成的,这点切记! 4生成代码方法 生成代码有两种方式: 第一种就是选择所需要的一个或多个表生成部分文件:方法是打开Tables的下来菜单,选中需要的一个或多个,在选中的这些表上点击右键,选择要生成的部分即可。

20个代码生成框架

20个代码生成框架 1 1.1 CodeSmith 一款人气很旺国外的基于模板的dotnet代码生成器 官方网站:http://https://www.doczj.com/doc/6818341541.html, 官方论坛:http://https://www.doczj.com/doc/6818341541.html,/default.aspx 版权形式:30天试用 开源:否 需要先注册确认后才能下载 1.2 MyGenerator MyGenerator是又一个国外很不错的代码生成工具,有人觉得比CodeSmith简单、好用。 所有api可以在帮助菜单中找到。 官方网站:http://https://www.doczj.com/doc/6818341541.html,/portal/default.aspx 官方论坛: 版权形式:免费 开源:否 1.3 NHibernate. NHibernate是Hibernate公司在Java自动生成领域取得巨大成功后推出的一款ORM工具. 官方网站:http://https://www.doczj.com/doc/6818341541.html,/ 官方论坛: 版权形式:免费 开源:否 1.4 湛蓝.Net代码生成器

一款基于软件自动生成理念,能直接生成应用的dotnet代码生成器 官方网站:http://https://www.doczj.com/doc/6818341541.html, 官方论坛:http://https://www.doczj.com/doc/6818341541.html,/ 版权形式:免费 开源:否 1.5 动软.NET代码自动生成器 一款人气很旺的免费C#代码生成器 官方网站:http://https://www.doczj.com/doc/6818341541.html, 官方论坛: 版权形式:免费 开源:否 1.6 CodePlus 专为sql server c#语言设计的代码生成器,功能还是很强大 官方网站:http://https://www.doczj.com/doc/6818341541.html, 官方论坛: 版权形式:需要少量的注册费用 开源:否 下载地址很神秘 1.7 CodeMaker asp,jsp,php代码生成工具,自动生成维护数据库信息的动态网页的代码生成器。它可以帮助ASP、JSP、PHP开发人员快速的开发简单的数据库维护程序。无需任何编码,只需将数据库结构导入到CodeMaker中并做简单的设置,CodeMaker即可生成完整的数据库操作页面。用CodeMaker可以简单快速的创建网站后台维护程序。提高开发效率数十倍以

Excel自动化生成代码

Excel自动化生成代码 开发部寇增伟 2015年1月31日 【摘要】 随着社会的进步和发展,各种工具出现对代码进行封装,使得开发工作变得越来越简单, 正在逐渐向自动化、流水线的方向过渡。对于公司软件项目而言,一般是针对企业级应用进 行系统开发,而对企业而言,其管理模式和软件需求都大同小异,很多功能和实现都比较类 似。所以,开发工作主要的工作量就放在一些数据库表的定义和相关字段在前后台的显示和 处理上。所以,如何最大化的提高工作效率,降低工作时间,成为设计此工具的出发点。 【关键词】 Excel 代码模块程序 一、问题的提出 随着社会的进步和发展,各种工具出现对代码进行封装,使得开发工作变得越来越简单, 正在逐渐向自动化、流水线的方向过渡。对于公司软件项目而言,一般是针对企业级应用进 行系统开发,而对企业而言,其管理模式和软件需求都大同小异,很多功能和实现都比较类 似。所以,开发工作主要的工作量就放在一些数据库表的定义和相关字段在前后台的显示和 处理上。所以,如何最大化的提高工作效率,降低工作时间,成为设计此工具的出发点。 二、解决思路以及实践 我们在设计数据库文档时,设计了数据库表,编程人员就开始根据数据库文档进行实现, 需要在数据库建表和字段,以及程序里面实现字段相关代码。下面拿一个简单的表格来说明 问题。 对于商圈调查表t_business_circles,数据库定义的几个字段如下(只为说明问题,所以力 求简化)。 序号字段名称字段描述字段类型长度允许空缺省值 1 busi_circles_no 商圈调研varchar 19,0 2 city 地市int 5,0 √ 我们程序实现里需要添加的字段相关的代码如下所示: TBusinessCirclesMapper.xml数据库和实体对应的相关代码有四个地方: 1. 2. BUSI_CIRCLES_NO, CITY, 3. #{busiCirclesNo,jdbcType=VARCHAR}, #{city,jdbcType=INTEGER},

程序代码自动生成系统的设计与实现

万方数据

万方数据

万方数据

万方数据

基于敏捷开发的高校网络评教系统 作者:吴衡, WU Heng 作者单位:天水师范学院物理与信息科学学院,甘肃天水,741001 刊名: 计算技术与自动化 英文刊名:Computing Technology and Automation 年,卷(期):2011,30(4) 被引用次数:1次 参考文献(8条) 1.丁增富;葛信勇构建教学质量监控体系努力提高教学质量[期刊论文]-高等农业教育 2004(03) 2.陈莉和谐校园构建于素质教育双效联动[期刊论文]-中国市场 2007(2-3) 3.成奋华;金敏基于敏捷过程的IT项目范围管理的研究与应用[期刊论文]-计算机技术与发展 2010(10) 4.徐诚斌;王金平MVC在ThinkPHP框架中的应用研究 2011(03) 5.赵国栋;黄永中开源软件在高校的应用与推广策略研究[期刊论文]-中国资源综合利用 2007(01) 6.马文龙;高宝成用php实现基于MVC模式的Web应用程序开发 2008(07) 7.原晓林基于B/S教学管理系统的开发与研究[期刊论文]-山西警官高等专科学校学报 2009(04) 8.蓝蔚青;曹剑敏;张帆高校学生网络评教系统的构建与完善[期刊论文]-高等农业教育 2006(06) 引证文献(1条) 1.蒋建洪电子商务系统协同开发实践教学研究[期刊论文]-中国教育信息化·基础教育 2013(5) 本文链接:https://www.doczj.com/doc/6818341541.html,/Periodical_jsjsyzdh201104028.aspx

信号与系统常用公式

1 信号与系统常用公式 一、周期信号的傅里叶级数 1.三角函数形式的傅里叶级数:0111()[cos()sin()]n n n f t a a n t b n t ωω∞ ==++∑,其中 01 011()t T t a f t dt T += ?,010112()cos()t T n t a f t n t dt T ω+=?,010112()sin()t T n t b f t n t dt T ω+=?。 2.指数形式的傅里叶级数:11()()jn t n f t F n e ωω∞ =-∞ =∑ ,其中0110 111()()t T jn t t F n f t e dt T ωω+-= ?。 二、傅里叶变换 1.傅氏正变换:()[()]()j t F F f t f t e dt ωω∞ --∞ ==? 2.傅氏逆变换:11()[()]()2j t f t F F F e d ωωωωπ ∞ --∞ ==? 3 1.拉氏正变换:0 ()[()]()st F s L f t f t e dt ∞ -==? 2.拉氏逆变换:11()[()]()2j st j f t L F s F s e ds j σσπ+∞ --∞ ==?

2 3 四、z 变换 1.z 正变换:0 ()[()]()k k X z Z x k x k z ∞ -===∑ 2.z 逆变换:111 ()[()]()2k C x k Z X z X z z dz j π--==? 3.z 变换的基本性质: 1.连续时间信号的卷积:121221()()()()()()f t f t f f t d f f t d ττττττ∞ ∞ -∞ -∞ *=-=-?? 2.离散时间信号的卷积:()()()()()()n n x k h k x n h k n h n x k n ∞ ∞ =-∞ =-∞ *=-=-∑∑ 3.卷积定理: (1)1212[()()]()()F f t f t F F ωω*=? (2)12121[()()]()()2F f t f t F F ωωπ?=* (3)1212[()()]()()L f t f t F s F s *=? (4)12121[()()]()()2L f t f t F s F s j π?=* (5)[()()]()()Z x k h k X z H z *= (6)1 [()()]()()2C z dv Z x k h k X v H j v v π?=?

【CN109765836A】PLC程序的自动生成方法、装置和实现装置【专利】

(19)中华人民共和国国家知识产权局 (12)发明专利申请 (10)申请公布号 (43)申请公布日 (21)申请号 201910108238.9 (22)申请日 2019.02.02 (71)申请人 宁波吉利汽车研究开发有限公司 地址 315000 浙江省宁波市杭州湾新区滨 海二路818号 申请人 吉利汽车研究院(宁波)有限公司 (72)发明人 胡峥楠 张尧 李志光 李红  黄天聪 李绪超  (74)专利代理机构 北京超凡志成知识产权代理 事务所(普通合伙) 11371 代理人 张阳 (51)Int.Cl. G05B 19/05(2006.01) (54)发明名称 PLC程序的自动生成方法、装置和实现装置 (57)摘要 本发明提供了一种PLC程序的自动生成方 法、装置和实现装置,其中,该方法包括:获取PLC 模板程序;该PLC模板程序包括硬件组态、变量名 称、安全程序和普通程序;获取保存有当前PLC的 控制对象的表格文件;在表格文件中,通过预设 的安全区域和模式区域将控制对象进行设备划 分,每个控制对象保存在对应的表格坐标中;根 据PLC模板程序和表格文件,生成当前PLC对应的 PLC程序。本发明可以缩短PLC离线程序的编写时 间,保证PLC程序的一致性,从而降低了编程的错 误率、提高了工作效率, 降低了项目成本。权利要求书2页 说明书9页 附图9页CN 109765836 A 2019.05.17 C N 109765836 A

权 利 要 求 书1/2页CN 109765836 A 1.一种PLC程序的自动生成方法,其特征在于,所述方法包括: 获取PLC模板程序;所述PLC模板程序包括硬件组态、变量名称、安全程序和普通程序; 获取保存有当前PLC的控制对象的表格文件;所述表格文件中,通过预设的安全区域和模式区域将所述控制对象进行设备划分,每个所述控制对象保存在对应的表格坐标中; 根据所述PLC模板程序和所述表格文件,生成所述当前PLC对应的PLC程序。 2.根据权利要求1所述的方法,其特征在于,所述根据所述PLC模板程序和所述表格文件,生成所述当前PLC对应的PLC程序的步骤,包括: 根据所述表格文件中,每个所述控制对象保存的对应的表格坐标,从所述PLC模板程序中导出对应的程序块的XML文件; 根据所述表格文件,修改所述XML文件的变量名称; 将修改后的所述XML文件导入TIA Portal中,生成所述当前PLC对应的PLC程序。 3.根据权利要求2所述的方法,其特征在于,所述根据所述表格文件,修改所述XML文件的变量名称的步骤,包括: 从所述表格文件中读取需要修改的变量名称和目标名称; 查找所述XML文件中所述需要修改的变量名称; 将所述需要修改的变量名称替换为所述目标名称。 4.根据权利要求1所述的方法,其特征在于,所述方法还包括: 从所述表格文件中获得存储文件夹名称; 建立所述存储文件夹名称对应的文件夹; 将所述PLC程序保存在所述文件夹中。 5.根据权利要求1所述的方法,其特征在于,所述方法还包括: 接收用户输入的模式区域的数量、HMI的数量、带模式旋钮的操作盒的数量。 6.一种PLC程序的自动生成装置,其特征在于,所述装置包括: 模板程序获取模块,用于获取PLC模板程序;所述PLC模板程序包括硬件组态、变量名称、安全程序和普通程序; 表格文件获取模块,用于获取保存有当前PLC的控制对象的表格文件;所述表格文件中,通过预设的安全区域和模式区域将所述控制对象进行设备划分,每个所述控制对象保存在对应的表格坐标中; 程序生成模块,用于根据所述PLC模板程序和所述表格文件,生成所述当前PLC对应的PLC程序。 7.根据权利要求6所述的装置,其特征在于,所述程序生成模块,还用于: 根据所述表格文件中,每个所述控制对象保存的对应的表格坐标,从所述PLC模板程序中导出对应的程序块的XML文件; 根据所述表格文件,修改所述XML文件的变量名称; 将修改后的所述XML文件导入TIA Portal中,生成所述当前PLC对应的PLC程序。 8.根据权利要求7所述的装置,其特征在于,所述程序生成模块,还用于: 从所述表格文件中读取需要修改的变量名称和目标名称; 查找所述XML文件中所述需要修改的变量名称; 将所述需要修改的变量名称替换为所述目标名称。 2

代码自动生成系统

本钢ERP代码自动生成系统的开发 史洪波 (本钢信息自动化公司软件开发事业部) 摘要:本钢ERP系统维护的工作量大,大部分的页面功能类似。在新增业务需求的情况下,可以利用本系统自动修改和生成JSP、Java、XML、SQL、Properties类型的全部代码,生成的代码可以提供新增、修改、删除、导入、树、打印、查询等基本功能。本系统原理是利用各种页面风格的JSP、Java、XML、SQL等文件作为模板,利用配置参数替换掉文件中可变部分,从而形成多种页面风格通用的代码生成系统。本文总结了本钢ERP中常用的6种页面样式,并用Java语言实现了其代码的自动生成过程,只需书写好DAO文件并在系统中填写少许的配置信息,然后点击按钮即可完成代码的产生,节省时间,提高工作效率。 关键词:ERP Java 代码自动生成 Benxi Steel ERP automatic code generation system Shi Hongbo (Benxi Steel Information & Automation Co.Ltd Software Development Department) ABSTRACT:There are a great deal maintain work in Benxi Iron and Steel Co. Ltd. ERP system, most of the page features are similar. In the case of needing new business, the system can automatically generate and modify all of the codes in many types, such as JSP, Java, Xml, SQL, Properties. Codes provide new, modify, delete, import, tree, print, query, and other basic functions and pride many different page styles by replacing the parameter of file. There are 6 common page styles are summarized in the Benxi Iron and Steel Co. Ltd. ERP, and use java language to achieve the automatic code generation process, just to write the file of DAO in the system and a little configuration information, then click the button to complete the code, saved a lot of time and improved the work efficiency. KEY WORD: ERP Java automatic-code-generation 作者简介: 史洪波,男,出生于1974年7月28日,1998年7月毕业于华东冶金学院工业分析专业,同年到本钢技术中心从事钢铁检验工作。2006年3月调至本钢信息自动化公司软件开发事业部从事软件开发工作。Email:mynameshb@https://www.doczj.com/doc/6818341541.html, 1、引言 本钢ERP系统有着良好的开发规范,命名规则有规律可循,因此在新增业务需求的情况下非常适合用代码自动生成系统来减少开发过程中的工作量,减少了开发人员的Ctrl+C/Ctrl+V操作,节省时间,提高工作效率。本系统原理是利用各种页面风格的JSP、Java、XML、SQL等文件作为模板,利用配置参数替换掉文件中可变部分,从而形成多种页面风格通用的代码生成系统。本系统采用J2SE中的Awt和Swing技术来绘制整个系统的图形界面,使系统界面整洁美观,使用xml文件作为本系统的配置文件,并对XML文件设定了DTD的格式校验,保证XML的格式良好。在系统界面中输入少量的条件即可产生和修改JSP、Java、XML、SQL、Properites等类型的文件,并对已经存在的文件先备份成Bak文件,生成的代码可具有新增、修改、删除、查询、导入、树、打印等功能。由于XML具有便于阅读和理解,可扩展等优点,而DAO文件格式的不规范性,系统中还提供了DAO文件与XML格式的相互转换,转换中使用了XLST技术,简化了转

利用MATLABsimulink的自动代码生成工具开发PLC程序

1. 对于大型的、比较复杂的控制系统,手工编程不仅耗费人力,而且准确率较低。MATLAB/simulink是一种强大的模块化、图形化的编程工具,能够很方便的设计控制系统。MATLAB 2010a提供了从simulink模型到PLC代码的自动生成功能。目前支持的PLC编程工具有: CoDeSys2.3, CoDeSys3.3, RSLogix5000, B&R Automation Studio 3.0, PLCOpen XML, Beckhoff TwinCat 2.11以及Generic。 本文介绍了MATLAB生成TwinCat 2.11的ST文档的方法,并使用TwinCat 2.11建立相应的工程项目。 2. 使用MATLAB/simulink生成PLC的st语言功能函数的方法 MATLAB提供了很多demo一备参考,本文以MATLAB demo中的plcdemo_simple.mdl为例。首先在MATLAB命令行中执行命令demo,选择simulink PLC coder->Demos->Basic Introductions and Examples->Generating Structured Text for a Simple Simulink Subsystem,然后打开该模型。 打开参数配置面板(Simulation->Configuration Parameters),进入PLC Coder的选项页,将Targer IDE选为Beckhoff TwinCat 2.11。然后应用。 回到模型,右键点击SimpleSystem,选择PLC Coder->Generate Code For Subsystem。如果没有错误,将在当前目录下生成plcdemo_simple.exp文件及诊断对话框。该文件即为ST语言的PLC文档。如下

java自动生成代码

1.与数据库建立连接 在DBUtil中设置数据库相关的参数 Class.forName(driverName); conn = DriverManager.getConnection(url, user, password); 2.获得数据库中的所有表 Mapmaps = new HashMap(); PreparedStatement pstate = conn.prepareStatement("show table status"); ResultSet results = pstate.executeQuery(); while (results.next()) { String tableName = results.getString("NAME"); String comment = results.getString("COMMENT"); maps.put(tableName, comment); } 3.获得每个表中的信息

封装一个实体来存储表中的信息 PreparedStatement pstate = conn.prepareStatement("show full fields from " + tableName); ResultSet results = pstate.executeQuery(); List lists = new ArrayList(); while (results.next()) { Column column = new Column(); String field = results.getString("FIELD"); column.setFeildMapper(field); String fieldName = processField(field);

信号与系统重点概念公式总结

信号与系统重点概念公 式总结 文档编制序号:[KKIDT-LLE0828-LLETD298-POI08]

信号与系统重点概念及公式总结: 第一章:概论 1.信号:信号是消息的表现形式。(消息是信号的具体内容) 2.系统:由若干相互作用和相互依赖的事物组合而成的具有特定功能的整体。 第二章:信号的复数表示: 1.复数的两种表示方法:设C 为复数,a 、b 为实数。 常数形式的复数C=a+jb a 为实部,b 为虚部; 或C=|C|e j φ,其中,22||b a C +=为复数的模,tan φ=b/a ,φ为复 数的辐角。(复平面) 2.欧拉公式:wt j wt e jwt sin cos +=(前加-,后变减) 第三章:正交函数集及信号在其上的分解 1.正交函数集的定义:设函数集合)}(),(),({21t f t f t f F n = 如果满足:n i K dt t f j i dt t f t f i T T i T T j i 2,1)(0)()(2 1 21 2==≠=?? 则称集合F 为正交函数集 如果n i K i ,2,11==,则称F 为标准正交函数集。 如果F 中的函数为复数函数 条件变为:n i K dt t f t f j i dt t f t f i T T i i T T j i 2,1)()(0)()(21 21* * ==?≠=???

其中)(*t f i 为)(t f i 的复共轭。2.正交函数集的物理意义: 一个正交函数集可以类比成一个坐标系统; 正交函数集中的每个函数均类比成该坐标系统中的一个轴; 在该坐标系统中,一个函数可以类比成一个点; 点向这个坐标系统的投影(体现为该函数与构成坐标系的函数间的点积)就是该函数在这个坐标系统中的坐标。 3.正交函数集完备的概念和物理意义: 如果值空间中的任一元素均可以由某正交集中的元素准确的线性表出,我们就称该正交集是完备的,否则称该正交集是不完备的。 如果在正交函数集()()()()t g n ,t g ,t g ,t g 321之外,不存在函数x (t ) ()∞<

信号与系统常用公式

常用 公式 第一章 判断周期信号方法 两个周期信号x(t),y(t)的周期分别为T1和T2,若其周期之比T1/T2为有理数,则其和信号x(t)+y(t)仍然是周期信号,其周期为T1和T2的最小公倍数。 2/2/2/(2/),/N N M M N πβπβ πβπβπβ==仅当为整数时正弦序列才具有周期当为有理数时 正弦序列仍具有周期性, 其周期为取使为整数的最小整数当2为无理数时 正弦序列不具有周期性, 1、连续正弦信号一定是周期信号,而正弦序列不一定是周期序列。 2、两连续周期信号之和不一定是周期信号,而两周期序列之和一定是周期序列。 信号的能量 def 2 ()E f t dt +∞ -∞=? 信号的平均功率 def 2 /2 /2 1lim ()T T T P f t dt T +-→∞=? 冲激函数的特性 '''()()(0)()(0)()f t t f t f t δδδ=- ()()(0)()f t t f t δδ= ()()()()f t t a f a t a δδ-=- ()()(0),f t t dt f δ∞ -∞ =? ()()()f t t a dt f a δ∞ -∞ -=? ()()11()()n n n at t a a δδ= g 001 ()()t at t t a a δδ-=- 000()()()()f k k k f k k k δδ-=- ()()()()(1)(0)n n n t f t dt f δ∞ ∞ =-? - ''()()(0)t f t dt f δ∞ ∞ =-?- 动态系统是线性系统的条件 可分解性 {}{}{}{}()()()0,()(0),0f x y y y T f T x ?=?+?=?+???????? 零状态线性 {}{}{}{}{}{}12120,()()0,()0,()T af t bf t aT f bT f +=?+????????????? 零输入线性 {}{}{}{}{}{}1212(0)(0),0(0),0(0),0T ax bx aT x bT x +=+???????????? 判断系统时不变、因果、稳定的方法。 线性时不变的微分和积分特性。 第二章

自动代码生成规则

自动代码生成 1.表存储过程 TableName规则为剔出” _ ,” - ”等特殊字符,首单词大写例如Sys_Log 转换后为SysLog 如果是FlowER 中,则命名规则为 usp_SystemName_TableName_Operation 否则命名规则为usp_SystemName _Operation 存储过程名称及其功能: 是否存在记录usp_SystemName _IsExist 添加一条记录usp_SystemName _Insert 更新一条记录usp_SystemName _Update 删除一条记录usp_SystemName _Delete 获取实体usp_SystemName _GetModel 获取一批记录usp_SystemName _GetList 2.Entity 私有属性定义时不赋予初始值 命名空间规则为:BenQ.Application.SystemName.Entity ClassName规则为TableName剔出” _ , ” - ”等特殊字符,首单词大写例如Sys_Log 转换后为SysLog 3.DataAccess

命名空间为:BenQ.Application.SystemName.DAL 函数及其功能: -- 是否存在记录public bool IsExist(PK), public IsExist(int RowID) -- 添加一条记录public Insert(BenQ.Application.SystemName.Entity objEntity) -- 更新一条记录public Update(BenQ.Application.SystemName.Entity objEntity) -- 删除一条记录public bool Delete(PK), public Delete(int RowID) -- 获取实体public Entity GetModel(PK), public Entity GetModel(int RowID), -- 获取一批记录public DataTable GetList (Parameters), public DataSet GetList (Parameters), 4.Business 命名空间为:BenQ.Application.SystemName.BL 函数及其功能: IsExist(int RowID) -- 添加一条记录bool bool bool bool -- 是否存在记录public bool IsExist(PK), public bool public bool

吴大正-信号与系统公式

第一章 信号与系统 信号的分类 确定信号 周期信号 连续时间信号 能量信号 随机信号 非周期信号 离散时间信号 功率信号 信号的时域运算 (1)移位 ()为常数00,t t t f + 00>t ,()0t t f +为()t f 波形在t 轴上左移0t ; 00a ,()at f 波形为()t f 的波形在时间轴上压缩为原来的a 1 ; 10<

0,0t (2)冲激函数 0,0)(≠=t t δ Dirac 定义 1)(=? ∞ ∞ -dt t δ (3)阶跃函数与冲激函数的关系 ()dt t d t εδ= )( dx x t t ?∞ -=)()(δε (4)阶跃函数的积分)(t r 斜坡函数=== ? ∞ -)()()(t t dx x t r t εε ,0,0>

ASCET代码生成简易说明

ASCET 代码生成配置 ETAS/陈炯 对于所有特定芯片的项目都需要对相应的target 文件夹中的 *.ini , *.mk and *.xml 等文件进行配置,以满足代码生成的需要. ASCET 从模型生成代码, 在利用外部工具对代码进行编译链接生成可执行文件。参看下图。 所有特定芯片的代码生成过程是由以下三种类型的配置文件控制的: 1. codegen [_*].ini 文件控制核心的代码生成器。 2. target.ini 给用于OS 配置的项目编辑器提供特定的芯片信息。 3. memorySections.xml 定义了用于ASCET 实施编辑器中的内存类的名称,并将名称与特定芯片的编译指令映射起来。 ASCET 对代码进行编译是通过一系列的GNU makefile (后缀是 .mk )的文件进行控制的. ASCET 对代码的编译是在对项目编译的过程中进行的。 本文档所有内容摘自 v6.1 SE 手册,具体相关信息请查看手册。 C:\ETAS\ ETASManuals\ASCET V C:\ETAS\ETASManuals\ASCET V6.1\ASCET-SE Manual.pdf 1 codegen[_*].ini 文件 ASCET 使用3个文件来控制代码生成器: ? .\target\trg_\codegen.ini ? .\target\trg_\codegen_.ini ? .\target\trg_\codegen_ecco.ini 这几个文件一起控制以下的属性: ? 代码风格,例如变量名称 ? 代码生成,例如变量初始化,使用 #pragma 语句等 ? 整合操作系统,例如消息的选择,创建钩子函数,OIL 描述文件的产生 用户可以定义在代码生成过程中使用的这些 *.ini 文件,但一般不用修改这些文件。

C#自动代码生成器

C#自动代码生成器 自动生成数据表和实体类 namespace SQLApplicationAutoGeneratiTool { public partial class Form1 : Form { string[] strArray = { "int", "string", "decimal", "bool", "char", "object", "double", "float", "DateTime" }; String path = @"..\..\..\类文件\"; public Form1() { InitializeComponent(); } private void 新增文本框ToolStripMenuItem_Click(object sender, EventArgs e) { ShengChengKongJian(); } private void ShengChengKongJian() { ComboBox cobm = new ComboBox(); for (int i = 0; i < strArray.Count(); i++) { cobm.Items.Add(strArray[i]); } TextBox textbox = new TextBox(); this.flowLayoutPanel1.Controls.Add(cobm);

this.flowLayoutPanel2.Controls.Add(textbox); } StringBuilder stbd = null; List strbldList = new List(); private void button1_Click(object sender, EventArgs e) { if (comboBox1.Text.Trim() == "") { MessageBox.Show("类名不能为空"); return; } stbd = new StringBuilder("using System;"); strbldList.Add(stbd); stbd = new StringBuilder("using System.Collections.Generic;"); strbldList.Add(stbd); stbd = new StringBuilder("using System.Linq;"); strbldList.Add(stbd); stbd = new StringBuilder("using System.Text;"); strbldList.Add(stbd); stbd = new StringBuilder("using System.Data;"); strbldList.Add(stbd); stbd = new StringBuilder("using System.Data.SqlClient;"); strbldList.Add(stbd); stbd = new StringBuilder("using System.Windows.Forms;"); strbldList.Add(stbd); stbd = new StringBuilder("namespace HospitalInformationManagmentSystem"); strbldList.Add(stbd); stbd = new StringBuilder("{"); strbldList.Add(stbd); stbd = new StringBuilder(" /* 作者:大理大学软件教研室杜老师"); strbldList.Add(stbd); stbd = new StringBuilder(" * 日期:" + dateTimePicker1.Text.Trim()); strbldList.Add(stbd); stbd = new StringBuilder(" * 版权:大理大学"); strbldList.Add(stbd); stbd = new StringBuilder(" * 你可以免费使用或修改以下代码,但请保留版权信息,否则将追究相关责任"); strbldList.Add(stbd); stbd = new StringBuilder(" */"); strbldList.Add(stbd); stbd = new StringBuilder(" public class "); stbd.Append(comboBox1.Text.Trim()); strbldList.Add(stbd);

相关主题
文本预览
相关文档 最新文档