コンテンツにスキップ

FAQ/ DioVISTAバッチ処理入門

DioVISTA のバッチ処理について、初歩的な部分を教えていただけないでしょうか。

テクニカルリファレンス バッチ処理/ 概要 を拝見しても、うまくできませんでした。
初歩からやり方を教えていただけないでしょうか。

回答

チュートリアルを作成しました。
下記の手順を実施して、概要をつかんでいただけますでしょうか。

準備

  1. DioVISTAが動作するPCを用意してください。
  2. 演習用のプロジェクト project_Tsurumi.zip を入手します。

    • 適当な場所に展開します
    • ここでは、C:\temp\ に展開したとします
    • プロジェクトを C:\temp\ に展開した画面
  3. 演習用のプロジェクトをDioVISTAでシミュレーションできることを確認します。

    • DioVISTA で プロジェクトファイル [鶴見.fsxproj] を開きます。
    • シミュレーション開始ボタンを押します
    • 下図の結果が表示されることを確認します
    • DioVISTA で [鶴見.fsxproj] を実行した画面
  4. PowerShell を実行するための準備をします。

変数の設定

  1. wt を立ち上げます。

  2. DioVISTA の実行ファイルのパスを変数に格納します。

    • ここでは、C:\Program Files\Hitachi\DioVISTA Flood\bin にインストールされているとします
    • 次の2行にわたる文字列を1行ずつコピーして wt に貼り付けます
    1
    2
    $exe = "C:\Program Files\Hitachi\DioVISTA Flood\bin\dfsCalc64.exe"
    &$exe --version
    
    • ビルド番号が表示されることを確認します
    1
    Build 2021-11-01 19:34:14 +0900 (0ea5431acb3bad3a7b4d5a35b9bc1f470b597f29)
    
  3. DioVISTA のデータ変換プログラムのパスを変数に格納します。

    • 次の文字列をコピーして wt に貼り付けます。
    1
    2
    $conv = "C:\Program Files\Hitachi\DioVISTA Flood\bin\dfsConv64.exe"
    dir $conv
    
    ソースコードの解説
    • 2行名: dir コマンドは、DOS の dir コマンドやLinux の ls とほぼ同じです。これは Get-ChildItem の別名です。
    • ファイル情報( dfsConv64.exeについて)が表示されることを確認します
    • 1
      2
      3
      4
      5
          Directory: C:\Program Files\Hitachi\DioVISTA Flood\bin
      
      Mode                 LastWriteTime         Length Name
      ----                 -------------         ------ ----
      -a---          2021/06/17    21:34         323160 dfsConv64.exe
      
  4. DioVISTAの設定ファイルのパスを変数に格納します。

    • 次の文字列をコピーして wt に貼り付けます。
    1
    2
    3
    [xml]$xml = cat "$env:LOCALAPPDATA\hitachi\DioVISTA\DioVISTA.xml"
    $d = $xml.Configuration.settings.dataset
    dir $d
    
    ソースコードの解説
    • 1行名: cat コマンドは、DOS の type コマンドや Linux の cat とほぼ同じです。これは Get-Content の別名です。
    • 1行目: $env:LOCALAPPDATA は DOS の環境変数 %LOCALAPPDATA% と同じです。つまりここでは、ファイル %LOCALAPPDATA%\hitachi\DioVISTA\DioVISTA.xml を読み込んでいます。参考: FAQ/ データセットファイルのパス
    • 2行目: xml要素 Configuration.settings.dataset を変数 $d に格納しています。
    • ファイル情報( dataset.iniについて)が表示されることを確認します。
    • 1
      2
      3
      4
      5
          Directory: D:\mapdata
      
      Mode                 LastWriteTime         Length Name
      ----                 -------------         ------ ----
      -a---          2019/11/07    17:30            408 dataset.ini
      

基本コマンド

  1. 上述の 変数の設定 を実行しておいてください。

  2. DioVISTAを実行します。

    • 次の文字列をコピーして wt に貼り付けます
    1
    2
    cd C:\temp
    &$exe -d $d -m 25 -o BP001 -O . -I 300 -t 36000 鶴見.fsxproj
    
    ソースコードの解説
    • 1行名: cd コマンドは、DOS の cd コマンドとほぼ同じです。これは Set-Location の別名です。
    • 2行名: $exe すなわち dfsCalc64.exe のオプションについては、テクニカルリファレンス バッチ処理/ 計算の実行 をご参照ください。
    • 計算が実行されます。
    • 計算結果 BP001 をDioVISTA の画面で確認します。
  3. DioVISTA結果ファイルをMLIT形式に変換します。

    • 次の文字列をコピーして wt に貼り付けます
    1
    &$conv csv -d 40 -s $d -G  -o . BP001
    
    ソースコードの解説
    • MLIT 形式のCSVファイルが C:\temp\BP001 に出力されたことを確認します。

    Note

    C:\temp\ フォルダに METADATA.CSV および KENSAKU\WL_STATION.CSV がないことについて、次の警告が表示されますが、結果のCSVファイルは出力されます。

    1
    2
    .\METADATA.CSV: ファイルがオープンできません
    .\KENSAKU\WL_STATION.CSV: ファイルがオープンできません
    

