Day6

地盤の許容支持力の計算

Topへ

Day5へ

Day7へ

はじめに

前回、支持力係数の算出ができたので、調子にのって、地盤支持力の計算をするソフトを作成することにしました。
最後に、例として、施工時の重機の安全性を検討したいと思います。

Step1

地盤の許容支持力の計算式

支持力の計算式は以下のとおりとなります。

image

それぞれの変数等の意味は以下のとおりとなります。

image

支持力係数の算出に比べればかわいいもんです。
でも慎重にやっていくつもりです。

Step2

入力部分

image

今回も少しずつ形作ろうと思います。まずは、入力部分まで作成していくことにします。
「Visual Studio」を起動し、いつもどおり「Windowsフォームアプリケーション(.NET Framework)」を選択し「次へ」ボタンを押します。
画面が開いたら、イメージ図だけとりあえず先に表示するようにしました。

image

入力データは、計12個ありますので、頑張ってそれに対するテキストボックス(上から順にtextBox1~textBox12)を作成します。

image

選択データは今回一つなので、コンボボックスを一つ配置します。
選択内容は基礎底面の形状になります。

image

コンボボックスに選択項目を追加します。
プロパティの「Items」を選択し、そこに選択項目を入力します。
これで、起動時に選べる状態になります。

単位体積重量は、地下水以下の場合、水中の単位体積重量を入力する必要があります。
なので、間違わないように、横にボタンを配置し、メッセージが出るようにしたいと思います。
ボタンは、テキストを削除し、画像のみの表示にします。プロパティの「Backgroundimage」で画像を選択し、その下のプロパティを「Stretch」にします。

image

Step3

入力部分のコード

これまで作ってきたソフト同様、数字のみしか入力できないように制限をします。
各テキストボックスボックスのプロパティで「イベント」(カミナリボタン)を押して「KeyPress」をダブルクリックします。
そこに、画像に示す内容を書きます。

image
image image

注意ボタンを押すとメッセージを表示するようにします。
フォーム上の注意ボタンをダブルクリックして、画像のコードを入力します。
これで、地下水位以下の場合の注意喚起をするようにします。
同様に下のボタンも同じコードを入力します。

Step4

全角から半角に変換する準備

image

これまではしてこなかった処理を追加したいと思います。
現在の、テキストボックスは数字の入力制限をしていますが、残念ながら全角数字も入力できます
全角数字が入力された場合、計算処理ができずエラーが発生してしまいます。
そこで、ここでは全角を半角に変換できる命令文が書けるようにその準備をします。
ソリューションエクスプローラーの「参照」を右クリックします。
そうするとメニューが表示されるので「参照の追加」をクリックします。

image

「参照マネージャー」ダイアログが表示されますので、「アセンブリ」を選択し、表示されるアセンブリの一覧から 「Microsoft.VisualBasic」を選択し「OK」ボタンをクリックします。

image

コードを書く画面に移動し一番上の方に「using Microsoft.VisualBasic;」を追加します。
これで、全角を半角にする命令文が書けるようになります。

Step5

支持力係数の計算とクラス

image

今回の支持力を計算する式にも支持力係数を必要とします。
支持力係数は、前回作成した内容は流用すれば良いのですが、それをそのまま入力するとコード自体が増え 見にくくなります。そこで、「クラス」というものを使います。
「クラス」はイメージとして「分業制」のようなもので、建設業界で例えるとある工種を下請けにお願いする感じだと思います。
この工種のことを「クラス」というイメージで捉えても良い気がします。

image

実際に、新しいクラスを追加したいと思います。
ソリューションエクスプローラーの「地盤の許容支持力」のところで右クリックします。
すると、画像のとおり、選択できる画面が出てきますので、「追加」→「新しい項目」を選択します。

image

「クラス」を選択し、名前を入力します。
名前の先頭文字は大文字にする必要があるようです。今回は「Supportfactor.cs」としました。
名前を入力したら「追加」ボタンを押します。

image

コードが書ける画面が現れます。
ここに、支持力係数を計算するコードを入力していきます。

image

