예제 #1
0
 private async Task PIDParametricTune(Action<double[]> callback, double[] _rModelPara,
     enumPIDOptimType PIDOptimIndex_para, enumModelType modelType_para)
 {
     matlab.Execute(@"cd 'C:\Users\msa\Downloads\Quadcopter development\Codings\MATLAB\external\'");
     double[] _cModelPara = new double[4];
     System.Array rModelPara = new double[4];
     System.Array cModelPara = new double[4];
     _rModelPara.CopyTo(rModelPara, 0);
     _cModelPara.CopyTo(cModelPara, 0);
     try
     {
         matlab.PutFullMatrix("Model_parameters", "base", rModelPara, cModelPara);
     }
     catch (System.Runtime.InteropServices.COMException err) { }
     try
     {
         matlab.PutWorkspaceData("ModelTypeIndex", "base", (int)modelType_para);
     }
     catch (System.Runtime.InteropServices.COMException err) { }
     try
     {
         matlab.PutWorkspaceData("FitTypeIndex", "base", (int)PIDOptimIndex_para);
     }
     catch (System.Runtime.InteropServices.COMException err) { }
     matlab.Execute("PIDOptim");
     bool IsDone = false;
     while (!IsDone)
     {
         string chkFilePath = @"C:\Users\msa\Downloads\Quadcopter development\Codings\MATLAB\external\donePIDOptim.txt";
         IsDone = File.Exists(chkFilePath);
         System.Threading.Thread.Sleep(100);
     }
     System.Array rPIDvals = new double[3];
     System.Array cPIDvals = new double[3];
     matlab.GetFullMatrix("results", "global", ref rPIDvals, ref cPIDvals);
     double[] _rPIDvals = new double[3];
     double[] _cPIDvals = new double[3];
     rPIDvals.CopyTo(_rPIDvals, 0);
     rPIDvals.CopyTo(_cPIDvals, 0);
     // Invoke the callback method asynchronously.
     await Task.Run(() => MLPIDCalculationDone(_rPIDvals));
 }
예제 #2
0
 public async void asyncPIDParametricTune(double[] _rModelPara, enumPIDOptimType PIDOptimIndex_para, enumModelType modelType_para)
 {
     await PIDParametricTune(MLPIDCalculationDone, _rModelPara, PIDOptimIndex_para, modelType_para);
 }