はじめに
Step1
衝突荷重の追加
![image](images/br1.png)
衝突荷重とは、例えば擁壁にガードレールを設置している場合で、車両がそのガードレールに衝突した際に発生する荷重の
ことのようです。
なので、擁壁にガードレール等を設置する場合は、その荷重を見込んで安定計算をする必要があります。
また、画像のとおり車両用防護柵にも種別があるようで、採用した防護柵により荷重条件が変わるようです。(今回はたわみ性防護柵のみ検討します。)
![image](images/br2.png)
車両防護柵に種別があるのが理解出来たと思いますが、それでは実際にどの種別を選択すれば良いでしょうか?という
ことになると思います。
調べると、画像のとおりのようでほとんどの場合、BかCの種別になりそうです。
![image](images/br3.png)
車両防護柵の種別がわかったので、実際に設定する衝突荷重を決定する必要があります。
これは、画像のとおりで、擁壁工指針に掲載されています。
![image](images/br4.png)
衝突荷重の設定方法が理解できたので、実際にコードを追加していきたいと思います。
重力式擁壁の安定計算ソフトの「Form1」の上部に衝突荷重用の変数を宣言します。
宣言する変数は画像のとおりになります。
![image](images/br5.png)
デザイン画面を見てみると、衝突荷重を設定する隙間がなさそうなので、新しいフォームを作成して
そこで、衝突荷重の設定をしようと思います。
いつものとおり、ソリューションエクスプローラーの下の「重力式擁壁」を右クリックして「追加」を選択し、[新しい項目」を選びます。
![image](images/br6.png)
その中の「フォーム」を選びます。
名前はデフォルトの「Form3」のままにします。
![image](images/br7.png)
「Form3」のデザインをしていきます。
まず、ピクチャーボックスを貼り付け、そのプロパティのイメージを画像のように衝撃荷重の表を取り込みます。
![image](images/br8.png)
ラジオボタンとテキストボックスを画像のとおり配置します。
![image](images/br9.png)
テキストボックスが隠れるようにフォームサイズを縮小します。
また、ボタンを2個追加配置します。
![image](images/br10.png)
残りのデザイン関係の処理をします。
フォームの表示名を変更します。
ボタンの表示名を変更します。
フォームのプロパティの「MaximizeBox」を「False」にします。
ソフト起動時に画面中央に表示するようにします。フォームのプロパティの「StartPosition」を「CenterScreen」にします。
フォームサイズを固定します。プロパティの「FormBorderStyle」を「FixedSingle]にします。
![image](images/br11.png)
ラジオボタン1をダブルクリックし、コードの入力画面を開きます。
画像のとおり、テキストボックスに該当する衝撃荷重と作用高さを格納します。
![image](images/br12.png)
同様に他のラジオボタンもテキストボックスに格納する処理をします。
![image](images/br13.png)
「OK」ボタンをダブルクリックしコード入力画面を開きます。
まずは、ラジオボタンが選択されていない場合の処理をします。
この場合は、テキストボックスがブランクなので、それを利用します。
その際はメッセージボックスを表示するようにし、その後、クリックイベントから抜けるようにします。
![image](images/br14.png)
選択された衝撃荷重と作用高を変数に格納します。
また、2つのボタンともにフォームを閉じるコードを入力します。
これで「Form3」での作業は完了になります。
![image](images/br15.png)
「Form1」の上部で「Form3」の変数を宣言します。
![image](images/br16.png)
「Form1」の「計算実行」コードに戻ります。
未入力処理後に衝撃荷重機能のコードを追加していきます。
まずは、衝撃荷重を考慮するかメッセージボックスで確認し、考慮する場合は「Form3」を表示するようにします。
また、後ほど擁壁長さも必要になるので、そのために変数「shockFlag」を設けました。
また、衝撃荷重を考慮する場合、上載荷重は0として計算しないといけないので、衝突荷重を考慮する場合としない場合
の2つの安定性を確認する必要があります。(どちらか一方がOUTであるとその構造寸法では採用できないとなるため。)
![image](images/br17.png)
続いて擁壁長さを入力するため新しいフォームを作成します。
ソリューションエクスプローラーの下の「重力式擁壁」を右クリックして「追加」を選択し、[新しい項目」を選びます。
![image](images/br18.png)
その中の「フォーム」を選びます。
名前はデフォルトの「Form8」のままにします。
![image](images/br19.png)
新しく作成したフォームのデザインを行います。
デザインは画像のとおりとしました。
![image](images/br20.png)
恒例の入力制限をしていきます。
textbox1を選択し、プロパティのイベントマーク(雷マーク)を選択し、その中の「KeyPress」をダブルクリックしいます。
![image](images/br21.png)
お馴染みのコードになります。
![image](images/br22.png)
変数「wallLength」に入力された擁壁長さを格納します。
コードは画像のとおりとなります。
![image](images/br23.png)
「Form1」に戻ります。
コードの上部で「Form4」の変数を宣言します。
![image](images/br24.png)
「計算実行」イベントに戻り、「shockFlag」が「true」のとき「Form4」を表示するようにします。
![image](images/br25.png)
いよいよ衝撃荷重の計算を追加していきますが、その前にどういう計算になるか少し書きます。
画像のとおり、これまでの計算してきた荷重に加えて、新たに擁壁上部にたわみ性防護柵の衝撃荷重PとWが加わります。
Pは「Form3」で選択した車両用防護柵の種別により決まる衝撃荷重を擁壁長さで除した荷重になります。
Wはたわみ性防護柵を使用する場合に計上する荷重で、車両衝突時に支柱が変形し支柱中心部まで車両が乗り上げた場合に
車輪が擁壁天端を通過することを想定した荷重になります。
なので、擁壁天端に車両前輪荷重の25kNを擁壁長さで除した荷重で計算する必要があるようです。
この2荷重を加えてこれまで行った安定計算をしていきます。
![image](images/br26.png)
2荷重とその作用位置を格納する変数を宣言します。
「Form1」に上部に画像の変数を追加します。
![image](images/br27.png)
「計算実行」イベントに戻り、画像の位置に衝突荷重と前輪荷重の計算を追加します。
衝突荷重及び前輪荷重は単位当たりに直す必要があるようで、擁壁長さで除す必要があります。
![image](images/br28.png)
「計算実行」イベントの水平力、鉛直力及びモーメントの計算箇所に、画像の赤線のコードを追加します。
追加されているコードは、衝突荷重の部分になります。
![image](images/br29.png)
次に衝突荷重用の部材の安全性の計算をしていきます。
部材の安全性の照査は、コンクリートの曲げ引張応力度が最大となる擁壁天端で行います。
曲げ引張応力度の計算堰は画像のとおりになるようで、これをコードに追加していきます。
![image](images/br30.png)
まずは、変数を宣言します。
宣言する変数は曲げ引張応力度と許容曲げ引張応力度になります。
![image](images/br31.png)
「計算実行」イベントに戻り、画像の箇所に衝突荷重による断面の安全性の計算をしていきます。
まずは、曲げ引張応力度の計算をしています。
![image](images/br32.png)
次に、許容曲げ引張応力度の計算をします。
許容曲げ引張応力度は、設計基準強度を80で除すようです。さらに短期荷重なので1.5倍するようです。
![image](images/br33.png)
続いて、計算結果を出力するコードを変更していきます。
許容曲げ引張応力度の計算コードのすぐ下の箇所以降を変更していきます。
まず、衝突荷重荷重を計算されている場合、出力画面の表示を変えていきます。
と、その前に「Form2」のデザイン画面の「部材の安全性」内にあるラベルとテキストボックスのプロパティの「Modifiers」を
「Public」にします。これで、「Form1」のコード内でもこのラベルとテキストボックスの操作が可能になります。
![image](images/br34.png)
あちこち移動し大変申し訳ありませんが、「Form1」に戻りコードの続きをしていきます。
まずは、「shockFlag」が「True」の場合、つまり衝突計算が行われていた場合の「Form2」のデザイン画面の
処理をしてきます。
衝突計算結果は、1項目しか出力しないので、それ以外は非表示にし、表示する内容も変更するようにします。
![image](images/br35.png)
続きになります。
![image](images/br36.png)
次は、実際に計算結果を表示するコードを変更します。赤枠内は変更箇所になります。
![image](images/br37.png)
判定処理するコードの変更になります。変更する箇所は部材の安全性に係る箇所になります。
やはり、if文で場合分けして処理することにしています。
まず。既存のコードを「else」側に配置します。
![image](images/br38.png)
衝突の場合に判定するコードを追加します。
これで計算結果の出力は完了になります。
![image](images/br39.png)
続いては、「エクセル出力」のコードを変更していきます。
変更するコードの箇所は、画像のところになります。
![image](images/br40.png)
衝突計算がされている場合、今回の場合では「unitShockLoad」の判別で、「sheet.Cells[135, 12] = "土圧";」以降のコードを
場合分けします。
「sheet.Cells[135, 12] = "土圧";」以降のコードは「else」内に移動するようにします。
なので、以降は「unitShockLoad」がゼロでない場合のエクセル出力を入力していきます。
![image](images/br41.png)
「unitShockLoad」がゼロの場合を追加します。
![image](images/br42.png)
続きになります。
![image](images/br43.png)
まだまだあります。
![image](images/br44.png)
・・・・・・
![image](images/br45.png)
・・・・・・・・・・
![image](images/br46.png)
相変わらず面倒です。
![image](images/br47.png)
もう少しです。
![image](images/br48.png)
ゴーーーーーーール。
Step2
CAD図の出力
![image](images/br49.png)
メニューバーの「ファイル」に「DXF出力」を追加します。
名前を「dxfOutM」に変更します。
![image](images/br50.png)
ダブルクリックしコードの画面を表示させます。
まずは、一つ上に変数を宣言し、その値を格納してきます。
格納する値は、「ブロック積擁壁(後編)」を見てください。
それでは、恐ろしく長い「ENTITIES」までのコードを変数に格納していきます。
ここは、気合いの作業になります・・・・
![image](images/br51.png)
画像は最後の格納作業になります。
変数は、1160個になります。
![image](images/br52.png)
ここからは、DXFデータを保存処理をするコードを追加していきます。
今回も、保存先を決めるのにセーブダイアログを使用します。
なので、まずセーブダイアログをインスタンスします。
その下に、ダイアログの条件を設定します。
![image](images/br53.png)
すみません。宣言していない変数がありました。
コード上部に追加します。
追加する変数は画像のコメントのとおりとなります。
![image](images/br54.png)
つづきに戻りまして、ファイル処理をしていきます。
ここでは、ファイル名とパスが決定している場合、「result == DialogResult.OK」内に移ります。
その中で、「StreamWriter」を使用し、データを保存していきます。
データ数が多いので、繰り返し文を使い1行ごと書き込むコードにしています。
![image](images/br55.png)
すみません。さらに宣言していない変数がありました。
コード上部に追加します。
追加する変数は画像のコメントのとおりとなります。申し訳ございません。
![image](images/br56.png)
つづきに戻りまして、今度は座標を先ほど宣言した変数に格納します。
最少は、擁壁の座標を格納し、その次は基礎材の座標を格納します。ここで擁壁高が1m未満の場合は、基礎厚を15cmとし、それ以上
であれば20cmで描画するようif文で場合分けをするようにしています。
![image](images/br57.png)
座標も確定したので、実際に描画するコードを作成していきます。
これも「ブロック積擁壁」の時と同様関数を作成して、その関数を使用して描画するようにします。
最初は、線を描画する関数になります。
![image](images/br58.png)
文字を描画する関数になります。
![image](images/br59.png)
マークを描画するに関数になります。
![image](images/br60.png)
描画関数ができましたので、早速それを使用して描画します。
まずは、基礎と躯体部分の描画を行います。単純に線描画関数を使用して、そこに座標を指定しているだけになります。
![image](images/br61.png)
引き出し線の描画コードになります。
![image](images/br62.png)
締めの内容を保存すれば、DXFファイルの作成の完了になります。
![image](images/br63.png)
早速、dxfファイルを確認してみます。
jwcadで開くと、無事作図されていることが確認できました。
Step3
数量計算書の出力
![image](images/br64.png)
数量計算書をエクセルで出力できるようにしたいと思います。
数量は他の擁壁工と比較できるようにしたいので、20m当たりで算出したいと思います。
では、フォームデザインを行います。
メニューバーの「ファイル」に「数量計算書出力」を追加します。
名前を「quantityOutM」に変更します。
![image](images/br65.png)
フォームのメニューバーのファイル・数量計算書出力をダブルクリックします。
コードが書ける画面になりますので、画像のとおりエクセルに出力するコードを入力します。
コードは、いつもの
Excel.Application excelApp = new Excel.Application();
Excel.Workbooks excelBooks = excelApp.Workbooks;
Excel.Workbook excelBook = excelBooks.Add();
Excel.Worksheet sheet = excelBook.Worksheets["sheet1"];
excelApp.Visible = true;
になります。
![image](images/br66.png)
ここでも、予期せぬエラーが発生してもソフトが強制終了しないように処理しておきます。
「try~catch」文を書いておきます。
![image](images/br67.png)
ここからは、エクセル出力のコードを記載します。
まずは、ページ全体のレイアウトを作成します。
画像は、セルの結合→文字入力→罫線表示の順で処理しています。
![image](images/br68.png)
罫線処理の続きです。
まだ途中です。
![image](images/br69.png)
罫線処理の続きです。
これで最後になります。
![image](images/br70.png)
ここからは計算内容を表示するコードを入力していきます。
画像は、重力式擁壁自体の数量計算を表示するコードになります。
重力式擁壁の擁壁高さが2m以下の場合、コンクリートは人力打設で積算するので「小型擁壁(A)」と表示し、
2mを超える場合はポンプ打設で積算するので「小型擁壁(B)」と表示するようにしています。
![image](images/br71.png)
基礎砕石の数量計算を表示するコードになります。
擁壁高さが1m未満の場合は、砕石厚を15cmとし、1m以上の場合は20cmとして表示するようにしています。
![image](images/br72.png)
擁壁工指針によると水抜きパイプは、2~3m2に1箇所の割合で設けることが望ましいとされている。
なので、今回は、3m2ごとに水抜きパイプを設ける計算としています。
画像がそのコードになります。
![image](images/br73.png)
吸出防止材の数量計算のコードになります。
水抜きパイプの設置箇所数により求まる数量になります。
![image](images/br74.png)
伸縮目地の数量計算のコードになります。
擁壁工指針によると、無筋コンクリート構造の場合、10m以下の間隔で設けることとされています。
なので、今回は10mごとに設ける計算としています。
![image](images/br75.png)
数量計算のコードはすべて完了したので、出来映えを確認してみます。
あれだけコードを書いても、結果、あっさりしています。
とにもかくにも、これですべての追加機能は載せることができました。お疲れ様でした。
重力式擁壁の安定計算ソフトは以前作成しましたが、ブロック積擁壁で追加した機能をこのソフトにも付与したいと思います。
具体的には、DXF出力機能と数量計算書出力機能です。
ついでに、今回は、自動車による衝突荷重も追加しようと思います。これで、重力式擁壁の計算というより、ガードレールの基礎としての 計算ができるのではないかと思います。