整理使用AMESIM进行控制策略仿真验证Word文件下载.docx

上传人:b****3 文档编号:6299525 上传时间:2023-05-06 格式:DOCX 页数:13 大小:587.13KB
下载 相关 举报
整理使用AMESIM进行控制策略仿真验证Word文件下载.docx_第1页
第1页 / 共13页
整理使用AMESIM进行控制策略仿真验证Word文件下载.docx_第2页
第2页 / 共13页
整理使用AMESIM进行控制策略仿真验证Word文件下载.docx_第3页
第3页 / 共13页
整理使用AMESIM进行控制策略仿真验证Word文件下载.docx_第4页
第4页 / 共13页
整理使用AMESIM进行控制策略仿真验证Word文件下载.docx_第5页
第5页 / 共13页
整理使用AMESIM进行控制策略仿真验证Word文件下载.docx_第6页
第6页 / 共13页
整理使用AMESIM进行控制策略仿真验证Word文件下载.docx_第7页
第7页 / 共13页
整理使用AMESIM进行控制策略仿真验证Word文件下载.docx_第8页
第8页 / 共13页
整理使用AMESIM进行控制策略仿真验证Word文件下载.docx_第9页
第9页 / 共13页
整理使用AMESIM进行控制策略仿真验证Word文件下载.docx_第10页
第10页 / 共13页
整理使用AMESIM进行控制策略仿真验证Word文件下载.docx_第11页
第11页 / 共13页
整理使用AMESIM进行控制策略仿真验证Word文件下载.docx_第12页
第12页 / 共13页
整理使用AMESIM进行控制策略仿真验证Word文件下载.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

整理使用AMESIM进行控制策略仿真验证Word文件下载.docx

《整理使用AMESIM进行控制策略仿真验证Word文件下载.docx》由会员分享,可在线阅读,更多相关《整理使用AMESIM进行控制策略仿真验证Word文件下载.docx(13页珍藏版)》请在冰点文库上搜索。

整理使用AMESIM进行控制策略仿真验证Word文件下载.docx

DYNEXE0是一个用于与外部应用程序进行交互的接口模块.模块的左侧端口和右侧端口分别代表其输入和输出.在库中选择该模块时,便可对输入和输出数量以及外部应用程序的整型参数和实型参数的数量进行定义,如下图所示。

需要注意的是,DYNEXE0不会对参数的有效性进行验证。

验证必须在外部程序中完成。

参数在仿真开始时被发送到应用程序中,AMESIM通过特殊“管道”与外部程序进通讯。

通讯采用AMESIM内部的“OpenPipe”应用进行初始化。

注意:

AMESIM必须采用C++编译器才能使用DYNEXE0模块!

用法

由于一般的控制系统都是MIMO系统,因此必须采用DYNMUX2和DYNDMUX2与DYNEXE0进行连接,如下图所示即为一个5输入5输出系统。

示例

以如下图所示正流量挖掘机控制策略验证为例。

正流量挖掘机控制策略的输入为9个先导压力和2个主泵压力,还有2个主泵反馈电流,以及一个仿真时间输入(后面会讲到它的作用);

输出为2个主泵电流和4个优先控制电流。

图中的DYNEXE0模块实际为一个15输入10输出系统,多出的输入和输出端口不使用即可。

控制策略实现

控制策略在外部应用程序中实现。

应用程序代码可在VisualStudio环境中采用标准C语言编写,并引用AMESIM提供的头文件.

编程环境设置

以VisualStudio2010为例,按以下步骤设置编程环境。

Step1:

新建项目。

在VisualStudio中新建一个名为ZE230EEP的C++空项目,如下图所示。

点击确定之后,VisualStudio生成如下图所示窗口。

窗口左侧为解决方案资源管理器,可以看到新建的项目“ZE230EEP”已经列在了解决方案树形目录下。

Step2:

添加源文件。

右键点击解决方案资源管理器中的“源文件”项,依次选择“添加"

、“新建项”菜单,出现如下图所示对话框。

从对话框中添加一个名称为“Controller.cpp”的C++文件,点击确定。

Step3:

配置项目属性.右键点击解决方案资源管理器中的项目名,选择属性菜单,出现如下图所示对话框。

切换到“C/C++"

目录项,点击“常规”条目,在右侧的“附加包含目录”中添加“D:

\AMESim\v1300\lib”路径,即AMESIM的安装目录。

路径必须使用标准绝对路径,而不能使用环境变量!

再切换到“高级”条目,在“编译为”选项中选择“编译为C代码(/TC)”,如下图所示。

然后切换到“链接器”目录项,点击“常规”条目,在“附加库目录”中添加“D:

\AMESim\v1300\lib\win32”路径,如下图所示.

再切换到“输入”条目,在“附加依赖项"

中添加“AME.lib”,在“忽略特定默认库”中添加“MSVCRTD。

lib"

,如下图所示。

最后点击“确定”,完成项目的配置.

Step4:

在源代码中添加AMESIM头文件。

双击打开Controller.cpp,这是一个空白文件,在文件中添加以下代码:

#include<

signal.h>

#include〈stdio。

h〉

stdlib。

h>

#include〈math.h〉

#include<

