電子書籍の厳選無料作品が豊富!

GPIBを用いて機器を制御しようとしています。
そこで質問なのですがtimer関数を用いて電圧をステップ的に落とすことが
できるのでしょうか??
僕はTimerFcnのところでfprintfを用いて機器にコマンドを送ろうと
しているのですがうまくいきません(出力引数が多すぎるとのエラー)
やはり、ハンドル関数などを使うのでしょうか???
知識を貸してください。

A 回答 (3件)

#01です。



まずはお詫びを。

>t.TimerFcn = ['fprintf(', num2str(b), ','''volt 2''')']

シングルクォートが多かったですね。


以下、ご質問への回答です。

(1)TimerFcnが動作しつづけない
まず、記述がおかしいです。
>t.TimerFcn='fprintf(h,''volt 5'')';
とありますが、これだとfprintf関数が実行されないと思います。
ここでの’h’は数値型の変数ですよね?
だとすると、以下のように記述しなければならないはずです。
t.TimerFcn=['fprintf(', num2str(h, '%.15f'), ',''volt 5'')'];

(2)fprintfのvolt 5のところに変数
上述した方法で大丈夫です。
具体的には、以下のようになります。
n=5;
t.TimerFcn=['fprintf(', num2str(h, '%.15f'), ',''volt ', num2str(n), ''')'];

(3)時間に比例して変化させる
秒単位であれば、工夫すればいけるような気がします。
ただ、1/100秒位の精度での制御は難しいかも知れませんね。
    • good
    • 0
この回答へのお礼

回答ありがとうございます!!
おかげでうまく動作させることができました!
うまく動作できたってのは,線形的に変化させることができたという意味です^^
特にnum2strのところはコメントをもらわなかったらできていなかったです!
また,知識を貸してもらうような機会があると重いますのでそのときにはまた,回答してくることを願います!

お礼日時:2009/07/01 23:31

#01です。



>t.TimerFcn=fprintf(b,'volt 2')

この行はおかしいと思います。
TimerFcnプロパティは、実行する関数を文字列で指定しなければならないと思います。

t.TimerFcn = ['fprintf(', num2str(b), ','''volt 2''')']

この回答への補足

ありがとうございます!!
とりあえず、エラーなしで動かすことはできました!!
ですが、やはり僕の思ってたステップ的には動作してくれません。。。
start(t);のあとにwait(t);を入れることで3秒後にタイマーはちゃんと動作してくれましたがそれから5秒間の間、TimerFcnが動作しつづけてくれません・・・。
Periodのプロパティを設定してみたのですがだめでした。

t=timer;
set(t,'StartDelay',3,'Period',5)
t.TimerFcn='fprintf(h,''volt 5'')';
start(t);
wait(t);
stop(t);
delete(t);

のような状態です。
これはstop(t);が近すぎて駄目だという感じなのかなとは自分では考えているのですか・・・。
あと、質問攻めですみませんが、将来的にはステップ的ではなく線形的に電圧を変化させたいと考えているのですがfprintfのvolt 5のところに変数はおけるものなんでしょうか? 置けたとしてもそこから時間に比例して変化させるのは厳しいのかなって自分的には考えています。

補足日時:2009/06/30 09:04
    • good
    • 0

>僕はTimerFcnのところでfprintfを用いて機器にコマンドを送ろうとしているのですがうまくいきません(出力引数が多すぎるとのエラー)



ソースコードやエラーメッセージも示さずに、何を回答しろと言うのでしょうか?
ご質問からは、関数の戻り値の受け取りが不正なこと以外何も分かりません。

この回答への補足

b=gpib('ni',2,12);

fopen(b)
set(b,'EOSMode','read&write')
set(b,'EOSCharCode','LF')

fprintf(b,'volt 3')

t=timer;
set(t,'TimerFcn')
t.TimerFcn=fprintf(b,'volt 2')
start(t);
stop(t);
delete(t);

fclose(b);
delete(b)

こんな感じに書いています。
エラーは
??? ==>icinterface.fprintf
出力引数が多すぎます

エラー==>t.TimerFcn=fprintf(b,'volt 2')

こんな感じです。
自分自身の考え方だとハンドル関数を使って何かしらするのかなとは
思うのですがMATLABマニュアルを見てもさっぱりわかりませんでした。

補足日時:2009/06/29 15:41
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!