クラスの構成は、主に、変数と関数の2つのようです。この変数や関数のことを「メンバー」というようです。(メンバー変数、メンバー関数)
今回の場合だと、画像のとおりとなります。
まず、メンバー変数を用意します。頭に「private」を付けていますが、これは、このクラス内でしか通用しない変数になります。 逆に、「public」を頭に付けると、このクラス以外でも通用する変数になるようです
次に、メンバー関数を書いています。(最初の部分だけですが)
関数名は「SetValue」にしてます。関数の場合は、関数名の後に( )を付けます。今回の場合は、値を受け取りたいので( )内に 受け取った値を格納する変数も入れています。また、頭に「public」を付けていますので、他のクラスからもアクセス可能となります。また、「void」 という言葉を付けていますが、普通この箇所に変数の宣言と同様、型(int等)を指定するみたいですが、この関数は型なしということで、「空」という意味の「void」 を使用しています。
この関数では、最初に値(ph~pt)を受け取って、受け取った値を計算するものになります。わかりづらいですが、最初の認識ではこのくらいで良いと思います。
実際、おいさんも良くはまっていません。

image image image

関数「SetValue」内の続きです。前回のコードをそのまま流用しています。

image

最後に支持力係数を他のクラスに届けるための関数を3つ作成しました。
中身は、単純で「return」文を使用します。
「return」文は、その関数の終了と結果値があればそれを返す役割があるので、この一文でそれぞれの支持力係数を他のクラスに届けることができます。

Step6

支持力係数の計算クラスの利用と表示

image

支持力係数を計算するクラスを作成したので、その計算結果が受け取れるか確認します。
まず、フォームのレイアウトを作成します。
支持力係数は3つあるので、3つのテキストボックスを用意します。

image

次に計算実行を作成しますが、これまでと同様のボタンではなく、少しおしゃれにメニューバーを使ってみたいと思います。
ツールボックスから「MenuStrip」を選択しフォームへドラックアンドドロップします。

image

「MenuStrip」を貼り付けると画像のとおりとなります。
画面上部にメニューバーが表示されていることがわかると思います。その中に「ここへ入力」というテキストボックスのような ものが表示されていまが、まさにここに表示したい内容を入力していきます。

image

作りたいメニューの項目を入力します。
とりあえず、「ファイル」と「計算」を作成し、「計算」の下の階層に「計算実行」を作りました。
「ここへ入力」は勝手に追加されるので、ここでは項目を入力するだけの操作になります。

image image

テキストボックスであれば名前はtextBox1など、自動で名前を付けてくれます。メニューの場合も同様に 自動で名前を付けてくれます。
ただし、画像のとおり変な名前になりますので、名前を変更します。
「計算実行」を選択して、そのプロパティの「(Name)」を「calculationRun」に変更しました。

image

ここで修正です。
上載荷重を入力する箇所が抜けていましたので、画像のとおり修正しました。

image

「計算実行」をダブルクリックして、コードを書く画面にします。
まずは、各テキストボックスに入力漏れがある場合の処理を書きます。
テキストボックスに値がすべて埋まっていたら、その値を各変数に格納します。
ここで使用する変数は、文字型にしました。なぜかというと、この後に格納された値を全角から半角に変換したいためです。
その変換する命令文が文字型でないといけないので、あえて文字型にしています。

image

全角数字がある場合に半角数字に変換するコードを書きます。
変換する命令文は画像のとおりになります。
その後、文字列を数字に変換しています。

image

各変数の計算をしています。
αとβだけは形状により値が変化するので「switch」文を使用しています。

image image

いよいよクラスとの連動になります。
まず、クラスの機能を格納する変数を宣言します。今回は「spf」としました。また、変数の型ですが、クラス自体を格納するので クラス名すなわち「Supportfactor」が型名になります。
次に、この変数にクラスを格納します。ただし、ここで「new」という一文をつける必要があります。この「new」をつけることを 「インスタンス」、日本語でいうと「実体化する」という意味があるようです。
非常にわかりづらいですが、別のクラスを作成した時点では、まだ、下請けさんに図面を渡したに過ぎないイメージのようで、実際に 施工を開始しているわけではないようです。
なので、このままだとクラスの機能は使えないので、施工開始・完了をしてもらう必要があります。この施工開始・完了するよう指示することを「new」で命令 するようです。
これで初めて、そのクラスの機能を使用できるようになるようです。
インスタンスにより支持力係数算出クラスが使えるようになったので、まず、そのクラスに値を渡します。「SetValue」関数は「public」なので、ここでも連動可能になります。なので この「SetValue」関数に値を渡します。
値を支持力係数算出クラスに渡したので、計算結果を受け取ります。「Get・・」関数で値を受け取ります。これで支持力係数の取得が完了します。

