Simulink模型到Modelica模型转换技术

Simulink模型到Modelica模型转换技术
Simulink模型到Modelica模型转换技术

龙源期刊网 https://www.360docs.net/doc/2b13186484.html,

Simulink模型到Modelica模型转换技术

作者:董政丁建完

来源:《计算机辅助工程》2016年第05期

摘要:针对Simulink模型重用到更高阶的Modelica平台上的需求,分析Simulink模型的数学本质和代码表达,以及Modelica对外部函数和外部类的支持,重用Simulink模型转换生成的S-function目标C代码,实现Simulink模型到Modelica模型转换.

关键词: Simulink; S-function; Modelica;模型转换

中图分类号: TP391.9 文献标志码: B

0 引言

随着数字化功能样机技术和仿真技术的发展,近几十年来涌现出许多成熟的建模仿真分析工具,并广泛应用于机械、电子、控制等领域中,使得对集机械、电子、液压、控制等多个学科领域子系统于一体的复杂产品的整体系统进行分析成为可能.多年以来,Simulink以其基本模块的易用性和通用性,被广泛应用于控制系统的建模.同时,为满足物理系统建模,MATLAB 官方和第三方均提供多种扩展工具模块,但是实际使用时,扩展工具模块往往难以满足使用需求.越来越多的使用者发现针对复杂物理系统,Simulink存在着建模难度大并且耗费时间多的问题.欧洲学者针对复杂物理系统统一建模,提出多领域统一建模语言——Modelica语言,实现

对复杂产品整体统一建模分析,并使之成为复杂系统建模领域的标准.目前,Modelica语言已

有较大的发展,针对其开发的标准模型库更是迅猛增长,已覆盖机械、液压、气压、电控、热力和电磁等多个领域,并在欧美汽车、能源、动力、机电、航空和航天等各行业获得成功应用.[1]

虽然Modelica的应用已推进复杂物理系统的建模和仿真发展,但是控制系统工程师依然

习惯利用Simulink进行控制系统的建模和仿真,而其他设计工程师使用Modelica建立物理系统模型.长期以来,大量的知识已经以Simulink模型的方式累积下来,如果把这些模型用Modelica重写,十分耗费时间和精力.基于Modelica语言在多领域建模和仿真中的广泛应用以及未来发展趋势,可以考虑将控制系统Simulink模型转换成Modelica模型,使系统模型在统一的Modelica平台下进行仿真.有学者提出一种“模块映射”方案,通过在Modelica平台中建立与Simulink基本模块对应的模型库元件,并按照Simulink模型模块和连接关系,用Modelica

元件代替Simulink模块并复现连接关系,实现模型转换.[2-3]这种方案依赖于专门定制的Modelica模型库元件.然而,部分Simulink基本模块,如积分模块等,有多种变形模式,要设计一种Modelica元件与其对应的难度很大.对此,本文提出一种基于Simulink模型代码生成和Modelica外部类和函数接口实现Simulink模型到Modelica模型转换的新方案.

1 模型转换原理

常用数据类型转换使用详解

