柴油发电机组转速控制半物理仿真

发布者:中华古风最新更新时间:2010-02-02 来源: 现代电子技术关键字:实时工作间  半物理仿真  Simulink  Visual  C++ 手机看文章 扫描二维码
随时随地手机看文章
1 引言

    电子调速器是柴油机的关键部件之一,当实际柴油机及其负载性能发生变化且与调速器设计参数不匹配时,柴油发电机组就无法正常工作,这时需要修改调速器的控制参数。另外,电子调速器在出厂前和维修后都需要进行性能试验,以设定合适的控制参数满足其调节性能。在柴油机上直接进行电子调速器的参数整定、性能测试、维修后性能恢复既不安全、又不经济。进行半物理仿真是调速器进行实际配机试验之前不可缺少的环节,其工程思路是建立柴油机发电机组全工作范围动态仿真模型,通过输入输出接口电路与电子调速器相连构成一闭环控制系统,从而完成电子调速器的性能测试的相关试验。

    建立柴油发电机组的仿真模型是Simulink的强项。由于半物理仿真系统需要连接特定的硬件设备,仿真程序需要定制人机界面实现参数设置等功能,这部分功能的实现对于Simulink来讲则难以完成,而这恰恰是Visual C++(VC)的强项。VC可视化C++编程环境具有强大的硬件控制功能和灵活丰富的人机界面设计功能。但直接采用VC建立柴油发电机组的仿真模型则难度很大。

    针对这一问题本文提供一种从Simulink仿真模型平滑过渡到Visual C++集成开发环境的方法。具体实现是在Simulink中建立柴油发电机组的仿真模型,然后通过Matlab实时工作间(RTW)将Simulink仿真模型转化成可移植的嵌入式C++代码,最后和Visual C++的项目文件进行整合构成完全独立运行的实时半物理仿真系统。

2 柴油发电机组模型的构建及半物理仿真系统结构

    柴油机的建模一般有2种途径,一种是数学机理建模,一种是试验辨识建模。数学机理建模主要从柴油机各部件的原始特性和结构参数入手,根据动力学和热力学关系方程建立机理模型其建模的工作量大,计算复杂而且为模型的求解带来一定的难度。试验辨识建模是根据柴油机试验台试验数据,采用不同的数学拟合方法建立柴油机的数学模型。对于研究电子调速器参数整定以及配机试验,这里关心柴油机外部性能参数的关系,可以不考虑柴油机内部的热力过程。只要柴油发电机组仿真模型能较真实地模拟柴油机及其负载特性,则测试结果就能较为真实地反映出电子调速器的实际配机性能。

  因此选用试验辨识建模法,应用BP神经网络建立柴油机发电机组模型。如图1所示。MTU396柴油发电机组转速控制半物理仿真系统的输人输出信号,主要有3种类型:

(1)脉宽调制(PWM)信号,即执行机构齿条驱动信号;

(2)频率信号,即模拟柴油转速脉冲信号;

(3)开关量信号,即对电子调速器的各种控制信号,如启动、停止、增速减速控制等。

   本系统选用研华的PCI-1780计数器卡,他提供8个16位计数器通道8路数字量输出和8路数字量输入,可以满足上述需要。如图2所示。

3 半物理仿真系统的实现

3.1 利用RTW生成可移植的C++模型代码

   RTW是Matlab图形建模和仿真环境Simulink的一个重要的补充功能模块,简而言之,他是一个基于Simulink的代码自动生成环境。他能直接从Simulink的模型中产生优化的,可移植的代码以加速仿真系统开发的过程和降低研发成本。

    RTW能把Simulink模型中的某些参数或信号设置为全局变量,模型自动生成的可执行代码在目标系统中运行时,可以方便地与Simulink模型交互,实现在线参数调整和信号通讯。利用RTW这种功能,可把模型中需要调整、监测的参数或者信号设置为全局变量。这些变量构成后面所述VC仿真程序中模块间交互的桥梁。

    RTW支持多种目标,所以RTW自动生成C++模型代码有多种选择,对于VC而言有3种目标可以选择:通用实时(GRT)目标、通用实时Malloc(GRTM)目标、嵌入式目标。通用实时(GRT)目标采用实时代码格式,其内存的分配在编译时被静态声明。通用实时Malloc(GRTM)目标采用实时Malloc代码格式,他与实时代码格式非常相似,主要的区别在于实时malloc代码格式对内存进行动态声明。嵌入式目标可按嵌入式代码格式生C++代码,在运行速度、内存使用量和简化等方面都进行了优化。嵌入式代码采用静态内存分配方式。本文选择嵌入式目标来自动生成嵌入式代码。

    RTW自动生成的代码分为2部分:一部分是模型代码;另一部分是代码运行界面(run-time interface)。这些代码被切分成很多源代码文件,为了管理这个庞大的项目,RTW还为其自动生成一个make文件。用VC打开make文件并编译,然后将此项目中引用的所有源文件从Matlab安装目录中复制出来,并和模型代码共同组成仿真模型代码。

