Exemplo n.º 1
0
        /// <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();
        }
Exemplo n.º 2
0
        /// <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]);
            }
        }
Exemplo n.º 3
0
        /// <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);
                }
            }
        }
        /// <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);
                }
            }
        }