image

ここまでで、一度動かしてみたいと思います。
画像のとおり全角数字を入力してもエラーなく動いています。また、支持力係数も無事表示されています。

Step7

地盤の許容支持力の計算

image

まず、画面のレイアウトから行います。
支持力計算結果出力用のテキストボックスを用意します。
あとは、この算出された支持力に安全率を掛ければ良いのですが、調べてもどの安全率がよいかわかりません。
なので、3つの安全率で計算した場合ということにしました。そのほか、判定表示用のラベル(label35,36,39)を用意します。

image

コードに移ります。地盤の許容支持力を計算します。計算結果を変数quに格納しています。
次に。各々の安全率で支持力を計算しています。

image

判定結果を表示します。
まず、最初にラベルの存在を「true」にし画面上に表示させます。
次に判定の「OK」か「OUT」を表示させるのですが、ここで、新たな技「String.Format()」関数を使います。
これは文字列の途中に変数を入れ込むことができる方法で波括弧{}に変数が入ります。
波括弧内{0:#.##}の数字は順番の番号で0、1、2・・・と増やせます。また、コロンの後に表示形式を指定できます。今回は小数2桁までとしています。
これで計算実行のコードは終了になります。

image

フォームをダブルクリックしてコードが書ける画面を表示させます。
ここでは、ソフト起動時の処理が書けます。
Label35、36、39は起動時に非表示にしておきます。

Step8

調整

image

コンボボックスにキー入力ができないようにします。(選択のみ可能)
コンボボックスのDropDownStyleプロパティをComboBoxStyle.DropDownListにします。

image

テキストボックスの表示を右寄せにします。
テキストボックスのプロパティの「TextAlign」を「Right」にします。

image

フォームの最大化を制限します。
フォームのプロパティの「MaximizeBox」を「False」にします。

image

ソフト起動時に画面中央に表示するようにします。
フォームのプロパティの「StartPosition」を「CenterScreen」にします。

image

フォームサイズを固定します。
プロパティの「FormBorderStyle」を「FixedSingle]にします。

Step9

参考値を表示する

image

現場で仕事をしていると、なかなか土質定数について触れることがなく、肌感としての数値を持っていませんでした。
なので、概略的に検討する場合の一助になるように土の参考値を表示しようと思います。
参考値として表示する項目は、画像のとおり内部摩擦角と単位体積重量の2つです。
画像のとおりメニューバーに追加することにしました。

image

フォームを追加します。
ソリューションエクスプローラー上で右クリックし、追加のフォームを選択します。

image

再度フォームを選択します。
名前はそのままForm2としました。

image

同様の手順でさらにフォームを追加します。
名前はForm3のまま使用します。

image

画像はForm2になります。
Form2に内部摩擦角の表(画像)を貼り付け、「閉じる」ボタンを作成しました。

image

画像はForm2の「閉じる」ボタンが押された場合のコードになります。
単純に、このフォームを閉じる内容になっています。

image

画像はForm3になります。
Form3に単位体積重量の表(画像)を貼り付け、「閉じる」ボタンを作成しました。

image

画像はForm3の「閉じる」ボタンが押された場合のコードになります。
ここでも同様に、このフォームを閉じる内容になっています。

image

メインフォーム(Form1)に戻ります。
相変わらず、メニューバーに自動で付される名前が長いので変更しました。
内部摩擦角の名前を、「mIAngle」としました。

image

単位体積重量は、「mUVWeight」にしました。

image

内部摩擦角が押されたときの処理です。
これが押されたら、先ほどのForm2を表示するようにします。
コードは画像のとおりです。書き方は、おまじないと思いまるまる覚えるしかないと思います。

