2011-06-30 6 views
0

C++/CLI(Windows::IO::Ports)のSerialPortクラスを使用して、シリアルポートを開き、Perifericデバイスと通信するとすべてがうまくいくようです。ポートが開き、データが送られます。しかし、私はperifericデバイスから答えを得ていませんでした。私はのようなコードを使用SerialPort StopBits Windows7 C++/CLI

:シリアルポートの通信を監視するためのプログラムを使用して

SerialPort^ _serialPort; 
_serialPort = gcnew SerialPort(); 

//_serialPort = gcnew SerialPort("COM1",115200,Parity::None, 8, StopBits::One); 

// Allow the user to set the appropriate properties. 
_serialPort->PortName = "COM1"; 
_serialPort->BaudRate = 115200; 

//Parity None by default 
//_serialPort->Parity = Parity::None; 

_serialPort->DataBits = 8; 

_serialPort->StopBits = StopBits::One; 

// Set the read/write timeouts 
_serialPort->ReadTimeout = 1000; 
_serialPort->WriteTimeout = 500; 
_serialPort->Open(); 

、私がストップビットを設定し、あなたが見ることができるようにストップビットの数が0であると思われます私はボーレートとデータを変更しようとしましたが、それは変更されましたが、 StopBits ...

これはウェブ上の他のコードを使用するのが本当に簡単だから、本当にピッタリです。

誰かが私を助けることができますか?それがうまくいかなかった理由は何ですか?


このコードは大丈夫ですか?

送られた配列である:array<Byte>^ bytes = gcnew array<Byte>(32);(それはいくつかの値で初期化される)

は、私が使用してデータを送信する:_serialPort->Write(bytes,0,32);

は私がしようとしているデータを読み込むには:

_serialPort->Read(readarray,0,18); 
_serialPort->ReadExisting(); 

そして、私はシリアルポートモニタを使用して通信を開き、同じバイトを送信すると、それは答えます...

+0

)? –

+0

どのモニタープログラムを使用しましたか?ポートから信号をキャプチャしない限り、ストップビットがゼロであることをどのように確認しましたか? Ben Voigtの回答に関しては、おそらくDCBを使用していないかもしれませんが、恐らく使用しているモニタプログラムはゼロを表示しています。 – tinman

+0

私はそれをチェックするためにシリアルポートモニタ4.0をダウンロードしました(シリアルポートでも少し働いて、他のソフトウェアを見るのに便利です)。そして、ストップビットを1つのストップに設定した標準シリアルターミナルアプリケーションシリアルポートモニタには "StopBits - 0"と表示されます。 2つのストップビットで開くと、SMP4.0は "StopBits - 2"を表示します。つまり、DCBの値が表示されているように見えます。 – tinman

答えて

1

ストップビットは、ストップビットの数と等しくない列挙値によって構成されます。

ゼロは1ストップビットの正しいエンコードです。 http://msdn.microsoft.com/en-us/library/aa363214.aspx

+0

しかし、私はビットストップを設定するためにDCB構造を使用しません。私は "SerialPort"リファレンスにあるプロパティを使用します:StopBits [StopBits link](http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.stopbits.aspx)。 この構造を使用すると効果がありますか?どのように私は停止ビットを設定する必要がありますか? – Vic

+0

@Vic:もちろん、DCB構造体を使用してストップビットを設定するのは、Win32 APIが提供する唯一の方法です。 .NETの 'StopBits'列挙からWin32 DCB設定に変換するラッパー関数を呼び出すだけです。 –

0

を見つけました。 「ハンドシェイク」を「なし」に設定しても、データが送信された後にDTRポートとRTSポートがLOWに設定されたようです。 (どうしてか分かりません)。

私はHIGHに手動で設定します。あなたは[ "多産" チップセット]を意味するか(http://www.prolific.com.tw/eng/products.asp?id=59

_serialPort->RtsEnable = true; 
_serialPort->DtrEnable =true; 
+0

編集のための@TimCooperありがとう...私はそれを行う方法を知らなかった... – Vic