メインコンテンツまでスキップ

Microsoft Visual C++版 LINマスタシミュレーションプログラム

画面構成

C++版 LINマスタシミュレーションプログラム
項目説明
Startボタンクリックすると、モニタリングと送信スケジュールに基づくフレームの送信を開始します。
Send Sleepボタンクリックすると、スリープコマンドを送信します。
Send Interruptボタンクリックすると、割り込み送信フレームを送信します。
割り込み送信フレームの内容については「割り込み送信フレーム」を参照してください。
Stopボタンクリックすると、モニタリングと送信スケジュールに基づくフレームの送信を停止します。
ログ表示部
(①枠部分)
送受信したログ情報を表示します。
最大で100件のログ情報が保持され、それを超える場合は古いログ情報から順にクリアされます。
ただし、モニタリングを停止した後に再度開始すると、それまでのログ情報は全てクリアされます。
表示内容については「ログ表示部詳細」を参照してください。
StatusLINステータスをラジオボタンで切り替えます。
Wakeup:Run(Awake)状態 Sleep:Sleep状態
Schedule使用するスケジュールをラジオボタンで切り替えます。
スケジュールの内容については「送信スケジュール」を参照してください。
Data各スケジュールにおけるDirがTxのフレームの内容をラジオボタンで切り替えます。
フレームの内容については「送信スケジュール」を参照してください。

ログ表示部詳細

項目説明
msecタイムスタンプ(ミリ秒)を表示します。
usecタイムスタンプ(マイクロ秒)を表示します。
Dirログ方向を表示します。
Rx:受信ログ Tx:送信ログ
Typeログ種別、またはエラー内容を表示します。
Formatログ種別に応じて、それぞれ以下を表示します。
Header:SyncBreak幅 Wakeup:ウェイクアップパルス幅
IDLIN IDを16進数で表示します。
DLデータ長(1~8)を表示します。
Dataデータ(D1~D8)を16進数で表示します。データの区切り文字はカンマです。
Checksumチェックサムを16進数で表示します。

送信スケジュール

各送信スケジュールの内容は以下の通りです。

No.DirIDDelayDLData(16進数)
D1D2D3D4D5D6D7D8
0
(※1)
Tx
(※2)
10H500ms240HC8H
15H200ms215H9DH
Rx11H500ms-
1
(※1)
Tx
(※2)
20H500ms420H64HA8HECH
25H400ms413H57H9BHDFH
Rx21H500ms-

※1:Scheduleのラジオボタンで「#0」を選択した場合はNo.0、「#1」を選択した場合はNo.1のスケジュールをそれぞれ使用します。
※2:Dataのラジオボタンで「Type A」を選択した場合は上段、「Type B」を選択した場合は下段の設定をそれぞれ使用します。

割り込み送信フレーム

割り込み送信フレームの内容は以下の通りです。

DirIDDLData(16進数)
D1D2D3D4D5D6D7D8
Tx30H801H23H45H67H89HABHCDHEFH

エラー処理

以下の場合はエラーとし、エラーダイアログを表示してプログラムを終了します。

  • プログラムの起動時にMicroPeckerXが認識できなかった場合
  • モニタリングの開始/終了時やモニタリング中にAPIの呼び出しが失敗した場合

実装例(コメント付きソースコード)

対応元: MPXCtrl_LIN_CPP_MstSample/MPXCtrl_LIN_CPP_MstSample/Form1.h

// 1) Open
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;

// 2) LIN Master用パラメータ設定
StMPXLINParam lin = {};
lin.Mode = MPX_LIN_MODE_MASTER;
lin.Revision = MPX_LIN_REV_21;
lin.Baudrate = 19200;
ret = MPXLINSetParam(serial, &lin);
if (ret != E_OK) return;

// 3) スケジュール有効化
MPXLINSetMasterSchedule(serial, 0, MPX_LIN_SIM_ENA, MPX_LIN_SIM_DIS);
MPXLINSetMasterSchedule(serial, 1, MPX_LIN_SIM_ENA, MPX_LIN_SIM_DIS);

// 4) スケジュール内容設定
StMPXLINMasterSim sch = {};
// sch.Item[] にTx/Rxフレームを設定して登録
ret = MPXLINSetMasterSim(serial, 0, &sch, 2);
if (ret != E_OK) return;
ret = MPXLINSetMasterSim(serial, 1, &sch, 2);
if (ret != E_OK) return;

// 5) 初期状態を設定して開始
MPXLINChangeMasterSchedule(serial, 0);
MPXLINSetStatus(serial, MPX_LIN_STS_RUN);
MPXSetGetLogMode(serial, MPX_INNERCH_LIN, MPX_GETLOGMODE_GETLOGAPI);
ret = MPXMonitorStart(serial, MPX_SYNC_MASTER);
if (ret != E_OK) return;

// 6) 任意イベント
// 割り込み送信
StMPXLINMasterSimItem interruptItem = {};
interruptItem.FrameType = MPX_LIN_FRAME_TYPE_TX;
ret = MPXLINMasterInterrupt(serial, &interruptItem);

// 7) 停止
unsigned long mSec = 0;
unsigned short uSec = 0;
MPXMonitorStop(serial, &mSec, &uSec);
MPXClose();