バックナンバーはこちら。
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の各要素に明示的に名前を付けられるようにしたもの。
- 管理のし易さを見やすさの両方が得られる。
バックナンバーはこちら。
コメント