Simulink 柴油发电机仿真模型,柴油发电机模型报告,包含传递函数构建等,简单易懂,仿真波形完美,matlab2021b
在这里插入图片描述
在这里插入图片描述

核心动力源:中间圆形的 同步电机模块(SM 0.5 MVA),额定容量为 0.5 MVA。
控制系统:左侧的 柴油机调速与电压控制器(Diesel Engine Speed & Voltage Control),它接收参考转速和电压,控制电机的励磁和机械转矩。
信号测量与处理:右侧的 电压测量(V-I Measurement) 和下方的 信号解复用(Demux)、单位延迟(Unit Delay) 以及 示波器(Scopes),用于监测系统的输出波形。
离散设置:左上角的 离散求解器设置(Discrete solver),表明这是一个离散时间仿真系统。

MATLAB 自动建模代码

function create_diesel_gen_model()
% 1. 创建新的 Simulink 模型
modelName = ‘Diesel_Generator_System’;
new_system(modelName, ‘Model’);
open_system(modelName);

% 2. 定义添加模块的辅助函数
% 参数:源路径(留空自动查找),目标模型,位置 [左, 下, 右, 上],模块名称
add_block_custom = @(src, pos, name, params) add_block(src, [modelName '/' name], 'Position', pos, params);

%% 3. 添加核心组件

% --- 添加离散求解器配置 (左上角) ---
% 注意:Powergui 是 Simscape Electrical 的核心配置模块
add_block_custom('powerlib/powergui', [100, 50, 160, 80], 'DiscreteSolver', 'BlockType=powergui');

% --- 添加同步电机 (中间圆形模块) ---
% 对应图中的 SM 0.5 MVA
add_block_custom('powerlib/Machines/Synchronous Machine pu Standard', [300, 150, 380, 230], 'SM_0_5_MVA', 'MaskDisplay=disp([''SM 0.5 MVA''])');

% --- 添加柴油机控制器 (左侧方框) ---
% 对应图中的 Diesel Engine Speed & Voltage Control
% 这里使用一个通用的 Subsystem 占位
add_block_custom('simulink/Ports & Subsystems/Subsystem', [180, 160, 260, 220], 'Diesel_Control', 'MaskDisplay=disp([''Diesel Engine'' 10 ''Speed & Voltage Control''])');

% --- 添加电压测量模块 (电机右侧) ---
add_block_custom('powerlib/Measurements/Voltage Measurement', [420, 160, 450, 190], 'Voltage_Meas');

% --- 添加示波器 (最右侧) ---
add_block_custom('simulink/Sinks/Scope', [600, 150, 630, 180], 'Scope_Output');

% --- 添加信号处理模块 (下方) ---
% 解复用器 (Demux)
add_block_custom('simulink/Signal Routing/Demux', [350, 300, 380, 340], 'Demux_Signals');
% 单位延迟 (Unit Delay)
add_block_custom('simulink/Discrete/Unit Delay', [400, 310, 440, 330], 'Unit_Delay');

%% 4. 连接模块 (模拟图中的连线)
% 连接控制器到电机 (机械转矩和励磁)
add_line(modelName, 'Diesel_Control/1', 'SM_0_5_MVA/Tm'); % 机械输入
add_line(modelName, 'Diesel_Control/2', 'SM_0_5_MVA/Efd'); % 励磁输入

% 连接电机输出到测量
add_line(modelName, 'SM_0_5_MVA/a', 'Voltage_Meas/1');

% 连接测量到示波器
add_line(modelName, 'Voltage_Meas/1', 'Scope_Output/1');

% 连接电机测量输出 (m) 到解复用器
add_line(modelName, 'SM_0_5_MVA/m', 'Demux_Signals/1');

% 自动调整布局
Simulink.BlockDiagram.arrangeSystem(modelName);
save_system(modelName);
disp(['模型 "' modelName '" 已生成。']);

end

如何运行

打开 MATLAB。
将上述代码复制并粘贴到一个新的脚本文件中,保存为 create_diesel_gen_model.m。
确保你安装了 Simscape Electrical 工具箱。
点击“运行”按钮或在命令行输入 create_diesel_gen_model。

在这里插入图片描述
给定转速 -> 转速器 -> 调速调节器 -> 油门执行器 -> 柴油发动机 -> 同步发电机 -> 实际转速反馈),我为你编写了对应的 MATLAB/Simulink 仿真建模代码。

这段代码会自动创建一个包含调速器、执行器、柴油机和发电机闭环控制系统的 Simulink 模型。