VC常用数据类型使用转换详解 CString ,BSTR ,LPCTSTR之间关系和区别 CString是一个动态TCHAR数组,BSTR是一种专有格式的字符串(需要用系统提供的函数来操纵,LPCTSTR只是一个常量的TCHAR指针。 CString 是一个完全独立的类,动态的TCHAR数组,封装了 + 等操作符和字符串操作方法。typedef OLECHAR FAR* BSTR; typedef const char * LPCTSTR; vc++中各种字符串的表示法 首先char* 是指向ANSI字符数组的指针,其中每个字符占据8位(有效数据是除掉最高位的其他7位),这里保持了与传统的C,C++的兼容。 LP的含义是长指针(long pointer)。LPSTR是一个指向以‘/0’结尾的ANSI字符数组的指针,与char*可以互换使用,在win32中较多地使用LPSTR。 而LPCSTR中增加的‘C’的含义是“CONSTANT”(常量),表明这种数据类型的实例不能被使用它的API函数改变,除此之外,它与LPSTR是等同的。 1.LP表示长指针,在win16下有长指针(LP)和短指针(P)的区别,而在win32下是没有区别的,都是32位.所以这里的LP和P是等价的. 2.C表示const 3.T是什么东西呢,我们知道TCHAR在采用Unicode方式编译时是wchar_t,在普通时编译成char. 为了满足程序代码国际化的需要,业界推出了Unicode标准,它提供了一种简单和一致的表达字符串的方法,所有字符中的字节都是16位的值,其数量也可以满足差不多世界上所有书面语言字符的编码需求,开发程序时使用Unicode(类型为wchar_t)是一种被鼓励的做法。 LPWSTR与LPCWSTR由此产生,它们的含义类似于LPSTR与LPCSTR,只是字符数据是16位的wchar_t而不是char。 然后为了实现两种编码的通用,提出了TCHAR的定义: 如果定义_UNICODE,声明如下: typedef wchar_t TCHAR; 如果没有定义_UNICODE,则声明如下: typedef char TCHAR; LPTSTR和LPCTSTR中的含义就是每个字符是这样的TCHAR。 CString类中的字符就是被声明为TCHAR类型的,它提供了一个封装好的类供用户方便地使用。

matlab数据类型及转换

Matlab中有15种基本数据类型,主要是整型、浮点、逻辑、字符、日期和时间、结构数组、单元格数组以及函数句柄等。 1、整型:(int8;uint8;int16;uint16;int32;uint32;int64;uint64)通过intmax(class)和intmin(class) 函数返回该类整型的最大值和最小值,例如intmax(‘int8’)=127; 2、浮点:(single;double) 浮点数:REALMAX('double')和REALMAX('single')分别返回双精度浮点和单精度浮点的最大值,REALMIN('double')和REALMIN ('single')分别返回双精度浮点和单精度浮点的最小值。 3、逻辑:(logical) Logical:下例是逻辑索引在矩阵操作中的应用,将5*5矩阵中大于0.5的元素设定为0: A = rand(5); A(A>0.5)=0; 4、字符:(char) Matlab中的输入字符需使用单引号。字符串存储为字符数组,每个元素占用一个ASCII字符。如日期字符:DateString=’9/16/2001’ 实际上是一个1行9列向量。构成矩阵或向量的行字符串长度必须相同。可以使用char函数构建字符数组,使用strcat函数连接字符。 例如,命令name = ['abc' ; 'abcd'] 将触发错误警告,因为两个字符串的长度不等,此时可以通过空字符凑齐如:name = ['abc ' ; 'abcd'],更简单的办法是使用char函数:char(‘abc’,’abcd’),Matlab自动填充空字符以使长度相等,因此字符串矩阵的列纬总是等于最长字符串的字符数. 例如size(char(‘abc’,’abcd’))返回结果[2,4],即字符串’abc’实际存在的是’abc ’,此时如需提取矩阵中的某一字符元素,需要使用deblank函数移除空格如name =char(‘abc’,’abcd’); deblank(name(1,:))。 此外,Matlab同时提供一种更灵活的单元格数组方法,使用函数cellstr可以将字符串数组转换为单元格数组: data= char(‘abc’,’abcd’) length(data(1,:)) ->? 4 cdata=cellstr(data) length(cdata{1}) ->?3 常用的字符操作函数 blanks(n) 返回n个空字符 deblank(s) 移除字符串尾部包含的空字符 (string) 将字符串作为命令执行 findstr(s1,s2) 搜索字符串 ischar(s) 判断是否字符串 isletter(s) 判断是否字母 lower(s) 转换小写 upper(s) 转换大写 strcmp(s1,s2) 比较字符串是否相同 strncmp(s1,s2,n) 比较字符串中的前n个字符是否相同 strrep(s1,s2,s3) 将s1中的字符s2替换为s3 5、日期和时间 Matlab提供三种日期格式:日期字符串如’1996-10-02’,日期序列数如729300(0000年1月1日为1)以及日期向量如1996 10 2 0 0 0,依次为年月日时分秒。 常用的日期操作函数

Matlab中的Simulink和SimMechanics做仿真

这里我们利用Matlab中的Simulink和SimMechanics做仿真,那么先来看看相关的资料。 SimMechanics ——机械系统建模和仿真 SimMechanics 扩展Simscape? 在三维机械系统建模的能力。用户可以不进行方程编程,而是借助该多刚体仿真工具搭建模型,这个模型可以由刚体、铰链、约束以及外力组成。自动化3-D动画生成工具可做到仿真的可视化。用户也可通过从CAD系统中直接导入模型的质量、惯量、约束以及三维几何结构。Real-Time Workshop可以对SimMchanics模型进行自动化C代码生成,并在硬件在回路仿真过程中可以使用生成的代码而不是硬件原型测试嵌入式控制器。 SimMechanics可以用于开发悬架、机器手臂、外科医疗设备、起落架和大量的其它机械系统。用户也可以在SimMechanics环境下集成其它的MathWorks物理建模工具,这样做可以实现更加复杂跨领域的物理建模。 特点: ?提供了三维刚体机械系统的建模环境 ?包含了一系列分析机械运动和设计机械元件尺寸的仿真技术 ?三维刚体可视化仿真 ?SimMechanics Link utility,提供Pro/ENGINEER 和SolidWorks CAD平台的接口并且也提供了API函数和其它CAD平台的接口

?能够把模型转化为C代码(使用Real-Time Workshop) ?由于集成在Simulink环境中,因此可以建立高精度、非线性的模型以支持控制系统的开发和测试。 强大功能: 搭建机械系统模型 使用SimMechanics用户仅需要收集物理系统信息即可建立三维机械系统模型。使用刚体、坐标系、铰链和作用力元素定义和其它Simulink模型直接相连的部分。这个过程可以重用Simulink模型以及扩展了SimMechanics工具的能力。用户还可把Simulink模型和SimMechnics模型集成为一个模块,并可封装成可在其它模型中复用的子系统。 机械系统建模仿真和分析 SimMechanics包含如下子系统: ?使用Simulink查表模块和SimMechanics传感器和作动器定义的非线性的弹性单元 ?用来定义航空器件压力分布的空气动力学拖曳模块,例如副翼和方向舵 ?车辆悬架系统,例如防侧翻机械装置和控制器 ?轮胎模型

matlab图像数据类型转换

uint 8:无符号的8位(8bit)整型数据(unit 都是存储型) int :整型数据 1、在MATLAB中,数值一般都采用double型(64位)存储和运算. 2、为了节省存储空间,MATLAB为图像提供了特殊的数据类型uint8(8位无符号整数),以此方式存储的图像称为8位型像。 3、函数image能够直接显示8位图像,但8位型数据和double型数据在image中意义不一样, 4、对于索引图像,数据矩阵中的值指定该像素的颜色种类在色图矩阵中的行数。当数据矩阵中的值为0时,表示用色图矩阵中第一行表示的颜色绘制;当数据矩阵中的值为1时,表示用色图矩阵中的第二行表示的颜色绘制该像素,数据与色图矩阵中的行数总是相差1。所以,索引图像double型和uint8型在显示方法上没有什么不同,只是8位数据矩阵的值和颜色种类之间有一个偏差1。调用格式均为image(x); colormap(map); 5、对于灰度图像,uint8表示范围[0,255],double型表示范围[0,1]。可见,double型和uint8型灰度图像不一样,二者转换格式为: I8=uint8 (round (I64*255)); !!double转换成uint 8 I64=double (I8)/255; !!!uint转换成double 反之,imread根据文件中的图像种类作不同的处理。当文件中的图像为灰度图像时,imread 把图像存入一个8位矩阵中,把色图矩阵转换为双精度矩阵,矩阵中每个元素值在[0,1]内;当为RGB图像时,imread把数据存入到一个8位RGB矩阵中。!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! MATLAB中读入图像的数据类型是uint8,而在矩阵中使用的数据类型是double 因此 I2=im2double(I1) :把图像数组I1转换成double精度类型; 如果不转换,在对uint8进行加减时会产生溢出 图像数据类型转换函数 默认情况下,matlab将图象中的数据存储为double型,即64位浮点数;matlab还支持无符号整型(uint8和uint16);uint型的优势在于节省空间,涉及运算时要转换成double型。 im2double():将图象数组转换成double精度类型 im2uint8():将图象数组转换成unit8类型 im2uint16():将图象数组转换成unit16类型 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 默认情况下,matlab将图像中的数据存储为double型,即64位浮点数;matlab还支持无符号整型(uint8和uint16);uint型的优势在于节省空间,涉及运算时要转换成double型。 但是,问题的真正的解释其实应该是这样的。首先是在数据类型转换时候uint8和im2uint8的区别,uint的操作仅仅是将一个double类型的小数点后面的部分去掉;但是im2uint8是将输入中所有小于0的数设置为0,而将输入中所有大于1的数值设置为255,再将所有其他值乘以255。 图像数据在进行计算前要转化为double类型的,这样可以保证图像数据运算的精

2.3 基本数据类型的转换

2.3基本数据类型的转换 本章目标 掌握基本数据类型间的自动转换 掌握任何基本数据类型的数据都会自动向String转换 掌握基本数据类型间的强制转换 Java的数据类型在定义时就已经确定了,因此不能随意转换成其他的数据类型,但Java允许用户有限度地做类型转换处理。数据类型的转换方式可分为“自动类型转换”及“强制类型转换”两种。 1 数据类型的自动转换 在计算机中完成一个计算时,要求参与计算的两个数值必须类型一致,如果不一致,计算机会自动将其中一个数值类型转换成另外一个数值的类型,然后完成计算。自动转换的原则如下: (1)转换前的数据类型与转换后的类型兼容。 (2)转换后的数据类型的表示范围比转换前的类型大。 例如,将short类型的变量a转换为int类型,由于short与int皆为整数类型,符合上述条件(1);而int的表示范围比short大,符合条件(2)。因此Java 会自动将原为short类型的变量a转换为int类型。 要注意的是,类型的转换只限该行语句,并不会影响原先所定义的变量的类型,而且通过自动类型的转换可以保证数据的精确度,它不会因为转换而损失数据内容。这种类型的转换方式也称为扩大转换。 范例:数据类型的转换 程序运行结果: x / y = 1.3519603 10 / 3.5 = 2.857142857142857 10 / 3 = 3 从程序的输出结果可以发现,int类型与float类型进行计算之后,输出的结

果会变成float类型,一个整型常量和一个浮点型常量进行计算之后,结果也会变为一个浮点数据,而如果两个int类型的常量进行计算,最终结果还是int类型,而其小数部分将会被忽略。 也就是说,假设有一个整数和双精度浮点数据做运算时,Java会所整数转换成双精度浮点数后再做运算,运算结果也会变成双精度浮点数。 提示:任何类型的数据都向String转型。 有一种表示字符串的数据类型String,从其定义上可以发现单词首字母大写了,所以此为一个类,属于引用数据类型,但是此类属于系统类,而且使用上有些注意事项,对于此种类型后面会有介绍,在此处所需要知道的只有以下两点: (1)String可以像普通变量那样直接通过赋值的方式进行声明。字符串是使用“””括起来的。两个字符串之间可以使用“+”进行连接。 (2)任何数据类型碰到String类型的变量或常量之后都向String类型转换。 范例:定义字符串变量 程序运行结果: str = lixinghua30 从运行结果来看,可以发现整型数据30自动转换成了字符的“30”,与字符串“lixinghua”进行了连接操作,变成了一个新的字符串“lixinghua30”。 范例:字符串常量操作的问题

PID控制系统的Simulink仿真分析

实验报告 课程名称:MATLAB语言与控制系统仿真 实验项目:PID控制系统的Simulink仿真分析专业班级: 学号: 姓名: 指导教师: 日期: 机械工程实验教学中心

注:1、请实验学生及指导教师实验前做实验仪器设备使用登记; 2、请各位学生大致按照以下提纲撰写实验报告,可续页; 3、请指导教师按五分制(优、良、中、及格、不及格)给出报告成绩; 4、课程结束后,请将该实验报告上交机械工程实验教学中心存档。 一、实验目的和任务 1.掌握PID 控制规律及控制器实现。 2.掌握用Simulink 建立PID 控制器及构建系统模型与仿真方法。 二、实验原理和方法 在模拟控制系统中,控制器中最常用的控制规律是PID 控制。PID 控制器是一 种线性控制器,它根据给定值与实际输出值构成控制偏差。PID 控制规律写成传递 函数的形式为 s K s Ki K s T s T K s U s E s G d p d i p ++=++==)1 1()() ()( 式中,P K 为比例系数;i K 为积分系数;d K 为微分系数;i p i K K T =为积分时间常数; p d d K K T =为微分时间常数;简单来说,PID 控制各校正环节的作用如下: (1)比例环节:成比例地反映控制系统的偏差信号,偏差一旦产生,控制器立即产 生控制作用,以减少偏差。 (2)积分环节:主要用于消除静差,提高系统的无差度。积分作用的强弱取决于积 分时间常数i T ,i T 越大,积分作用越弱,反之则越强。 (3)微分环节:反映偏差信号的变化趋势(变化速率),并能在偏差信号变得太大 之前,在系统中引入一个有效的早期修正信号,从而加快系统的动作速度,减少调 节时间。 三、实验使用仪器设备(名称、型号、技术参数等) 计算机、MATLAB 软件 四、实验内容(步骤) 1、在MATLAB 命令窗口中输入“simulink ”进入仿真界面。 2、构建PID 控制器:(1)新建Simulink 模型窗口(选择“File/New/Model ”),在 Simulink Library Browser 中将需要的模块拖动到新建的窗口中,根据PID 控制器的 传递函数构建出如下模型:

Simulink模型到Modelica模型转换技术

龙源期刊网 https://www.360docs.net/doc/2b13186484.html, Simulink模型到Modelica模型转换技术 作者:董政丁建完 来源:《计算机辅助工程》2016年第05期 摘要:针对Simulink模型重用到更高阶的Modelica平台上的需求,分析Simulink模型的数学本质和代码表达,以及Modelica对外部函数和外部类的支持,重用Simulink模型转换生成的S-function目标C代码,实现Simulink模型到Modelica模型转换. 关键词: Simulink; S-function; Modelica;模型转换 中图分类号: TP391.9 文献标志码: B 0 引言 随着数字化功能样机技术和仿真技术的发展,近几十年来涌现出许多成熟的建模仿真分析工具,并广泛应用于机械、电子、控制等领域中,使得对集机械、电子、液压、控制等多个学科领域子系统于一体的复杂产品的整体系统进行分析成为可能.多年以来,Simulink以其基本模块的易用性和通用性,被广泛应用于控制系统的建模.同时,为满足物理系统建模,MATLAB 官方和第三方均提供多种扩展工具模块,但是实际使用时,扩展工具模块往往难以满足使用需求.越来越多的使用者发现针对复杂物理系统,Simulink存在着建模难度大并且耗费时间多的问题.欧洲学者针对复杂物理系统统一建模,提出多领域统一建模语言——Modelica语言,实现 对复杂产品整体统一建模分析,并使之成为复杂系统建模领域的标准.目前,Modelica语言已 有较大的发展,针对其开发的标准模型库更是迅猛增长,已覆盖机械、液压、气压、电控、热力和电磁等多个领域,并在欧美汽车、能源、动力、机电、航空和航天等各行业获得成功应用.[1] 虽然Modelica的应用已推进复杂物理系统的建模和仿真发展,但是控制系统工程师依然 习惯利用Simulink进行控制系统的建模和仿真,而其他设计工程师使用Modelica建立物理系统模型.长期以来,大量的知识已经以Simulink模型的方式累积下来,如果把这些模型用Modelica重写,十分耗费时间和精力.基于Modelica语言在多领域建模和仿真中的广泛应用以及未来发展趋势,可以考虑将控制系统Simulink模型转换成Modelica模型,使系统模型在统一的Modelica平台下进行仿真.有学者提出一种“模块映射”方案,通过在Modelica平台中建立与Simulink基本模块对应的模型库元件,并按照Simulink模型模块和连接关系,用Modelica 元件代替Simulink模块并复现连接关系,实现模型转换.[2-3]这种方案依赖于专门定制的Modelica模型库元件.然而,部分Simulink基本模块,如积分模块等,有多种变形模式,要设计一种Modelica元件与其对应的难度很大.对此,本文提出一种基于Simulink模型代码生成和Modelica外部类和函数接口实现Simulink模型到Modelica模型转换的新方案. 1 模型转换原理

java的基本数据类型有八种

java的基本数据类型有八种 各位读友大家好!你有你的木棉,我有我的文章,为了你的木棉,应读我的文章!若为比翼双飞鸟,定是人间有情人!若读此篇优秀文,必成天上比翼鸟! java的基本数据类型有八种四类八种基本数据类型1. 整型byte(1字节)short (2个字节)int(4个字节)long (8个字节)2.浮点型float(4个字节)double(8个字节)3.逻辑性boolean(八分之一个字节)4.字符型char(2个字节,一个字符能存储下一个中文汉字)基本数据类型与包装类对应关系和默认值short Short (short)0int Integer 0long Long 0Lchar Char '\u0000'(什么都没有)float Floa t0.0fdouble Double 0.0dboolean Boolean false 若某个类的某个成员是基本数据类型,即使没有初始化,java也会确保它获得一个默认值,如上所示。(这种初始化方法只是用于成员变量,不适用于局部变量)。jdk1.5支持自动拆装箱。可以将基本数据类型转换成它的包装类装箱Integer a = new Integer ();a = 100;拆箱int b = new Intger(100);一个字节等于8位,一个字节等于256个数,-128到127一个英文字母或一个阿拉伯数字就是一个字符,占用一个字节一个汉字两个字符,占用两个字节基本数据类型自动转换byte->short , char->int->longfloat->doubleint ->floatlong->double小可转大,大转小会失去精度。字符串与基本类型或其他类型间的转换⑴其它

数据类型转换

数据类型转换 一、隐式类型转换 1)简单数据类型 (1)算术运算 转换为最宽的数据类型 eg: [cpp] view plain copy #include using std::cout; using std::endl; int main(int argc, char* argv[]) { int ival = 3; double dval = 3.14159; cout << ival + dval << endl;//ival被提升为double类型 return 0; } 其运行结果: 6.14159 int main(int argc, char* argv[]) { 010D17D0 push ebp 010D17D1 mov ebp,esp 010D17D3 sub esp,0DCh 010D17D9 push ebx 010D17DA push esi 010D17DB push edi 010D17DC lea edi,[ebp-0DCh] 010D17E2 mov ecx,37h 010D17E7 mov eax,0CCCCCCCCh 010D17EC rep stos dword ptr es:[edi] int ival = 3; 010D17EE mov dword ptr [ival],3 double dval = 3.14159; 010D17F5 movsd xmm0,mmword ptr [__real@400921f9f01b866e (010D6B30h)]

