Microsoft Visual C++版 CANモニタプログラム
画面構成
| 項目 | 説明 |
|---|---|
| Startボタン | クリックすると、モニタリングを開始します。 |
| Stopボタン | クリックすると、モニタリングを停止します。 |
| ログ表示部 (①枠部分) | 受信したログ情報を表示します。 最大で100件のログ情報が保持され、それを超える場合は古いログ情報から順にクリアされます。 ただし、モニタリングを停止した後に再度開始すると、それまでのログ情報は全てクリアされます。 表示内容については「ログ表示部詳細」を参照してください。 |
ログ表示部詳細
| 項目 | 説明 |
|---|---|
| msec | タイムスタンプ(ミリ秒)を表示します。 |
| usec | タイムスタンプ(マイクロ秒)を表示します。 |
| Dir | ログ方向を表示します。 Rx:受信ログ Tx:送信ログ |
| Format | IDフォーマットを表示します。 Std:標準ID Ext:拡張ID |
| ID | CAN IDを16進数で表示します。 |
| DL | データ長(0~64)を表示します。 |
| Data | データ(D1~D64)を16進数で表示します。データの区切り文字はカンマです。 |
エラー処理
以下の場合はエラーとし、エラーダイアログを表示してプログラムを終了します。
- プログラムの起動時にMicroPeckerXが認識できなかった場合
- モニタリングの開始/終了時やモニタリング中にAPIの呼び出しが失敗した場合
実装例(コメント付きソースコード)
対応元: MPXCtrl_CANFD_CPP_MonSample/MPXCtrl_CANFD_CPP_MonSample/Form1.h
// 1) 接続と初期化
StMPXDeviceInfo devices[1] = {};
unsigned char count = 0;
ER ret = MPXOpen(devices, 1, &count);
if (ret != E_OK || count == 0) {
// 本体未検出
return;
}
unsigned long serial = devices[0].Serial;
MPXSetLED(serial, MPX_LED_OFF, MPX_LED_OFF, MPX_LED_OFF, MPX_LED_OFF, MPX_LED_OFF);
// 2) CANパラメータ設定(CH1のみモニタ、CH2は無効)
StMPXCANParam ch1 = {};
ch1.Mode = MPX_CAN_MODE_MONITOR;
ch1.ArbitrationBaudrate = MPX_CAN_PARAM_ABR_500K;
ch1.ArbitrationSamplepoint = MPX_CAN_PARAM_SP_80P;
ch1.DataBaudrate = MPX_CAN_PARAM_DBR_2M;
ch1.DataSamplepoint = MPX_CAN_PARAM_SP_80P;
ch1.EnableTerminate = MPX_CAN_TERMINATE_ENABLE;
ret = MPXCANSetParam(serial, 1, &ch1);
if (ret != E_OK) return;
StMPXCANParam ch2 = ch1;
ch2.Mode = MPX_CAN_MODE_NONE;
ret = MPXCANSetParam(serial, 2, &ch2);
if (ret != E_OK) return;
// 3) ログ取得方式を「API取得」に固定
MPXSetGetLogMode(serial, 1, MPX_GETLOGMODE_GETLOGAPI);
// 4) 監視開始
ret = MPXMonitorStart(serial, MPX_SYNC_MASTER);
if (ret != E_OK) return;
// 5) 周期処理でログ取得
StMPXCANLog logs[100];
unsigned short got = 0;
unsigned char over = 0;
ret = MPXCANGetLogEx(serial, 1, logs, 100, &got, &over);
// got件を画面へ表示。over==MPX_LOG_BUFOVER_TRUE の場合は取りこぼしあり。
// 6) 停止と終了
unsigned long mSec = 0;
unsigned short uSec = 0;
MPXMonitorStop(serial, &mSec, &uSec);
MPXClose();