船舶混合动力系统联合仿真模型 AMESim+Simulink 虚拟资料(双层模糊控制策略)
包含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 kW
gen_LNG.U_dc = 750; % 输出电压 750 V

% 柴油主机参数
engine_diesel.P_max = 5000e3; % 最大功率 5000 kW
engine_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(comment='Co-Simulation Architecture', format='png')
dot.attr(rankdir='TB', fontsize='12', fontname='SimHei')  # 从上到下布局

# --- 定义节点样式 ---
# 外部输入 (白色方框)
dot.node('input1', '主机、气体发电机n特性曲线', shape='rect', style='filled', fillcolor='white', fontname='SimHei')
dot.node('input2', '功率转速n和油耗排n放关系', shape='rect', style='filled', fillcolor='white', fontname='SimHei')
dot.node('input3', '需求功率n预测及电n池SOC', shape='rect', style='filled', fillcolor='white', fontname='SimHei')

# AMESim 模块 (虚线框需要通过 subgraph 模拟)
with dot.subgraph(name='cluster_amesim') as c:
    c.attr(label='AMESim搭建船舶混合动力系统模型', color='black', style='dashed', fontname='SimHei')
    c.attr(rank='same')
    # 内部组件
    c.node('comp1', '主机模型', shape='rect', style='filled', fillcolor='#E0FFFF', fontname='SimHei')
    c.node('comp2', '气体发n电机模型', shape='rect', style='filled', fillcolor='#E0FFFF', fontname='SimHei')
    c.node('comp3', '电池模型', shape='rect', style='filled', fillcolor='#E0FFFF', fontname='SimHei')
    c.node('comp4', '轴带电n机模型', shape='rect', style='filled', fillcolor='#E0FFFF', fontname='SimHei')
    c.node('comp5', '传动n轴系', shape='rect', style='filled', fillcolor='#E0FFFF', fontname='SimHei')
    c.node('comp6', '负载模型', shape='rect', style='filled', fillcolor='#E0FFFF', fontname='SimHei')

    # 设置内部布局
    c.edge('comp1', 'comp2', style='invis') # 强制横向排列
    c.edge('comp2', 'comp3', style='invis')
    c.edge('comp3', 'comp4', style='invis')
    c.edge('comp4', 'comp5', style='invis')
    c.edge('comp5', 'comp6', style='invis')

# AMESim 设置步骤 (下方的一排)
with dot.subgraph(name='cluster_settings') as c:
    c.attr(style='invis') # 隐藏边框
    c.node('step1', '搭建物理n模型', shape='rect', fontname='SimHei')
    c.node('step2', '子模型选n择', shape='rect', fontname='SimHei')
    c.node('step3', '模型参数n设置', shape='rect', fontname='SimHei')
    c.node('step4', '交互模块n设置', shape='rect', fontname='SimHei')
    c.edge('step1', 'step2')
    c.edge('step2', 'step3')
    c.edge('step3', 'step4')

# 联合仿真控制 (橙色/绿色部分)
dot.node('joint', '联合仿真', shape='rect', style='filled', fillcolor='#FFDAB9', fontname='SimHei') # 橙色
dot.node('step_size', '仿真步长设置', shape='rect', fontname='SimHei')
dot.node('time_set', '仿真时间设置', shape='rect', fontname='SimHei')

# Simulink 模块 (绿色)
dot.node('simulink', 'Simulink中能量管理策略模型', shape='rect', style='filled', fillcolor='#98FB98', fontname='SimHei')

# --- 定义连线 (Edges) ---

# 输入 -> AMESim
dot.edge('input1', 'cluster_amesim')
dot.edge('input2', 'cluster_amesim')
dot.edge('input3', 'cluster_amesim')

# AMESim 内部流向
dot.edge('cluster_amesim', 'step1', label='模型仿真数据', fontname='SimHei')

# 设置 -> 联合仿真
dot.edge('step4', 'joint', style='bold')
dot.edge('step_size', 'joint')
dot.edge('time_set', 'joint')

# 联合仿真  Simulink (双向)
dot.edge('joint', 'simulink', dir='both', arrowhead='normal')

# Simulink -> AMESim (反馈)
dot.edge('simulink', 'cluster_amesim', label='策略分配数据', fontname='SimHei')

# 渲染并保存
dot.render('co_simulation_architecture', view=True)
print("图表已生成: co_simulation_architecture.png")

if name == ‘main’:
create_co_simulation_diagram()

代码逻辑解析

这段代码完全复刻了图片中的工作流逻辑:

输入层:定义了主机特性、油耗关系、功率预测三个外部输入源。
物理层(AMESim):
使用 cluster 创建了一个虚线框区域,代表 AMESim 环境。
包含了主机、发电机、电池、轴带电机、传动系和负载六个核心物理模型。
下方定义了建模的标准步骤:搭建物理模型 → 子模型选择 → 参数设置 → 交互设置。
控制层(Simulink):
底部的绿色模块代表 Simulink 中的控制策略。
交互逻辑:
联合仿真模块负责同步时间步长。
数据流向:AMESim 将“模型仿真数据”(如转速、SOC)发送给 Simulink;Simulink 计算后,将“策略分配数据”(如目标扭矩、功率指令)反馈回 AMESim。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