代码生成 | Simulink搭建保护原型函数

BMS保护包括过充保护、过流保护、高温保护等等保护类型较多,但是如果用函数封装的角度去理解,大多数保护类型函数原型是一样的,只不过传入函数的参数不同而已,这样我们就可以用Simulink把这样一类保护做成通用的模块然后传入不同的保护参数再返回报警等级实现业务逻辑功能。

保护分类

按照以上分析把保护类型分为高触发保护(以下简称高保护)和低触发保护,高触发保护是采样值比设定阈值高触发的告警保护,同理低触发保护是采样值比阈值低触发的保护。我们先来实现高保护。

 

第一步:新建空模型文件命名为protect。

 

代码生成 | Simulink搭建保护原型函数

其中阈值和采样值比较逻辑我们采用stateflow实现,

 

第二步:模型中加入Chart模块

 

代码生成 | Simulink搭建保护原型函数

 

第三步:写逻辑

 

圆圈代表节点,直线是传输,{}里面的语句为执行,[]里面的语句为判断。先看下下面这条语句,当采样值大于设定阈值之后,开始计时当计时够了之后报警标志位置1

代码生成 | Simulink搭建保护原型函数

接着把逻辑做完

代码生成 | Simulink搭建保护原型函数

这样我们就把判断逻辑做完了下面我们验证下模型;

 

第四步:设置输入、输出、本地参数类型;

 

代码生成 | Simulink搭建保护原型函数

 

第五步:验证模型

 

设置几个输入参数,仿真看下结果,输入给一个变化的正弦输入,幅值设置为5000,这样变化的信号可以遍历工况;

代码生成 | Simulink搭建保护原型函数

可以看到当输入大于4000时经过延时告警值置位,当小于3000时经过延时告警值复位,当小于阈值时告警一直为0,符合预期的逻辑;

代码生成 | Simulink搭建保护原型函数

 

第六步:封装模型

 

模型测试好了再封装一层

代码生成 | Simulink搭建保护原型函数

这样把模型封装成一个子模块

 

第七步:应用。

 

现在原型函数就做好了可以根据传入参数完成电压、电流、温度的保护告警去应用了

代码生成 | Simulink搭建保护原型函数

 

第八步:生成代码

 

生成代码的配置可以去代码生成 | 安时积分法模型搭建查看;

代码生成 | Simulink搭建保护原型函数

可以看到生成的代码逻辑很严谨很清晰。

好了,高保护已经做完了,大家可以尝试搭建下低保护的子模块。

 

生命不息、学习不止,加油!

 

代码生成 | Simulink搭建保护原型函数