2017-03-28 25 views
0

Matlab R2016bでProScan IIコントローラとフィッティング電動ステージを制御したい。 Manual R2010bでテストしたところ、同じ結果が得られました。ステージの関連コマンドはVS(46ページ)、P(43ページ)、PS(44ページ)です。プレーンターミナルでは、ステージが停止した直後に、PまたはPSコマンドを発行して、X軸とY軸の現在の位置を返します。 Matlabのプロンプトで完了した場合は、適切な値を返す前に 'R'を返す必要があります - 前のコマンドのACKはinitの後に返されるため、前に発行されたR-ACKedコマンドはありません。別の.mファイルのスクリプトで使用すると、 'R'しか返せません。Matlabのシリアル通信の不一致

%Opening serial port 
s = serial('COM9'); 
set(s,'BaudRate',9600,'Terminator','CR'); %Note that CR will be concatenated to all commands 
fopen(s); 
s  %print for debugging 

t=1  %loop index 

while true 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
    %Here is code to mess with a joystick that works fine, using VS command 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 

    if button(joy, 3) == 1   %Button3 of joystick should trigger position reading 
     fprintf(s,'vs,0,0');  %Halt joystick movement 
     pause(1)     %Debouncing 
     fprintf(s,'p');    %Axe-pos reading command 
     fgets(s)     %Reading the answer 
end 


%This way to increment follows the skipped parts and is required for timing 
if mod(t, 100)==0 
     fprintf(s,'%s',Command); 
     t=1; 
    else 
     t=t+1; 
end 

if..end内のセグメントは、MATLABプロンプトから起動された場合、それはほとんどの場合、正常に動作します:次のようにmain.mでの私のコードです。

>> s = openserial() 
%properties as before, skipped to save space 
>> fprintf(s,'ps'); 
>> fgets(s) 

ans = 

100000,100000 

または

>> fprintf(s,'p'); 
>> fgets(s) 

ans = 

100000,100000,0 

私はCtrl + Cであれば、無限ループのうちけどシリアル

>> fprintf(s,'p'); 
>> fgets(s) 

ans = 

R 

オープンし、問題リターンを残します。 fgets()の代わりにfscanf()を使用すると、同じ結果が得られます。

fprintf()またはこれを引き起こす可能性のある既知のバグはありますか?私はスクリプト内で首尾よく一貫して読むために何ができますか?ご回答ありがとうございます。

+0

解決策は、シリアル入力バッファを強制的にフラッシュし、一時停止(1)の前にフラッシュ入力することでした。私はまだそれがスクリプトの外でうまく働いた理由を知らないし、内ではない。 – navigator

答えて

0

解決策は、シリアル入力バッファを強制的にフラッシュし、行の一時停止(1)の前にフラッシュ入力することでした。何らかの理由で、fgets()の代わりにfscanf()がそれをフラッシュしませんでした。私はまだそれがスクリプトの外ではうまくいたが、内部ではうまくいかなかった理由は分かっていない。また、別のスクリプトでも動作しました。

+0

こんにちは、私はここで与えられたタイムアウトの同様の問題があります - https://stackoverflow.com/questions/48667884/timeout-on-waiting-for-command-from-serial-communication-device-using-matlab。あなたはそのような問題に直面しましたか? –

関連する問題