写真素材 - CAPL - リアルタイム オン* (続き 1)

前回に引き続き、雑談を続けましょう。. .

2. コントロールクラス

  1. バスオフです

busOffはバステストでは避けられない話題であり、CANバスの重要な機能でもあります.個人的にはソフトウェアのウォッチドッグに少し似ている気がしますが、ウォッチドッグはソフトウェアを再起動し、CANバスのbusoffは同じです CANノードが異常な場合、特別な方法でカウントし、ある程度ブロックされます。その後、CAN全体が確実に正常に戻るまで、以前のカウントがゆっくりと減少します。ネットワークの通常の本番通信; したがって、CAN テストでは busOff が必要であり、今日は関連する使用方法も紹介し、テストのこの部分を実装するためのいくつかのアイデアを提供します。

以下は、busoff に入った後にノードが Rx および Tx エラー カウントを出力し、時間とチャネルを一緒に出力し、チャネルをリセットする方法です。

on busOff
{
    int errRxCnt;
    int errTxCnt;
    int channel;
    double timestamp; // [seconds]
    
    timestamp = (double)timeNow() / (double)100000;
    channel = this.can;
    errRxCnt = this.errorCountRX;
    errTxCnt = this.errorCountTX;
    Write("Bus Off: time=%f channel=%d, errRxCnt=%d, errTxCnt=%d",
    timestamp, channel, errRxCnt, errTxCnt);
    
    resetCanEx(channel);
}

注:このイベントは、this.errorCountRX および this.errorCountTX のカウンターのいずれかが変更されたときに呼び出されます。

  1. on errorActive/on errorPassive/on warningLimit

同様に、errorActive、errorPassive、warningLimit などのキーワードを使用して、CAN バス コントローラーのステータスを監視することもできます. エラー カウンター (errorCountRX, errorCountTX) が変化すると、イベントをトリガーできます. 特定のニーズに応じて作成します.応答の処理は、現在のデバイスのソフトウェア機能の完全性を検証し、製品の品質を確保するために使用されます。

on errorActive 
{
   write("CAN Controller is in errorPassive state")
   write(" errorCountTX = %d", this.errorCountTX);
   write(" errorCountRX = %d", this.errorCountRX);
};
on errorPassive 
{
   write("CAN Controller is in errorPassive state")
   write(" errorCountTX = %d", this.errorCountTX);
   write(" errorCountRX = %d", this.errorCountRX);
};
on warningLimit 
{
   write("CAN Controller is in errorPassive state")
   write(" errorCountTX = %d", this.errorCountTX);
   write(" errorCountRX = %d", this.errorCountRX);
};

3. システム イベントのテスト

テスト システム イベントは、測定開始前、測定開始時、および測定終了時に呼び出すことができます。たとえば、preStart では、ここを初期化変数として使用したり、書き込み関数を使用して開始レポートを書き込みウィンドウに出力したり、タイマーを開始したり、測定終了後に統計情報を出力したりできます。

1、プレスタート時

on-preStart: 主に、変数の初期化、「書き込み」ウィンドウへのメッセージの表示、およびファイルからのデータの読み取りに使用されます。on-preStart プログラムを実行する場合、すべての関数をこのイベントの下に配置できるわけではありません。たとえば、出力関数を使用してメッセージをバスに送信することは許可されていません。

on preStart
{
   write("Measurement started!");
   msg_Count = 0;
}

開始時

on start
{
   write("start Node A");
   setTimer(cycTimer,20);
   CallAllOnEnvVar(); // CANoe only
}

2、on preStop/stopMeasurement

on-preStop ハンドラーは、測定の停止が要求された後に呼び出されます。on-preStop 機能は一般的に終了 Cao グループを実行する際に使用され、実際の測定が停止する前にこれらの検索が完了する必要があります。

on preStop
{
   message ShutdownReq m;

   output(m);
   DeferStop(1000);
}

注:一部の操作 (環境の設定など) が StopMeasurement でのみ開始された場合、効果はありません。ただし、接続された ECU にシャットダウン メッセージを送信して確認メッセージを待機するなど、より複雑な事前停止操作が必要な場合は、on preStop 関数で DeferStop を呼び出すと、測定停止をさらに遅らせることができます。

おすすめ

転載: blog.csdn.net/weixin_54581097/article/details/129700572