0

Matlab のコードを使用してシリアル ポートに書き込もうとしています。ただし、最初に試したすべての結果がエラーメッセージになり、Matlab はポートにアクセスできないと判断します。

私が使用しているmatlabコードは次のとおりです。

function test()

TIMEOUT = 5;    %time to wait for data before aborting
XPOINTS = 50;   %number of points along x axis

%create serial object to represent connection to mbed
mbed = serial('COM18','BaudRate', 9600, 'DataBits', 8);   %change depending on mbed configuration

%set(mbed,'Timeout',TIMEOUT);        %adjust timeout to ensure fast response when mbed disconnected

fopen(mbed);        %open serial connection
input = 1;
fprintf(mbed, input);
x=0;
while (x == 0)        
    values = fscanf(mbed, '%d');  
    disp(values);       
end

fclose(mbed);

end

表示されるエラーメッセージは

Error using serial/fprintf (line 144)
Error: An error occurred during writing.

Error in test (line 14)
fprintf(mbed, input);

私の主な問題は、オンラインで見つけることができるすべてのものから、 fprintf コマンドが機能するはずだと言っているように見えることです。ラインもやってみた

fwrite(mbed, input);

基本的に同じエラーメッセージが表示されます。

これを一度試してみると、次に受け取るエラーメッセージは次のとおりです。

Error using serial/fopen (line 72)
Open failed: Port: COM18 is not available. Available ports: COM1.
Use INSTRFIND to determine if other instrument objects are connected to the requested device.

Error in test (line 12)
fopen(mbed);        %open serial connection

これは、プログラムを保存してからまったく同じプログラムを開くことによってのみ修正できるようです。mbed は、試行時に確実に正しい COM ポートに接続されています。

私の質問は、fprintf 行のどこが間違っているのでしょうか? それは、シリアル ポートまたは mbed と通信する正しい方法ですか?

4

2 に答える 2

1

この問題は、最初にコードを記述しようとしていた行に次を追加することで修正されました。

旧行 :

fprintf(mbed,input);

改行 :

fprintf(mbed, '1', 'async');

なぜこれが修正されたのかわかりませんが、修正されました。これは、将来 mbed に書き込もうとする人にとって役立つかもしれません。

于 2015-10-20T11:32:30.037 に答える
1

シリアル ポートの書き込みが失敗する原因は、あまり多くありません。

  • シリアル ポートがなくなった場合 (たとえば、USB->シリアル アダプタを抜いた場合)
  • カーネル書き込みバッファがいっぱいの場合 (大量のデータを、ポートから流出できる速度よりも速い速度で書き込んだ場合)
  • フロー制御によりポートからデータがまったく流れず、タイムアウトが経過した場合

フロー制御オプションを確認する必要があります。デバイスが RTS/CTS をサポートしていないにもかかわらず、コードでハードウェア ハンドシェイクが有効になっている場合、通信は失敗します。

于 2015-10-19T18:10:38.130 に答える