3.2 模型代码和VC程序的集成

    模型代码同VC程序整合过程比较简单,把3.1节仿真运算模块所有涉及的源文件添加到VC程序项目中,需要注意2点:仿真模块的源文件添加到VC程序项目后默认应用预编译头文件选项,必须手工取消此项设置否则编译出错;为了需要在VC程序中调用仿真代码的接口函数需要进行全局声明。

3.3 VC中仿真系统进一步开发与整合

    半物理仿真软件一般由人机界面模块、数据采集模块、仿真运算模块、数据处理模块组成。MTU396柴油发电机组转速控制半物理仿真系统原理如图3所示。下面简单介绍各模块的实现过程。

(1)人机界面模块的实现

    人机界面模块构成了VC程序的主线程,主要完成变量的实时显示、参数在线调整、控制参数设置和程序的运行控制等功能,其他模块都由他来调度。本系统中涉及的实时变量有柴油机转速、齿杆位移、柴油机负载等,笔者分别设计了转速表、棒图、趋势曲线、调整滑杆、功能按钮等图元,充分利用面向对象方法的封装、继承等特点实现整个图元库,从而提高了软件系统的可修改性、可重用性和可扩展性。

(2)数据采集模块的实现

    数据采集模块通过PCI-1780设备卡同电子调速器进行数据交互,电子调速器的供油量信号以脉宽调制(PWM)的形式由PCI-1780设备卡传给仿真程序,仿真程序通过仿真计算把柴油机的转速以频率信号的形式经PCI-1780设备卡反馈给电子调速器。数据采集模块由厂家提供的设备驱动API函数实现。

(3)仿真运算模块的实现

    仿真运算模块在RTW转化韵仿真模型代码基础上还要加入仿真同步控制,以满足仿真的实时性要求。实时性的关键就是I/O数据定时的准确性。众所周知Windows不是实时操作系统而是多任务的操作系统,采用VC编制的仿真程序很难实现硬件中断,采用软件定时是比较可行的方法,因为现在的计算机速度都很快,能够保证一般硬件在回路仿真的实时性的需要。

    VC中实现精确定时基本上有2种方法:①使用多媒体定时器。他使用单独线程调用一个特殊的回调函数优先级很高,最小定时间隔为1ms能够满足一般实时任务的定时要求。②使用高性能计数器。在Windows2000中由硬件实现高精度的计数器(high-resolution performancecounter),利用他可以获得高精度的定时间隔。由于本应用中电子调速器输出频率为80 Hz,本文选择多媒体计时器实现仿真控制,定时间隔选为2 ms。即多媒体定时器每隔2 ms就在其回调函数中调用模型代码接口函数rt_On-eStep(模型单步运算),保证整个仿真的向前推进,满足系统实时性要求。仿真运算模块完成模型实时计算是整个系统的核心。

