TSMasterでパネルで出力する方法 - 関係図
始める前に
この文章の出処はPICODE(피아이코드)の李さんが運営しているTistoryブログからです。
リンク:https://tsmaster.tistory.com
データを測定中に二つの信号の関係をグラフで見たい場合がある。 リアルタイムで信号関係を見ることができれば、データ測定後に別途にデータを処理して関係を確認し、試験を再び行う繰り返しを少しでも減らすことができる。
TSMaster にはPanel 機能がある。 パネル機能でRelation Chart(関係図)を描くことができる。

graph 1
信号の間に以下のような関係があることがデータ測定中にわかる。
YAW_RATE vs yaw_rate_ws
YAW_RATE: CAN バスのヨーレート信号。 センサー測定値
yaw_rate_ws: CAN バスの車輪速度信号で計算したヨーレート
比例する関係にある。 理想的な場合は完全に一致しなければならない。
SAS_Angle vs YAW_RATE
SAS_Angle:CANバスの操向角信号。 センツァー測定値
YAW_RATE: CAN バスのヨーレート信号。 センサー測定値
操向角によって、ヨーレートが正の相関関係にある。
車速、道路の横傾斜などによって傾きが異なる。
操向角が増加するときと減少するときの経路が異なる。
YAW_RATE vs LAT_ACCEL
YAW_RATE: CAN バスのヨーレート信号。 センサー測定値
LAT_ACCEL: CANバスの横加速度信号。 センサー測定値
ヨーレートと横加速度は正の相関関係にある。
車速、道路の横傾斜など、さまざまな原因で関係曲線が複雑だ。
関係図の描き方
メインメニュー/ Simulation/ PanelボタンをクリックしてPanelウィンドウを作成する

パネルのウィンドウの左側部分をキャンバス領域の右側をプロパティ(Property)領域と呼ぶ。

プロパティ領域で「Toolbox」タブをクリックする。
"View Only"の下に、"Relation Chart"をダブルクリックする。
キャンバスに関係図ウィジェットが表示される。
ボーダーをマウスでドラッグして適当な大きさにする。

プロパティ領域のPropertiesタブをクリックし、「Height」や「Width」プロパティに数値を入力して調節することもできる。
重要なことは、x 軸と y 軸に変数を設定することである。
x軸変数を設定するには、"EditSignal Index"で0を選択する。
CAN信号であれば「VarType」からCANSignalを選択する。
"VarLink"をクリックすると右側に ボタン(3点ボタン)ができる。 このボタンをクリックすると、データベースのウィンドウが開く。 信号を選択し、OKボタンをクリックしてウィンドウを閉じる。
y軸変数を設定するには、EditSignal Indexから1を選択する。
システム変数であれば、VarTypeからSystemVarを選択する。
VarLinkをクリックして3点ボタンをクリックすると、システム変数ウィンドウが開く。 変数を選択し、OKボタンをクリックする。
パネルウィンドウの上段左側にある鉛筆型ボタンをクリックすると、実行モードに切り替わる。
実行モードになると右側にフラッパーディ領域が消える。 (編集モードでグリッド点を表示させた場合、(基本設定)グリッド点も消える。)

パネルはオンラインでのみ動作する。 TSMaster - panel relation graph
ビデオのノート:トレースオンライン再生状況でパネルの関係度が動作する様子。4倍速
注意:オンライン再生とオフライン再生時にミニプログラムで考慮する点
パネルは「オンライン」状態でのみ作動するため、トレースを再生し、パネルの関係図を見るためには、以下のように2つの方法のようにオンライン状態を作らなければならない。
ハードウェアを接続してオンライン状態でトレースを再生する。 ハードウェアなしでデータ分析を行う場合はできない。
仮想ハードウェアに設定し、トレースを再生する。 仮想ハードウェアの設定は、"メインメニュー/ Hardware/ Channel Selection" で行うことができる。 Channel SelectionウィンドウでHardware Channel SelectionにVirtual Deviceを選択する。

オンライン再生とオフライン再生はメッセージ送受信方向が反対になる。