ameutils。

以上五个头文件都是项目必须的,前四个为编程环境自带,而ameutils。

h由AMESIM提供。

添加后,可以看到解决方案资源管理器的“外部依赖项”目录中多了很多头文件,且VisualStudio的自动代码检查并未报错,表明ameutils。

h已经被项目所识别。

源代码结构说明

#include〈signal。

#include〈stdio。

stdlib.h〉

#include〈math。

#include〈ameutils。

/*TODO:

添加需要包含的额外头文件*/

/*例如:

*/

function。

h〉//可将自定义函数写在function.h里面

/*常量定义*/

/*注意:

此处定义的参数及变量数量必须与AMESIM模型中DYNEXE0模块定义的数量保持一致*/

#defineNUM_IP1//整型参数数量

#defineNUM_RP2//实型参数数量

#defineNUM_INPUTS2//输入数量

#defineNUM_OUTPUTS2//输出数量

/*TODO:

添加需要定义的其它常量*/

#defineGRAVITY9。

81

#definePI3.1416

/*TODO:

也可在此位置添加所需的自定义函数,而不放在function.h里*/

/*例如最大值函数:

staticdoubleMax(double_x,double_y)

return_x〉_y?

_x:

_y;

/*主函数*/

intmain()

{

intnum_rp=NUM_RP;

intnum_ip=NUM_IP;

intnum_inputs=NUM_INPUTS;

intnum_outputs=NUM_OUTPUTS;

/*数组iparam用于存储整型参数*/

intfile[2],iparam[NUM_IP],flag;

/*数组rparam用于存储实型参数,数组input用于存储控制策略的输入,数组output用于存储控制策略的输出*/

doublerparam[NUM_RP],input[NUM_INPUTS],output[NUM_OUTPUTS];

/*TODO:

添加与控制算法有关的程序内部参数、内部变量定义,以及内部变量的初始化*/

/*例如:

intcontrol_mode;

//整型参数

doubleKc;

//实型参数

doublecurrent_max;

doublespeed=0;

//内部变量

doublepressure=0;

doublecurrent_pump=0;

doublecurrent_motor=0;

/*连接AMESIM模型*/

/*将AMESIM模型DYNEXE0模块中定义的实型参数读入到rparam数组中,整型参数读入到iparam数组中*/

connec_(file,&num_rp,rparam,&

num_ip,iparam,&num_inputs,&num_outputs);

/*TODO:

将模型参数赋值给之前定义的内部参数,以便从参数名即可获知参数的意义*/

*/

control_mode=iparam[0];

Kc=rparam[0];

Current_max=rparam[1];

/*循环执行控制策略算法逻辑*/

while

(1)

{

/*从AMESIM获取输入,并将其存储到数组input中*/

getinp_(&(file[0]),&

num_inputs,input,&flag);

/*TODO:

将input数组中的元素赋值给内部变量,以便从变量名即可获知变量的意义*/

/*例如:

speed=input[0];

pressure=input[1];

/*TODO:

添加控制策略的算法逻辑*/

/*TODO:

将算法输出赋值给output数组中的元素*/

/*例如:

output[0]=current_pump;

output[1]=current_motor;

/*向AMESIM发送输出*/

senout_(&(file[1]),&num_outputs,output);

return0;

仿真步长与控制周期

AMESIM采用的是变步长仿真机制,每个仿真步长内,外部程序中的控制算法逻辑都会被执行一次。

但是实际电液控制系统中,控制算法逻辑具有固定的控制周期,比如0。

01s,即控制算法每0。

01s才执行一次,输出也是每0.01s即更新一次。

如果仿真步长与控制周期不一致(绝对会不一致),就极有可能导致仿真结果出现谬误。

为了解决上述问题,必须从AMESIM建模和控制策略实现两方面进行改进。

首先,为DYNEXE0模块增加一个仿真时间采样输入(必须使用零阶保持器),如下图所示。

并将采样器的采样时间设置为与控制周期一致。

这样一来,AMESIM的仿真步长就会被限制在控制周期以内(仿真步长不大于控制周期),且必然有一部分仿真时刻与控制时刻重合。

再在源代码中插入一段代码:

doubletime=—1;

connec_(file,&num_rp,rparam,&num_ip,iparam,&num_inputs,&

num_outputs);

getinp_(&

(file[0]),&

num_inputs,input,&

flag);

if(input[0]==time)//input[0]为仿真时间采样输入

senout_(&(file[1]),&num_outputs,output);

continue;

}

time=input[0];

这段代码的意义是:

当本次仿真时刻与上次仿真时刻相等(零阶保持器特性)时,表明下一控制时刻仍未来临,仿真输出与上一控制周期相同;

否则,表明下一控制时刻已经来临,则按照控制算法逻辑计算新的仿真输出,同时更新time变量.

使用上述方法能很好的消除仿真步长与控制周期不一致带来的麻烦,但有的时候,当AMESIM求解器设置的打印间隔(printinterval)与控制周期相等时,仿真结果会出现异常(可能是AMESIM的BUG),这时将前述仿真时间采样器的偏置参数(offset,默认为0)设置为采样时间的一半即可.

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 外语学习 > 韩语学习

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2