データの入力方法は?
- ◆プログラム作成ガイド
- ◆プログラムの開始
- ◆初期表示のデザイン
- ◆データの入力方法
- ◆クラスの作り方
- ◆データをメモリーに
- ◆ファイル読み書き
- ◆データの保存方法
- ◆ツリービューマウス右
- ◆画面表示インプリメント
- ◆複数のページ印字
- ◆DLL化する
- ◆エクセル似の入力
ここに紹介するプログラムは、WIN XP 2003/Windows 7 (32bits) - OS 環境でマイクロソフトのVisual Studio 2010 で作ったものです。
Windows XP/ Windows 7(32bits) での動作は確認済みですが…
計算するデータの入力はどの様にするのが良いでしょう。
いろいろのアイデアがあると思いますが、専用のダイアログを表示しそれで行うことにしました。
計算に必要なデータの種類
負荷計算に必要なデータの種類を分類してみましょう。
-
部屋の情報 (RoomData)
-
壁の詳細情報 (WallData)
-
窓の詳細情報 (GlassData)
-
その他負荷の情報 (OtherData)
最低限以上が入力情報になります。
部屋の情報
負荷計算を行うとき、一般的には部屋ごとに分類して計算を進めることが多いと思われます。
そこで、この情報を入力するためのダイアログを作成しました。
必要な項目は、階数・部屋名・床面積・天井高・設計室温・設計湿度があります。
任意の個数の部屋を扱う必要と、編集が必要なので、エクセルライクなグリッドを入力ツールとしてダイアログに貼り付けました。
MFC標準のリストコントロールでも良いのですが、任意のセルを編集したいためグリッドとしました。
グリッドの使い方は、プログラムTipを参照してください。このダイアログを扱うクラスは、CRoomDataDlgクラスとしました。
CRoomDataクラスとCRoomDataDlgクラス
CRoomDataDlgクラスは、部屋情報入力用のダイアログを作成するクラスです。
このメンバ変数には、m_RoomArray というCRoomDataを扱うアレーを持たせました。
CArray <CRoomData, CRoomData> m_ArrayRoom;
任意個数のデータを入力する必要があるため、入力したデータは、CArrayクラスを使いことにします。
CArray クラスは、C 言語の配列に似ていますが、必要に応じて動的に配列の縮小や拡張ができます。
CRoomDataは、部屋情報をまとめたクラスです。
CRoomData クラスのメンバ変数は、
-
CString m_storey; 階数を格納する文字列
-
CString m_roomname; 部屋名を格納する文字列
-
CString m_floorarea; 床面積を格納する文字列
-
CString m_ceiling; 天井高を格納する文字列
-
CString m_temp; 設計室温を格納する文字列
-
CString m_rh; 設計湿度を格納する文字列
-
CString m_status; 簡易負荷計算が完了したかどうかの状態を表します
-
CSimpleData m_simple; 簡易負荷計算用のデータ格納
-
COtherData m_other; 詳細負荷計算用のその他データ
-
CArray<CWallData, CWallData> m_ArrayWall; 詳細負荷計算用の壁データ
-
CArray<CGlassData, CGlassData> m_ArrayGlass; 詳細負荷計算用の窓データ
1~6がRoomData項目ですが、壁・窓・その他は部屋に追従して持つデータですので、合わせて持つことでデータのハンドリングが容易になります。
各データは、全て文字列データとしました。理由は、空白と‘0’を区別して保持できることにあります。
文字列としないと、空白を入力した時自動的に‘0’に置き換えられる為、使い勝手が良くない為です。
入力するコントロールツールは、MsFlexGridと呼ばれるアクティブXコントロールを使いエクセル調の入力ツールとしています。
しかし、各セル上での文字編集は出来ないので若干不満もあるのですが、意欲のある方は変更してみてください。
文字入力の標準EditBoxをコードで指定セル上に移動させれば出来るはずです。 その他工夫した点は、入力データを判定するルーチンです。
-
数値として有効な文字列の判定 Inspect_nData(CString data)
-
3桁ごとにカンマを自動的に振る機能 nci(int n, double value)
-
カンマが付いた文字列を数値に置き換える関数 atof_e(CString str)
これらの機能は、汎用的に使えると思い、DLL(HayFunc.Dll)として別に作りました。
ここで、最も手軽にデータクラスをインプリメントする手法を紹介します。
例えば、CRoomDataDlgクラスは、CRoomDataクラスメンバをベースにデータのやり取りを行います。
そこで、CRoomDataDlgクラスのヘッダーファイルの冒頭に、CRoomDataクラスをコーディングすると簡単です。
///////////////////////////////////////////////
// ************************** RoomData Class
class CRoomData : public CObject
{
public: // 変数を初期化する
CRoomData( ) {
m_storey = "";
m_roomname = "";
m_floorarea = "";
m_ceiling = "";
m_temp = "";
m_rh = "";
m_status = "Yet";
};
CRoomData( const CRoomData& s ) { *this = s; };
~CRoomData( ) {};
クラスを‘=“演算子が使えるようにする
const CRoomData& operator = ( const CRoomData& s ) {
m_storey = s.m_storey;
m_roomname = s.m_roomname;
m_floorarea = s.m_floorarea;
m_ceiling = s.m_ceiling;
m_temp = s.m_temp;
m_rh = s.m_rh;
m_status = s.m_status;
m_simple = s.m_simple;
m_other = s.m_other;
m_ArrayWall.Copy(s.m_ArrayWall);
m_ArrayGlass.Copy(s.m_ArrayGlass);
return *this;
};
///////////////////// RoomData // 変数宣言
CString m_storey;
CString m_roomname;
CString m_floorarea;
CString m_ceiling;
CString m_temp;
CString m_rh;
CString m_status;
CSimpleData m_simple;
COtherData m_other;
CArray<CWallData, CWallData> m_ArrayWall;
CArray<CGlassData, CGlassData> m_ArrayGlass;
};
このコーディングの方法は、汎用的に使え便利なやり方です。
CWallDataクラスとCWallDataDlgクラス
CWallDataは、壁情報をまとめたクラスです。 CWallDataDlgクラスは、壁情報入力用のダイアログを作成するクラスです。
壁よりの熱貫流を計算するには、
壁の面積 x 熱貫流率 x 相当温度差(実効温度差) ですが、
方位や壁の構造より相当温度差(実効温度差)を計算する為の情報が必要になります。
壁の熱貫流は、壁の構造などにより応答時間が変ってきます。 壁の密度や表面の状態を設定し、応答計算をして決めるのが良いのですが、本プログラムは簡易応答係数法を用いて行いました。 空調衛生工学便覧などで紹介されている、電卓を使って行う簡易計算です。
私が扱っている負荷計算は、工場などが多く、これらの壁よりの熱貫流は全体の負荷の10~20%しかなく、細かな計算がそれほど大きく影響しない為です。正確な計算をお望みならば、この辺を改造して下さい。
CWallDataクラスのメンバ変数は、
-
CString m_orient; 方位を保持する文字列変数
-
CString m_type; 壁の種類を保持する文字列変数
-
CString m_wallarea; 壁の面積を保持する文字列変数
-
CString m_uf; 壁の熱貫流率を保持する文字列変数
-
CString m_tempdeff; 相当温度差を保持する文字列変数
-
CString m_dnsty; 壁の密度を保持する文字列変数
全てのデータは、CRoomData同様文字列としています。
ここで工夫した点は、事前に壁の構造に該当する熱貫流率表を登録しておき、壁を選択したら自動的に貫流率が入力されるようにしました。
またデータの入力をすばやく出来るように、グリッドでマウス右クリックするとクイックリスト(方位・壁)が表示されるようにしました。
この表は外部ファイル(Component Data.cmp)とし、ユーザーが必要に応じて追加編集できるようにしてあります。
このファイルを作成編集するクラスを、CWallDompDlgとしました。
このクラスは、ダイアログにリストコントロールを貼り付けてつくりました。作り方については省略します。
CGlassDataクラスとCGlassDataDlgクラス
CGlassDataは、窓情報をまとめたクラスです。
CGlassDataDlgクラスは、窓情報入力用のダイアログを作成するクラスです。
CGlassDataクラスのメンバ変数は、
-
CString m_orient; 方位情報を保持する文字列変数
-
CString m_gf; 総合透過率データを保持する文字列変数
-
CString m_w; 窓の幅を保持する文字列変数
-
CString m_h; 窓の高さを保持する文字列変数
-
CString m_type; 日影を計算する為の窓形状を保持する文字列変数
-
CString m_d; 庇などの奥行きを保持する文字列変数
-
CString m_h1; 日影計算の為のデータ保持文字列変数
-
CString m_h2; 日影計算の為のデータ保持文字列変数
-
CString m_w1; 日影計算の為のデータ保持文字列変数
-
CString m_w2; 日影計算の為のデータ保持文字列変数
窓よりの熱貫流計算は、ちょっと複雑です。窓ガラスよりの熱貫流は、
-
ガラスを直接透過して進入する熱
-
窓ガラスが熱せられ、その伝導熱と室内に輻射されるもの
-
大気温度と室内温度差による熱貫流
更に、庇や周囲による日影を考慮しないで計算すると、負荷が必要以上に大きくなります。
方位にもよりますが、窓よりの熱進入は空調負荷全体に及ぼす比率が大きい為出、来るだけ正確に行う必要があります。
庇の形状分類は、「オーム社出版 パソコンによる空気調和計算法 - 工学博士宇田川光弘著」 文献を参考に拝借しています。
データの種類も多い為、分かり易いようにスケッチをダイアログに貼り付けてみました。
COtherDataクラスとCOtherDataDlgクラス
壁・窓以外の熱負荷を扱うクラスです。
COtherDataクラスは、COtherDataDlgクラスのヘッダーファイル先頭に書いてあります。
メンバ変数は以下です
-
double m_LightUnit; 照明の床面積当りの単位負荷量
-
int m_PeopleNo; 人間の数
-
double m_PeopleShUnit; 人間の単位当りの顕熱量
-
double m_PeopleLhUnit; 人間の単位当りの潜熱量
-
double m_McDf; 機械負荷の総合稼働率
-
double m_McUnit; 単位面積あたりの機械負荷量
-
double m_McTotal; 機械負荷合計値
-
double m_Infilt; 隙間風による負荷量
-
double m_InfiltEx; 室内特殊排気量
-
double m_FaUnit; 床面積当りの取り入れ外気量
-
double m_FaQty; 取り入れ外気風量
-
BOOL m_radIndex_Light; 照明負荷の経時変化を考慮するかどうか
-
BOOL m_radIndex_People; 人間負荷の経時変化を考慮するかどうか
-
BOOL m_radIndex_Mc; 機械負荷の経時変化を考慮するかどうか
-
int m_LightPattern[24]; 照明負荷の時間ごとの負荷率
-
int m_PeoplePattern[24]; 人間負荷の時間ごとの負荷率
-
int m_McPattern[24]; 機械負荷の時間ごとの負荷率
大きなダイアログを作り、照明負荷・人間の負荷・機械負荷・隙間風負荷、更に導入外気量を扱うことにしました。
照明負荷・人間負荷・機械負荷は簡易計算と詳細計算のどちらか選択できるようにして、詳細計算では、時間とともに変化するので、負荷率をパーセンテージで与える方法にしました。
隙間風は、直接空調負荷に影響するため外気とは別に計算します。導入外気量は、隙間風・排気・法定上の必要外気量のうち大きい物を外気量としました。
その他、人間の単位当りの負荷量をコンボボックスより選定出来るようにしました。
値は、「井上著 空気調和ハンドブック-丸善出版」 のデータを室温で補間近似した式(このHPで紹介しているMFIプログラムで補間)を組み込みました。
隙間風算定は、温度差による貫流が簡単に算定できる機能も持たせました。 玄関ホールや冷蔵庫の負荷計算で近似的に使えると思います。
工場の負荷計算は、機械負荷の算定次第で大きく変化するため、更に細かくデータを入力し、総合稼働率を計算できるようにしたいと考えています。
ページ先頭に戻る
最終更新日: 2020/02/04