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' */
}
以上,仅为本人自用。