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

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

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

はじめに

前回はDAQ listを一気に構築した。
DAQ listは概念上はやや難しいものの、
コマンドに関してはPyXCPが隠蔽してくれるので比較的楽に設定はできそう。

DAQ listが構築できたということは
今回はODT_ENTRYへの情報更新の話となるが、
その前にODT_ENTRYをPython上で管理する便利な手法について触れる。

登場人物

博識フクロウのフクさん

指差しフクロウ

イラスト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のデータ管理

太郎くん
太郎くん

流れとしては、次はWRITE_DAQかな。

フクさん
フクさん

コマンドとしてはそうだけど、
その前にPython上でのODT_ENTRYを管理する上で便利なデータ構造を教えておこう。

太郎くん
太郎くん

え!
そんな便利そうなものがあるのか?!

フクさん
フクさん

namedtupleってのを使うと楽になりそう。

まずはtupleって何よ?

太郎くん
太郎くん

namedtuple?
それは一体・・・。

フクさん
フクさん

名前が付けられるtupleだな。

太郎くん
太郎くん

そういう回答をされると今度は
tupleって何?
ってなるだけなんだが。

フクさん
フクさん

tupleは比較的一般的なデータ管理の名称のようなものだな。
Wikipediaにも載ってる。

タプルまたはチュープル(英: tuple)とは、複数の構成要素からなる組を総称する一般概念。数学や計算機科学などでは通常、順序付けられた対象の並びを表すために用いられる。個別的には、n 個でできた組を英語で「n-tuple」と書き、日本語に訳す場合は通常「n 組」としている。タプルの概念そのものも組と呼ばれる場合がある。なお、 n-tuple は数学のタプルを意味するほか、同様に double、triple などの拡張として倍数詞の表現にも利用される。

Wikipediaより(https://ja.wikipedia.org/wiki/%E3%82%BF%E3%83%97%E3%83%AB)
フクさん
フクさん

さらにpythonのtupleについても同ページで触れられている。

太郎くん
太郎くん

具体的にはどういう書き方になるの?

フクさん
フクさん

こんな書き方だな。

A=(1,2,'test')
print(A)

結果

(1, 2, 'test')
太郎くん
太郎くん

ほう。
数値と文字をセットに管理できるのか。
確かに便利そう。

namedtuple

フクさん
フクさん

で、このtupleの各要素に名前が付けられるのがnamedtupleってものになる。

太郎くん
太郎くん

これも具体例が欲しいなー。

フクさん
フクさん

こういう書き方になるな。
ちなみに、collectionsからnamedtupleをimportしておく必要がある。

from collections import namedtuple

Entry = namedtuple("Entry", "ListID ObjctID Type Size")
entry0 = (
    Entry(ListID=1, ObjctID=1, Type='word', Size=2),
    Entry(ListID=1, ObjctID=3, Type='sword', Size=2),
    Entry(2, 2, 'slong', 4),
    Entry(2, 4, 'long', 4),
    Entry(3,4,'Single',4),
)

entry0

結果

(Entry(ListID=1, ObjctID=1, Type='word', Size=2),
 Entry(ListID=1, ObjctID=3, Type='sword', Size=2),
 Entry(ListID=2, ObjctID=2, Type='slong', Size=4),
 Entry(ListID=2, ObjctID=4, Type='long', Size=4),
 Entry(ListID=3, ObjctID=4, Type='Single', Size=4))
太郎くん
太郎くん

おー!
なんか見やすい!
あと、tupleにデータをセットする時は名前を明示してもしなくても良いんだねー。

フクさん
フクさん

それにfor文でこういう回し方もできる。

for ListID, ObjctID, Type, Size in entry0:
    print("ListID=%d,ObjctID=%d,Type=%s,Size=%d"%(ListID, ObjctID, Type, Size))

結果

ListID=1,ObjctID=1,Type=word,Size=2
ListID=1,ObjctID=3,Type=sword,Size=2
ListID=2,ObjctID=2,Type=slong,Size=4
ListID=2,ObjctID=4,Type=long,Size=4
ListID=3,ObjctID=4,Type=Single,Size=4
太郎くん
太郎くん

なるほど。
複数の性質の異なる要素を一括管理しつつ、名前も明確だからぱっと見も分かり易い。
ってのが利点か。

フクさん
フクさん

これをODT_ENTRYの管理に使おうって話になるが・・・。
まぁ次回に説明だな。

まとめ

フクさん
フクさん

まとめだよ。

  • WRITE_DAQの前にODT_ENTRYのデータ管理の便利な方法について説明。
    • namedtupleと使う。
  • tupleは異なるデータを一組に管理する手法や構造。
  • namedtupleはtupleの各要素に明示的に名前を付けられるようにしたもの。
    • 管理のし易さを見やすさの両方が得られる。

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

コメント

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