【XCP】最小構成のMBD事例 第2章 その188【PyXCP⑩】

【XCP】最小構成のMBD事例 第2章 その188【PyXCP⑩】 事例
【XCP】最小構成のMBD事例 第2章 その188【PyXCP⑩】

バックナンバーはこちら。
https://www.simulationroom999.com/blog/model-based-of-minimum-2-backnumber/

はじめに

前回はWRITE_DAQをやると見せかけて、
ODT_ENTRYを管理するためのnamedtupleについて説明。
namedtupleはtupleの各要素に明示的に名前を付けられるようにしたもの。
管理のし易さを見やすさの両方が得られる。

このnamedtupleを使ってODT_ENTRYを分かりやすく管理しつつ、WRITE_DAQコマンドを投げて見る。

登場人物

博識フクロウのフクさん

指差しフクロウ

イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1

エンジニア歴8年の太郎くん

技術者太郎

イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1

ODT_ENTRYをnamedtupleを使ってデータ管理

太郎くん
太郎くん

前回はnamedtupleの話で終わったけど、
namedtupleを使えばODT_ENTRYが簡単に管理できそうだよね。

フクさん
フクさん

そうだね。
試しに太郎くんがODT_ENTRYを定義して見て。

太郎くん
太郎くん

まじか。

太郎くん
太郎くん

まぁでもXCP仕様でデータの名前は決まっているわけだから、
それに合わせて書けば良いんだよね。
だったらできそうか。

太郎くん
太郎くん

たぶん、こんな感じの書き方になると思う。

from collections import namedtuple

DaqEntry = namedtuple("DaqEntry", "daq odt entry bitoff size ext addr")
de0 = (
    DaqEntry(daq=0, odt=0,  entry=0, bitoff=255, size=4, ext=0xff, addr=0x00000004),
)
太郎くん
太郎くん

今回はOET_ENTRYが一個しかないけど、
複数ある場合はDaqEntry複数定義していけばOKなはず。

フクさん
フクさん

正解だ。

SET_DAQ_PTRとWRITE_DAQ

太郎くん
太郎くん

次は実際にDAQの更新かな。

フクさん
フクさん

SET_DAQ_PTRWRITE_DAQのコマンドで
メソッドも同様の名称でsetDaqPtrwriteDaqになる。

SET_DAQ_PTR → setDaqPtr(daq, odt, entry)
WRITE_DAQ → writeDaq(bitoff, size, ext, addr)

太郎くん
太郎くん

namedtupleを利用した書き方だとこんな感じか。

for daq, odt, entry, bitoff, size, ext, addr in de0:
    xm.setDaqPtr(daq, odt,  entry)
    xm.writeDaq(bitoff, size, ext, addr)

XCP Basicのコンソール画面

-> SET_DAQ_PTR daq=0,odt=0,idx=0
<- 0xFF
-> WRITE_DAQ size=4,addr=00000004h,FFh
<- 0xFF
フクさん
フクさん

うん。
ちゃんと設定できてそうだね。

太郎くん
太郎くん

でも、今回の書き方だと、
毎回SET_DAQ_PTRコマンドを投げちゃうんだよねー。

フクさん
フクさん

まぁCANの場合だと1ODTに載せらえるODT_ENTRYが大した数じゃないし、
毎回SET_DAQ_PTRコマンドを投げるのも仕方ないかもね。
XCPonEthernetとかだと1ODTに載せらえるODT_ENTRYの数が大幅に増えるので毎回SET_DAQ_PTRを投げるのは非効率ってのはあるかもだけど。

太郎くん
太郎くん

フクさんがその所感なら、別にいいか。

フクさん
フクさん

(ここを変にこだわってもメンドクサイだけだし)

まとめ

フクさん
フクさん

まとめだよ。

  • ODT_ENTRYをnamedtupleを使ってデータ管理してみた。
    • 今回は一個しかないのでほぼ効能はないが、ODT_ENTRYが増えてきた際には大きな効能が見込めそう。
  • 実際にSET_DAQ_PTR、WRITE_DAQ実施。
    • 問題なく動作。
    • 毎回SET_DAQ_PTRを投げるようなコードになってるが、とりあえずOK。

バックナンバーはこちら。

コメント

タイトルとURLをコピーしました