(4)数据处理模块的实现

    数据处理模块完成仿真数据的实时记录和定时保存功能。为了满足数据记录的实时性,仿真程序采用了多线程的技术,将数据定时保存功能放在独立的数据保存线程中执行。数据处理线程和主线程的之间的同步由事件信号驱动。在C++标准模板库(STL),deque容器基础上创建了CPointsCollection类来完成数据的实时记录和定时保存。采用的策略是:CPointsCollection首先在内存中开辟2块缓冲区。第一缓冲区数据放满后,数据开始存放到第二缓冲区,然后主线程同时通知数据保存线程将第一缓冲区中的数据采用VC序列化功能保存到硬盘的文本文件中;等第二缓冲区数据放满后,数据开始存放到第一缓冲区,主线程同时通知数据保存线程将第二缓冲的数据保存到硬盘的文本文件中,这样依次循环保证数据记录的实时性。为了验证利用该方法开发的半物理仿真系统的有效性,运行该系统与R082电子调速器物理连接进行配机试验,仿真结果表明仿真系统相应符合理论分析结果。限于篇幅给出空载起动运行时的运行界面。如图4所示。

4 结 语

    结合科研实例详细介绍一种基于RTW和VisualC++的半物理仿真系统快速开发方法,该方法充分利用Simulink和Visual C++各自的优势。首先利用Simulink可视化的建模方法建立系统的仿真模型,然后通过RTW将Simulink仿真模型转化成可移植的嵌入式C++代码,最后利用Visual C++灵活的可定制性和强大的界面功能实现完全独立运行的实时半物理仿真系统。该仿真程序在Visual C++环境下可以对仿真程序方便的进行调试a与传统设计方法相比这种方法具有费用低、效率高的特点。

关键字:实时工作间  半物理仿真  Simulink  Visual  C++ 引用地址:柴油发电机组转速控制半物理仿真

上一篇:基于TMC428的步进电机控制系统设计
下一篇:基于BLDC的新型五自由度并联机器人运动控制

推荐阅读最新更新时间:2024-03-30 21:30

ARM汇编语言与C/C++的混合编程
ARM公司不生产芯片,而是出售核(如ARM9)给硬件厂商,硬件厂商添加一些外围器件,就成了芯片(如s3c2440)。 ARM汇编语言与C/C++的混合编程 - 在C/C++代码中嵌入汇编指令 在C/C++中使用内嵌的汇编指令语法格式: 使用关键字_ _asm来标识一段汇编指令程序 _ _asm {undefined 汇编语言程序 ~~~~~~~~~~ 汇编语言程序 } 例C1.C #include stdio.h void my_strcpy(const char *src, char *dest) {undefined char ch; _ _asm
[单片机]
基于Linux和S3C2410的嵌入式图象传输系统设计
1 引言 如何更好的获得监控现场的图象数据一直是棘手的一个问题,传统的方法是采用CCD摄象机获取现场的视频信息,这种方法易于实现,但成本较高。随着ARM系列处理器应用的越来越广和基于linux的嵌入式技术的迅速发展,利用linux自身带有的TCP/IP协议来实现远程监控、图象传输已成为可能。本文提出的正是一种这样的方法,利用市场上很常见的中星微系列的USB摄象头来得到现场的图象数据,利用linux内核中的Video4Linux编程接口函数采集图象,并把得到的图象通过Internet传输到上位机PC上,在PC上实现图象的保存和显示。 2 硬件系统设计原理 系统的硬件功能框图如图1所示,CPU采用的是三星公司的S3C2410。该
[嵌入式]
OpenCV2.0.0移植到ARM9(五)(JZ2440----S3c2440)
Linux系统:Ubuntu9.10 交叉编译器:arm-linux-gcc-4.3.2(已安装) Qt:qt-x11-opensource-src-4.5.3.tar.gz qt-embedded-linux-opensource-src-4.5.3.tar.gz 1、安装Qt Qt下载地址:https://www.qt.io/download-open-source/ 这里下载的安装包为:qt-embedded-linux-opensource-src-4.5.3.tar.gz(大小123MB) 2、安装Qt-x11 将qt-x11-opensource-src-4.5.3.tar.gz包放到U
[单片机]
OpenCV2.0.0移植到ARM9(五)(JZ2440----S3<font color='red'>c</font>2440)
基于32位ARM嵌入式微控制器S3C2440来构建太阳跟踪系统
  基于计算机视觉原理,以ARM微控制器为核心构建嵌入式图像处理平台,实现了对太阳的实时跟踪。系统采用CMOS图像传感器采集太阳图像,通过微控制器计算太阳角度,通过串口控制转台,实现对太阳的高精度跟踪。同时,与视日运动规律相结合,保证系统的可靠性。试验表明,该系统在降低系统能耗的同时,能可靠有效地跟踪太阳运动。   随着社会的发展和进步,环保节能已经成为人类可持续发展的必要条件。目前,再生能源的开发和利用越来越受到人们的关注。太阳能由于其普遍、无害、无限、长久等特点,成为最绿色、最理想、最可靠的替代能源。但太阳能同时存在分散,不稳定,效率低等特点,太阳能光伏系统为解决这一问题提供了条件。   就目前的太阳能光伏系统而言,如何最
