none
Serial Port收唔到DATA問題 RRS feed

  • 問題

  • 請教一個COM port問題

    我有一個2Dbar code Reader

    http://www.denso-wave.com/en/adcd/product/qrcode/qk11/spec.html

    QK11-U

    以USB扮成COM PORT使用


    我以hyperterminal成功讀出資料,


    但我不能以VB.net 讀出資料
    2Dbar code Reader Connection成功但DataReceived event收唔到

    Imports System.IO.Ports
    
    Module Module1
    
        Sub Main()
            Dim port As SerialPort = My.Computer.Ports.OpenSerialPort("COM4")
    
            port.BaudRate = 9600
            port.DataBits = 8
            port.Parity = Parity.None
            port.ReadTimeout = 10
            port.StopBits = StopBits.One
    
            If port.IsOpen Then
                port.Write("Hello world!")
                port.ReceivedBytesThreshold = 1
                AddHandler port.DataReceived, AddressOf a
            End If
    
            Console.ReadLine()
    
            port.Close()
        End Sub
    
        Sub a()
            MsgBox("dsfdsf")
        End Sub
    
    End Module
    


    問題在那裡呢?????
    thanks you
    2010年1月3日 下午 02:42

解答

  • 有一個可能是, 這個裝置會送DTR訊號
    試著加一行  port.DtrEnable = True 試試.

    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?
    2010年1月3日 下午 03:04
    版主
  • 問一個問題, 你在使用超級終端機的時候, 流量控制是設為 (1)硬體  (2)Xon/Xoff (3)無 的哪一項 ?
    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?

    流量控制是設為硬體

    i found the solution!!!!!!!!!!!!!!
    port.Handshake = Handshake.RequestToSend
    thank you Bill Chung

    • 已標示為解答 老公仔 2010年1月3日 下午 04:24
    2010年1月3日 下午 04:21

所有回覆

  • SerialPort.DataReceived 事件


    Close了,怎麼收得到呢?而且沒宣告a為SerialDataReceivedEventHandler,參考Bill大的範例...
    2010年1月3日 下午 03:01
  • 有一個可能是, 這個裝置會送DTR訊號
    試著加一行  port.DtrEnable = True 試試.

    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?
    2010年1月3日 下午 03:04
    版主



  • 我試過,無效


    試Google過好多好多Example(~>15),全部無效
    2010年1月3日 下午 03:12
  • 上面那的Example並沒有開啟DTR, 所以才說要  試著加一行  port.DtrEnable = True 試試.
    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?
    2010年1月3日 下午 03:15
    版主
  • 上面那的Example並沒有開啟DTR, 所以才說要  試著加一行  port.DtrEnable = True 試試.
    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?

    http://www.dotblogs.com.tw/billchung/archive/2009/04/12/7981.aspx

    加左都失敗 T_T
    2010年1月3日 下午 03:25
  • 你寫的程式超詭異的
    1. Sub a的委派和 DataReceived根本不一致
    2. 你這是 Console程式, 應該用Console.writeline輸出吧 ? 用MsgBox怪怪的
    3. 你有確定  If port.IsOpen Then <-的值會是True嗎 ?
    4. 還有, 請不要用港式中文, 我們看不太懂

    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?
    2010年1月3日 下午 03:46
    版主
  • Imports System.IO.Ports
    
    Public Class Form1
    
        Private WithEvents port As SerialPort
    
        Public Sub New()
    
            ' 此為 Windows Form 設計工具所需的呼叫。
            InitializeComponent()
    
            port = My.Computer.Ports.OpenSerialPort("COM4")
    
            port.BaudRate = 9600
            port.DataBits = 8
            port.Parity = Parity.None
            port.ReadTimeout = 10
            port.StopBits = StopBits.One
            port.DtrEnable = True
    
            If Not port.IsOpen Then
                port.Open()
            End If
        End Sub
    
        Protected Sub getData(ByVal sender As Object, ByVal e As SerialDataReceivedEventArgs) Handles port.DataReceived
            MsgBox("dsfdsf")
        End Sub
    
    
        Protected Overrides Sub Finalize()
            port.Close()
            MyBase.Finalize()
        End Sub
    End Class
    i Re-Write the program and it cannot work again
    你寫的程式超詭異的
    1. Sub a的委派和 DataReceived根本不一致
    2. 你這是 Console程式, 應該用Console.writeline輸出吧 ? 用MsgBox怪怪的
    3. 你有確定  If port.IsOpen Then <-的值會是True嗎 ?
    4. 還有, 請不要用港式中文, 我們看不太懂

    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?

    2010年1月3日 下午 04:04
  • 問一個問題, 你在使用超級終端機的時候, 流量控制是設為 (1)硬體  (2)Xon/Xoff (3)無 的哪一項 ?
    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?
    2010年1月3日 下午 04:15
    版主
  • 問一個問題, 你在使用超級終端機的時候, 流量控制是設為 (1)硬體  (2)Xon/Xoff (3)無 的哪一項 ?
    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?

    流量控制是設為硬體
    2010年1月3日 下午 04:19
  • 問一個問題, 你在使用超級終端機的時候, 流量控制是設為 (1)硬體  (2)Xon/Xoff (3)無 的哪一項 ?
    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?

    流量控制是設為硬體

    i found the solution!!!!!!!!!!!!!!
    port.Handshake = Handshake.RequestToSend
    thank you Bill Chung

    • 已標示為解答 老公仔 2010年1月3日 下午 04:24
    2010年1月3日 下午 04:21
  • 那個應該等同於  SerialPort.RtsEnable =True
    Request to Transmit (RTS) 信號通常用於 Request to Send/Clear to Send (RTS/CTS) 硬體交握。
    所以你是送不出去, 而不是收不進來

    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?
    2010年1月3日 下午 04:29
    版主
  • 那個應該等同於  SerialPort.RtsEnable =True
    Request to Transmit (RTS) 信號通常用於 Request to Send/Clear to Send (RTS/CTS) 硬體交握。
    所以你是送不出去, 而不是收不進來

    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?
    'This is my final source code to Received Data
    Public Class Form1

    Private WithEvents port As SerialPort

    Public Sub New()

    ' 此為 Windows Form 設計工具所需的呼叫。
    InitializeComponent()

    port = My.Computer.Ports.OpenSerialPort("COM4")

    port.BaudRate = 9600
    port.DataBits = 8
    port.Parity = Parity.None
    port.ReadTimeout = 10
    port.StopBits = StopBits.One
    port.DtrEnable = True
    port.Handshake = Handshake.RequestToSend'<<<<<<<<<<<<<<<

    If Not port.IsOpen Then
    port.Open()
    End If
    End Sub

    Protected Sub getData(ByVal sender As Object, ByVal e As SerialDataReceivedEventArgs) Handles port.DataReceived
    MsgBox("dsfdsf")
    End Sub


    Protected Overrides Sub Finalize()
    port.Close()
    MyBase.Finalize()
    End Sub
    End Class

    2010年1月3日 下午 04:36