UltraSuperDreadnoughts Delphi ソース
絶大なるご要望(アクセス5件で?You are flattering yourself.【将軍達の夜、ピーター・オトール】)に応えて、integratorp.exe (774.0K)の Delphi ソースを提示しよう。
その前に UltraSuper という言葉で思い出したので少し道草を食うが、 USC という言葉がある。 Ultra Super Critical (超々臨界圧)という言葉の略語である。省エネに深く関係している。
蒸気サイクルの熱効率は、下のように温度-エントロピー線図上再熱を含めた蒸気条件全体の熱量の面積に対して復水ロス面積が小さいほど効率が良くなる。従って蒸気条件は温度・圧力共に臨界点を遼に超えて、出来るだけ高くするのが望ましい。再熱を2度も行う場合があるのもこの理由からである。
しかし、高温高圧はボイラーチューブ・蒸気管・タービン高温部の鋼材に極めて厳しい条件となるためわが国でも、温度は1950年代末566℃(1050℃F)、圧力も10年後に24.1MPaで頭打ちとなっていた。
昔「一兆円の営業コンサル」やった時の部長代理Nさんなんか、この状況下「この四半世紀で火力蒸気サイクルの効率は進歩してない。この停滞は異常だ」というのが口癖で当時の蒸気条件を更に引き上げようと、鋼材を火力技術基準に無い材質するため特殊設計認可申請(基準にない材料を特別に使う認可を受ける)を出したりしていて、MITI 担の筆者などはよく走らされた。
勿論、技術面に口を出せる程頭は良くない。単なる courier である。唐突に「おいっ、今夜特認のMS係長のアポとってくれ」などと言い出すんだもの。
「そんなこと今ごろ急に言ったって、あんただけのMSさんじゃ無いよ」と毒づきながら、仕方なくタクシー(1日最高3回タクシーで皇居前を通った)を飛ばす。
係長に相談すると、「今夜はI社との打合せが入っているから空いてない」と言われるが「何とかなりませんか」。I社に電話しながら「どうしても行けない用事が出来ちゃった、御免、替わりは何時でも良いから」、こちらにOKサインを返してくれた。
USC の取組みは、Phase1(STEP1、STEP2)、Phase2とあり、それぞれの段階ごとに1100℃F、1200℃F、圧力も31.4MPa、34.3MPa、材質もフェライト系、オーステナイト系と設定されているが、まさにその計画の揺籃期の話である。
今、その実績が実機に反映されていることは、ご同慶の至りである。ここで頑張ってもらえば、電力のCO2原単位も下がる。
*** 「タクシー」または「MS係長」 ***
ある時、親善ソフトを開催した。その後会社の厚生施設で懇親会。そしてタクシー呼んで皆さんご帰還。
筆者も上司と一緒に帰り、タクシーを降りたが、気疲れのせいかどうも口直しに飲み直したい。もう一度関内方向に向かう車に手を上げた。止まったのが東京藤田観光。
珍しいので、何処まで行ったのと訊くと、横須賀の帰り。
運転手「今日は世田谷で一気に20台位呼ばれたんですよ」
「呼んだの、sasayanって言わなかった?」
「そうですそうです」
「それ俺だよ」
運転手もびっくり、こちらもびっくり、自分で呼んだタクシーの帰り舟に乗っちゃった。
乗って帰った横須賀の人は、誰あろう上のMS係長。
*******
さて Delphi ソースだが、前回より僅かマイナーチェンジをしたので触れておく。
1.冷却塔電力は、現在位置表示のポリゴンの上端が表示する電力になるように変更した。
2.選択した機器の現在位置を文字表示するようにした。また3Dパネルの配置換え。
3.ボイラー発停で再計算。
4.冷却塔もグラデェーション。 ソースを触れる方は、色の追加から始めてこの辺も自分のセンスで変更してみて下さい。
ソースは例によって「格好・内容はともかく動けば良いんでしょ?」「Keep on moving , that's my philosophy.【ポセイドンアドベンチャー2、サリー・フィールド】」で、自己流かつ場当たり的、更に他者の成果品や各所 tips の継ぎはぎ総体集プログラムだから、素人が自分の仕事を何とかレベルアップしようと組み上げたもの、という範疇でご笑覧ください。
若干オリエンテーションすると、ユニットは integrater.pas と colorlistadd.pas で出来ているが、後者は色彩関係だけだから、本体は1つで出来ている。たいした中身じゃないだろう(2900行)と、1つのユニットで記述することにした。分割するとそっちの管理で筆者の頭はややこしくなってしまう。
特にpick関係、および相関関係に余計なものがあるが、今後pickの活用、重相関の実行などの変更が予想されるので、忘備録的に残してある。pickは直ぐに実装した。下のビデオの通り。
要するに最終形態ではないという前提で提示してあるので、見難い点ご容赦願う。
最終形態ではないというのは、当該ツールに時間の概念が無いという事に因る。効率は判ったが「その様な運転が1日にどれだけ続くのか、蓄熱残量から後どれだけ可能なのか」が見えない。
それを実現するためには、既にある「運転支援システムの概要 」ページの機器運転スケジュール作成プログラムようなツールとの統合が必要である。あの時は同等レベル以上のものを見たことが無かったが、謙遜して「こんなのは何処にでもあるだろうから、プログラムとして提示しない」と言った。冷凍機の効率的なものも表現されているが、「ひよこ」のようなもので、本プログラムと一緒になって初めて満足なものになり、胸を張ってアップロード出来る。それは省エネポイントの大半を表現する事になる。
そのプログラムが完成する時、当該カテゴリーも終わるだろう。
さて、OpenGL を実装するクラスとして Tgl が定義されている。これを機器分 Create して使って行く。 Create する時にOpenGLで描画するターゲットとして Panel を指定する。Panel は予め10個フォームに配置したものである。
また同時に、図形制御用のトラックバーの指定と、予め idea で計算した相関結果を、係数名・単位などと一緒に、使う形そのままでひたすら代入している。何の芸もない。
描画は最初にレンダリングコンテキストを Create しておくが、OpenGLで描画する前にインスタンス毎に wglMakeCurrent でカーレントコンテキストを作った後 Draw する。それさえやれば後は座標マトリクス変換、RasterFont 作成など全てOpenGL 1個の時と同様に描画できる。
勿論全てが Tgl クラスのプロパティ(やメソッド)である必要はなく、中にはクラスの外に出せるのもあると思われる。
筆者は努力して無いがもっと簡略化は出来ると思われるので、メーカーさんなどでPC負荷を軽量化しようとする時はトライしてみてください。
次に模擬機器の PanelSW は Panel 配列にして一々 Create しているが、使い方を見ればそんな必要は全く無い事が判る。配列のメリットが活かされていない。最初から貼り付けておく方が、Create した後に位置を指定するより余程楽である。特に今回データ表示窓と1ピクセルの関係で錯綜しているからなおさらである。
これは、例によって汎用性を追及し(「省エネの条件整備」ページの運転支援警報プログラムのモジュールのように)xlsファイルで PanelSW を記述して、プログラムで自由に作成・変更できるようにしたものの一部を流用したから、その特徴を全て持ってきてしまっている。
当該 Panel でマウスをクリックした時の onMouseUp は PanelsMouseUp に対応付けられており、3D図の選択や機器の発停を行う。onClick にしなかったのは、その区別のため右ボタンか左ボタンかの情報が必要だったからである。
PanelSW の外形は、リージョンを作っておきそれを setwindowrgn で Panel に適用する。 Panel のhandle は WindowFromPoint(pt) で取得しているので、実行ファイルを構築する時はスリルがある。pt の設定が外れると何にでもリージョンを設定してしまうので、Delphi 統合環境そのものや、トップウインドウのアイコンまでも、冷凍機やボイラーの外形を呈することになる♪
今回は使ってないが、「Dying to know!」と言う人が居るかも知れないので♪、ターボ形状とタンク形状のリージョンを作る function maketrrgn(Sender: TControl):hrgn; と function maketnkrgn(Sender: TControl):hrgn; をオマケに残しておく。
また「選択機器の相関式」も式および数値の形にリージョン加工してしまう。これは悪乗りと言うよりもともと3D図の上に表示していたものを、その機能も付けたまま持ってきたからである。
procedure plantcal; では、ただひたすらプラントの計算を行う。この中で機器のグラデェーションもやってしまっている。
ただ、冷凍機製造冷熱を直接入力としたため「運転支援システムの概要 」ページの機器運転スケジュール作成プログラムより単純化されてしまった。
実際には、オペレーターが冷水流量を制御しており、その結果冷水バイパスが流れると冷凍機入口温度が下がり、製造熱量も下がると言う計算を省いているからである。上記スケジュール作成プログラムと統合する時は統一されなければならない。
現在 774 Kbyte であるから、アップロード制限まで残り 250 Kbyte である。プログラムだけで殆ど一杯になるだろう。上記プログラムに必要な冷熱製造、需要、外気温度の10分データは1項目ずつ csv にして、1月分 18 Kbyte あるから、リソースとしていくらも乗らない。データ専用DLLの別建てにすれば何とかなるかも知れないが、さて如何するか。差分だけによる圧縮効果も期待出来ないだろう。
さて、コンパイルは「idea Delphi ソース」の時と同様であるが、特別なコンポーネントも使ってないのでより簡単で次のようになる。
1 Delphi6以上の環境があること
2 GL.PAS (60.6K) GLU.PAS (16.3K) glut.pas (24.4K)が無ければ lib など適当なパスに置く
3 glut32.dll (232.0K)が無ければ適当なパスに置く
4 integratorp.dpr (0.2K)、integrator.pas (100.8K)、integrator.dfm (320.1K)、 colorlistadd.pas (17.2K)の各ファイルを適当なパスに置く
5 integrator.exe を構築する
PanelSW の大きさを小さくする時は特にご注意を。リージョンをセットする Panel のhandle は、次のポイントから WindowFromPoint(pt)で得ているのでこれが目標を外すと、前述の通り他のウインドウのボイラー化、冷凍機化が起こる。
pt.x:=form1.left+PageControl1.left+TabSheet2.left+GroupBox2.left+pnl.Left+10;
pt.y:=form1.top+PageControl1.top+TabSheet2.top+GroupBox2.top+pnl.Top+31;
実行時のタイミングは凡そ次のようになっている。汎用で出来るようちょっと遅めにしてあるから手持ち無沙汰だろう。
FormCreate → OpenGL Create → Timer3・300ms → パネルスイッチ Create → Timer4・100ms → プラント計算 → Timer2・200ms → OpenGL描画 である。
また、フォームリサイズ時のタイミングは、ターゲットパネル再配置 → Timer3・200ms → OpenGL再描画 である。
実行ファイルの操作は前稿「UltraSuperDreadnoughts!OpenGL10基搭載!」を参照ください。
今3歳の孫が、OpenGLを自由に選択し、「F1」~「F6」や「PgUp↑」「PgDn↓」などでグルグル回して観察して喜んでいる。超弩級でも、幼児でも扱えて図形認識の教育にもなる。ツールはすべからくこうでなくては。
メーカーさん、お宅の製品、幼児でも触りたくなりますか?
「Syo-ene」カテゴリの記事
- 障害はあれば有るほど燃える(2008.09.29)
- ターボ運転領域に於ける冷却塔特性(2008.02.13)
- 5D相関図。付いて来れるかな♪(2009.10.23)
- ターボ冷凍機(定速度ベーンコントロール型)の特性(2008.02.13)
- 2020年までの温室効果ガス排出削減目標、05年比15%減!(2009.07.01)


コメント