「RFILE_f(Read from input file)」は、XCOSで任意波形を出力するために必須のブロックですが今一つ使い方が不明確で、毎回適当にやってなんとか動いたところでおしまいにしていたので情報の蓄積がゼロでした。
今回掘り下げてみたので、覚書として書き留めておきます。
目次
- まずはBlock Helpのサンプルから
- データのフォーマットについて
- データの格納フォルダをパス指定する
- CLOCK_cタイムベースに変更する
- データの一列目(時間データ)を使わずCLOCK_cで行う
- 【まとめ】今回やりたい、任意波形を作ってみる
まずはBlock Helpのサンプルから
いきなり、クロック入力とクロック出力が出ていて、それがつながっておりCSCOPEのクロックにまで入ってる。なんのこっちゃ?
実行結果は、時間データを横軸に反転したSINカーブが二本描画されている
設定とデータを見てみると・・・
データは3列で、
「時間レコード選択」が1 → 一列目を指します
「出力レコード選択」が2、3 → 2・3列目を指します。
ようするに、一列目のデータが時間軸となり、時間データをクロック出力として出し、タイムベースとして自分自身と表示ブロックで使用している。グラフでいうところの「散布図」と同じです。
データのフォーマットについて
Fortranのフォーマットと同じらしい。というかFortranなんて30年も前でとっくに忘れています。そこでおさらい。
(3(e10.3,3x))
最初の「3」は3列のデータ。
次の「e10.3」は、10桁の指数で指数桁が3桁。一桁目は符号が入る。
最後の「3x」は、区切り文字はスペース3個ということ。これらを図示すると、下図になります。
この法則でデータを読み込んでいるようです。少し緩くても読むようです。
データの格納フォルダをパス指定する
サンプルでは、ほぼフルパスでデータフォルダを指定しています。
「SCI/modules/xcos/examples/sources_pal/en_US/rfile_f.txt」
先頭の「SCI」はScilabのルートパスでインストールフォルダです。
ここの指定はファイル名だけにしておきたいところですが、.xcosファイルと相対パスにする方法がわかりません。パスを指定しないとPWDパスが適用されます。PWDパスの確認は、Scilabコンソールで、
- -> PWD
と入力すればわかります。私のwindows環境では初期のPWDはドキュメントフォルダになっています。
PWDパスを変えるには、CDコマンドを使います。とりあえずScilabから、
CD \目的のフォルダ を打ち込みますが、.xcosファイルが変わるたびに変更するのはいちいち面倒ですので個別に埋め込むのが良いと思います。
XCOSで.xcosファイルに埋め込むには、コンテキスト設定に「CD \目的のフォルダ」を書き込んでしまいます。
相対パスができればBestですが、この方式でも個別.xcosファイルで対応できます。
CLOCK_cタイムベースに変更する
RFILE_fを他のタイムベースに合わせてみます。全体を1つのタイムベース⊿Tで制御するプログラミング確認では重要です。「CLOCK_c」ブロックを使います。
CLOCK_cの分解能⊿Tは任意です。ここでは0.1にしました。RFILE_fブロックとは非同期で描画します。CLOCK_cを細かくした場合のデータ補間は確認していませんが、見た目の表示結果は同じです。
データの一列目(時間データ)を使わずCLOCK_cで行う
元の時間データが、均等刻みであることが前提ですが、サンプルデータは均等でしたので可能です。
設定を変えます。「時間レコード選択」を空欄にし、時間データを使用しない旨を明示します。するとアイコン下部のクロック出力のポイントが消えます。
CLOCK_cを時間データと同じ刻みの0.02にすれば、結果は同じになりました。
【まとめ】今回やりたい、任意波形を作ってみる
制御をシミュレーションするときのSV設定です。
開始50%、4秒後に55%、50秒後に50% というデータでCLOCK_cを使います。データフォーマットを変えてみました。
覚えてしまえば、もう迷いません。
コメント
私の長年の課題でした、「任意の波形に対する応答を(Scilabではなく)XCOS上で求めること」がこれで実現できます。ありがとうございました。