「scilab で遊ぼう」のトピックの中で、Xcos と Workspace の間でのデータのやりとりがありました。要は、スクリプトで得たデータを Xocs 上でシミュレーションしたり、逆に Xcos で作った波形をスクリプトで処理したりしました。
もしかしたら、Matlab の経験者にとっては何でもないことかも知れませんが、私はそういうことをやったことがなかったので非常に苦戦しました。まずは、「FROMWSB」を使ってコンソール上にあるデータを Xcos で使おうとしてヘルプを見たのですが、
Variable name: This variable is defined in Scilab and should be a structure with two fields, i.e., a "time" field of size (Nx1) and a "values" filed of size (NxM). "time" is a column vector of size Nx1 and "values" is a matrix of size "N*M". "time" filed can only be of Real type, whereas the "values" field can be , , , , , , , and .
???英語はそこそこ分かるのですが、まず「field」という言葉が何を指すのか分かりませんでした。matrix を作ればいいのか?と思ってやってみたのですが、余裕で却下されました。そこで、逆に Xcos からデータを生成してそのデータタイプを調べてみようと思い、Xcos に「TOW_c」というブロックを入れてデータを出力してコンソールから呼び出してみたところ、
-->AMmodulation
AMmodulation =
values: [3200x1 constant]
time: [3200x1 constant]
という結果に。3200x1というマトリックスが2つあるようです。ここに value と time というのがありますから、これが上述の英文中で語られている、filed のようです。その後データタイプを見たら、どうやら getfield と云うコマンドで中身が見えるということで、
-->getfield(1,AMmodulation)
ans =
!st dims values time !
-->getfield(2,AMmodulation)
ans =
1 1
-->getfield(3,AMmodulation)
ans =
0.
0.1958564
0.3856890
0.5621152
(以下略)
-->getfield(4,AMmodulation)
ans =
0.
0.000625
0.00125
0.001875
(以下略)
-->getfield(5,AMmodulation)
!--error 21
Invalid index.
ということで、「field」としては1から4まであって、3番目がデータ、4番目が時間らしい、ということが分かりました。
ただし、データも時間も縦行列です。ということでデータ形式らしきものは分かったようです。
ですので、getfield(3,AMmodulation) とやればデータ行を得ることが出来ますし、getfield(4,AMmodulation) とやれば時間行を得ることができることが分かりました。
出力する方はというと、色々ヘルプを検索しているうちにこのフォーマットで出力するには mlist コマンドを使えば良さそうということのようですので、
(変数名)=mlist(['st','dims','values','time'],[1,1],data1,t1)
data1:データ行、t1:時間行
で Xcos で利用できるデータが作れました。
試しにコンソール上でその変数を呼んでみると、
-->AMmodulation
AMmodulation =
values: [3200x1 constant]
time: [3200x1 constant]
と同じようになるかと思います。
この変数を「FROMWSB」のプロパティで指定すれば、Xcos 上で扱うことができます。
完璧にマニュアルを理解した上での作業ではないのですが、みなさんの参考になればと思います。
ご意見、ご質問、「実はこうだよ」というのがあれば是非コメント下さい。
もしかしたら、Matlab の経験者にとっては何でもないことかも知れませんが、私はそういうことをやったことがなかったので非常に苦戦しました。まずは、「FROMWSB」を使ってコンソール上にあるデータを Xcos で使おうとしてヘルプを見たのですが、
Variable name: This variable is defined in Scilab and should be a structure with two fields, i.e., a "time" field of size (Nx1) and a "values" filed of size (NxM). "time" is a column vector of size Nx1 and "values" is a matrix of size "N*M". "time" filed can only be of Real type, whereas the "values" field can be , , , , , , , and .
???英語はそこそこ分かるのですが、まず「field」という言葉が何を指すのか分かりませんでした。matrix を作ればいいのか?と思ってやってみたのですが、余裕で却下されました。そこで、逆に Xcos からデータを生成してそのデータタイプを調べてみようと思い、Xcos に「TOW_c」というブロックを入れてデータを出力してコンソールから呼び出してみたところ、
-->AMmodulation
AMmodulation =
values: [3200x1 constant]
time: [3200x1 constant]
という結果に。3200x1というマトリックスが2つあるようです。ここに value と time というのがありますから、これが上述の英文中で語られている、filed のようです。その後データタイプを見たら、どうやら getfield と云うコマンドで中身が見えるということで、
-->getfield(1,AMmodulation)
ans =
!st dims values time !
-->getfield(2,AMmodulation)
ans =
1 1
-->getfield(3,AMmodulation)
ans =
0.
0.1958564
0.3856890
0.5621152
(以下略)
-->getfield(4,AMmodulation)
ans =
0.
0.000625
0.00125
0.001875
(以下略)
-->getfield(5,AMmodulation)
!--error 21
Invalid index.
ということで、「field」としては1から4まであって、3番目がデータ、4番目が時間らしい、ということが分かりました。
ただし、データも時間も縦行列です。ということでデータ形式らしきものは分かったようです。
ですので、getfield(3,AMmodulation) とやればデータ行を得ることが出来ますし、getfield(4,AMmodulation) とやれば時間行を得ることができることが分かりました。
出力する方はというと、色々ヘルプを検索しているうちにこのフォーマットで出力するには mlist コマンドを使えば良さそうということのようですので、
(変数名)=mlist(['st','dims','values','time'],[1,1],data1,t1)
data1:データ行、t1:時間行
で Xcos で利用できるデータが作れました。
試しにコンソール上でその変数を呼んでみると、
-->AMmodulation
AMmodulation =
values: [3200x1 constant]
time: [3200x1 constant]
と同じようになるかと思います。
この変数を「FROMWSB」のプロパティで指定すれば、Xcos 上で扱うことができます。
完璧にマニュアルを理解した上での作業ではないのですが、みなさんの参考になればと思います。
ご意見、ご質問、「実はこうだよ」というのがあれば是非コメント下さい。