Matlab Stateflow中枚举(enmu)的使用

1、新建枚举类型

形如:

// An highlighted block
typedef enum
{
  NM_AllCh = 0,                        /* Default value */
  NM_LinCh,
  NM_VehicleCanCh,
  NM_InternalCanCh,
  NM_ChMax
}
NetWokM_Type;

在matlab中新建的方法:
方法一,脚本新建:

  1. 新建脚本
  2. 键入如下代码:
classdef  NetWokM_Type < Simulink.IntEnumType 
  enumeration
      NM_AllCh            (0)
      NM_LinCh            (1)
      NM_VehicleCanCh     (2)
      NM_InternalCanCh    (3)
      NM_ChMax            (4)
  end
end

并将脚本名称改为NetWokM_Type

方法二,使用Simulink Data Dictionary新建:

  1. 新建数据字典
    在这里插入图片描述
    在这里插入图片描述

  2. 将数据字典与模型关联
    打开“Model Explorer”,点击“File”,选择“Open”,选择刚刚新建的数据字典"EnumDic.sldd",这样模型就与数据字典进行了关联。

  3. 新建枚举类型
    在“Model Explorer”中,选中“EnumDic”中的“Design Data”
    然后做如下操作:
    在这里插入图片描述
    在这里插入图片描述

2、新建变量

新建一个枚举型变量
如下:
在这里插入图片描述
在这里插入图片描述

3、简单功能使用示例

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

4、生成的代码示例

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

void MyEnum(const myParamsType *rtu_In, NetWokM_Type rtu_index, B_MyEnum_T
            *localB)
{
  int32_T tmp;

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

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

    localB->r = (uint8_T)tmp;
  }
  else if (rtu_index == NM_LinCh)
  {
    tmp = (rtu_In->Gain + 5) * 7;
    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: '<Root>/Chart1' */
}

以上,仅为本人自用。

  • 5
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值