複数台制御スタートガイド
本ページは、MicroPeckerX を複数台(2台以上)同時に制御するための実装ガイドです。
ポイントは、MPXOpen で取得した Serial を各APIに正しく渡し、開始/停止順序をそろえることです。
対象と前提
- 本体認識は
MPXOpen(Devices, Num, Count)を使用 - 各APIは
Serial指定で個別本体を操作 - ログ取得は
MPXSetGetLogMode+MPXGetLog/MPXCANGetLogEx/MPXLINGetLogEx MPXOpenで同時認識できる本体数は最大4台
実装フロー(共通)
MPXOpenで本体一覧を取得Devices[i].Serialから役割を決定(例: Master/Slave)- 各本体に通信パラメータを設定
- 各本体にログ取得モードを設定
MPXMonitorStartを スレーブ側 -> マスター側 の順で実行- ログ取得ループを本体ごとに実行
MPXMonitorStopを マスター側 -> スレーブ側 の順で実行MPXCloseで終了
重要ルール(複数台時)
- 開始順序: スレーブ側を先に開始し、最後にマスター側を開始
- 停止順序: マスター側を先に停止し、最後にスレーブ側を停止
- 役割管理: 配列インデックスではなく
Serialを識別子として管理
CAN/LIN 差分早見表
- 通信パラメータ設定:
- CAN/CAN FD:
MPXCANSetParam+StMPXCANParam - LIN:
MPXLINSetParam+StMPXLINParam
- CAN/CAN FD:
- チャンネル指定:
- CAN/CAN FD:
InnerCh=1/2 - LIN:
MPXLINSetParamではInnerCh指定なし
- CAN/CAN FD:
- ログ取得:
- CAN/CAN FD:
MPXCANGetLogEx+StMPXCANLog - LIN:
MPXLINGetLogEx+StMPXLINLog
- CAN/CAN FD:
通信パラメータ設定例
- CAN/CAN FD(2ch必須)
- LIN
// CAN/CAN FD: CH1/CH2の両方に設定を行う
StMPXCANParam p1 = {};
StMPXCANParam p2 = {};
p1.EnableTerminate = MPX_CAN_TERMINATE_ENABLE;
p1.Mode = MPX_CAN_MODE_MONITOR; // CH1はモニタモードで動作
p1.ArbitrationBaudrate = MPX_CAN_PARAM_ABR_500K;
p1.ArbitrationSamplepoint = MPX_CAN_PARAM_SP_80P;
p1.DataBaudrate = MPX_CAN_PARAM_DBR_2M;
p1.DataSamplepoint = MPX_CAN_PARAM_SP_80P;
p2 = p1;
p2.Mode = MPX_CAN_MODE_NONE; // CH2は動作なし
MPXCANSetParam(serialSlave, 1, &p1);
MPXCANSetParam(serialSlave, 2, &p2);
MPXCANSetParam(serialMaster, 1, &p1);
MPXCANSetParam(serialMaster, 2, &p2);
MPXSetGetLogMode(serialSlave, 1, MPX_GETLOGMODE_GETLOGAPI);
MPXSetGetLogMode(serialMaster, 1, MPX_GETLOGMODE_GETLOGAPI);
// LIN: MPXLINSetParamは(Serial, Param)の2引数
StMPXLINParam p = {};
p.Mode = MPX_LIN_MODE_MONITOR;
p.Revision = MPX_LIN_REV_21;
p.Baudrate = 19200;
MPXLINSetParam(serialSlave, &p);
MPXLINSetParam(serialMaster, &p);
MPXSetGetLogMode(serialSlave, MPX_INNERCH_LIN, MPX_GETLOGMODE_GETLOGAPI);
MPXSetGetLogMode(serialMaster, MPX_INNERCH_LIN, MPX_GETLOGMODE_GETLOGAPI);