image

同様に単位体積重量が押された時の処理です。
Form3が表示されるよにします。

image

試しに、内部摩擦角メニューを押してみました。
無事、Form2が表示されました。
ちなみに、この参考値は日本道路協会の「道路土工 擁壁工指針 (平成24年度版)」を参考にしています。

Step10

エクセルで計算結果を出力

image

これまでの自作ソフトは単に計算するだけのものでした。
それだけだとさみしいので、今回はエクセルに出力できるようにしたいと思います。
まず、出力ようのレイアウトを作成します。
画像のとおりメニューバーに追加することにし、名前を「eOutput」に変更しました。

image

次にエクセルの機能を使えるようにします。
ソリューションエクスプローラーの参照上で右クリックし「参照の追加」を選択します。

image

「COM」を選択し、「Micorosoft Excel --- Object Library」を選択し「OK」ボタンを押します。

image

設定の追加が完了したら、Form1のコードの初めに下記内容を追加します。
「using Excel = Microsoft.Office.Interop.Excel;」
これで、エクセルの操作が可能になるようです。

image image

フォームのメニューバーのファイル・エクセル出力をダブルクリックします。
そうすると、コードが書ける画面になりますので、画像のとおりエクセルに出力するコードを入力します。
内容としては、
Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbooks excelBooks = excelApp.Workbooks;
Microsoft.Office.Interop.Excel.Workbook excelBook = excelBooks.Add();
Microsoft.Office.Interop.Excel.Worksheet sheet= excelBook.Worksheets["sheet1"];
↑難しくてよくわかりませんが、エクセルを起動しsheet1のみあるファイルを作成するようです。
excelApp.Visible =true;
↑エクセル画面を表示させる命令文になるようです。
sheet.Cells[1, 1] = "地盤の許容支持力の検討";
↑セル1行1列目に「地盤の許容支持力の検討」を表示させます。

image

実際に、実行してみます。
無事、エクセルが起動し、文字が表示されています。

image

今回は、エクセルに出力するコードを書いていきますが、予期せぬエラーの発生の可能性もあります。
そのため、予期せぬエラーが発生してもソフトが強制終了しないように処理します。
上記の処理は「try~catch」文でできます。
まず、try{ }内に、エラーが発生しそうなコードを書きます。そこのコードで、実際にエラーが発生した場合は、try内のでの処理はそこで中断 され、catch文に移動します。そしてcatch文内の処理を実行します。
今回は、エラー内容を表示するだけの処理にしました。

image

ここで、計算過程の変数を表示しようと思いましたが、ほとんどの変数は「計算実行」内で宣言しているため 、この「エクセル出力」内では使用できない状態になっています。
なので、1階層上で別の変数を宣言し、その変数に代入することによって、値を表示できるようにしようと思います。
画像のとおり、新しい変数を宣言します。

image

支持力計算時に、先ほど宣言した変数に値を格納します。
これで、「エクセル出力」でも計算過程の変数の値が表示できるようになりました。

image

「エクセル出力」のコードの続きに戻ります。
気合いで、一つ一つ表示したい内容を書いていきます。
コードで書くと、文字数が多くて大変ですが頑張るしかありません。
まだまだ続きが残っています。(涙)

image

「エクセル出力」のコードの続きです。
これで、やっと入力完了です。

image

ここで、実行してみます。
無事エクセルが起動し、値も表示されています。

image

表示させるエクセルの一部に罫線を書きます。
コードは画像のとおりです。
また、列幅も併せて調整しています。

image

最終確認で再度エクセル表示を実行してみます。
無事エクセルが起動し、うまく表示されていると思います。

Step11

計算例

image

例として、55tのクローラークレーンの施工時の安全性を検討してみたいと思います。
クローラークレーンの足(クローラーと地面の接地面積)は5.5m×0.75mとし、片側に55t÷2=27.5t(275kN)かかるとします。
土質定数等は適当にします。
画像のとおり計算すると、すべてOUTの結果になりました。
こういう時は、敷き鉄板で養生する等の対策の検討が必要になるのでしょう。