010D17FD movsd mmword ptr [dval],xmm0 cout << ival + dval << endl;//ival被提升为double类型 010D1802 mov esi,esp 010D1804 push offset std::endl > (010D1064h) 010D1809 cvtsi2sd xmm0,dword ptr [ival] 010D180E addsd xmm0,mmword ptr [dval] 010D1813 mov edi,esp 010D1815 sub esp,8 010D1818 movsd mmword ptr [esp],xmm0 010D181D mov ecx,dword ptr [_imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A (010D90A8h)] 010D1823 call dword ptr [__imp_std::basic_ostream >::operator<< (010D90A0h)] 010D1829 cmp edi,esp 010D182B call __RTC_CheckEsp (010D111Dh) 010D1830 mov ecx,eax 010D1832 call dword ptr [__imp_std::basic_ostream >::operator<< (010D90A4h)] 010D1838 cmp esi,esp 010D183A call __RTC_CheckEsp (010D111Dh) return 0; 010D183F xor eax,eax } 010D1841 pop edi } 010D1842 pop esi 010D1843 pop ebx 010D1844 add esp,0DCh 010D184A cmp ebp,esp 010D184C call __RTC_CheckEsp (010D111Dh) 010D1851 mov esp,ebp 010D1853 pop ebp 010D1854 ret (2)赋值 转换为被赋值对象的类型,但不会改变赋值对象的数据类型。 eg: [cpp] view plain copy #include

