G3013_マイコン通信トラブル
2024年12月18日
2:18
G3013_pc_lpc_micon_uart_trouble
修正済みプロジェクトのリンクです
マイコンの処理速度計算でトラブル
例外エラー
処理の概要
999_err_msg.log の内容
ゼロ除算したのかも?
情けないことに、計算式の問題がわかりません
loop_dat がゼロです
お恥ずかしい、むっちゃ初歩的ミスでした、キャストが必要だった
これでおそらく解決です
2025.01.04 SAN (08:27) goma0099 -18834995-
バグの修正
// 測定速度計算と文字列化
private string com_snd_cmd_speed_chk(int prm_dev_sec)
{
string ans_cst = "";
string loop_max_cst;
int loop_max = 0;
double sec_dat = 0.0;
string tan_cst = "----";
double loop_dat = 0.0;
// 与えられた差分秒がゼロの場合処理しません
if(prm_dev_sec <= 0) return ans_cst;
// コマンドの文字列が不足しています
if (UART_snd_cmd.Length < 2) return ans_cst;
// 数値変換出来ない形式である
loop_max_cst = UART_snd_cmd.Substring(1);
if (Regex.IsMatch(loop_max_cst, @"^[0-9]+$") == false) return ans_cst;
loop_max = int.Parse(loop_max_cst);
switch(loop_max)
{
case 1:
loop_dat = (double)loop_max / (double)1;
tan_cst = "sec";
break;
case 10:
loop_dat = (double)loop_max / (double)1;
tan_cst = "sec";
break;
case 100:
loop_dat = (double)loop_max / (double)1;
tan_cst = "sec";
break;
case 1000: // 千 中心値
loop_dat = (double)loop_max / (double)1000;
tan_cst = "msec";
break;
case 10000: // 1万
// 理由は説明出来ませんが 1000で割ると正解でした
loop_dat = (double)loop_max / (double)1000;
tan_cst = "msec";
break;
case 100000: // 10万
// 理由は説明出来ませんが 1000で割ると正解でした
loop_dat = (double)loop_max / (double)1000;
tan_cst = "msec";
break;
case 1000000: // 100万 中心値
loop_dat = (double)loop_max / (double)1000000;
tan_cst = "usec";
break;
case 10000000: // 1000万
// 理由は説明出来ませんが 100万で割ると正解でした
loop_dat = (double)loop_max / (double)1000000;
tan_cst = "usec";
break;
case 100000000: // 1億
// 理由は説明出来ませんが 100万で割ると正解でした
loop_dat = (double)loop_max / (double)1000000;
tan_cst = "usec";
break;
}
sec_dat = (double)prm_dev_sec / loop_dat;
ans_cst = sec_dat.ToString() + " " + tan_cst;
return ans_cst;
}