public static async Task <bool> CheckAN_P(MODE mode) { bool result = false; bool result上限 = false; bool result下限 = false; string Data = ""; const int numSamples = 10; int offset = 0; //ローカル関数の定義■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ List <double> GetData() { General.ClearCommlog(); Target.SendData("ANB_P"); while (true)//取り込んだ通信データが規定行数(サンプリング数)になるまで待つ { if (Flags.ClickStopButton) { return(null); } if (General.CountNewline() == numSamples + 2) { break; } } Target.Escape(); Sleep(1500); int 検索開始位置 = 0; var List = new List <double>(); foreach (var i in Enumerable.Range(0, numSamples)) { var log = State.VmComm.RX; int FoundIndex = log.IndexOf("ANB_P,", 検索開始位置); int 改行位置 = log.IndexOf("\r\n", FoundIndex); var 取り出し1行 = log.Substring(FoundIndex, 改行位置 - FoundIndex); var dataList = 取り出し1行.Split(','); List.Add(Double.Parse(dataList[offset])); 検索開始位置 = FoundIndex + 1; } return(List); }; //■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ try { var mess = ""; switch (mode) { case MODE.READ_V: mess = "①FGと50/60Hz入力を接続する\r\n②チェッカーの50/60Hz切替を上向きにする"; break; case MODE.READ_I_1: mess = "①チェッカーのカレントトランス1,2入力切替を上向きにする\r\n②FGをカレントトランス外部入力<1>に接続する"; break; case MODE.READ_I_2: mess = "①チェッカーのカレントトランス1,2入力切替を上向きにする\r\n②FGをカレントトランス外部入力<2>に接続する"; break; } var dialog = new DialogPic(mess, DialogPic.NAME.その他); dialog.ShowDialog(); return(await Task <bool> .Run(() => { //電源ONする処理 General.PowerSupply(true); if (!General.CheckDemo表示()) { return false; } Sleep(1200); switch (mode) { case MODE.READ_V: offset = 3; // マルチメータで出力値を計測しながらFGを調整する General.Set3229Meas(General.MEAS3229_CH.CN11_1); //マルチメータ切り替え処理を記述 if (!SetFG_6_5Vrms()) { return false; } break; case MODE.READ_I_1: offset = 4; // FG出力値は固 if (!SetFG_5_7Vrms()) { return false; } break; case MODE.READ_I_2: offset = 5; // FG出力値は固定 if (!SetFG_5_7Vrms()) { return false; } break; } Sleep(500); var ListData_ = GetData(); if (ListData_ == null) { return false; } //安定後のデータを取得する //最後から5ヶのデータをサンプリング値として取得する(前半は値が安定していない可能性があるため) //5個飛ばして5個を抽出(インデックスが5から10) var ListData = ListData_.Skip(5).Take(5).ToList <double>(); switch (mode) { case MODE.READ_V: result下限 = ListData.All(data => data >= State.TestSpec.電圧換算値_Min); result上限 = ListData.All(data => data <= State.TestSpec.電圧換算値_Max); result = result下限 && result上限; break; case MODE.READ_I_1: case MODE.READ_I_2: ListData.Sort(); result下限 = ListData[2] >= State.TestSpec.電流換算値_Min; //中央値で判定 result上限 = ListData[2] <= State.TestSpec.電流換算値_Max; //中央値で判定 //result下限 = ListData.All(data => data >= State.testSpec.電流換算値_Min);//初期の頃の判定方法 //result上限 = ListData.All(data => data <= State.testSpec.電流換算値_Max);//初期の頃の判定方法 result = result下限 && result上限; break; } ListData.Sort(); if (result) { Data = ListData[2].ToString("F1");//中央値 } else { if (!result下限) { Data = ListData[0].ToString("F1");//Min } else { Data = ListData[4].ToString("F1");//Max } } return result; })); } catch { return(false); } finally { WaveFormGenerator.SourceOff(); General.PowerSupply(false); //ビューモデルの更新 switch (mode) { case MODE.READ_V: State.VmTestResults.VolConverted = Data + "Vrms"; State.VmTestResults.ColVolConverted = result ? OffBrush : NgBrush; break; case MODE.READ_I_1: State.VmTestResults.CT1 = Data + "Arms"; State.VmTestResults.ColCT1 = result ? OffBrush : NgBrush; break; case MODE.READ_I_2: State.VmTestResults.CT2 = Data + "Arms"; State.VmTestResults.ColCT2 = result ? OffBrush : NgBrush; break; } } }