tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルReceiveSerialData
記事No3845
投稿日: 2006/06/15(Thu) 16:32
投稿者kaz
初めて投稿します、VB6からVB2005への初心者です。
多分コーディングの問題でなく、私の環境設定の問題だと思います。
色々検索して見ましたが、どうしても解決出来ず3日たちました、初歩的な問題だと思いますが、分か
りません助けて下さい。
目的はSerialPortを使って文字列を読み込みたいのです。
Helpで下記に様なサンプルがあり、実行して見たのですが、どうしても com1.ReadLine()
の部分でロックしてしまいます。
同じようなサンプルで、SendSerialDataがありますが、これは全く問題なく実行出来ます。
他の方法でもSerialPortから文字列が読めれば良いので宜しくお願いします。

Function ReceiveSerialData() As String
    ' Receive strings from a serial port.
    Dim returnStr As String = ""

    Using com1 As IO.Ports.SerialPort = _
            My.Computer.Ports.OpenSerialPort("COM1")
        Do
            Dim Incoming As String = com1.ReadLine()
            If Incoming Is Nothing Then
                Exit Do
            Else
                returnStr &= Incoming & vbCrLf
            End If
        Loop
    End Using

    Return returnStr
End Function

[ツリー表示へ]
タイトルRe: ReceiveSerialData
記事No3847
投稿日: 2006/06/16(Fri) 10:11
投稿者もも
> 初めて投稿します、VB6からVB2005への初心者です。
> 多分コーディングの問題でなく、私の環境設定の問題だと思います。
> 色々検索して見ましたが、どうしても解決出来ず3日たちました、初歩的な問題だと思いますが、
分か
> りません助けて下さい。
> 目的はSerialPortを使って文字列を読み込みたいのです。
> Helpで下記に様なサンプルがあり、実行して見たのですが、どうしても com1.ReadLine()
> の部分でロックしてしまいます。
> 同じようなサンプルで、SendSerialDataがありますが、これは全く問題なく実行出来ます。
> 他の方法でもSerialPortから文字列が読めれば良いので宜しくお願いします。
Microsoft KBですよね:
http://support.microsoft.com/?scid=kb;ja;904795&spid=3041&sid=4
とりあえず、ポートの先につながっているモノがNewLineで区切ったデータを送信してくるのか
といった様な通信フォーマットをちゃんと確認していますか?

[ツリー表示へ]
タイトルRe^2: ReceiveSerialData
記事No3850
投稿日: 2006/06/16(Fri) 14:14
投稿者kaz
> > 初めて投稿します、VB6からVB2005への初心者です。
> > 多分コーディングの問題でなく、私の環境設定の問題だと思います。
> > 色々検索して見ましたが、どうしても解決出来ず3日たちました、初歩的な問題だと思います
が、
> 分か
> > りません助けて下さい。
> > 目的はSerialPortを使って文字列を読み込みたいのです。
> > Helpで下記に様なサンプルがあり、実行して見たのですが、どうしても com1.ReadLine()
> > の部分でロックしてしまいます。
> > 同じようなサンプルで、SendSerialDataがありますが、これは全く問題なく実行出来ます。
> > 他の方法でもSerialPortから文字列が読めれば良いので宜しくお願いします。
> Microsoft KBですよね:
> http://support.microsoft.com/?scid=kb;ja;904795&spid=3041&sid=4
> とりあえず、ポートの先につながっているモノがNewLineで区切ったデータを送信してくるのか
> といった様な通信フォーマットをちゃんと確認していますか?
先につながっているモノは別のRS232Cクロスケーブルで別のパソコンにつながってハイパーターミナル
が立ち上がっています、従ってこちらもハイパーターミナルでお互いに通信できます。
すみません私がロックすると書きましたが、NewLineを確認出来ないだけでデータは受け取ってました。
そこで恥ずかしい質問ですが、NewLineの意味が分かりません、恥ついでにもう一つ、教えて頂いた、
HPのサンプルでConsole.WriteLineとありますが、どこに出力されるのですか?

[ツリー表示へ]
タイトルRe^3: ReceiveSerialData
記事No3876
投稿日: 2006/06/22(Thu) 17:05
投稿者ホゲ
> すみません私がロックすると書きましたが、NewLineを確認出来ないだけでデータは受け取ってま
した。
> そこで恥ずかしい質問ですが、NewLineの意味が分かりません、

NewLineについては丁度シリアル通信の課題があって試したとこなのですが、受信時は「この文字列(文
字コード)が含まれていた場合、1回分の受信の区切とする(ReadLineの受信完了とみなす)」みたいですね

送信時(SerialPort1.WriteLineなど)にもNewLineは勝手に付加してくれるみたいなので、繋げる機器
のデータの最後の文字コードが何かを指定すればいいのではないでしょうか、私の例の場合、送信、受信とも
改行コードが付加される(送信時はしなければならない)様なのでオープン前に以下の様に設定しました。

      Serialport.NewLine = CHR(13) 'ReadLineした結果文字列には、このコードは付かない
      Serialport.ReadTimeout = 1000 'ここでは極端にNewLineを受信できるまで1秒とか待ってみる
                    'デフォルトではエラーにならず無限に待つらしい・・

[ツリー表示へ]
タイトルRe^4: ReceiveSerialData
記事No3901
投稿日: 2006/06/27(Tue) 11:09
投稿者kaz
> > すみません私がロックすると書きましたが、NewLineを確認出来ないだけでデータは受け取っ
てま
> した。
> > そこで恥ずかしい質問ですが、NewLineの意味が分かりません、
>
> NewLineについては丁度シリアル通信の課題があって試したとこなのですが、受信時は「この文字

(文
> 字コード)が含まれていた場合、1回分の受信の区切とする(ReadLineの受信完了とみなす)」み

いですね
> 。
> 送信時(SerialPort1.WriteLineなど)にもNewLineは勝手に付加してくれるみたいなので、繋げる


> のデータの最後の文字コードが何かを指定すればいいのではないでしょうか、私の例の場合、送信

受信とも
> 改行コードが付加される(送信時はしなければならない)様なのでオープン前に以下の様に設定し

した。
>
>       Serialport.NewLine = CHR(13) 'ReadLineした結果文字列には、このコードは付かない
>       Serialport.ReadTimeout = 1000 'ここでは極端にNewLineを受信できるまで1秒とか待って


>                     'デフォルトではエラーにならず無限に待つらしい・・
ホゲさん有難うございました、解決です。
まだまだ勉強不足で、この掲示板に投稿するレベルでは無いようです。

[ツリー表示へ]