MATLAB 自动建模代码

你可以将以下代码复制到 MATLAB 的 .m 文件中运行

function create_diesel_generator_model()
%% 1. 初始化模型
modelName = ‘Diesel_Gen_Control_Model’;
new_system(modelName, ‘Model’);
open_system(modelName);
disp(['正在创建模型: ’ modelName ‘…’]);

%% 2. 定义参数 (根据典型柴油机参数设定)
% 调速器/调节器参数
K_gov = 20;       % 调速器增益
T_gov = 0.1;      % 调速器时间常数

% 执行器 (油门) 参数
T_act = 0.05;     % 执行器时间常数

% 柴油发动机参数
T_eng = 0.5;      % 发动机时间常数 (惯性)
Delay_time = 0.1; % 喷油到做功的延迟

% 发电机/负载参数 (简化为一阶惯性)
J = 0.5;          % 转动惯量
D = 0.02;         % 阻尼系数

%% 3. 添加模块到画布
% 辅助函数:添加模块并设置位置
add_block_custom = @(src, dst, pos, paramStruct) add_and_set(src, dst, pos, paramStruct);

% --- 输入与比较点 ---
% 给定转速 (Step输入)
add_block_custom('simulink/Sources/Step', [modelName '/给定转速'], [30 30 60 50], struct('Time',1, 'Before',0, 'After',1500));

% 减法器 (Sum)
add_block_custom('simulink/Math Operations/Sum', [modelName '/转速偏差'], [100 30 120 50], struct('Inputs','+-'));

% --- 控制系统链路 ---
% 1. 转速调节器 (PI控制器简化为一阶滞后)
% 传递函数: K / (Ts + 1)
add_block_custom('simulink/Continuous/Transfer Fcn', [modelName '/转速调节器'], [160 20 200 60], ...
    struct('Numerator', num2str(K_gov), 'Denominator', ['[' num2str(T_gov) ' 1]']));

% 2. 油门执行器 (一阶惯性环节)
add_block_custom('simulink/Continuous/Transfer Fcn', [modelName '/油门执行器'], [240 20 280 60], ...
    struct('Numerator', '[1]', 'Denominator', ['[' num2str(T_act) ' 1]']));

% 3. 柴油发动机 (包含延迟和惯性)
% 这里用 Transport Delay 模拟喷油延迟
add_block_custom('simulink/Continuous/Transport Delay', [modelName '/燃烧延迟'], [320 25 350 55], struct('TimeDelay', num2str(Delay_time)));

% 发动机本体惯性
add_block_custom('simulink/Continuous/Transfer Fcn', [modelName '/柴油发动机本体'], [390 20 430 60], ...
    struct('Numerator', '[1]', 'Denominator', ['[' num2str(T_eng) ' 1]']));

% --- 发电机与反馈 ---
% 4. 同步发电机 (简化模型:转矩 -> 转速)
% 公式: 1/(Js + D)
add_block_custom('simulink/Continuous/Transfer Fcn', [modelName '/同步发电机'], [480 20 530 60], ...
    struct('Numerator', '[1]', 'Denominator', ['[' num2str(J) ' ' num2str(D) ']']));

% 5. 输出显示 (Scope)
add_block_custom('simulink/Sinks/Scope', [modelName '/转速示波器'], [600 20 630 50], struct());

% --- 建立连线 ---
% 给定转速 -> Sum(+)
add_line(modelName, '给定转速/1', '转速偏差/1');
% Sum(-) -> 转速调节器
add_line(modelName, '转速偏差/1', '转速调节器/1');
% 转速调节器 -> 油门执行器
add_line(modelName, '转速调节器/1', '油门执行器/1');
% 油门执行器 -> 燃烧延迟
add_line(modelName, '油门执行器/1', '燃烧延迟/1');
% 燃烧延迟 -> 发动机本体
add_line(modelName, '燃烧延迟/1', '柴油发动机本体/1');
% 发动机本体 -> 发电机
add_line(modelName, '柴油发动机本体/1', '同步发电机/1');
% 发电机 -> 示波器
add_line(modelName, '同步发电机/1', '转速示波器/1');

% --- 反馈回路 ---
% 发电机输出 -> Sum(-)
% 需要先折弯线
h_line = add_line(modelName, '同步发电机/1', '转速偏差/2', 'autorouting', 'on');

%% 4. 配置仿真参数
set_param(modelName, 'StopTime', '10'); % 仿真10秒
set_param(modelName, 'Solver', 'ode45');

disp('模型创建完成!点击 "Run" 开始仿真。');

end

%% 辅助子函数:用于简化代码
function add_and_set(sourcePath, destPath, position, params)
try
% 如果未指定源路径,尝试自动查找标准库
if isempty(sourcePath) || strcmp(sourcePath, ‘’)
% 这里简化处理,实际使用中最好显式指定库路径
end
add_block(sourcePath, destPath, ‘Position’, position);

    % 设置参数
    propNames = fieldnames(params);
    for i = 1:length(propNames)
        set_param(destPath, propNames{i}, params.(propNames{i}));
    end
catch ME
    warning('无法添加模块 %s: %s', destPath, ME.message);
end

end

代码逻辑说明

给定转速:使用 Step 模块模拟转速指令的突变。
转速器 & 调节器:使用 Transfer Fcn(传递函数)模块模拟调速器的动态响应。
油门执行器:模拟燃油喷射系统的滞后特性。
柴油发动机:包含了 Transport Delay(传输延迟)模块,这非常关键,因为柴油机从喷油到产生转矩是有物理延迟的。
同步发电机:将发动机输出的转矩转换为转速输出(omega)。
闭环反馈:将发电机的实际转速引回输入端,与给定转速进行比较(负反馈),形成闭环控制。

如何运行

打开 MATLAB。
新建一个脚本(Script),将上述代码粘贴进去。
保存并运行。
MATLAB 会自动弹出一个 Simulink 窗口,里面已经搭建好了这个柴油发电机组的控制系统。

在这里插入图片描述

分析图表特征:

波形:标准的正弦波。
相位:三相(Signal 1, 2, 3)依次滞后 120 度,这是典型的三相电力系统输出(如发电机或逆变器输出)。
幅值:峰值大约在 310V - 320V 之间。这对应于有效值为 220V 的交流电(220 times sqrt{2} approx 311text{V})。
频率:虽然无法精确测量,但看起来是标准的工频(50Hz 或 60Hz)。

MATLAB 绘图代码

%% 1. 参数设置
% 对应图片中的时间轴范围 (约 4.56s 到 4.60s)
t_start = 4.56;
t_end = 4.60;
fs = 10000; % 采样率 (10kHz)
t = t_start:1/fs:t_end; % 时间向量

% 三相电参数 (标准 220V 交流电)
V_peak = 311; % 峰值电压 (220V * sqrt(2))
f = 50; % 频率 50Hz
w = 2 * pi * f; % 角频率

%% 2. 三相正弦波数据
% Phase A (Signal 1)
signal_1 = V_peak * sin(w * t);

% Phase B (Signal 2) - 滞后 120度 (2pi/3)
signal_2 = V_peak * sin(w * t - 2
pi/3);

% Phase C (Signal 3) - 滞后 240度 (4pi/3)
signal_3 = V_peak * sin(w * t - 4
pi/3);

%% 3. 绘图 (模仿 Simulink Scope 样式)
figure(‘Color’, ‘black’); % 设置背景为黑色
plot(t, signal_1, ‘LineWidth’, 1.2); hold on;
plot(t, signal_2, ‘LineWidth’, 1.2);
plot(t, signal_3, ‘LineWidth’, 1.2);

% 设置样式以匹配截图
grid on;
set(gca, ‘GridColor’, [0.4 0.4 0.4]); % 灰色网格线
set(gca, ‘XColor’, ‘white’, ‘YColor’, ‘white’); % 坐标轴文字为白色
set(gca, ‘Color’, ‘black’); % 坐标区背景为黑色

% 图例 (对应图片右上角)
legend({‘’, ‘’, ‘’}, …
‘Location’, ‘northeast’, ‘Color’, ‘black’, ‘TextColor’, ‘white’);

% 标签
title(‘Three-Phase Voltage Waveform’, ‘Color’, ‘white’);
xlabel(‘Time (s)’, ‘Color’, ‘white’);
ylabel(‘Amplitude (V)’, ‘Color’, ‘white’);

% 调整显示范围
ylim([-350, 350]);

代码说明

时间范围:代码将时间轴设置为 4.56 到 4.60,这与截图中的 X 轴刻度一致。
幅值:设置为 311,这是 220V 交流电的标准峰值,与图中的波形高度吻合。
颜色:代码将背景设为黑色,线条设为默认颜色(蓝、红、黄/绿),并添加网格,以完全模仿 Simulink Scope 的视觉效果。

Logo

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

更多推荐