复杂过程控制系统设计与Simulink仿真

银河航空航天大学 课程设计 (论文) 题目复杂过程控制系统设计与Simulink仿 真 班级 学号 学生姓名 指导教师

目录 0. 前言 (1) 1. 总体方案设计 (2) 2. 三种系统结构和原理 (3) 2.1 串级控制系统 (3) 2.2 前馈控制系统 (3) 2.3 解耦控制系统 (4) 3. 建立Simulink模型 (5) 3.1 串级 (5) 3.2 前馈 (5) 3.3 解耦 (7) 4. 课设小结及进一步思想 (15) 参考文献 (15) 附录设备清单 (16)

复杂过程控制系统设计与Simulink仿真 姬晓龙银河航空航天大学自动化分校 摘要:本文主要针对串级、前馈、解耦三种复杂过程控制系统进行设计,以此来深化对复杂过程控制系统的理解,体会复杂过程控制系统在工业生产中对提高产品产量、质量和生产效率的重要作用。建立Simulink模型,学习在工业过程中进行系统分析和参数整定的方法,为毕业设计对模型进行仿真分析及过程参数整定做准备。 关键字:串级;前馈;解耦;建模;Simulink。 0.前言 单回路控制系统解决了工业过程自动化中的大量的参数定制控制问题,在大多数情况下这种简单系统能满足生产工艺的要求。但随着现代工业生产过程的发展,对产品的产量、质量,对提高生产效率、降耗节能以及环境保护提出了更高的要求,这便使工业生产过程对操作条件要求更加严格、对工艺参数要求更加苛刻,从而对控制系统的精度和功能要求更高。为此,需要在单回路的基础上,采取其它措施,组成比单回路系统“复杂”一些的控制系统,如串级控制(双闭环控制)、前馈控制大滞后系统控制(补偿控制)、比值控制(特殊的多变量控制)、分程与选择控制(非线性切换控制)、多变量解耦控制(多输入多输出解耦控制)等等。从结构上看,这些控制系统由两个以上的回路构成,相比单回路系统要多一个以上的测量变送器或调节器,以便完成复杂的或特殊的控制任务。这类控制系统就称为“复杂过程控制系统”,以区别于单回路系统这样简单的过程控制系统。 计算机仿真是在计算机上建立仿真模型,模拟实际系统随时间变化的过程。通过对过程仿真的分析,得到被仿真系统的动态特性。过程控制系统计算机仿真,为流程工业控制系统的分析、设计、控制、优化和决策提供了依据。同时作为对先进控制策略的一种检验,仿真研究也是必不可少的步骤。控制系统的计算机仿真是一门涉及到控制理论、计算机数学与计算机技术的综合性学科。控制系统仿真是以控制系统的模型为基础,主要用数学模型代替实际控制系统,以计算机为工具,对控制系统进行实验和研究的一种方法。在进行计算机仿真时,十分耗费时间与精力的是编制与修改仿真程序。随着系统规模的越来越大,先进过程控制的出现,就需要行的功能强大的仿真平台Math Works公司为MATLAB提供了控制系统模型图形输入与仿真工具Simulink,这为过程控制系统设计与参数整定的计算与仿真提供了一个强有力的工具,使过程控制系统的设计与整定发生了革命性的变化。

