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

Microsoft Visual C#版 LINシミュレーションプログラム

画面構成

C#版 LINシミュレーションプログラム
項目説明
Connectボタンクリックすると、PCに接続しているMicroPeckerXが認識されます。
Serial認識したMicroPeckerXのシリアル番号を表示します。
シミュレーションモード
(①枠部分)
シミュレーションモードをラジオボタンで選択します。
Monitor:モニタのみ Master:マスタシミュレーション Slave:スレーブシミュレーション
MasterChange Scheduleボタンクリックすると、使用する送信スケジュールを切り替えます。
送信スケジュールの内容については「送信スケジュール」を参照してください。
Change Dataボタンクリックすると、現在使用している送信スケジュールにおけるDirがTxのフレームのD1をFFHに変更します。
フレームの内容については「送信スケジュール」を参照してください。
Interrupt Sendボタンクリックすると、割り込み送信フレームを送信します。
割り込み送信フレームの内容については「割り込み送信フレーム」を参照してください。
SlaveChange Dataボタンクリックすると、レスポンスIDリストにおけるLIN IDが12HのレスポンスのD1を00Hに変更します。
レスポンスIDリストの内容については「レスポンスIDリスト」を参照してください。
Send Wakeupボタンクリックすると、ウェイクアップパルスを送信します。
Startボタンクリックすると、モニタリングと送信スケジュールに基づくフレーム(またはレスポンスIDリストに基づくレスポンス)の送信を開始します。
Stopボタンクリックすると、モニタリングと送信スケジュールに基づくフレーム(またはレスポンスIDリストに基づくレスポンス)の送信を停止します。
Statusモニタリングと送信スケジュールに基づくフレーム(またはレスポンスIDリストに基づくレスポンス)送信の状態を表示します。
Start:動作中 Stop:停止中
ログ表示部
(②枠部分)
送受信したログ情報を表示します。
本サンプルでは、1回のログ取得API呼び出しで最大1024件を取得します。
表示リストの保持件数上限は実装していないため、長時間動作させる場合はアプリ側で行数制限や古い行の削除処理を追加してください。
表示内容については「ログ表示部詳細」を参照してください。

ログ表示部詳細

表示内容は以下の通りで、項目の区切り文字はカンマです。

#項目説明
1(項目名なし)タイムスタンプを「sssss.mmmuuu」形式で表示します。
2(項目名なし)ログ方向を表示します。
Rx:受信ログ Tx:送信ログ
3(項目名なし)ログ種別を表示します。
4IDLIN IDを16進数で表示します。
5DLデータ長(1~8)を表示します。
6Dataデータ(D1~D8)を16進数で表示します。データの区切り文字はスペースです。
7CSチェックサムを16進数で表示します。

送信スケジュール

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

No.DirIDDelayDLData(16進数)
D1D2D3D4D5D6D7D8
0
(※1)
Tx10H500ms210H11H
Rx11H500ms-
1
(※1)
Tx20H500ms420H21H22H23H
Rx21H500ms-

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

対応元: MPXCtrl_LIN_CSharp_Sample/MPXCtrl_LIN_CSharp_Sample/Form1.cs

private void Form1_Load(object sender, EventArgs e)
{
// 1) 配列メンバーを明示初期化
MasterSims = new StMPXLINMasterSim[2];
for (int i = 0; i < 2; i++) MasterSims[i].Item = new StMPXLINMasterSimItem[64];
SlaveSim.Item = new StMPXLINSlaveSimItem[64];
Logs = new StMPXLINLog[1024];
for (int i = 0; i < 1024; i++) Logs[i].Data = new byte[64];
}

private void StartButton_Click(object sender, EventArgs e)
{
// 2) Open
var info = new StMPXDeviceInfo[1];
byte count = 0;
int ret = MPXCtrl.Open(ref info, 1, ref count);
if (ret != MPXConst.E_OK || count == 0) return;
Serial = info[0].Serial;

// 3) LINパラメータ設定
var p = new StMPXLINParam();
p.Mode = MPXConst.MPX_LIN_MODE_MONITOR;
if (radioButton2.Checked) p.Mode = MPXConst.MPX_LIN_MODE_MASTER;
else if (radioButton3.Checked) p.Mode = MPXConst.MPX_LIN_MODE_SLAVE;
p.Revision = MPXConst.MPX_LIN_REV_21;
p.Baudrate = 19200;
p.IDSetting = new StMPXLINIDSetting[64];
ret = MPXCtrl.LINSetParam(Serial, ref p);
if (ret != MPXConst.E_OK) return;

// 4) ログ取得方式設定
ret = MPXCtrl.SetGetLogMode(Serial, MPXConst.MPX_INNERCH_LIN, MPXConst.MPX_GETLOGMODE_GETLOGAPI);
if (ret != MPXConst.E_OK) return;

// 5) モード別の設定(Master/Slave)を登録して開始
// Master: LINSetMasterSchedule + LINSetMasterSim + LINChangeMasterSchedule + LINSetStatus
// Slave : LINSetSlaveSim
ret = MPXCtrl.MonitorStart(Serial, MPXConst.MPX_SYNC_MASTER);
}

private void timer1_Tick(object sender, EventArgs e)
{
// 6) ログ取得
ushort count = 0, num = 1024;
byte over = 0;
int ret = MPXCtrl.LINGetLogEx(Serial, ref Logs, num, ref count, ref over);
if (ret != MPXConst.E_OK) timer1.Enabled = false;
}

※1:「Change Schedule」ボタンをクリックする度に、使用する送信スケジュールを切り替えます。

割り込み送信フレーム

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

DirIDDLData(16進数)
D1D2D3D4D5D6D7D8
Tx31H831HAAHBBHCCHDDHEEHFFH00H

レスポンスIDリスト

レスポンスIDリストの内容は以下の通りです。

IDDLData(16進数)
D1D2D3D4D5D6D7D8
12H2AAHBBH
34H801H23H45H67H89HABHCDHEFH