Matlab Stateflow中结构体(struct)的使用

1、新建结构体类型

形如:

// An highlighted block
typedef struct
{
  uint8_T Gain;
  int16_T Offset;
  uint16_T Init;
}
myParamsType;

脚本实现方法:

// An highlighted block
myParamsType = Simulink.Bus;
myParamsType.Description = '';
myParamsType.DataScope = 'Auto';
myParamsType.HeaderFile = '';
myParamsType.Alignment = -1;
saveVarsTmp{1} = Simulink.BusElement;
saveVarsTmp{1}.Name = 'Gain';
saveVarsTmp{1}.Complexity = 'real';
saveVarsTmp{1}.Dimensions = [1 1];
saveVarsTmp{1}.DataType = 'uint8';
saveVarsTmp{1}.Min = [];
saveVarsTmp{1}.Max = [];
saveVarsTmp{1}.DimensionsMode = 'Fixed';
saveVarsTmp{1}.SamplingMode = 'Sample based';
saveVarsTmp{1}.SampleTime = -1;
saveVarsTmp{1}.DocUnits = '';
saveVarsTmp{1}.Description = '';
saveVarsTmp{1}(2, 1) = Simulink.BusElement;
saveVarsTmp{1}(2, 1).Name = 'Offset';
saveVarsTmp{1}(2, 1).Complexity = 'real';
saveVarsTmp{1}(2, 1).Dimensions = [1 1];
saveVarsTmp{1}(2, 1).DataType = 'int16';
saveVarsTmp{1}(2, 1).Min = [];
saveVarsTmp{1}(2, 1).Max = [];
saveVarsTmp{1}(2, 1).DimensionsMode = 'Fixed';
saveVarsTmp{1}(2, 1).SamplingMode = 'Sample based';
saveVarsTmp{1}(2, 1).SampleTime = -1;
saveVarsTmp{1}(2, 1).DocUnits = '';
saveVarsTmp{1}(2, 1).Description = '';
saveVarsTmp{1}(3, 1) = Simulink.BusElement;
saveVarsTmp{1}(3, 1).Name = 'Init';
saveVarsTmp{1}(3, 1).Complexity = 'real';
saveVarsTmp{1}(3, 1).Dimensions = [1 1];
saveVarsTmp{1}(3, 1).DataType = 'uint16';
saveVarsTmp{1}(3, 1).Min = [];
saveVarsTmp{1}(3, 1).Max = [];
saveVarsTmp{1}(3, 1).DimensionsMode = 'Fixed';
saveVarsTmp{1}(3, 1).SamplingMode = 'Sample based';
saveVarsTmp{1}(3, 1).SampleTime = -1;
saveVarsTmp{1}(3, 1).DocUnits = '';
saveVarsTmp{1}(3, 1).Description = '';
myParamsType.Elements = saveVarsTmp{1};
clear saveVarsTmp;

运行完上述脚本语言,就可以在workspace中出现myParamsType结构体数据类型了,如下:
在这里插入图片描述
注:
还可以通过Simulink Data Dictionary进行新建,详见另一篇文章:
《Matlab Stateflow中枚举(enmu)的使用》

2、新建变量

新建一个结构体变量与两个uint8类型的变量
如下:
在这里插入图片描述
在这里插入图片描述

3、简单功能使用示例

图片如下:
在这里插入图片描述
在这里插入图片描述

4、生成的代码示例

前提将该stateflow设置成uint,然后对Function name进行自定义,
代码如下:

// An highlighted block
void MyStruct(const myParamsType *rtu_In, uint8_T rtu_index, B_MyStruct_T
              *localB)
{
  int32_T tmp;

  /* Chart: '<S1>/Chart' */
  if (rtu_index == 1)
  {
    tmp = rtu_In->Gain + 1;
    if (tmp > 255)
    {
      tmp = 255;
    }

    localB->r = (uint8_T)tmp;
  }
  else if (rtu_index == 2)
  {
    tmp = (rtu_In->Gain + 3) << 1;
    if (tmp > 255)
    {
      tmp = 255;
    }

    localB->r = (uint8_T)tmp;
  }
  else if (rtu_index == 3)
  {
    tmp = (rtu_In->Gain + 5) * 3;
    if (tmp > 255)
    {
      tmp = 255;
    }

    localB->r = (uint8_T)tmp;
  }
  else
  {
    tmp = (rtu_In->Gain + rtu_In->Init) + rtu_In->Offset;
    if (tmp < 0)
    {
      tmp = 0;
    }
    else
    {
      if (tmp > 255)
      {
        tmp = 255;
      }
    }

    localB->r = (uint8_T)tmp;
  }

  /* End of Chart: '<S1>/Chart' */
}

以上,仅为本人自用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值