/// <summary> /// ログデータをクリア /// </summary> private void ClearAllLogData() { // テキストボックスを初期化 txtLogOutput.Text = string.Format(" Time, Data1, Data2, Battery, MotorA, MotorB, MotorC, ADC1, ADC2, ADC3, ADC4, I2C\r\n"); txtStateOutput.Text = string.Format(" RunTime, MoveDist, MoveSpd, Direction, TurnAngle, Posture, TailAngle\r\n"); // ログデータの取得リストをクリア logManager.ClearList(); // 状態データリストをクリア stateManager.ClearList(); stateManager = new NxtStateManager(new Point(), 0); // グラフのデータを全て削除 logChartManager.ClearData(); stateChartManager.ClearData(); }
/// <summary> /// Constructor /// </summary> public MainWindow() { InitializeComponent(); // Dispatch Timerを初期化 InitializeStateControlTimer(); // ログ受信時に実行するメソッドを登録 appendMessageDelegate = new AppendMessegeDelegate(AppendList); appendMessageDelegate += new AppendMessegeDelegate(AppendTextBox); appendMessageDelegate += new AppendMessegeDelegate(AppendLogFile); appendMessageDelegate += new AppendMessegeDelegate(AppendLogGraph); appendMessageDelegate += new AppendMessegeDelegate(AppendState); appendMessageDelegate += new AppendMessegeDelegate(AppendStateTextBox); appendMessageDelegate += new AppendMessegeDelegate(AppendStateGraph); // ログメッセージ作成開始 logReceiver = new NxtLogReceiver(Dispatcher, appendMessageDelegate); // StopWatchを初期化 txtLogOutputStopwatch = new Stopwatch(); txtStateOutputStopwatch = new Stopwatch(); // Log Managerを初期化 logManager = new NxtLogManager(); // State Managerを初期化 stateManager = new NxtStateManager(new Point(0, 0), 0); // Log Chart Managerを初期化 logChartManager = new NxtLogChartManager(); // State Chart Managerを初期化 stateChartManager = new NxtStateChartManager(); // CheckListBoxに項目を追加 for (int i = 1; i < NxtLog.LogDataMember.Length; i++) { chkListGraph.Items.Add(NxtLog.LogDataMember[i]); } // CheckListBoxに項目を追加 for (int i = 1; i < NxtState.NxtStateDataMember.Length; i++) { chkListStateGraph.Items.Add(NxtState.NxtStateDataMember[i]); } }
/// <summary> /// ログファイルを開く /// </summary> /// <param name="filename">ファイル名</param> /// <param name="bgWorker">Background Worker</param> /// <param name="stateManager">Nxt State Manager</param> public void OpenLogFile(string filename, BackgroundWorker bgWorker, NxtStateManager stateManager = null) { // ファイル名を保存 this.LogFileName = filename; // CSV ファイルから行単位で読み込み string[] file_data = File.ReadAllLines(filename); // 行数を取得 int length = file_data.Length; // テキストボックス出力用文字列 logTextBuilder = new StringBuilder(); logTextBuilder.AppendFormat(" Time, Data1, Data2, Battery, MotorA, MotorB, MotorC, ADC1, ADC2, ADC3, ADC4, I2C\r\n"); // CSVパーサーを生成 using (TextFieldParser parser = new TextFieldParser(filename, System.Text.Encoding.GetEncoding("Shift_JIS"))) { // CSVは区切り形式 parser.TextFieldType = FieldType.Delimited; // 区切り文字はコンマ parser.SetDelimiters(","); // 最初の1行(系列名)は捨てる string[] comment = parser.ReadFields(); int cnt = 0; // 最終行まで走査 while (parser.EndOfData != true) { // 1行分のデータを取得 string[] row = parser.ReadFields(); // CSV形式をByte配列に変換 using (MemoryStream ms = new MemoryStream()) { // Time ms.Write(BitConverter.GetBytes(uint.Parse(row[0])), 0, sizeof(uint)); // Data1 ms.Write(BitConverter.GetBytes(sbyte.Parse(row[1])), 0, sizeof(sbyte)); // Data2 ms.Write(BitConverter.GetBytes(sbyte.Parse(row[2])), 0, sizeof(sbyte)); // Battery ms.Write(BitConverter.GetBytes(ushort.Parse(row[3])), 0, sizeof(ushort)); // MotorA ms.Write(BitConverter.GetBytes(int.Parse(row[4])), 0, sizeof(int)); // MotorB ms.Write(BitConverter.GetBytes(int.Parse(row[5])), 0, sizeof(int)); // MotorC ms.Write(BitConverter.GetBytes(int.Parse(row[6])), 0, sizeof(int)); // ADC1 ms.Write(BitConverter.GetBytes(short.Parse(row[7])), 0, sizeof(short)); // ADC2 ms.Write(BitConverter.GetBytes(short.Parse(row[8])), 0, sizeof(short)); // ADC3 ms.Write(BitConverter.GetBytes(short.Parse(row[9])), 0, sizeof(short)); // ADC4 ms.Write(BitConverter.GetBytes(short.Parse(row[10])), 0, sizeof(short)); // I2C ms.Write(BitConverter.GetBytes(int.Parse(row[11])), 0, sizeof(int)); // ログを生成 NxtLog log = new NxtLog(ms.ToArray()); // リストに追加 logList.Add(log); // テキストボックス出力用文字列にログを追加 logTextBuilder.AppendFormat(log.ToString()); // Nxt State Managerが初期化済みかつ、NXT State読み込み設定がON if (stateManager != null && Properties.Settings.Default.LoadNxtStateFromLogFile == true) { // 状態を更新 stateManager.AppendList(log); } } cnt++; // 進捗率を計算 double parcent = ((double)cnt / (double)length) * 100; // 進捗率を通知 bgWorker.ReportProgress((int)parcent); } } }