none
VB2010 RS232與GSM MODEM 接收問題 RRS feed

  • 問題

  • 我傳送指令可以

    但是就是收不到MODEM傳回來的訊息

    但是如果我用我的程式跟其他硬體溝通 傳接收都OK沒問題

    或者我用我的程式跟XP的超級終端機傳接收也都沒問題

    就只有不能收到MODEM傳回來的訊息

    但是如果我用廠商附的測試程式 MODEM會回覆給測試程式  用超級終端機也會回復訊息

    而且如果用我的程式送指令給MODEM 這個時候他不會回覆在我的程式裡面

    但是當我把測試程式連線後 他會把我剛剛送的指令該回復的訊息回覆在測試程式上面

    而且只了很久都找不到哪裡出問題

     Private Sub btnOpenPort_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOpenPort.Click
            Dim mPortName As String
            RS232.Encoding = Encoding.ASCII
            mPortName = cmbCOM.SelectedItem.ToString    '欲開啟的通訊埠
            RS232.PortName = mPortName

            If Not RS232.IsOpen Then '尚未開啟
                RS232.Open()  '開啟串列埠
                btnSend.Enabled = True
               
                btnOpenPort.Enabled = False
            Else
                MsgBox("~~通訊埠開啟錯誤(通訊埠已被開啟)~~", MsgBoxStyle.Critical Or MsgBoxStyle.OkCancel)
                End
            End If
        End Sub

        Private Sub btnClosePort_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClosePort.Click
            If RS232 Is Nothing OrElse Not RS232.IsOpen Then    '尚未開啟
                MsgBox("~~通訊埠尚未開啟~~", MsgBoxStyle.Critical Or MsgBoxStyle.OkCancel)
            Else
                RS232.Close()
                btnOpenPort.Enabled = True
            End If
        End Sub

        Private Sub btnEnd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEnd.Click
            If Not RS232 Is Nothing Then    '判斷是否已建立通訊物件
                If RS232.IsOpen Then RS232.Close() '若已開啟 就將其關閉
            End If
            End
        End Sub
        Private Sub RS232_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles RS232.DataReceived
         

            If e.EventType <> SerialData.Chars Then Exit Sub '判斷接收的資料是否為字元
            Dim InString As String
            InString = RS232.ReadExisting    '取得字串


         
        End Sub
      
        Private Sub DisplayText(ByVal comData As String)
            '如果呼叫 txtReceive 的是另外的執行緒 回傳 true
            If Me.txtReceive.InvokeRequired Then
                '利用委派型別建立委派物件 並指定委派的函式
                Dim d As New SetTextCallback(AddressOf DisplayText)
                '用大括號括住初始值 藉以初始化陣列的值
                Me.Invoke(d, New Object() {comData}) '以指定的引數清單叫用函式
            Else  '相同的執行緒
                txtReceive.Text += comData    '將收到的資料輸入接收文字框中
                txtReceive.SelectionStart = txtReceive.Text.Length
                txtReceive.ScrollToCaret()
            End If
        End Sub

        Private Sub btnSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSend.Click
            RS232.Write(txtSend.Text & vbCr)

        End Sub
    • 已移動 璉璉Moderator 2011年1月8日 上午 03:27 (從:Visual Studio一般討論區(General))
    2011年1月6日 上午 05:38

解答

  • 把SerialPort. RtsEnable 屬性設為True 試試看

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    • 已標示為解答 k0122k 2011年1月6日 上午 06:50
    2011年1月6日 上午 06:02
    版主

所有回覆

  • 把SerialPort. RtsEnable 屬性設為True 試試看

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    • 已標示為解答 k0122k 2011年1月6日 上午 06:50
    2011年1月6日 上午 06:02
    版主
  • 挖靠~!!!! 真神人 謝謝 Bill Chung 大大~~~~~~~~~~~~~~~~~

     

    一試就好了~!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 謝謝你啊 我卡關卡好久阿

     

    找了好多 都沒解答 看了好多的寫法都跟我差不多的

     

    我愛你~~~

    2011年1月6日 上午 06:12
  • 移文至:


    T.L. Cheng
    2011年1月8日 上午 03:27
    版主