Exemple #1
0
        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;
                }
            }
        }
Exemple #2
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, "移能电阻_电流");
        }