中国へ納品のために出張していた担当者が帰ってきた。いろいろ苦労したらしい。自分の不手際も原因の一部になっているので大変申しわけない。結局、現地でデータが出なかったので、来月にも別部隊が行くらしい。
ちなみに中国人の部下も行っていたのだが、帰りの飛行機で荷物が行方不明になってしまったそうだ。


次回の出荷製品をテストしていたテスターが、データが出ないと言うのでちょっと試しに測定してみた。
たしかに変なノイズが入っているので、回路担当者と一緒に回路を調べてみた。基板を外したりケーブルを抜き差ししたり、いろいろ触っているうちにノイズが消えた。結局原因はわからないままだが、おそらくグラウンドの接触不良ではないだろうか。

プログラムのほうは構造改革の進行中。クラスの独立性を高めるために、不要な参照を渡さないようにリファクタリング。測定プログラムは、測定装置をモデル化した形で構築してあって、最上位のシステムクラスが、装置の構成部品(アクチュエータ、可変電源、フィードバック制御系など)を包含(has a)している。構成部品同士はObserverパターンを使って互いにメッセージをやりとりする必要がある。そのため、自分達を包含しているひとつ上位のクラスへの参照をコンストラクタ引数として受け取る。これらの構成部品はさらに小さな部品を包含していることもある。この状態は、包含関係の上位にあるクラスが下位のクラスまで伝播していて、ある意味ループしている。

SystemClass <- DeviceClass <- ElementDeviceClass -
   |_____________________________________________|
            SystemClassを指すポインタ

ほとんどのオブジェクトはSystemClassへのポインタを必要としていないのだが、一ヶ所どうしても必要な場所がある。それはデータオブジェクトなのだが、データ自体もツリー構造をしていて、その末端にあるデータオブジェクトが、現在の装置の設定を保存するために、大元のクラスを参照している。ユーザーがボタンを押した瞬間に測定が実行され、その時点での状態を取得することが必要なので、現在のような構成になっている。
おそらくもっと良い設計があるのだろう。リファクタリングをしながらうまい方法にたどり着ければよいのだが。