[单片机]
基于32位ARM嵌入式微控制器S3<font color='red'>C</font>2440来构建太阳跟踪系统
点亮LED灯(STC89C52RC芯片)
点亮第一个LED灯 1.看懂局部的led电路原理图,在看懂原理图的基础之上,熟悉那个接口比如 P2几 熟悉它的底层电路逻辑。 2.使用keil5一定要新建一个文件夹 在该文件里面 写程序 防止散落,使用C语言,导入头文件, 生成hex 运行 。 3.使用stc-isp程序烧录,其中板子的型号要相对应,比如烧录进去的板子是STC89C52RC芯片,注意RC不能掉 4.每次创建工程时 都要点击创建生成hex文件 5.延时的时候直接找那个stc-isp程序的延时计算器函数注意系统频率一定要调至12Mhz. 8051指令集也要修改至适应于89C52系列的Y1。 6.注意在闪烁LED灯时,单片机内部程序逻辑是这样的,不加延时函数,它会亮灭
[单片机]
点亮LED灯(STC89<font color='red'>C</font>52RC芯片)
24C02在PIC单片机系统中的应用
MICROCHIP公司的PIC16系列单片机以其精简的指令和较强的端口驱动能力在各个领域得到广泛的应用。在需要储存较大数量数据的控制领域,24C02可以解决PIC16C8 系列单片机片内EEPROM不足的问题,用以保存诸如用户设置参数、采集到的数据等。 由于部分PIC单片机不具备I2C总线接口,在应用时必须用软件法加以解决。 在软件编制时应当严格遵循I2C总线规则,并注意24C02的片内读写周期时间,调整好程序流程,以避免写不进、读不出的问题。 下面将笔者在实际工作中遇到的问题和解决的方法进行简单的介绍,希望可以给同行一些帮助。 首先约定,数据由微处理器发送到24C02称 写 、 发 ,反之称 读 、
[单片机]
华为新专利惹人爱:Type-C接口防腐蚀技术,怎么用都不怕坏
目前智能手机大多采用防泼溅设计,但Type-C接口难免会遇到诸如汗液或雨水进入的情况。此时Type-C接口的触点很有可能随着时间的推移,出现表面腐蚀的现象,进而影响我们的日常使用。 华为新专利 为了解决这项问题,各大厂商在接口设计上也下了不少功夫。近期,华为一项名为“一种终端及Type C接口防腐蚀方法”的专利正式公布。通过专利描述来看,该技术通过运动传感器监测设备状态,在确定终端的运动状态由移动状态进入静止状态时,控制接口芯片将第一Type-C接口的CC引脚配置为低电平模式。 在终端中,处理器分别与运动传感器和接口芯片连接,接口芯片分别与处理器和第一Type-C接口中的CC引脚连接。通过运动传感器,
[手机便携]
华为新专利惹人爱:Type-<font color='red'>C</font>接口防腐蚀技术,怎么用都不怕坏
C语言中的变量详解
先说说变量的作用域,比如,在函数中,形参变量只是在被调用期间才分配内存单元,调用结束立即释放。这就说明形参变量只有在函授内才是有效的,离开该函数就不能再使用了。 这种变量有效性的范围称为变量的作用域。当然不仅仅是形参变量,在C中所有的量都有自己的作用域。 C中的变量,按作用域可分为两种,局部变量和全局变量。 局部变量: 也称内部变量。局部变量是在函数内做定义说明的,其作用域仅限于函数内部,离开函数后再使用这种变量是非法的。 如: void delay(unsigned int x) { unsigned char i,j; //i j 的作用域只是在delay函数内 } 关于局部变量的作用域的几点说
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
最新工业控制文章
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved