(元の記事は Impoot Excel Date を翻訳したものです)
この記事はもともと x-engineers.org に投稿されたものです。
(タイトル : How to import xls data into Scilab and Xcos / xls(Excel)データを ScilabとXcosにインポートする方法)
*.xlsファイルに保存されている大量のデータをScilabまたはXcosで扱いたい場合は、簡単にインポートする方法があります。
*.xlsファイルのデータを読むためにあらかじめ定義されたScilab関数があります。
Scilab 関数 xls_read() は、Excel ファイルからシートを読み取り、Scilab ワークスペースに読み取ったデータを保存します。
xls_read() 関数は、Excel ファイル上の論理ユニット(パソコン上のローカルバス(ファイルの保存場所))と、このストリーム内のシートの先頭の位置(シート名)を指定して Excel シート上のデータを読み取ります。
Excelファイルのセル(シート)に含まれる数値データと文字列がScilabワークスペースに読み取られます。
read_xls() 関数を使用すると、1 回の関数呼び出しで Excel ファイルからすべてのシートを 1 つの関数で読み取ることができます。
この関数は次のように呼び出すことができます。
[Value,TextInd] = xls_read(fd,Sheetpos)
記号の意味:
fd – 数値: Scilab 関数 xls_open() によって返される Excel ストリーム上の論理ユニット(パソコン上のローカルバス(ファイルの保存場所))
Sheetpos – 数値: Excel ストリーム内のシートの先頭の位置。この位置は、xls_open() によって返される位置の 1 つです
Value – 数値の行列: シートにある数値データ。数値データのないセルは NaN 値で表されます
TextInd – Value と同じサイズのインデックスの行列。0 インデックスは、対応する Excel セルに文字列が存在しないことを示します。正のインデックス i は文字列 SST(i) を指し、SST は xls_open() で与えられます
注意: BIFF8 Excel ファイル (最後の Excel ファイル バージョン (2003)) のみが処理されます。
(訳者脚注 : 訳者はxls_open()は使用していません。ATOMSより、(ATOMS : xlreadwrite toolbox details (scilab.org))をインポートし、 Excel® for Microsoft 365に対しxlread()関数を使っています。)
例:
WLTP 速度プロファイルを記述するデータをインポートしてみましょう。
ファイルはここにあります。
データは最初に Scilab にインポートされ、変数に保存され、後でシミュレーションのために Xcos で使用されます。
手順 1.
*.xls ファイルを現在の Scilab 作業フォルダーに保存します
図 : Scilab ワークフォルダ
このようにして、*.xls ファイルは xls_open() 関数と xls_read() 関数によって検索されます。
この例において、インポートされるファイルの名前は WLTP-DHC-12-07e.xls です。
手順2.
*.xls ファイルを開き、インポートするデータを確認します。
この例で、インポートするデータは WLTC_class_3 と名前が付けられた 2 番目のシートにあります。
時間値と速度値で構成される WLTP 速度プロファイル(運転スケジュール)をインポートします。
時間値 (sec.) は、8 行目と 3 列目 (C) から始まり、値は 0 です。
速度の値 (km/h) は、8 行目と 5 列目 (E) から始まり、値は 0.0 です。
テーブルの終わりに向かって下にスクロールすると、最後のデータ ポイントが行 1808 にあることがわかります。
図 : Excelファイル上のWLTP テーブデータ
手順 3.
SciNotes を開き、次の内容のスクリプト ファイルを作成します:
clear()
clc()
//Decode ole file, extract and open Excel stream
[fd,SST,Sheetnames,Sheetpos] = xls_open(‘WLTP-DHC-12-07e.xls’);
//Read second data sheet
[Value,TextInd] = xls_read(fd,Sheetpos(2));
//close the spreadsheet stream
mclose(fd);
//load WLTP time and speed values in structure
WLTP.time = Value(8:1808,3);
WLTP.values = Value(8:1808,5);
//plot WLTP speed profile
plot(WLTP.time,WLTP.values)
xgrid()
xlabel(“Time [s]”)
ylabel(“Vehicle speed [kph]”)
title(“x-engineer.org”)
ファイルは Scilab 関数 xls_open() で開かれます。
2 番目のシート Sheetpos(2) のデータは xls_read() 関数によって読み取られ、Value 変数に割り当てられます。
さらに、WLTP の時間と速度の値は WLTP 構造体に割り当てられます。
手順 2. で説明したように、変数 Value から行 8 から 1808、列 3 から 5 の間のデータを抽出したことに注意してください。
Scilab スクリプトを同じ Scilab フォルダーに *.sce ファイルとして保存します。
手順 4.
Scilab スクリプトを実行してデータを視覚化します。
スクリプトを実行すると、次のグラフィック画像が表示されます。
図 : WLTP 速度プロファイル – Scilab プロット
ご覧のとおり、データが正しくインポートされ、1800 個の時間と速度の値がすべてプロットされています。
手順 5.
Xcos を開き、Scilab ワークスペースから WLTP データをインポートします。
Xcos シミュレーションで Scilab データを使用するには、次の 2 つの方法があります:
- From ワークスペース ブロックを使用する
- Interp および Time ソース ブロックを使用する
図 : Xcos で Scilab ワークスペースからデータを読み取る – オプション 1
From workspace ブロック内のパラメータ設定値において、変数名を WLTP として設定します。
(以下の補足図を参照のこと / From workspace(Ver. 2024.1.0) をダブルクリックすると、以下のウィンドウが開きます。)
図(補足) : From workspace ブロックのパラメータ設定値(訳者による補足図)
Clock ブロックでは、間隔を 1 に設定し、初期化時間を 0 に設定します。
(以下の補足図を参照のこと / CLOCK_c(Ver. 2023.1.0) をダブルクリックすると、以下のウィンドウが開きます。)
図(補足) : Clock_c ブロックのパラメータ設定値(訳者による補足図)
Scope ブロックでは、Ymin パラメータを 0 に、Ymax を 130 に設定し、Refresh periodとバッファの大きさ を 1800 に設定します。
(以下の補足図を参照のこと / CSCOPE(Ver. 2023.1.0) をダブルクリックすると、以下のウィンドウが開きます。)
図(補足) : CSCOPE ブロックのパラメータ設定値(訳者による補足図)
シミュレーション中、シミュレーション時間に応じて、From workspace ブロックから適切な速度値が出力されます。
注意:
シミュレーションが始まると、ポート サイズに関係づけられた警告メッセージが表示されます。
OK をクリックすると別の警告メッセージが表示されるので、ここでも OK をクリックしシミュレーションを実行します。
※(訳者注)
手順6. のプロセスを経て、XCOSでグラフが正しく表示されます。
図 : Xcos で Scilab ワークスペースからデータを読み取る – オプション 2
2 番目のオプションでは、WLTP データをルックアップ テーブルとして使用し、時間値を x 軸、速度値を y 軸として使用します。
シミュレーション中は、現在のシミュレーション時間の関数として、正しい速度値が出力されます。
Time ブロックにはセットアップ パラメーターがありません。
Interp ブロックでは、Xcoord. 値が WLTP.time に設定され、Y coord. パラメーターが WLTP.values に設定されています。
Clock および Scope パラメーターは、最初の例と同じです。
※(訳者注)
手順6. のプロセスを経て、XCOSでグラフが正しく表示されます。
手順 6.
Xcos シミュレーションを実行します。
シミュレーション -> セットアップ、最終積分時間パラメータを 1800 に設定し、シミュレーションを実行します。
どちらの例でも、次のグラフィック イメージが生成されます。
図 : WLTP 速度プロファイル – Xcos プロット
これにより、データが Scilab ワークスペースから正しくインポートされたことが確認できます。
この方法を使用すると、あらゆる種類の *.xls データを Scilab および Xcos に簡単にインポートし、さらにシミュレーション アプリケーションで使用できます。
必要なファイルが Scilab 作業フォルダーにあることを確認し、インポート パラメーターを正しく設定してください。
おわりに
MATLABでは、WAVE ジェネレータ ブロックがあり、あらかじめ .CSV ファイルを設定することでSIMULINK内で利用することが出来ました。
この場合、MATLABの Workspace に保存されているわけではありません。
SIMULINKのWAVE ジェネレータ ブロックに保存されているため、ほかのSIMULINKのプログラムでは参照することができません。
このブロックをコビーして、別のプログラムにペーストする必要があります。
ScilabのようにWorkspaceに保存し、いろいろなプログラムで利用できるようにした方が良い場合もあります。
Workspaceに保存されているデータの利用はMATLAB/SIMULINKでもできるはずですので、ユーザーとして使いやすい方法を選べは良いと思います。
以前、燃料電池車走行時の水素ガス要求量を予測するため、SIMULINKを使ってペースとなるモデルを作成したことがあります。
そのペースモデルを使い、ある会社がSim-Driveを使い、大きなモデルにしてしまいました、その会社が製作したことになっています。
開発時の仕様書は残してあるので、Workspaceを利用できると、改めてScilab/XCOSを使い、燃費予測モデルを作成することは可能です。
ご不明な点があれば、お問い合わせください。
大手ソフトハウスの方からも、ある自動車メーカー関係の仕事でお問い合わせを頂き、湖西市の事務所まで聞き取り調査にご来社いただいております。
よろしくお願いいたします。
使用しているデータについては、販売しております。
WLTPだけでなく、世界で利用されている様々な走行データも販売しております。
こちらも併せてよろしくお願いいたします。