锁相环Simulink仿真模型

锁相环学习总结 通过这段的学习,我对锁相环的一些基本概念、结构构成、工作原理、主要参数以及simulink 搭建仿真模型有了较清晰的把握与理解,同时,在仿真中也出现了一些实际问题,下面我将对这段学习中对锁相环的认识和理解、设计思路以及中间所遇到的问题作一下总结: 1. 概述 锁相环(PLL )是实现两个信号相位同步的自动控制系统,组成锁相环的基本部件有检相器(PD )、环路滤波器(LF )、压控振荡器(VCO ),其结构图如下所示: 2. 锁相环的基本概念和重要参数指标 锁相是相位锁定的简称,表示两个信号之间相位同步。若两正弦信号如下所示: 相位同步是指两个信号频率相等,相差为一固定值。 ) (sin )sin()()(sin )sin()('t U t U t u t U t U t u o o o o o i i i i i θθωθθω=+==+=

当i ω=o ω,两个信号之间的相位差 为一固定值, 不 随时间变化而变化,称两信号相位同步。 当i ω≠o ω,两个信号的相位差 ,不论i θ 是否等于o θ,只要时间有变化,那么相位差就会随时间变化而 变化,称此时两信号不同步。若这两个信号分别为锁相环的输入和输出,则此时环路出于失锁状态。 当环路工作时,且输入与输出信号频差在捕获带范围之内,通过环路的反馈控制,输出信号的瞬时角频率)(t v ω便由o ω向i ω方向变化,总会有一个时刻使得i ω=o ω,相位差等于0或一个非常小的常数,那么此时称为相位锁定,环路处于锁定状态。若达到锁定状态后,输入信号频率变化,通过环路控制,输出信号也继续变化 并向输入信号频率靠近,相位差保持在一个固定的常数之内,则称环路此时为跟踪状态。锁定状态可以认为是静态的相位同步,而跟踪状态则为动态的相位同步。 环路从失锁进入到锁定状态称为捕获状态。 其他几个环路工作时的重要概念: 快捕带:能使环路快捕入锁的最大频差称为环路的快捕带,记为 L ω?,两倍的快捕带为快捕范围。 捕获带:能使环路进入锁定的最大固有频差,用P ω?表示,两倍的捕获带为捕获范围。 同步带:环路在所定条件下,可缓慢增加固有频差,直到环路失锁,把能够维持环路锁定的最大固有频差成为同步带,用H ω?, o i t t θθθθ-=-)()('o i o i t t t θθωωθθ-+-=-)()()('

C++基本数据类型转换

atof(将字符串转换成浮点型数) 相关函数 atoi,atol,strtod,strtol,strtoul 表头文件 #include 定义函数 doubleatof(const char *nptr); 函数说明 atof()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回。参数nptr字符串可包含正负号、小数点或E(e)来表示指数部分,如123.456或123e-2。 返回值 返回转换后的浮点型数。 附加说明 atof()与使用strtod(nptr,(char**)NULL)结果相同。 范例 /* 将字符串a 与字符串b转换成数字后相加*/ #include main() { char *a=”-100.23”; char *b=”200e-2”; float c; c=atof(a)+atof(b); printf(“c=%.2f\n”,c); } 执行 c=-98.23 atoi(将字符串转换成整型数) 相关函数 atof,atol,atrtod,strtol,strtoul 表头文件 #include

定义函数 intatoi(const char *nptr); 函数说明 atoi()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回。 返回值 返回转换后的整型数。 附加说明 atoi()与使用strtol(nptr,(char**)NULL,10);结果相同。 范例 /* 将字符串a 与字符串b转换成数字后相加*/ #include mian() { char a*+=”-100”; ch ar b*+=”456”; int c; c=atoi(a)+atoi(b); printf(c=%d\n”,c); } 执行 c=356 atol(将字符串转换成长整型数) 相关函数 atof,atoi,strtod,strtol,strtoul 表头文件 #include 定义函数 longatol(const char *nptr); 函数说明 atol()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回。 返回值 返回转换后的长整型数。 附加说明 atol()与使用strtol(nptr,(char**)NULL,10);结果相同。 范例

数据类型转换

数据类型转换 各类整数之间的转换 C语言中的数分8位、16位和32位三种。属于8 位数的有:带符号 字符char,无符号字符unsigned char 。属于16位数的有:带符号整 数int,无符号整数unsigned int(或简写为unsigned),近指针。属 于32位数的有:带符号长整数long,无符号长整数 unsigned long, 远指针。 IBM PC是16位机,基本运算是16位的运算,所以,当8位数和16 位数进行比较或其它运算时,都是首先把8 位数转换成16位数。为了 便于按2的补码法则进行运算,有符号8位数在转换为16位时是在左边 添加8个符号位,无符号8位数则是在左边添加8个0。当由16位转换成 8位时,无论什么情况一律只是简单地裁取低8位,抛掉高8 位。没有 char或usigned char常数。字符常数,像"C",是转换为int以后存储 的。当字符转换为其它 16 位数(如近指针)时,是首先把字符转换为 int,然后再进行转换。 16位数与32位数之间的转换也遵守同样的规则。 注意,Turbo C中的输入/输出函数对其参数中的int和unsigned int不加区分。例如,在printf函数中如果格式说明是%d 则对这两种 类型的参数一律按2 的补码(即按有符号数)进行解释,然后以十进制 形式输出。如果格式说明是%u、%o、%x、%X,则对这两种类型的参数 一律按二进制 (即按无符号数) 进行解释,然后以相应形式输出。在 scanf函数中,仅当输入的字符串中含有负号时,才按2的补码对输入 数进行解释。 还应注意,对于常数,如果不加L,则Turbo C一般按int型处理。 例如,语句printf("%081x",-1L),则会输出ffffffff。如果省略1, 则输出常数的低字,即ffff。如果省略L,则仍会去找1个双字,这个 双字的就是int常数-1,高字内容是不确定的,输出效果将是在4个乱 七八糟的字符之后再跟ffff。 在Turbo C的头文件value.h中,相应于3 个带符号数的最大值, 定义了3个符号常数: #define MAXSHORT 0X7FFF #define MAXINT 0X7FFF #define MAXLONG 0X7FFFFFFFL 在Turbo C Tools中,包括3对宏,分别把8位拆成高4位和低4位, 把16位拆成高8位和低8位,把32位拆成高16位和低16位。 uthinyb(char value) utlonyb(char value) uthibyte(int value) utlobyte(int value) uthiword(long value) utloword(long valueu) 在Turbo C Tools中,也包括相反的3 个宏,它们把两个4位组成 一个8位,把两个8位组成一个16位,把两个16位组成一个32位。 utnybbyt(HiNyb,LoNyb) utwdlong(HiWord,Loword) utbyword(HiByte,LoByte)实数与整数之间的转换 Turbo C中提供了两种实数:float和 double。float 由32 位组 成,由高到低依次是:1个尾数符号位,8个偏码表示的指数位(偏值= 127),23个尾数位。double由64位组成,由高到低依次是:1 个尾数

实验四 PID控制系统的Simulink

自动控制理论 上 机 实 验 报 告 学院:机电工程学院 班级:13级电信一班 姓名: 学号:

实验四 PID 控制系统的Simulink 仿真分析 一、实验目的和任务 1.掌握PID 控制规律及控制器实现。 2.掌握用Simulink 建立PID 控制器及构建系统模型与仿真方法。 二、实验原理和方法 在模拟控制系统中,控制器中最常用的控制规律是PID 控制。PID 控制器是一种线性控制器,它根据给定值与实际输出值构成控制偏差。PID 控制规律写成传递函数的形式为a s K s Ki K s T s T K s U s E s G d p d i p ++=++==)11()()()( 式中,P K 为比例系数;i K 为积分系数;d K 为微分系数;i p i K K T = 为积分时间常数;p d d K K T =为微分时间常数; 简单来说,PID 控制各校正环节的作用如下: (1)比例环节:成比例地反映控制系统的偏差信号,偏差一旦产生,控制器立 即产生控制作用,以减少偏差。 (2)积分环节:主要用于消除静差,提高系统的无差度。积分作用的强弱取决 于积分时间常数i T ,i T 越大,积分作用越弱,反之则越强。 (3)微分环节:反映偏差信号的变化趋势(变化速率),并能在偏差信号变得太大之前,在系统中引入一个有效的早期修正信号,从而加快系统的动作速度,减少调节时间。 三、实验使用仪器设备 计算机、MATLAB 软件 四、实验内容(步骤) 1、在MATLAB 命令窗口中输入“simulink ”进入仿真界面。 2、构建PID 控制器:(1)新建Simulink 模型窗口(选择“File/New/Model ”),在Simulink Library Browser 中将需要的模块拖动到新建的窗口中,根据PID 控制器的传递函数构建出如下模型:

MATLAB与C#数据类型转换

以下是本人编程中总结的一些思路,拿出来与大家共享。不对之处,请留言说明。 版本:Matlab R2007b,Visual Studio2005 C++/C#数据类型到M类型 此方向转换十分简单。 如果C++/C#数据不是数组, ?直接将值传递给已经初始化的MWArray数组中的成员 ?直接将数据类型赋值给已经初始化的MWNumericArray变量。 ?直接将字符串类赋值给已经初始化的MWCharArray变量。 如果是数组类型: ?直接赋值给MWNumericArray变量; ?赋值给MWArray变量,则在前面加上类型转换如:(MWNumericArray)进行强制转换。 总之,MWArray是总类型,其它的以MW开头,以Array结尾的变量类型都可以直接对它进行赋值或取值。 M类型到C++/C#数据类型 MWArray M类型,它是M文件的编译后内部的标准类型,一切C++/C#类型都要最终转换成此类型,方可作为参数调用M语言函数。 MWCharArray M的字符串类型,使用它可以将M中的字符类型转换成C++/C#的字符串类型。 MWNumericArray MWNumericArray是MWArray与C#等语言的转换中间类型。 常用的转换函数: ①public Array ToArray(MWArrayComponent component); 将M类型转换成C#的Array类型,然后可以直接转换成其它类型的数组。 ②public byte ToScalarByte();

将M类型转换成C#的字节类型; ③public double ToScalarDouble(); 将M类型转换成C#的双精度类型; double temp=((MWNumericArray)(mwArgout[0])).ToScalarDouble(); ④public float ToScalarFloat(); 将M类型转换成C#的单精度类型; ⑤public int ToScalarInteger(); 将M类型转换成C#的整型类型; ⑥public long ToScalarLong(); 将M类型转换成C#的长整C/C++/C#数据型类型; ⑦public short ToScalarShort(); 将M类型转换成C#的短整型类型; ⑧public override string ToString(); 将M类型转换成C#的字符串类型;string arror=mwArgout[2].ToString(); ⑨public Array ToVector(MWArrayComponent component); 将M类型转换成C#的Array类型,然后可以直接转换成其它类型的数组。 下面使用调试过的代码示例表述①⑨两个函数的区别: ① double[,]Temp1=new double[1,3]; Temp1=(double[,])((MWNumericArray)mwArgout[1]).ToArray(MWArrayComponent.Real);⑨ double[]s1=new double[2]; s1=(double[])((MWNumericArray)mwArgout[1]).ToVector(MWArrayComponent.Real);

Java语言基本数据类型、转换及其封装

Java语言基本数据类型、转换及其封装Java语言基本数据类型、转换及其封装 1. 逻辑类型 ·常量 true,false。 ·变量的定义 使用关键字boolean来定义逻辑变量: boolean x; boolean tom_12; 也可以一次定义几个: boolean x,tom,jiafei,漂亮 x,tom,jiafei,漂亮都是变量的名字。定义时也可以赋给初值: boolean x=true,tom=false,漂亮=true,jiafei 2.整数类型 ·常量123,6000(十进制),077(八进制),0x3ABC(十六进制)。 ·整型变量的定义分为4种: 1.int 型 使用关键字int来定义int型整形变量 int x int tom_12 也可以定义几个: int x,tom,jiafei,漂亮 x,tom,jiafei,漂亮都是名字。定义时也可以赋给初值: int x=12,tom=-1230,漂亮=9898,jiafei 对于int型变量,分配给4个字节byte,一个字节由8位(bit)组成,4个字节占32位(bit)。bit 有两状态,分别用来表示0,1。这样计算机就可以使用2进制数来存储信息了。内存是一种特殊的电子元件,如果把内存条放大到摩天大

楼那么大,那么它的基本单位——字节,就好比是大楼的房间,每个房间的结构都是完全相同的,一个字节由8个能显示两种状态的bit组成,就好比每个房间里有8个灯泡,每个灯泡有两种状态——亮灯灭灯。 对于 int x=7; 内存存储状态如下: 00000000 00000000 00000000 00000111 最高位:左边的第一位,是符号位,用来区分正数或负数,正数使用原码表示,最高位是0,负数用补码表示,最高位是1。例如: int x=-8; 内存的存储状态如下: 11111111 11111111 11111111 11111000 要得到-8的补码,首先得到7的原码,然后将7的原码中的0变成1,1变成0,就是-8的补码。 因此,int型变量的取值范围是-2^31~2^31-1。 2. byte型 使用关键字byte来定义byte型整型变量 byte x ; byte tom_12; 也可以一次定义几个: byte x,tom,jiafei,漂亮 x,tom,jiafei,漂亮都是名字。定义时也可以赋给初值: byte x=-12,tom=28,漂亮=98,jiafei 注:对于byte型变量,内存分配给1个字节,占8位,因此byte型变量的取值范围是: -2^7~2^7-1。

相关文档
最新文档