Engee 文档
Notebook

运算放大器上的微分环节

本例将演示通过 Engee 脚本编辑器中的模型命令控制以及在 Simulink 环境中运行模型来建立微分链路模型。

运算放大器上的微分环节模型是在电气元件库的帮助下建立的。电气元件由电压源、电阻、电容和理想运算放大器表示。

微分器模型(模型 ssc_differentiator_op_amp.engee ) :

image.png

使用软件控制实现模型运行:

In [ ]:
Pkg.add(["Statistics", "CSV"])
In [ ]:
using Plots
using MATLAB
using CSV
using DataFrames
using Statistics

gr();

mat"start_simulink"
mat"p = genpath('/user/start/examples'); addpath(p);"

加载模型

In [ ]:
modelName = "ssc_differentiator_op_amp";
model = modelName in [m.name for m in engee.get_all_models()] ? engee.open( modelName ) : engee.load( "$(@__DIR__)/$(modelName).engee");

运行已加载的模型

In [ ]:
results = engee.run( modelName )
Out[0]:
Dict{String, DataFrame} with 2 entries:
  "V2" => 2001×2 DataFrame…
  "V1" => 2001×2 DataFrame

加载并可视化模拟数据。

从电压表中获取电压数据:

In [ ]:
DiffOpAmp_t = results["V1"].time;
DiffOpAmp_d1 = results["V1"].value;
DiffOpAmp_d2 = results["V2"].value;

绘制描述电压变化的图表。

In [ ]:
p_adc_da_e = plot(DiffOpAmp_t ,DiffOpAmp_d2 , legend = false)
plot!(DiffOpAmp_t ,DiffOpAmp_d1 , legend = false)
plot!(title = "Результаты моделирования в Engee", ylabel = "Напряжение, В", xlabel="Время, c")
Out[0]:

同样的电路可在 **SimScape *** 中建模:

image.png

在 Simulink 中运行模型,并将结果加载到变量中:

In [ ]:
mat"run_test_model('ssc_opamp_differentiator_demo');";
sl_diff_opamp_values = mat"SysOutput.Data";
sl_diff_opamp_times = mat"SysOutput.Time";

在 SimScape 中输出仿真结果:

In [ ]:
plot(sl_diff_opamp_times, sl_diff_opamp_values, legend = false) 
plot!(title = "Результаты моделирования в Simulink", ylabel = "Напряжение", xlabel="Время, c")
Out[0]:

让我们叠加差分信号:

In [ ]:
plot(DiffOpAmp_t ,DiffOpAmp_d1, label = "Engee")
plot!(title = "Сравнение результатов моделирования")
plot!(sl_diff_opamp_times, sl_diff_opamp_values, label = "Simulink")
plot!(legend = :outertopright,ylabel = "Цифровой сигнал", xlabel="Время, c")
Out[0]:

结论

本示例演示了在 Engee 脚本编辑器中通过命令控制模型以及在 Simulink 环境中运行模型的差异化链接仿真。计算显示,在这两种环境中运行仿真时,结果差异极小。