船舶混合动力系统联合仿真模型 AMESim+Simulink 虚拟资料(双层模糊控制策略)

张开发
2026/4/12 11:48:19 15 分钟阅读

分享文章

船舶混合动力系统联合仿真模型 AMESim+Simulink 虚拟资料(双层模糊控制策略)
船舶混合动力系统联合仿真模型 AMESimSimulink 虚拟资料(双层模糊控制策略)包含AMESim主机模型、LNG气体发电机模型、柴油主机模型、轴带电机模型、电池模型、传动轴系模型、负载模型Simulink能量管理策略模型支持主机、发电机、电池、电机等联合仿真适合船舶动力系统、混合动力、船舶动力学、船舶工程、船舶动力学等专业学习、研究、课程设计使用。资料内容AMESim模型文件、Simulink模型文件、FIS文件、操作说明文档模型结构清晰参数可调仿真流程完整适合自学和项目参考。Block Diagram的物理仿真模型系统架构解析发电侧左侧1# LNG气体发电机 / 2# LNG气体发电机双燃料或纯气体发动机驱动的发电机组作为主电源。1# 柴油主机传统的柴油发动机可能既用于推进也用于发电PTO/PTI模式。储能与配电侧中间直流母线系统的核心能量枢纽连接发电端和用电端。电池通过 DC/DC变换器 连接到直流母线用于削峰填谷或应急供电。1# 轴带电机 / 2# 轴带电机既可以作为电动机驱动螺旋桨也可以作为发电机回收能量。推进侧右侧齿轮箱包含多个离合器1#、2#、3#离合器和高/低俗齿轮组用于切换动力传输路径。螺旋桨包含1#和2#螺旋桨产生推力克服船舶阻力。控制与负载最右侧船舶阻力计算船体在水中的阻力模型。信号交互模块处理各个子系统之间的数据通信。MATLAB 初始化代码示例%% 船舶混合动力系统仿真初始化脚本% 此脚本用于定义系统参数对应图片中的各个模块clear; clc; close all;%% 1. 船舶主尺度与阻力参数 (对应右侧“船舶阻力”模块)ship.Lpp 100; % 垂线间长 (m)ship.B 15; % 型宽 (m)ship.T 5; % 吃水 (m)ship.Cb 0.6; % 方型系数ship.Rho_water 1025;% 海水密度 (kg/m^3)% 阻力系数模型 (简化版)ship.Cd 0.002; % 摩擦阻力系数%% 2. 动力源参数 (对应左侧发电机组)% LNG 发电机参数gen_LNG.P_rated 2000e3; % 额定功率 2000 kWgen_LNG.U_dc 750; % 输出电压 750 V% 柴油主机参数engine_diesel.P_max 5000e3; % 最大功率 5000 kWengine_diesel.n_rated 600; % 额定转速 rpm%% 3. 储能系统参数 (对应中间电池模块)battery.Capacity 1000; % 电池容量 (Ah)battery.V_nominal 600; % 标称电压 (V)battery.SOC_init 0.8; % 初始荷电状态 80%%% 4. 推进电机与齿轮箱参数 (对应中间及右侧)motor_shaft.P_max 1500e3; % 轴带电机最大功率gearbox.ratio_high 2.5; % 高速齿轮比gearbox.ratio_low 4.0; % 低速齿轮比% 离合器状态 (0断开, 1闭合)clutch(1).state 0;clutch(2).state 0;clutch(3).state 0;%% 5. 仿真设置sim_time 3600; % 仿真时长 1小时 (s)solver_type ‘ode45’; % 求解器类型% 将变量写入工作区供Simulink模型调用assignin(‘base’, ‘ship’, ship);assignin(‘base’, ‘gen_LNG’, gen_LNG);assignin(‘base’, ‘engine_diesel’, engine_diesel);assignin(‘base’, ‘battery’, battery);assignin(‘base’, ‘motor_shaft’, motor_shaft);assignin(‘base’, ‘gearbox’, gearbox);assignin(‘base’, ‘clutch’, clutch);disp(‘系统参数初始化完成请运行Simulink模型。’);如何获取此类模型如果你需要构建图中的具体模型通常需要使用 MATLAB/Simulink 配合 Simscape Driveline 或 Simscape Electrical 工具箱。打开 Simulink新建模型。从 Simscape 库中拖入 Engine、Generator、Battery 模块。使用 DC/DC Converter 模块连接电池和直流母线。使用 Clutch 和 Gearbox 模块搭建机械传动链。编写 MATLAB Function 模块来实现“船舶阻力”的计算公式通常与速度的平方成正比。混合动力船舶的能量管理策略模型具体是在 MATLAB/Simulink 环境下搭建的。左侧的图标带有交叉箭头是一个 Stateflow 图用于处理复杂的逻辑状态切换例如判断何时开启柴油机、何时使用电池。中间部分包含延时模块、增益模块以及一个名为 “First level control” 的模糊逻辑或查表控制器用于计算功率分配。。MATLAB 自动建模代码你可以将以下代码复制到 MATLAB 的脚本.m 文件中运行它会自动创建一个名为 HybridShipControl 的模型并还原图中的基本结构。function create_hybrid_ship_model% 1. 创建新模型modelName ‘HybridShipControl’;new_system(modelName);open_system(modelName);%% 2. 添加左侧输入端口 (Inports) % 对应图中的 P_lpg3, P_lpg2, P_lpg1, P_diesel, P_motor inputs {P_lpg3, P_lpg2, P_lpg1, P_diesel, P_motor}; colors {magenta, blue, yellow, red, cyan}; % 对应图中的颜色 for i 1:length(inputs) % 添加输入模块 add_block(simulink/Sources/In1, [modelName /In_ num2str(i)], ... Position, [30, 40 (i-150, 60, 70 (i-1)50], ... Name, inputs{i}, ... BackgroundColor, colors{i}); end %% 3. 添加 Stateflow 逻辑模块 (左侧大方块) % 这是一个 Stateflow 图用于逻辑判断 add_block(stateflow/sf, [modelName /Hybrid Logic], ... Position, [120, 30, 220, 230], ... Name, Hybrid ship of model in AMEsim); %% 4. 添加中间控制链路模块 % 4.1 延时模块 (Delay) add_block(simulink/Discrete/Delay, [modelName /Delay], ... Position, [280, 60, 310, 90], ... Name, Delay); % 4.2 增益模块 (Gain 1/2) - 对应图中的三角形 add_block(simulink/Math Operations/Gain, [modelName /Gain_Half], ... Position, [450, 50, 480, 80], ... Gain, 1/2); % 4.3 一级控制器 (First level control) - 假设是模糊逻辑或查表 add_block(simulink/User-Defined Functions/Fcn, [modelName /First level control], ... Position, [420, 120, 480, 160], ... Name, First level control, ... IconShape, rectangle); % 设置为矩形以匹配图片 % 4.4 加法器 (Sum) add_block(simulink/Math Operations/Sum, [modelName /Sum_Junction], ... Position, [350, 100, 370, 120], ... Inputs, ); % 两个输入 % 4.5 输出端口 (Outports) add_block(simulink/Sinks/Out1, [modelName /Out_P_motor], ... Position, [580, 100, 610, 130], ... Name, P_motor); %% 5. 连接模块 (Wiring) % 连接 Stateflow 输出到 Delay add_line(modelName, Hybrid Logic/1, Delay/1); % 连接 Delay 到 Sum add_line(modelName, Delay/1, Sum_Junction/1); % 连接 Sum 到 Gain add_line(modelName, Sum_Junction/1, Gain_Half/1); % 连接 Gain 到 输出 add_line(modelName, Gain_Half/1, Out_P_motor/1); % 连接 Stateflow 到 First level control (示意) add_line(modelName, Hybrid Logic/2, First level control/1); % 自动整理布局 Simulink.BlockDiagram.arrangeSystem(modelName);代码逻辑解析输入层代码首先创建了 5 个输入端口In1分别命名为 P_lpg3, P_lpg2 等并设置了背景颜色以匹配原图品红、蓝、黄等。核心逻辑层添加了一个 Stateflow 模块stateflow/sf这通常用于编写复杂的有限状态机逻辑比如判断船舶是在“巡航模式”还是“加速模式”。控制层Delay (z^{-1})用于引入一个采样周期的延迟在数字控制中很常见。Gain (1/2)那个三角形模块是一个增益模块这里设置为 0.5可能是为了平均分配功率。联合仿真Co-Simulation架构流程图用于混合动力船舶的能量管理研究。它描述了 AMESim用于搭建复杂的船舶物理系统模型与 Simulink用于搭建能量管理控制策略之间的交互逻辑。Python 绘图代码# 创建一个有向图设置字体以支持中文 dot Digraph(commentCo-Simulation Architecture, formatpng) dot.attr(rankdirTB, fontsize12, fontnameSimHei) # 从上到下布局 # --- 定义节点样式 --- # 外部输入 (白色方框) dot.node(input1, 主机、气体发电机n特性曲线, shaperect, stylefilled, fillcolorwhite, fontnameSimHei) dot.node(input2, 功率转速n和油耗排n放关系, shaperect, stylefilled, fillcolorwhite, fontnameSimHei) dot.node(input3, 需求功率n预测及电n池SOC, shaperect, stylefilled, fillcolorwhite, fontnameSimHei) # AMESim 模块 (虚线框需要通过 subgraph 模拟) with dot.subgraph(namecluster_amesim) as c: c.attr(labelAMESim搭建船舶混合动力系统模型, colorblack, styledashed, fontnameSimHei) c.attr(ranksame) # 内部组件 c.node(comp1, 主机模型, shaperect, stylefilled, fillcolor#E0FFFF, fontnameSimHei) c.node(comp2, 气体发n电机模型, shaperect, stylefilled, fillcolor#E0FFFF, fontnameSimHei) c.node(comp3, 电池模型, shaperect, stylefilled, fillcolor#E0FFFF, fontnameSimHei) c.node(comp4, 轴带电n机模型, shaperect, stylefilled, fillcolor#E0FFFF, fontnameSimHei) c.node(comp5, 传动n轴系, shaperect, stylefilled, fillcolor#E0FFFF, fontnameSimHei) c.node(comp6, 负载模型, shaperect, stylefilled, fillcolor#E0FFFF, fontnameSimHei) # 设置内部布局 c.edge(comp1, comp2, styleinvis) # 强制横向排列 c.edge(comp2, comp3, styleinvis) c.edge(comp3, comp4, styleinvis) c.edge(comp4, comp5, styleinvis) c.edge(comp5, comp6, styleinvis) # AMESim 设置步骤 (下方的一排) with dot.subgraph(namecluster_settings) as c: c.attr(styleinvis) # 隐藏边框 c.node(step1, 搭建物理n模型, shaperect, fontnameSimHei) c.node(step2, 子模型选n择, shaperect, fontnameSimHei) c.node(step3, 模型参数n设置, shaperect, fontnameSimHei) c.node(step4, 交互模块n设置, shaperect, fontnameSimHei) c.edge(step1, step2) c.edge(step2, step3) c.edge(step3, step4) # 联合仿真控制 (橙色/绿色部分) dot.node(joint, 联合仿真, shaperect, stylefilled, fillcolor#FFDAB9, fontnameSimHei) # 橙色 dot.node(step_size, 仿真步长设置, shaperect, fontnameSimHei) dot.node(time_set, 仿真时间设置, shaperect, fontnameSimHei) # Simulink 模块 (绿色) dot.node(simulink, Simulink中能量管理策略模型, shaperect, stylefilled, fillcolor#98FB98, fontnameSimHei) # --- 定义连线 (Edges) --- # 输入 - AMESim dot.edge(input1, cluster_amesim) dot.edge(input2, cluster_amesim) dot.edge(input3, cluster_amesim) # AMESim 内部流向 dot.edge(cluster_amesim, step1, label模型仿真数据, fontnameSimHei) # 设置 - 联合仿真 dot.edge(step4, joint, stylebold) dot.edge(step_size, joint) dot.edge(time_set, joint) # 联合仿真 Simulink (双向) dot.edge(joint, simulink, dirboth, arrowheadnormal) # Simulink - AMESim (反馈) dot.edge(simulink, cluster_amesim, label策略分配数据, fontnameSimHei) # 渲染并保存 dot.render(co_simulation_architecture, viewTrue) print(图表已生成: co_simulation_architecture.png)if name ‘main’:create_co_simulation_diagram()代码逻辑解析这段代码完全复刻了图片中的工作流逻辑输入层定义了主机特性、油耗关系、功率预测三个外部输入源。物理层AMESim使用 cluster 创建了一个虚线框区域代表 AMESim 环境。包含了主机、发电机、电池、轴带电机、传动系和负载六个核心物理模型。下方定义了建模的标准步骤搭建物理模型 → 子模型选择 → 参数设置 → 交互设置。控制层Simulink底部的绿色模块代表 Simulink 中的控制策略。交互逻辑联合仿真模块负责同步时间步长。数据流向AMESim 将“模型仿真数据”如转速、SOC发送给 SimulinkSimulink 计算后将“策略分配数据”如目标扭矩、功率指令反馈回 AMESim。

更多文章