从simulink模型到PLC代码的自动生成功能
传递函数从simulink向PLC控制代码的转换
传递函数从matlab/simulink 向PLC 控制代码的转换 下面以在PLC 中实现传递函数211(51)(0.021)0.1 5.021s s s s s s ++=++++为例说明转换过程。
1.将传递函数离散化PLC Coder 不支持转换连续时间类型的模型,需要先将传递函数离散化,用到matlab 中的c2d 命令。
在matlab command window 中输入如下命令:>> H = tf([1 1], [0.1000 5.0200 1.0000]) %表示H 是分子多项式为[1 1],分母多项式为[0.1000 5.02001.0000]的连续传递函数。
>>Hd = c2d(H, 0.1) %表示将连续传递函数H 转换成离散传递函数Hd ,c2d 表示continuousto discrete ,即连续到离散,或者说从拉氏变换变成z 变换,括号里面的H 表示被转换的连续传递函数,0.1代表离散后的采样时间为0.1s 。
之后得到20.2114 z - 0.1917Hd - 0.9869 z + 0.006605z = >> step(H,'-',Hd,'--') %查看两者的阶跃响应图1 H 及Hd 的阶跃响应可见阶跃响应一致。
2.simulink 里建立传递函数模型在simulink 中新建一个模型,拖入Discrete> Discrete Transfer Fcn 模块,如图2所示,之后双击将其参数设置如图3所示。
图2 Discrete中的Discrete Transfer Fcn模块图3 Discrete Transfer Fcn模块参数设置再在Ports&Subsystem中拖入输入和输出端口,如图4,与刚刚的离散传递函数输入输出相连,最后全选三个模块,单击右键>Creat Subsystem,生成子系统,再右击生成的Subsystem>PLC Coder Generation>enable“treat as atomic unit…”勾选弹出的对话框里面的“Treat as atomic unit”选项,并将Sample time 设置为0.1s,如图5所示.图4 Ports&Subsystem中的输入和输出端口图5 弹出的对话框设置到此离散函数模型建立完毕,并且为顺利进行PLC Coder转换做了相应设置。
Simulink代码自动生成(二)
Simulink代码⾃动⽣成(⼆)前⾯⼀篇介绍了Simulink代码⾃动⽣成的基本步骤,虽然⽣成了符合模型逻辑的代码,但有些部分还需要进⾏进⼀步优化才能更便于我们使⽤和代码的集成编译。
这⼀篇将从实⽤的⽬的作为出发点,将模型⽣成代码植到51单⽚机上,周期的点亮板⼦上的LED发光⼆极管。
在移植的过程中,我们在根据需求对之前模型进⾏优化Matlab版本:R2018B⼀、软件的设计思路上⼀篇中实现的计数器的模型,当计数使能时模型每运⾏⼀次计数器的值加1,当计数器达到设定⽬标值时,计数到达标志位置位。
如果我们将该计数模块放在10ms周期任务中运⾏,设置计数⽬标值为100,当计数到达标志位置位时刚好1s时间到。
我们可以以此为基础,使得LED发光⼆极管的状态每隔1s时间进⾏翻转⼀次。
计数模块输⼊使⽤了TarVal、InitVal、B_Init、B_Calc等变量,我们将这些变量在bsp_led.c模块中定义,bsp_led.c与⽣成代码TimerCnt.c之前的变量关系如下图所⽰:bsp_led.c是与底层有关,通过⼿写实现的。
其中实现了有两个函数,⼀个是bsp_led_initialize⽤于初始化时相关变量,另⼀个是bsp_led_10msTrg每10ms周期调⽤⼀次。
两个函数中的内容如下:void bsp_led_initialize(void){TarVal = 100;InitVal = 0;B_Init = 0;B_Calc = 1;}void bsp_led_10msTrg(void){if(B_En == 1){led = ~led;B_Init = 1;B_Calc = 0;}else{B_Init = 0;B_Calc = 1;}}bsp_led_initialize:设置计数器⽬标值、计数初始化设定值、使能计数bsp_led_10msTrg:检测计时时间到让LED状态翻转,初始化计数模块。
对simulink建模开发和代码生成技术的理解
对simulink建模开发和代码生成技术的理解在Simulink建模开发和代码生成技术方面,这是一个非常重要和值得探讨的主题。
Simulink是一种基于模块化建模的环境,可以用来进行多域系统建模、仿真和分析。
它是Matlab的一个重要扩展,可以帮助工程师和科学家快速设计和验证复杂系统。
Simulink还拥有强大的代码生成功能,可以将模型自动生成为可执行代码,方便实现嵌入式系统的开发和实现。
让我们来探讨Simulink建模开发技术。
在Simulink中,系统可以被建模为由各种不同的模块组成的模型。
这些模块可以代表系统的不同部分或功能模块,通过简单的拖拉拽和连接操作即可建立模型。
这种模块化的建模方法使得复杂系统的设计变得更加直观和高效,同时也方便了对系统的修改和调试。
另外,Simulink还支持多种不同领域的建模,包括控制系统、通信系统、数字信号处理等,使得工程师可以在一个统一的环境中完成多个领域的建模工作。
我们来讨论Simulink的代码生成技术。
Simulink可以将建立的模型自动生成为C、C++或者HDL等各种种类的可执行代码,这使得系统的实现变得更加容易和高效。
通过代码生成技术,我们可以将模型直接部署到嵌入式系统中,从而实现对系统的快速验证和实现。
Simulink的代码生成器还支持自定义代码生成选项,使得用户可以根据不同的硬件评台和实时性能要求进行定制化的代码生成优化,从而更好地满足实际应用的需求。
在个人看来,Simulink建模开发和代码生成技术的结合,为工程师提供了一个非常强大和全面的工具,可以帮助他们在系统设计、验证和实现过程中取得更好的效果。
相比传统的手工编程方法,Simulink的模块化建模和自动生成代码的特性,大大提高了系统开发的效率和质量,同时也降低了系统开发的难度和风险。
我认为Simulink建模开发和代码生成技术在工程实践中具有非常重要的意义,值得更多的工程师和科学家去深入学习和应用。
simulink 生成代码操作步骤
本操作步骤依据的是NXP-FRDM-K64F。
一、首先要安装对应板子的硬件支持包,具体步骤如下:
1.启动MATLAB
2.找到主页的“附加功能”,如图1
图1
3.在附加功能的下拉菜单中选择最后一个“获取硬件支持包”,如图2
图2
4.然后在搜索框内打字“FRDM-K64F”搜索,之后会出现对应的硬件支持包,如图3
图3
5.点开之后下载安装即可,如图4(安装完成后“安装”按钮会变为“管理”),如图4
图4
6.安装过程会出现一个对话框,每完成一项会有标志,等待一会即可。
二、代码生成
1.首先打开simulink,打开library browser,如图5
图5
2.在目录检索中会找到NXP FRDM-K64F 库,如图6
图6
3.进行编程,我这里举一个简单的例子,点亮一个灯。
只需简单拖动模块更改参数即可。
如图7
图7
4. 接下来可以参考网址
https:///help/supportpkg/freescalefrdmk64fboard/examples/gettin
g-started-with-simulink-coder-support-package-for-nxp-frdm-k64f-board.html 至此,一个简单的代码生成结束了。
基于模型设计自动代码生成操作指南
MBD指南性文件(全网独一份)基于模型设计的自动代码生成操作指南 MBD:基于模型的设计一、概述MBD是一种软件开发流程,Simulink建立的模型从早期验证,代码生成到后期的SIL/PIL等提供了全流程的快速开发工具链和品质保障措施。
不仅通过仿真可以进行早期设计的验证,还可以生成C,C++等代码直接应用于PC、MCU等平台,在嵌入式软件开发中发挥着重要作用。
本文将以Simulink模型生成嵌入式C代码为主体详细分析代码生成的应用技巧,并重点讲解代码生成过程的参数配置及优化。
二、适用范围本指南适用于汽车电装品及辅助测具的软件开发及维护,也适用于基于MATLAB/SImulink生成或者转换的软件开发。
三、缩写及定义3.1 缩写缩写 全名MBD Model Based DesignMIL Model in the loopSIL Software in the loop3.2 定义四、代码生成Simulink的 Coder generation工具箱提供了将模型转换为可优化的嵌入式C代码的功能。
Configuration Parameter工具可以对代码生成方法、格式等约束条件进行配置,从而使生成的代码具有高质量,高可读性,高优化的特点 在生成嵌入式代码时,至少需要完成三部分的配置:模型解算器,模型的系统文件目标,硬件实现规定。
4.1解算器打开 Simulink模型,进入 Configuration Parameter(快捷键Cml+E)对话框,如下图所示,选定 Solver:●必须设置项:①解算器类型:选择固定点解算器( Fixed-step);②解算器算法:选择离散方法( dis c rete);注:固定点解算器提供了多种算法,目前引用的嵌入式系统是非连续的(no c ontinuous states)。
③解算器步长:依据底层调度周期;注:解算器步长为整个模型提供了一个基础采样频率,被称为基采样率。
simulink模型生成代码详解
simulink模型生成代码详解Simulink是一种面向模块化、图形化的仿真设计工具,可用于开发控制系统、信号处理系统等。
在使用Simulink进行仿真与设计时,我们通常会使用Simulink模型进行建模。
Simulink提供了多种方法来对模型进行描述、仿真及代码生成等操作。
在Simulink中,我们可以使用多种语言进行代码生成,例如C、C++、MATLAB等。
选择不同的编程语言,可以根据不同的应用场景进行灵活应用。
在本篇文章中,我们将详细介绍Simulink模型生成代码的方法和步骤。
1. 首先,我们需要打开Simulink模型2. 接下来,我们要在Simulink工具栏中,选择"Tools"菜单,并点击"Code Generation"选项。
3. 在"Code Generation"选项中,我们可以设置不同的参数来生成代码。
包括目标主机、目标语言、嵌入式代码生成等等。
根据需要进行自由选择。
5. 在代码生成过程中,Simulink会为我们生成多个文件。
这些文件包括C文件、H文件、makefile文件等等。
这些文件可以用于控制系统的开发和实现。
1. 省时省力:Simulink模型生成代码可以大大减少控制系统的开发时间和人力成本。
2. 精准度高:通过使用Simulink进行仿真和调试,可以为生成的代码提供更高的精度和稳定性。
3. 模块式设计:Simulink模型使用模块化的设计方式,可以让代码更加易于管理和维护。
4. 易于修改:通过使用Simulink进行建模,可以轻松地修改控制系统中的各个部分,从而实现更多灵活的设计。
5. 易于扩展:Simulink模型生成代码的设计方式,可以在需要扩展或重构控制系统时,快速实现更多的功能。
三、总结Simulink模型生成代码是一种快速且有效的控制系统设计方法。
通过使用Simulink进行建模和仿真,可以为生成的代码提供更高的精度和稳定性。
simulink自动代码生成技术的研究意义
simulink自动代码生成技术的研究意义Simulink自动代码生成技术是一种非常有意义的研究方向,它在现代软件开发中扮演着越来越重要的角色。
随着计算机技术的不断发展和软件开发的不断改进,研究Simulink自动代码生成技术变得越来越必要。
首先,Simulink自动代码生成技术可以大大提高软件开发的效率。
现代软件开发中,软件代码量巨大,手动编写代码耗费人力、时间和资源。
采用Simulink自动代码生成技术就可以避免人工编写代码的繁琐过程,减少程序的错误率和开发时间,提高开发效率。
这对于软件开发中需求变化频繁的项目而言,尤为重要,能够在迭代中节省大量的时间和人力成本。
其次,Simulink自动代码生成技术可以提高软件的可靠性和质量。
手动编写代码的过程中,由于人类的限制,往往会产生一定的错误率。
而采用Simulink自动代码生成技术就可以避免这种情况。
因为该技术可以根据模型自动产生代码,代码的规范性和精确度非常高,能够保证代码的正确性,提高软件的稳定性和鲁棒性。
第三,Simulink自动代码生成技术可以帮助开发人员更好地应对软件开发中的挑战。
在软件开发中,开发人员需要面对不同的复杂问题和挑战,如软件的可重用性、可维护性、可扩展性以及系统的安全性等。
采用Simulink自动代码生成技术就可以更好地应对这些挑战。
因为该技术可以生成高质量的代码,从而提高了软件的可重用性、可维护性、可扩展性和系统的安全性。
最后,Simulink自动代码生成技术可以促进软件开发的普及和推广。
现代软件开发中,尤其是在大型复杂系统的开发中,人们需要掌握多种工具和技术来完成任务。
采用Simulink自动代码生成技术可以降低软件开发的门槛,使更多的开发人员能够参与到软件开发中来,从而推广和普及软件开发技术。
综上所述,Simulink自动代码生成技术的研究具有非常重要的意义。
它可以提高软件开发的效率、可靠性、质量,更好地应对软件开发的挑战,促进软件开发的普及和推广。
simulink 代码生成 路径
simulink 代码生成路径
Simulink是一种非常强大的工具,可用于模拟和设计控制系统。
Simulink还具有一项非常有用的功能,即可以将设计的图形模型自动转换为可以在目标硬件上运行的代码。
这就是所谓的Simulink代码自动生成。
在生成代码之前,需要设置代码生成路径。
代码生成路径是指生成目标代码所在的目录或文件夹。
在Simulink中,可以使用以下方式设置代码生成路径:
1. 使用Simulink模型配置参数对话框中的代码生成器选项卡来设置生成路径。
在Simulink模型中,可以通过单击模型画布上的“模型配置参数”按钮来打开“配置参数”对话框。
在对话框中,选择“代码生成器”选项卡。
在“输出目录”选项中,可以将生成的代码保存到特定的目录中。
在Simulink Coder中,可以使用“Build”选项卡中的“Code Generation Settings”来设置生成路径。
在“Generation Folder”选项中,可以指定生成代码所在的目录。
3. 在MATLAB脚本中定义生成路径。
设置正确的代码生成路径对于正确生成目标代码非常重要。
在选择代码生成路径时,需要考虑一些因素,例如项目大小、目标硬件和项目的部署目标。
总之,Simulink代码自动生成是一项非常有用的功能,可以显著提高控制系统的开发效率。
设置正确的代码生成路径将确保生成的代码被正确保存到目标文件夹中,从而实现更好的系统性能和更快的开发速度。
(13)TE1400使用篇2
TE1400使用篇2-模型被PLC调用
------------------------------------------ 杨煜敏
紧接着上一篇,这次不希望模型周期执行,而是希望作为一个控制器模型被PLC条件调用。
1.回到simulink模型,在configuration中找到CallBy,设置为Module
2.之后对于这个模型进行重新编译生成模型
3.点击reload从新上载下模型,并且把新的模型添加到TcCOM
4.新建PLC项目
5.右键POUs点击Import PLCopenXML
6.在默认路径C:\TwinCAT\3.1\CustomConfig\Modules\test中找到test_PlcOpenPOUs.xml并
且点击open加入到PLC项目中
7.点击OK确认添加
8.接下来开始写程序,首先对于模型接口功能块进行变量声明,在oid中输入TcCOM中模
型的objectID
Object ID可以在TcCOM中加载的模型中查看到
9.随后在程序中就可以调用相应的method进行模型调用,并且也可以直接访问到输入输
出等参数进行赋值。
10.最后别忘了分配模型的Task为PlcTask(必须和所调用的PLC的Task一致)
11.激活并下载程序后发现即使输入给人了值,输出也没有
12.只有触发了input,使得execute这个方法被调用才可以执行simulink模型。
Simulink自动代码生成_01
2.4.8 Code Generation-Code Placetnem子标签页面的设置
Code Placetnem子标签提供的选项将影响生成代码的文件组织方式和数据存储方式及 头文件包含的分隔符选择等,其页面如下图所示:
2.4.8 Code Generation-Code Placetnem子标签页面的设置
2.2 Optimization页面的设置
当模型中使用参数变量,如Gain模块的增益值,在生成代码时,如果希望使用该参数 的值直接展开到代码中,就需要设置参数内联选项,如下图所示框中选项:
2.2 Optimization页面的设置 当模型中使用参数变量,如Gain模块的增益值,在生成代码时,
如果希望使用该参数的值直接展开到代码中,就需要设置参数内联 选项,如下图所示框中选项:Inline parameters选项决定是否将参 数内联到代码中去。勾选此选项后,代码生成时模型的参数将以常 数方式直接生成到代码逻辑中,不再以一个参数变量的形式生成。 当模型中的参数需要作为实时可调的参数生成到代码中时,不勾选 Inline parameter,参数将作为变量生成;如果不需要实时调整参数, 可以选择节省存储空间的方式,勾选Inline parameter,将参数以数 值常数的形式生成到代码中。
另外一个关键的设置选项是控制整个代码生成过程的系统目标文件 System Target File,ert. tlc文件是Embedded Coder提供的能够生成专门 用于嵌入式系统C代码的系统目标文件。在Code Generation页面中,单 击下图图(2)所示右上角Browse按钮可以弹出对话框以选择系统目标 文件。
2.3 Hardware Implenmatation页面的设置
利用Matlab生成Twincat语言
利用MATLAB/simulink的自动代码生成工具开发PLC程序2011年04月25日星期一上午10:541. 对于大型的、比较复杂的控制系统,手工编程不仅耗费人力,而且准确率较低。
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文件及诊断对话框。
Simulink代码自动生成(一)
Simulink代码⾃动⽣成(⼀)前⾯介绍了MDB的设计思想并对⽐了它和传统的嵌⼊式软件开发之间的差异,现在开始使⽤Simulink⼯具演⽰模型的搭建和C代码的⾃动⽣成过程。
Matlab版本:R2018B⼀、算法模型的搭建搭建⼀个具有计数功能模型,当使能计数时,每运⾏⼀次该计数模块计数值加1,当计数值⼤于⽬标值时,相应的使能标志位置位,当初始化计数使能时,计数值被初始化为特定的输⼊值模型的输⼊量描述:InitVal:计数器初始化值B_Init:为1时,计时器模块被初始化成InitVal值B_Calc:为1时,计数器模块每运⾏⼀次⾃加1模型内部变量:CntTimer:存储当前计数值模型输出量描述:B_En: 使能标志位,计数值⼤于⽬标值时被置1CurTimer:当前计数值设置const、switch block的输出数据类型为Inherit:Inherit via back propagation(继承后项的数据类型)⼆、代码的⽣成1、使⽤数据管理,设置变量属性数据据管理主要是对Simulink/Stateflow模型中的两类数据进⾏管理,⼀是信号,⼀是参数。
对应于C代码,我们可以简单的把信号对应到变量上,⽽参数,则是不通过程序运⾏⽽发⽣变化的,参数的变化,⼀般是通过⼈⼯调节完成的,也就是参数调节,参数调节的⽬的是为了选择合适的参数以得到最佳的性能。
数据管理的⽅式,使⽤的是数据对象进⾏数据管理,这⾥的“对象”⼆字,和我们经常听到的“⾯向对象编程”⾥⾯的“对象”意义相同。
Simulink 为⽤户事先定义好两个包,⼀个是Simulink Package,⼀个是mpt Package。
以Simulink Package为例,包⾥⾯有类,分别为Simulink.Signal和Simulink.Parameter两个类。
⽤户可以通过这两个类定义相应的对象(Object),然后通过类提供的属性(Property)定义数据的属性。
从simulink模型到PLC代码的自动生成功能
从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⽂档。
如下2.打开TwinCat的PLC Control,新建⼀个⼯程,命名为testmatlab,其中main程序选择SFC语⾔。
下⾯我们将刚才⽣成的⽂件导⼊到TwinCat中,选择Project->Import,选择刚才⽣成的plcdemo_simple_subsystem.exp⽂件。
simulink转换为matlab代码
simulink转换为matlab代码Simulink是一个用于模型驱动设计的工具,可以帮助工程师在Matlab环境中进行系统级建模、仿真和分析。
在Simulink中建立的模型可以通过生成Matlab代码来进一步进行分析和优化。
本文将介绍如何将Simulink模型转换为Matlab代码,以便读者了解如何在Matlab中使用Simulink模型。
打开Simulink并加载您要转换为Matlab代码的模型。
确保模型已经完成并准备好进行转换。
然后,点击Simulink界面上的“Tools”菜单,选择“Model Verification”选项。
在弹出的对话框中,选择“Generate Report”选项,并在下拉菜单中选择“Model to Code”选项。
点击“Generate”按钮,系统将自动生成Matlab代码。
生成的Matlab代码将包括模型中的所有组件和参数设置。
您可以将代码保存为.m文件,以便在Matlab环境中进行加载和修改。
在Matlab中打开生成的代码文件,您将看到与Simulink模型相对应的Matlab脚本。
您可以根据需要修改代码,并在Matlab命令窗口中运行以验证模型的功能。
通过将Simulink模型转换为Matlab代码,您可以更方便地在Matlab中进行模型分析和优化。
您可以使用Matlab的各种工具和函数来进一步处理模型,并与其他Matlab代码集成。
这种转换还可以帮助您更好地理解模型的结构和行为,从而更好地优化系统设计。
将Simulink模型转换为Matlab代码是一个简单而有效的方法,可以帮助工程师更好地利用Matlab的功能来分析和优化系统设计。
通过这种转换,您可以更好地理解和处理模型,提高工作效率并优化系统性能。
希望本文对您有所帮助,谢谢阅读!。
matlab simulink 独立生成代码
matlab simulink 独立生成代码
MATLAB Simulink是一种图形化编程环境,常用于模拟、分析和设计动态系统。
通过Simulink,用户可以构建复杂的控制系统模型,并通过独立生成代码,将这些模型转化为可执行的程序。
独立生成代码指的是将Simulink模型转化为特定硬件或软件平
台的可执行代码,而不需要依赖MATLAB或Simulink环境。
这通常涉及使用MATLAB Coder或Embedded Coder等工具,这些工具可以将Simulink模型转换为C或C++代码,以便在没有MATLAB的环境中运行。
独立生成代码的主要优势在于提高了代码的可移植性和执行效率。
通过将模型转化为独立的代码,用户可以在不同的硬件平台上运行模型,而无需安装MATLAB或Simulink。
此外,独立生成的代码通常具有更高的执行效率,因为它可以针对特定硬件平台进行优化。
总之,MATLAB Simulink的独立生成代码功能为用户提供了将动态系统模型转化为可执行程序的能力,从而提高了代码的可移植性和执行效率。
Matlab_Simulink模型到C_C_代码的自动实现(1)
Ξ 收稿日期:2006-09-10作者简介:张祥(1977-),女,四川资阳人,硕士研究生,讲师,主要从事智能控制、控制理论与应用研究.【计算机与通信工程】Matlab/Simulink 模型到C/C ++代码的自动实现Ξ张 祥,杨志刚,张彦生(重庆交通大学机电与汽车工程学院,重庆 400074)摘要:介绍了如何利用Matlab/S imulink 的RT W (Real-T ime W orkshop )代码生成工具将S imulink 模型自动转换成C/C ++代码的方法,通过这种方式可以利用S imulink 方便地建立系统模型,同时也解决了S imlink 模型在Matlab/S imulink 环境下速度较慢的问题,大大减少了软件工程师的编程工作量.转换后的C 代码能脱离Matlab 环境独立运行,这进一步扩大用该方法生成的C 代码的适用范围.关 键 词:Matlab/S imulink ,RT W 代码生成工具,C/C ++代码中图分类号:TP311.11 文献标识码:A 文章编号:1671-0924(2006)11-0111-03Automatic R ealization from Matlab/Simulink Models to C/C ++CodeZHANG X iang ,Y ANG Zhi-gang ,ZHANG Y an-sheng(School of E lectromechanics and Autom obile Engineering ,Chongqing Jiaotong University ,Chongqing 400074,China )Abstract :This paper proposes a method of using the RT W (Real-T ime W orkshop )code generation tool to convert Matlab/Simulink to the C/C ++code.Accordingly the system ’s m odel is constructed conveniently by using simulink.This can not only av oid the problem of low simulation speed of the m odel in matlab/Simulink circumstance ,but als o deduce the w orkload of the programming engineer.In addition ,the convert 2ed C code can run independently out of Matlab circumstance ,which expands the use domain of the converted C code by this method.K ey w ords :Matlab/Simulink ;RT W code generation tool ;C/C ++code0 引言 目前,市场对产品的需求呈现多样性、快速性的趋势,这使产品开发面临着多样性需求与快速开发之间的矛盾,并行工程(设计、实现、测试和生产准备同时进行)被提上了日程.其中系统设计软件(S imulink 软件)是用Matlab 语言建立的一种新型的图形建模工具,它免去了程序代码编程带来的低效与繁琐,可以方便地建立系统的模型(例如系统被控对象的模型、控制器模型),通过仿真可以观察到控制算法的性能;而且,如果控制算法不理想,还可以很快地进行反复设计和反复实验,直到找到比较好的控制方案.具体实现时,不需要将设计的控制算法进行编程,可直接把S imulink 建立起来的控制器模型通过RT W 工具转换成可执行代码,下载到存储器中,这样大大减轻了软件工程师的编码工作量,并且将S imulink 模型转换成的C/C ++代码能脱离Matlab 环境独立运行.下面详细介绍如何实现S imulink 模型向C/C ++代码的转换.需要注意的是,要想成功地运行RT W Windows T arget ,则需在电脑上安装M i 2cros oft Visual C ++5.0以上版本的编译器.第20卷 第11期V ol.20 N o.11重 庆 工 学 院 学 报Journal of Chongqing Institute of T echnology2006年11月N ov.20061 Simulink 模型向C/C ++代码转换方法 本文中以电子节气门控制模型throttlectr.mdl 为例,将该模型通过RT W 自动生成C/C ++代码.首先在Matlab 主窗口打开此模型,和Matlab/S imulink 软件环境下仿真不同,将S imulink 模型利用RT W 生成C 代码时,实时仿真需要选择定步长的仿真算法,所以在转换之前应进行相应的设置[1].仿真的控制参数由S imulation/S imulation parameters 菜单项来选择.定步长的仿真算法在该对话框下的S olver op 2tions 栏目选择,如图1所示.图1 定步长仿真算法 RT W 用户界面通过S imulink 提供的仿真参数框“S imulink Parameters”设定,其界面如图2所示.图2 参数设置对话框 应将Real -T ime W orkshop 标签下的Categ ory 选为T ar 2get C on figuration.选择了代码生成方式后还应选择目标代码类型,在图2所示的对话框中,单击System target file 栏对应的Browse 按钮,出现图3所示的对话框,则可以从中选择所期望转换后生成的目标代码类型,这里选择Visual C/C ++Project Makefile only for the “grt ”target.选择图2界面W orkspace I/O页,选中其中的tout 和y out 前的复选框.图3 实时工具目标选择对话框 设置好编译环境后,按下图2中的Build 按钮,这时即可生成S imulinik 模型的C/C ++代码,最终生成下列文件:①throttlectr.c ,是通过目标语言编译器(tornado.tlc )创建的模型的单机C 代码;②throttlectr.h ,是包含状态变量和参数的包含头文件;③throttlectr-data.c ,是对模型中所有用到的参数进行赋值的C 代码.另外还有3个包含模型信息的头文件throttlectr-private.h ,throttlectr-types.h ,rtm odel.h 和一个throttlectr.mak 文件.上述生成的所有文件存储在Matlab 目录下的W ork 文件夹中.需要指出是以上生成的.c 和.h 文件并不能脱离Matlab 独立运行,要将转换后的代码脱离Matlab 独立运行还需要一系列的源文件.将生成的throt 2tlctr.mak 文件在Visual C ++环境下打开,throttlectr.mak 自动调用独立于Matalb 运行所需要的源文件,这些源文件均可在Matlab 中找到.2 Mat 文件的读取 在VC 下运行throttlectr.mak 文件,其运行结果是生成一数据文件———throttlectr.mat 文件.mat 文件是Matlab 系统保存文件的默认文件格式,通过mat 文件可以实现Matlab 与其它编程环境的数据交互,为不同应用程序之间移动matlab 数据提供了一种便利的机制[2-5].在操作mat 文件的子程序中,主要有以下子函数,它们的名字和相应提供的功能说明如下:matopen :打开mat 文件;matclose :关闭mat 文件;matG etDir :取mat 文件中的变量列表;matG etF p :取mat 文件中的C 语言FI LE 句柄;matG etArray :从mat 文件中取一个矩阵;matPutArray :向mat 文件中存一个矩阵;matDeleteArray :从mat 文件中删除一个矩阵;matPutArrayG lobal :向mat 文件中存一个矩阵,使得当用load 命令装入这个mat 文件时,该矩阵对应的变量称为global 变量;matG etArrayHeader :读取mat 文件中的Matlab 矩阵头信息;matG etNextArrayHeader:读取mat 文件中下一个Matlab的矩阵头信息;下面给出一段读取throttlectr.mat 文件的例子,并将读出的数据写入throttlectr.txt 文档中.int main (){int result ;maArray 3p ,3q ;M ATFile 3pm ;int m ,n ,j ;double 3x ,3y ;FI LE 3fOut =NU LL ;211重庆工学院学报const char 3file =“throttlectr.mat ”;fOut =fopen (“throttlectr.txt ”,“a +”);pm =matOpen (file ,“r ”);q =matG etVariable (pm ,“rt-y out ”);p =matG etVariable (pm.“rt-tout ”);m =mxG etM (p );fprintf (fOut ,“the number of rows is %d \n ”,m );n =mxG etN (p );fprintf (fOut ,“the number of column is %d \n ”,n );if (p ==NU LL ){fprintf (fOut ,“Error reading in file %s \n ”,file );return (1);}fprintf (fOut ,“%d \n ”,p );y =mxG etPr (q );x =mxG etPr (p );for (j =0;j <m ;j ++){fprintf (fOut ,“%-5d f \n ”,y[j ]);}return ((result ==0)?EXIT -S UCCESS:EXIT -FAI LURE ):}3 代码验证 在完成了Matlab/S imulink 模型到C/C ++代码的自动转换后,则可将生成的可执行C 代码与S imulink 模型进行性能比较.图4为电子节气门的S imulink 模型———throttlec 2tr.mdl ,运行该模型得到图5所示的结果,在VC 下运行在由S imulink 的RT W 生成的throttlectr.mak 文件,并运行上述给出的读取throttlectr.mat 文件程序,得到图6所示结果.从图5与图6中可以得到两者运行结果几乎是相同的,这说明由S imulink 的RT W 生成的C/C ++代码的正确性,并且由S imulink 模型转换成C/C ++代码的过程中没有进行代码的编辑,从而减轻了用户编写代码的工作量.图4 电子节气门的S imulink模型图5 S imulink模型仿真得到的结果图6 S imulink 模型转换为C 代码程序运行的结果4 结束语 RT W 能够从系统设计的S imulink 模型直接生成面向目标的代码,减少了用户编写代码的工作量;通过一定方式的处理所生成的代码能独立于Matlab 运行,这就可以完成从编译、连接、下载直至运行的整个过程.参考文献:[1] 陈永春.从Matlab/S imulink 模型到代码实现[M].北京:清华大学出版社,2002.[2] 罗桂山,吕庭豪.M AT LAB 与VC ++融合方法的探讨[J ].计算机与数字工程,2004,32(3):19-21.[3] 邹益民.M AT LAB 与C 语言的混合编程[J ].计算机应用,2000(2):51.[4] 董长虹.Matlab 接口技术与应用[M].北京:国防工业出版社,2004.[5] 杨杰.数据采集系统中数据获取和处理的C ++Builder 实现[J ].重庆工学院学报,2005(3):51-55.(责任编辑 刘 舸)311张 祥,等:Matlab/Simulink 模型到C/C ++代码的自动实现。
快速原型中Simulink模型的代码自动生成(1)
0引 言
Mat lab/ Simulink 是 Mathworks 公司推出的一种科学 计算仿真软件。在传统的控制理论研究中可以利用其方 便地进行控制规律的设计与仿真, 但是 Simulink 仿真大多 为非实时仿真, 模型中的硬件环节由数学模型所代替。对 于一些仿真实时性要求较高的场合, 如存在数据采集、串 口通信等实时仿真任务时, 往往达不到预期的理想控制效 果。而且离线仿真不能对内存, 接口和通信等实时参量进 行评价, 从而设计者必须不断对自身的设计做出调整, 开 发周期相对过长。
应用表明通过使用simulink模型的代码自动生成可以方便快捷地将simulink模型应用于半实物仿真系统缩短研制周期rtw的主要功能及特点rtw是和matlabsimulink一起使用的一个工具可以直接从simulink模型生成代码并且自动建立可以在不同环境下运行的程序这些环境包括实时系统和单机仿真
或 DSP 板, 可以只生成源代码。然后使用特定的开发环境 对代码进行交叉编译并将其下载到目标硬件中。
2 代码自动生成
图 1 代码自动生成简图
2. 1 RTW 程序自动创建过程 RT W 程序自动创建过程能在不同主机环境下生成用
贝加莱MATLAB/Simulink自动生成代码方便集成于其AS软件
贝加莱MATLAB/Simulink自动生成代码方便集成于其AS
软件
无
【期刊名称】《自动化信息》
【年(卷),期】2008(000)006
【摘要】随着当今工业自动化需求的不断提高,人们对复杂回路的控制和整个机器的仿真需求也越来越大。
作为控制理论与控制工程及其计算机仿真的强大工具,MATLAB/Simulink在控制系统的仿真、分析与设计方面得到了广泛的应用,同时MATLAB/Simulink也变得越来越重要。
【总页数】1页(P86)
【作者】无
【作者单位】贝加莱工业自动化
【正文语种】中文
【中图分类】TP273.22
【相关文献】
1.Matlab/SIMULINK开发工具的建模与实现——贝加莱Automation Studio 对MATLAB/SIMULINK开发工具的支持 [J], 无
2.贝加莱推出带集成交换器的紧凑型控制器 [J], ;
3.Simulink PLC Coder在贝加莱运动控制系统中的应用 [J], 李磊;黄梓瑜;李刚
4.贝加莱推出Automation Studio Simulink仿真工具 [J],
5.贝加莱B&R Automation Studio Simulink仿真工具 [J],
因版权原因,仅展示原文概要,查看原文内容请购买。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
从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文档。
如下
2.打开TwinCat的PLC Control,新建一个工程,命名为testmatlab,其中main程序选择SFC语言。
下
面我们将刚才生成的文件导入到TwinCat中,选择Project->Import,选择刚才生成的
plcdemo_simple_subsystem.exp文件。
完成后TwinCat的POUs窗口中就有了SimpleSubsystem(FB)的功能函数文件。
双击该文件,即可看到具体的实现方法。
该文件使用了case of结构,故在调用时要注
意条件选择。
通过查看全局变量,即可看到case的条件选择SS_INITIALIZE被赋值为2,SS_OUTPUT被赋值为3。
先编译一下该项目,会出现一个Error3554的错误,双击该错误,将Program Call选为main()即可。
并将main中的转移条件改为TRUE再次编译将不会出现错误。
下面我们在main中调用MATLAB生成的那个PLC功能函数,并给定输入为正弦。
为main添加三个变量如下:
CALL_FUN:SimpleSubsystem;
COUNT:REAL; (*生成正弦*)
SIN_VAL:REAL;(*生成正弦*)
添加两个顺序执行框图,转移条件均为TRUE,第一个命名为ADD_COUNT,第二个命名为CALLFUN,末尾转移到ADD_COUNT块。
初始化和ADD_COUNT采用IL语言编写,CALLFUN采用ST语言编写。
结果如下:
各功能块如下:
下面可以享受你的成果了,完成后运行结果如下:。