simulink code 交换两个变量的值

Simulink code 交换两个变量的值

引言
Simulink 方便建立算法模型,仿真和部署;那么能不能精确控制模型生成的代码,实现和手写代码的高度一致。比如实现交换两个变量的值:

float a;
float b;
void Exchange( float* a, float* b)
{
	float c ;
	c = *a;
	*a = *b;
	*b = c;
}

以上代码显示,定义两个浮点型变量,定义函数void Exchange( float* a, float* b);通过传引用的的方式改变两个参数的值。

实现过程如下:

建立simulink 模型

1. 建立一个简单的模型,两个输入,两个输出,输入接口和输出接口交错连接;
在这里插入图片描述
生成代码:

/* External inputs (root inport signals with default storage) */
ExtU rtU;

/* External outputs (root outports fed by signals with default storage) */
ExtY rtY;

/* Model step function */
void copy_step(void)
{
  /* Outport: '<Root>/Out1' incorporates:
   *  Inport: '<Root>/In2'
   */
  rtY.Out1 = rtU.In2;

  /* Outport: '<Root>/Out2' incorporates:
   *  Inport: '<Root>/In1'
   */
  rtY.Out2 = rtU.In1;
}

默认情况下,代码生成的是一个没有参数的函数,数据交互依靠全局变量;同时输入和输出不是同一个变量;不符合要求;

2. 使用代码接口,更改函数名,输入参数;
1代码接口;2默认代码配置;3function;
在这里插入图片描述
4点击这个函数;5给函数重新命名;6勾选;7给对应的端口命名a b;8确认。
在这里插入图片描述

生成代码

/* Model step function */
void Exchange(float *a, float *b)
{
  float b_1_0;

  /* Outport: '<Root>/Out2' incorporates:
   *  Outport: '<Root>/Out1'
   */
  b_1_0 = *a;

  /* Outport: '<Root>/Out1' incorporates:
   *  Outport: '<Root>/Out2'
   */
  *a = *b;

  /* Outport: '<Root>/Out2' */
  *b = b_1_0;
}

此时生成的代码已经非常接近我们手写的要求了,但是函数内部变量float b_1_0 不是我们希望的c;

3. 添加数据储存类
修改模型如下:
在这里插入图片描述
通过添加数据储存变量,代替默认的中间变量;
代码如下:

/* Model step function */
void Exchange(float *a, float *b)
{
  float c;

  /* DataStoreWrite: '<Root>/Data Store Write1' */
  c = *a;

  /* Outport: '<Root>/Out1' incorporates:
   *  DataStoreRead: '<Root>/Data Store Read'
   *  DataStoreWrite: '<Root>/Data Store Write'
   */
  *a = *b;

  /* Outport: '<Root>/Out2' incorporates:
   *  DataStoreRead: '<Root>/Data Store Read1'
   */
  *b = c;
}

此时生成的代码和我们的手写代码完全一致。

调用Exchange函数

下面演示如何调用我们生成的Exchange函数,实现变量值的交换。

未完待续!!!

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Simulink中,状态变量的初始是指在仿真开始时为模型定义的状态变量赋予的初始。状态变量是描述系统动态行为的变量,如位置、速度、角度等。在模型仿真开始时,指定合适的初始对于得到准确和稳定的仿真结果至关重要。 在Simulink中设置状态变量的初始有几种不同的方法。一种方法是在模型中手动添加“Initial State”块,然后在块参数中设置初始。这种方法适用于简单的模型,其中只有少量的状态变量需要进行初始化。 另一种方法是使用“Solver Configuration”对话框来设置初始。通过在“Model Configuration Parameters”窗口中选择“Solver”选项卡,可以找到“Initial state”配置选项。在这里,可以手动输入每个状态变量的初始,也可以通过提供一个或多个MATLAB变量来设置。 此外,还可以通过使用MATLAB脚本编程的方式来设置状态变量的初始。通过在MATLAB脚本中定义和设置初始,并将其与Simulink模型连接起来,可以实现更高级的初始化方法。这种方法适用于复杂的模型,其中存在大量的状态变量,并且需要根据特定的条件设置初始。 无论使用哪种方法,设置状态变量的初始都是为了确保在仿真开始时系统处于正确的初始状态。通过适当设置初始,可以更准确地模拟和分析系统的动态行为,并获得准确的仿真结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值