idea Delphi ソース
準マルチ dll 関数と逆ポーランド法が実装出来た。そしてこれに入れ揚げていたら省エネアイテムの待ち行列が8件も出来てしまっていた。
関数の入れ子構造に不自由さが残っている。項目の前後以外の式標記にスペースを受け付けないなど完ぺきでないと言う意味であえて「準」と冠しているが、これでideaプログラムもバージョン7を数えた。ラッキーセブン・神学的完成の数字で区切りもよさそうだ。
計算事例という意味で、相関設定ページに多分使わないだろうというような式も多少強引に入れてある。相関式の変数という条件から考えるとこれでほぼ充分だろう。モニター画面幅に入りきらない演算式はもっと別の手法を考えるべきだ。
横道にそれるが、強引に入れた最後の式即ち、1号機の高再溶液エンタルピー = f ( 負荷率・冷却水温度) の寄与率が313件で99%になっている。濃溶液濃度 = f ( 負荷率・冷却水温度) は94%なのに (184件)。興味があったら御社の機械でやってみてください。
人間にとって式の視認性が悪かろうがどうしようが、余計な編集はせず (項目名の前後しかスペースを入れないで) ひたすら機械に判りやすい記述にしてください。この対策は後でじっくりやるかも。
しかし最低限のカバーは必要だろうが、想定されるあらゆるミス操作に対応しようとすると大変なことになり、またコードも更に見難くなるだろう。ある程度の技能者の操作と言う前提で端折らざるをえない。止まっても影響の無いプログラムだ。
式に関数を組み入れて記述したら、その関数を提供するdll名を基本設定表に入れてください。(実際にdllが妥当なところに存在しないと話は進まないということを、あえて注意する必要は無いだろうね)
これらの汎用演算が可能になったことで、筆者には更に次の課題に挑戦する手段が薬籠中のものとなった。即ち、準リアルタイムco2排出量グラフ作成プラットフォームの構築である。
「インバーター万能主義やピーク電力調整などで電気代が幾ら減ったかなど、単純に1つの指標などだけで判断せず、総合的効率分析の結果で評価出来れば、結果として御社の収支の向上にも繋がることになる」と事あるごとに言及してきたが、そのためのツールの姿の一つが「準リアルタイムCO2排出量グラフ」である。勿論経済性の計算も出来る。
しかし、熱製造システムは事業所毎に異なるから、演算式はユーザーに作成してもらうよりしょうがない。筆者に出来ることは、元ファイルを読み、ユーザーが記述した演算式を実行する環境を提供するだけである。今回期せずしてこれを実現できる手法を手に入れたことになっていた。
従って、そのシステムを構築することと、省エネアイテム待ち行列の紹介と、やるべき事が目白押しの状況となってきたのである。
実はideaのDelphiソース開示に当り、「格好・内容はともかく動けば良いんでしょ?」I shoot first and ask questions later.【メル・ブルックスの大脱走、ティム・マティスン】または、Keep on moving , that's my philosophy.【ポセイドンアドベンチャー2、サリー・フィールド】ポリシーで、自己流かつ場当たり的、更に他者の成果品や各所 tips の継ぎはぎ総体集プログラム (これがあるからメーカーさん持っていって、メーカーさん持って行ってと繰り返していたのである) を、出来るだけ恥ずかしく無い、見やすいものにしようにと色々と編集するつもりで居たが、このような背景からそちらにあまり精力が掛けられなくなって来た。従って最低限 (それ以下かも?) の体裁を整えただけでオープンせざるを得なくなった。
素人が自分の仕事を何とか合理化しようと組み上げたもの、という範疇でご笑覧(?)ください。とても著作権云々のレベルでは無い。それでもパスカルのわかる人の何らかのヒントになったり、立派なものにして活用いただければ幸甚である。
更に、これを機会にネイティブランゲージのパフォーマンスと、パスカルの簡易さと、Delphi の充実した環境が評価され、ファンが増えればこの素晴らしい言語を廉価で提供し、長年使わせてもらっている Borland 社への僅かではあるが恩返しとなる。えっ「これらのコードは Delphi のメリットを殆ど活かしてない。洗練されてない悪い見本で、却って逆効果だ」?
「中核の部分は煩雑・冗長すぎて読めない。また機能的にも満点ではないが、しかしまあこんなものだろう」と言う人は周辺のインターフェース部分から好みの体裁または既存ファイルシステムにマッチするように変更して行って下さい。それで馴れて行けば中央の改良にトライして見て下さい。
exeファイルの使用手順は次のようになる。
1 ダウンロード idea6.exe (25314.0K)を実行して、20070901~20071231間の擬似ファイルを、デフォルトの設定で'c:\test'に作成する
2 iniファイルダウンロード regset.ini (11.2K)をウインドウズシステムディレクトリーに置く。
idea6 で出来るものとは、上記溶液エンタルピの式などで異なる。
3 ダウンロード ltbrfunc3.dll (416.5K)を適当なパスに置く
4 ダウンロード idea7.exe (903.5K))を実行する
5 適応させたい既存のファイルがある場合は、設定を変更してiniファイルにセーブする
ltbrfunc3.dll と言うのは、今回の実行中リンクの前提として臭化リチウム溶液エンタルピー表のイニシャル処理が出来ないので (前の ltbrfunc2.dll は Excel 起動時にやっていた) 初めての関数アクセスの時だけ実施するように変更したものである。
さてidea7はDelphi6 personal だけでコンパイルできる。特別なコンポーネントは使いたくなかったが、GradGaugeだけはどうしても使わせてもらうことにした。これを使ってしまったら default の ProgressBar は使えない。
当然元ファイルのrc化は無し。取りあえずはIdea6で吐き出したファイルを読込むこととする。iniファイルダウンロード regset.ini (11.2K)はそうなっているから、'C:\WINDOWS\'か'C:\WINNT\'に置いて下さい。
また、BMPのマニュアルも不要だろう。
更に dll とのスピード比較のお遊びでidea6ではピルドインしてあった「Excel 関数 DLL」ページ関数群なども外した。
一方で、マルチ dll と逆ポーランド法のオーバーヘッドで演算パフォーマンスはかなり悪化しているが、プログラムも必死に頑張っていることもあり、許容範囲とする。
ソースの概要は次の通りである。pas間の依存性を少なくするため、メイン以外から逆向き参照はコンポーネント代入としたが、配列全体が互いに関連していることから、無駄な抵抗になってしまった。
procedure や function の頭が揃ってなくてみっともないが、自動生成のものはスペース付き、筆者作成のものはスペース無しとして区分している。また begin ~ end の様式が奇異に感じるかもしれないが、筆者にとっては出来るだけ広い行が眺められた方が判読し易い。これらは揃える手間を省いた言い訳ではない ۵
また読者が後々ブロックごと{}で消したい時のため、コメントは全て//としている。
scdata.pas
下のpasに含まれる機能以外は何でも面倒見ているので盛りだくさん。
コンポーネントサービス・ファイル検索読込み・エクセル転送・類似パターン検索機能・pick最終表示など。
memo3とはmemo2は逆ポーランド法作業用のTstringList として使用しています visible:=False ですが True にすれば状況が見えます。
regsuppascal.pas
相関計算と、ポリゴン作成。
相関計算は「高精度重回帰分析について」ページに既述の「Visual Basic による工学計算プログラム」(黒田英夫殿著 CQ出版社)を、辛うじてPasに移植できたもの。従ってロジックを説明できる技能は筆者に無く、単なる機械的翻訳者。実際に動くだけ英語の機械翻訳よりは上だろう。必要なら、詳細は上記図書を入手し各自解読願いたい。加算式だけに限定しているし、じっくり見ていけばかなりの誤訳があると思われる。確度に自信が持てるのは、立体で見てデータの真ん中を相関曲面が突っ切っているという点だけである。
ポリゴン作成はpolygon3d、polygon4d、polygon43d、polygon3dduo と分かれているが、それぞれ純3D表示用,4D表示用,4Dを狙ったが変数落ちで3Dになってしまった場合の表示,3D対3D対比表示用として別もので作成してある。
これらを分ける必要性は、4Dの場合は離散曲面軸の指定により横・奥行き軸への対応変数が変るなどの例から、それぞれにより計算手法が少しずつ異なってくることを想像すれば理解できるだろう。
一本化も可能だろうがそれでなくても見通しの悪いプログラムが見向きもされなくなってしまうだろう。「今でもそうだ」って ۵
mygl.pas
「3D-FFT」などでも使用するOpenGL関係表示機能群。
上と同じ理由で DrawWithOpenGL と DrawWithOpenGL4d に分かれている。また 3D-FFT など筆者のOpenGL関係ユーティリティは全てこの中に含まれるからideaでは不要なものも散見される。
1年8600時間および離散局面軸12枚と言うスペックを課したため配列は大変なことになってしまった。ポリゴンだけで8600×6+60×60×12としたら10万になってしまう。それぞれのポリゴンに対し、4隅のポイントナンバー、離散曲面軸のデータグループのどれに入るか、描画するか否か、ピックされたか否かcontour表示するか否かなどの配列があり、またその4倍のポイント座標が要る。隣接ポリゴンのポイントを共有できるようにすればかなり少なくなるんだろうが現時点で対応してない。
メモリーリソースが心配なので、ideaでは使用しないGL_SMOOTH 用法面配列などを不使用にしているが、上記対策は急務なのかも知れない。離散局面軸数は1桁台が実用的にも妥当な線だろう。不要ならどんどん減らしてください。
dlllink.pas
dll 関数と逆ポーランド法関連の機能。
関数のある演算の最後は括弧止めにしてある。即ち f (○・○) を実行したらそれでおしまい。更に加工しない。
また受け渡しデータのタイプは double に限っているが、そこを変えればどのようにもなる。但し文字列は ShortStrings しか使わない (えない。'CH4'などを入れて理論空気量・燃焼生成物や発熱量が出てくるのも作ったんだけど、あまり使い道が無い)。
colorlistadd.pas
150色の色調機能。最後の方のグラデェーションは4Dの離散曲面軸の色区分に使用している。「溶液結晶温度の挙動」ページのプログラムでも使用されているが途中色変化のスムーズでない繋がりがある。好みで直してみてください。
省エネ実務で疲れたら、3D対比の画面を作って曲面・データを好みの色に変えて楽しむ (曲面・データ表示チェックボックスを右クリックすれば出来る) だけでもヒーリング効果は無いだろうか。リラックスできて次の省エネステップに繋がるかもしれない。
400色以上の色彩データもあるが、実装してない。
しつこい様だが、この図で、AR2 と 3 の半量時の COP の差は冷却水量が AR2 は全量相当 AR3 は 全半量混淆であることに起因する。
中に小さな asm があるが、桁そろえが楽かなと思って使っただけである。
実は、Delphi プログラムのホットスポットを asm に移植していくとさらに数倍のパフォーマンスが得られる場合があるが、idea では主な仕事がファイルの読込みや Excel の御相手や dll とのオーバーヘッドで、余りその余地が無いので使ってない (データを全てリソースにしておいて、1年分の検索2~3秒なんていうのなら面白いかも。但しデータ抽出結果のストリンググリッドに入れる前までね。ちなみに現在 asm 無し、Delphi コードだけで1年分リソースに対する検索8秒のスピードが得られている。実行ファイルは45Mbyteにもなってしまうが) 。
やるとすれば「君の瞳に乾杯」ページの字幕 OCR 位だが、これも 1.6GHz pentium4 で実用上差し支えないスピード (ビデオを普通に流して鑑賞しながら、リアルタイムで字幕の有無確認だけなら200ms、字幕の有無確認含め、読取・単語の辞書引き・テキストアペンド・字幕の bmp セーブで最大でも1000ms) が得られているから、何処まで速くできるかトライの面白さは有るが、ニーズは少ない。
Delphi コンパイル・実行手順は次のようになる。
0 上記exe実行可能状態であること
1 Delphi6以上の環境があること
2 ダウンロード GradGauge.pas (13.0K)を lib などに置き、GradGaugeコンポーネントをインストールする
3 ダウンロード GL.PAS (60.6K) ダウンロード GLU.PAS (16.3K)ダウンロード glut.pas (24.4K)が無ければ lib など適当なパスに置く
4 ダウンロード glut32.dll (232.0K)が無ければ適当なパスに置く
5 ダウンロード idea7.dpr (0.3K)、ダウンロード scdata.pas (111.1K)、ダウンロード scdata.dfm (78.0K)、ダウンロード regsuppascal.pas (134.7K)、ダウンロード mygl.pas (70.9K)、ダウンロード dlllink.pas (17.9K)、ダウンロード colorlistadd.pas (17.2K) の各ファイルを一括適当なパスに置く
6 idea7.dpr をコンパイルする
暫くは頻繁に内容が修正されて行くかも知れないので、メイン.pas の日付・コメントなどには注目してください。
また変数名などは、よりお気に召すようにファイル全体変換して下さい。但しその名称は全ての pas で使用されていないことを確認し、全ての pas に対して同様の変換を実施してください。
「Syo-ene」カテゴリの記事
- Plein Unite(2009.09.05)
- 障害はあれば有るほど燃える(2008.09.29)
- ターボ運転領域に於ける冷却塔特性(2008.02.13)
- 5D相関図。付いて来れるかな♪(2009.10.23)
- ターボ冷凍機(定速度ベーンコントロール型)の特性(2008.02.13)


コメント