yaw_rate_wsを計算するミニプログラムは、WHL_SPD11メッセージを"受信(Rx)"する時に計算をする。 WHL_SPD11 メッセージを送信(Tx)する際に計算するようにコードを修正しなければならない。
修正されたコードは以下の通りである。
# CODE BLOCK BEGIN Global_Definitions
from TSMaster import *
# import
import Databases as dbs
# global
WHL_SPD11_1 = dbs.TWHL_SPD11_1()
# function
def calc_yaw_rate_ws(ACAN: RawCAN) -> None:
'''
WHL_SPD11 メッセージを使用して yaw rateを計算します.
on_canfd_rx_WHL_SPD11() 関数と
on_canfd_tx_WHL_SPD11() 関数に 統一計算の取り扱いが必要であり、
別の関数で作りました。
on_canfd_rx_WHL_SPD11() 関数と on_canfd_tx_WHL_SPD11() 関数では、
この関数を呼び出して計算を行います。
'''
global WHL_SPD11_1
# WHL_SPD11 メッセージを WHL_SPD11_1 変数に入れます.
# WHL_SPD11_1 変数をまず宣言してくれなければなりません.
# 変数宣言を Global Definitionで します。
WHL_SPD11_1.FRawCAN = ACAN
# yaw_rate_wsを計算します.
whl_spd_rr_minus_rl = WHL_SPD11_1.WHL_SPD_RR - WHL_SPD11_1.WHL_SPD_RL
# メニューに rear trackは1.555mです.
# wheel_spd_rr_minus_rlを rear trackに割って yaw rateを求める.
# wheel speedは kphです. mpsに変換するために 1000 / 36000を掛けます.
# radianを degに 変換するために 180 / piを掛けます.
# 上記の演算を行うことは、 whl_spd_rr_minus_rlに 10.27を掛けることと同じである。
yaw_rate_ws = whl_spd_rr_minus_rl * 10.27
# ユーザー変数 calc.yaw_rate_wsに上で計算した yaw_rate_wsを入れます.
app.set_system_var_double('calc.yaw_rate_ws', yaw_rate_ws)
return None
# CODE BLOCK END Global_Definitions
# CODE BLOCK BEGIN Instance
Instance = MpInstance('panel')
# CODE BLOCK END Instance
# CODE BLOCK BEGIN On_CAN_FD_Rx WHL_SPD11 LTEsLTEsOTAy
def on_canfd_rx_WHL_SPD11(ACAN: RawCAN) -> None:
'''
WHL_SPD11 メッセージを 受信(Rx)をするたびに
WHL_SPD11 メッセージを 使用して yaw rateを計算します.
'''
calc_yaw_rate_ws(ACAN)
return None
# CODE BLOCK END On_CAN_FD_Rx WHL_SPD11
# CODE BLOCK BEGIN On_CAN_FD_Tx WHL_SPD11 LTEsLTEsOTAy
def on_canfd_tx_WHL_SPD11(ACAN: RawCAN) -> None:
'''
WHL_SPD11 メッセージを 送信(Tx)するたびに
WHL_SPD11 メッセージを 使用して yaw rateを計算します.
'''
calc_yaw_rate_ws(ACAN)
return None
# CODE BLOCK END On_CAN_FD_Tx WHL_SPD11
# CODE BLOCK BEGIN Step_Function NQ__
def step() -> None:
pass
# CODE BLOCK END Step_Function
結論
信号間の関係をリアルタイムでグラフにすれば、リアルタイムで試験条件を変更してデータ測定と処理サイクルを減らすことができる。 つまり、開発時間を短縮できる。
パネルを利用して関係図を描くことができる。
パネルはオンライン状態で動作する。 ハードウェアなしでオンライン再生をする場合、仮想ハードウェアを利用する。
オンライン再生とオフライン再生の場合、メッセージの送受信方向が反対だ。 これを考慮してメッセージ送信時に演算をするように作成されたミニプログラムは、メッセージ送信時に演算を行うように修正しなければならない。