応用コマンド

  1. 上述の 変数の設定 を実行しておいてください。
  2. 鶴見川の上流端流量を [tsurumi_q_ts.csv] に格納された時系列に変更します。

    • 次の文字列をコピーして wt に貼り付けます。
    1
    2
    3
    4
    5
    6
    $csv = cat tsurumi_q_ts.csv
    $inflow="{0} {1}" -f $csv.Length, (($csv -split "," ) -join " ")
    [xml]$xml = cat 鶴見.fsxproj
    $river = $xml.floodSim.conditions.diffusionalRivers.diffusionalRiver |where{$_.name -eq "鶴見川"}
    $river.inflow = $inflow
    $xml.Save("C:\temp\鶴見川2500.fsxproj")
    
    コードの解説
    • 1行目: [tsurumi_q_ts.csv] の内容を 変数 $csv に格納します。
    • 2行目: $csv の内容を、DioVISTA プロジェクトファイル(fsxproj)で使う書式に変換し変数 $inflow に格納します。-fFormat演算子 です。
    • 3行目: [鶴見.fsxproj] の内容を 変数 $xml に格納します。
    • 4行目: [鶴見.fsxproj] の中に xml要素 floodSim.conditions.diffusionalRivers.diffusionalRiver は複数ありますが、そのうち 属性 name が "鶴見川" と等しい要素を抽出し、変数 $river に格納します。whereWhere-Object の別名です。
    • 5行目: 鶴見川の上流端流量を示すxml要素 inflow の内容を、2行目で作成した内容に置き換えます。
    • 6行目: 編集した内容をファイル "C:\temp\鶴見川2500.fsxproj" として保存します。ここでは保存するファイルをフルパスで指定します。
    • DioVISTAでプロジェクトファイル [鶴見川2500.fsxproj] を開きます。
    • 鶴見川の上流端流量が、[tsurumi_q_ts.csv] に格納された時系列になっていることを確認します。
  3. 鶴見川の破堤点情報を変更します。

    • 次の文字列をコピーして wt に貼り付けます
    1
    2
    3
    4
    5
    6
    [xml]$xml = cat 鶴見.fsxproj
    $river = $xml.floodSim.conditions.diffusionalRivers.diffusionalRiver |where{$_.name -eq "鶴見川"}
    $breach = $river.riverBreaches.riverBreach|where{$_.name -eq "鶴見川_破堤箇所1"}
    $breach.name = "BP002"
    $breach.distance = "5000"
    $xml.Save("C:\temp\BP002.fsxproj")
    
    コードの解説
    • 1行目: [鶴見.fsxproj] の内容を 変数 $xml に格納します。
    • 2行目: [鶴見.fsxproj] の中に xml要素 floodSim.conditions.diffusionalRivers.diffusionalRiver は複数ありますが、そのうち 属性 name が "鶴見川" と等しい要素を抽出し、変数 $river に格納します。
    • 3行目: 鶴見川 の子要素 riverBreaches.riverBreach は複数ありますが、そのうち 属性 name が "鶴見川_破堤箇所1" と等しい要素を抽出し、変数 $breach に格納します。
    • 4行目: "鶴見川_破堤箇所1"を示すxml要素 name の内容を、"BP002"に置き換えます。
    • 5行目: "鶴見川_破堤箇所1"を示すxml要素 distance の内容を、"5000"に置き換えます。
    • 6行目: 編集した内容をファイル "C:\temp\BP002.fsxproj" として保存します。
    • DioVISTAでプロジェクトファイル [BP002.fsxproj] を開きます。
    • 鶴見川の破堤点の名前が [BP002] 、距離が [5000] になっていることを確認します。

最後に

  1. 一連のチュートリアルでは、プロジェクトファイルの実行、結果ファイルの変換、プロジェクトファイルの書き換え、スクリプトファイルの作製を体験しました。ユーザの必要に応じて、これらを改造したり組み合わせたりしてください。

  2. DioVISTAでは画面を通じてユーザが入力する際に異常値のチェック(たとえば粗度に0を与えようとすると拒絶する)を行っています。こうしてプロジェクトファイル(fsxproj)を画面を通さず編集する際は、異常値のチェックがかかりません。編集する際は異常値にご注意ください。

関連項目


最終更新日: 2023-03-20