private void SendDataAndStartSimulink(DataSendedToMatlab data, string modelName) { // 清空 matlab 里面的变量 Main.clearMatlab(); // 将所有数据传递到 Matlab 引擎 Main.matlab.Execute("R = " + data.R + ";"); Main.matlab.Execute("L = " + data.L + ";"); Main.matlab.Execute("C = " + data.C + ";"); Main.matlab.Execute("L_init = " + data.L_init + ";"); Main.matlab.Execute("C_init = " + data.C_init + ";"); Main.matlab.Execute("simTime = " + data.simTime + ";"); Main.matlab.Execute("simInterval = " + data.simInterval + ";"); // 进行仿真 Main.matlab.Execute("sim('" + modelName + "');"); // 读取数据,并绘制图表 Main.ClearSeriesAndResetChartArea(RLC_Chart); double[,] result = Main.getArrayData("RLC_Result"); Main.drawToChart(result, 1, RLC_Chart, "振荡波形"); // 进行参数的显示 RLC_Result_TB.Text = ""; RLC_Result_TB.Text += "振荡频率 f(Hz) : " + (1 / (2 * Math.PI * Math.Sqrt(data.L * data.C))).ToString("F4") + "\r\n"; RLC_Result_TB.Text += "振荡周期 T(ms) : " + (1 / (1 / (2 * Math.PI * Math.Sqrt(data.L * data.C))) * 1000).ToString("F4") + "\r\n"; RLC_Result_TB.Text += "振荡类型 : " + ((data.C > 4 * data.L / (data.R * data.R)) ? "过阻尼" : data.C == 4 * data.L / (data.R * data.R) ? "临界阻尼" : "欠阻尼") + "\r\n"; double A = 0; // 半波幅值 int maxIndex = 0; // 半波幅值对应的时间 // 下面的这个循环用于计算各个半波的幅值 for (int i = 0; i < 2400; i++) { if (A < Math.Abs(result[i, 1])) { A = Math.Abs(result[i, 1]); maxIndex = i; } if ((i + 1) % 400 == 0) { RLC_Result_TB.Text += "第" + ((i + 1) / 400) + "个半波的幅值: " + A.ToString("F4") + "\r\n"; RLC_Result_TB.Text += " 于 " + (data.simTime / 2400 * maxIndex).ToString("F4") + " 秒处取得\r\n"; A = 0; maxIndex = 0; } } }
private void SendDataAndStartSimulink(DataSendedToMatlab data, string modelName) { // 清空 matlab 里面的变量 clearMatlab(); // 将所有数据传递到 Matlab 引擎 matlab.Execute("isLCSource = " + data.isLCSource + ";"); matlab.Execute("isLSource = " + data.isLSource + ";"); matlab.Execute("initSourceC = " + data.initSourceC + ";"); matlab.Execute("initSourceL = " + data.initSourceL + ";"); matlab.Execute("initVCB_C = " + data.initVCB_C + ";"); matlab.Execute("ZeroCrossing_C = " + data.ZeroCrossing_C + ";"); matlab.Execute("ZeroCrossing_L = " + data.ZeroCrossing_L + ";"); matlab.Execute("Discharge_R = " + data.Discharge_R + ";"); matlab.Execute("ThyristorTime = " + data.ThyristorTime + ";"); // 进行仿真 matlab.Execute("sim('" + modelName + "');"); // 设置坐标轴 setChartMinAndMax_ClearSeriesAndResetChartArea(chart1, 0.012, 0); setChartMinAndMax_ClearSeriesAndResetChartArea(chart2, data.ThyristorTime + 0.00015, data.ThyristorTime - 0.00005); setChartMinAndMax_ClearSeriesAndResetChartArea(chart3, 0.012, 0); setChartMinAndMax_ClearSeriesAndResetChartArea(chart4, data.ThyristorTime + 0.00015, data.ThyristorTime - 0.00005); // 读取仿真之后的数据 CurrentResultArr = getArrayData("Results"); drawToChart_Current(CurrentResultArr, 1, "过零电流提供回路_电流"); drawToChart_Voltage(CurrentResultArr, 2, "过零电流提供回路_电容电压"); drawToChart_Voltage(CurrentResultArr, 3, "过零电流提供回路_电感电压"); drawToChart_Voltage(CurrentResultArr, 4, "过零电流提供回路_晶闸管电压"); drawToChart_Voltage(CurrentResultArr, 5, "失超源_电压"); drawToChart_Current(CurrentResultArr, 6, "失超源_电流"); drawToChart_Voltage(CurrentResultArr, 7, "模拟失超LC源_电容电压"); drawToChart_Voltage(CurrentResultArr, 8, "模拟失超LC源_电感电压"); drawToChart_Voltage(CurrentResultArr, 9, "VCB/移能电阻_电压"); drawToChart_Current(CurrentResultArr, 10, "VCB_电流"); drawToChart_Current(CurrentResultArr, 11, "移能电阻_电流"); }