none
VB2005 RS232 Receive issue~~ RRS feed

  • 問題

  • 以下程式VB2005 for PC執行沒問題, 下載到PXA270板子執行Send沒問題, Receive出現錯誤訊息如下:

    "NotSupportedException

    An error message cannot be displayed because an optional resource assembly containing it cannot be found

    at Microsoft.AGL.Common.MISC.HandleAr()

    at System.Windows.Forms.Control.get_Text()

    at System.Windows.Forms.Control.Set_Text()

    at DeviceApplication1.frmStartup.Rx_Process()

    at DeviceApplication1.frmStartup.RS232_DataReceived()

    .

    .

    .

     

    程式碼如下:
        Dim WithEvents RS232 As SerialPort
        Delegate Sub SetTextCallback(ByVal InputString As String)

     

        Public Sub UART_Write(ByVal strCmd As String)
            RS232.Write(strCmd + Chr(13)) 'Enter
            TimeDelay(UART_SEND_TIME)
        End Sub

     

        Private Sub DisplayText(ByVal comData As String)
            If Me.txtReceive.InvokeRequired Then
                Dim d As New SetTextCallback(AddressOf DisplayText)
                Me.Invoke(d, New Object() {comData})
            Else
                Me.txtReceive.Text += comData
            End If
        End Sub

     

        Private Sub RS232_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles RS232.DataReceived
            Dim strInput As String

            Call TimeDelay(100)
            If e.EventType <> SerialData.Chars Then Exit Sub
            strInput = RS232.ReadExisting
            Call Rx_Process(strInput)
        End Sub

     

        Private Sub Rx_Process(ByVal strRxString As String)
            stsMsg.Text = "Data Receiving..."
             DisplayText(strRxString)
        End Sub

    請問如何解決?

     

    謝謝回覆!!

    2008年6月24日 上午 09:22

解答

  • stsMsg.Text 是要去變更UI控制項的屬性嗎?你可以參考璉大之前的文章,改成委派的方式測試看看,也可以單步偵錯確定一下問題出在哪裡。

     

    2008年6月24日 上午 09:42
    版主
  • 無法接收問題已解決, 感謝bauann的幫忙.

     

    1. 使用璉大委派方法, 如下:

    Public Class frmStartup
        Delegate Sub DelegateSetText(ByVal InputString As String) ' 委派的介面,須與執行的副程式相同

        Public Sub DisplayText(ByVal strText As String)
            txtReceive.Text += strText
        End Sub

     

        '*************************************************************************************************
        '                        UART Receive Event
        '*************************************************************************************************
        Private Sub RS232_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles RS232.DataReceived
            Dim strInput As String

            Call TimeDelay(100)
            If e.EventType <> SerialData.Chars Then Exit Sub
            strInput = RS232.ReadExisting
            Call Rx_Process(strInput)
        End Sub

     

        Private Sub Rx_Process(ByVal strRxString As String)
            Me.BeginInvoke(New DelegateSetText(AddressOf DisplayText), New Object() {strRxString}) ' 開始委派呼叫()
        End Sub

    End Class

    2. 連接至Device偵錯方法:

    1. 到開發電腦中的 C:\Program Files\Common Files\microsoft shared\CoreCon\1.0\Target\wce400 裡面,裡面會有很多目錄,看你是用那一種類型的CPU,到該資料夾裡面,將相關檔案複製一份到裝置上面
    2. 到VS2005功能表 "工具"→"選項"後,展開"裝置工具"的節點,選擇裝置,在右邊烈表找到Windows CE裝置,之後選擇"屬性",在傳輸部分是選擇"TCP連接傳輸",右邊有一個"設定"按鈕,點下去之後將裝置IP位址設定為"使用特定IP位址",並在下方設定你的裝置IP
    3. 開啟你的Windows CE裝置,利用檔案總管進到之前第1步複製檔案的地方,先執行"ConmanClient2.exe",之後執行"CMAccept.exe",這兩個直行後都是沒有介面會跑出來的,所以確定有去執行它就可以了
    4 在3分鐘之內,從開發電腦的VS2005開始偵錯,裝置就選擇"Windows CE 裝置",過一下子你會看到VS2005下面的StatusBar會顯示在部屬一些東西,部屬完成之後就可以遠端偵錯了。
    2008年6月26日 上午 03:32

所有回覆

  • stsMsg.Text 是要去變更UI控制項的屬性嗎?你可以參考璉大之前的文章,改成委派的方式測試看看,也可以單步偵錯確定一下問題出在哪裡。

     

    2008年6月24日 上午 09:42
    版主
  •  

    1. 我是用委派的方式, 將RS232接收的資料顯示在Text控制項, 看以上程式, VB2005 for PC執行, 傳送及接收都沒問題,但是VB2005 for WinCE產生的執行檔下載至板子上, 傳送沒有問題, 接收出現錯誤, 如上所述.

     

    2. VB2005 for PC可以設定中斷點, 單步執行, 但是VB2005 for WinCE怎麼單步執行?

     

    3. 在PXA270上, VB2005 for WinCE 要如何做才能接收資料? 透過委派和Timer都沒辦法顯示在Text控制項上?

     

     

    謝謝回覆!!

     

     

    2008年6月25日 上午 12:18
  • Hi,

    Timer也試過不行嗎?因為我看你的程式好像一個地方有委派,另一個地方好像沒有;你先不要用Serialport的事件,用Timer手動去下Read的指令看能不能成功的收集到資料;另外你之前在PC上跑是用VS2005跑偵錯還是直接用直行檔跑?如果是直接用直行檔下去跑的話,"跨執行緒變更UI屬性"這部分是不會有錯誤詢息出來的,程式還是可以跑;只是"有可能"會在一些莫名其妙的地方發生錯誤,比較難去debug..

    2008年6月25日 上午 08:45
    版主
  • 無法接收問題已解決, 感謝bauann的幫忙.

     

    1. 使用璉大委派方法, 如下:

    Public Class frmStartup
        Delegate Sub DelegateSetText(ByVal InputString As String) ' 委派的介面,須與執行的副程式相同

        Public Sub DisplayText(ByVal strText As String)
            txtReceive.Text += strText
        End Sub

     

        '*************************************************************************************************
        '                        UART Receive Event
        '*************************************************************************************************
        Private Sub RS232_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles RS232.DataReceived
            Dim strInput As String

            Call TimeDelay(100)
            If e.EventType <> SerialData.Chars Then Exit Sub
            strInput = RS232.ReadExisting
            Call Rx_Process(strInput)
        End Sub

     

        Private Sub Rx_Process(ByVal strRxString As String)
            Me.BeginInvoke(New DelegateSetText(AddressOf DisplayText), New Object() {strRxString}) ' 開始委派呼叫()
        End Sub

    End Class

    2. 連接至Device偵錯方法:

    1. 到開發電腦中的 C:\Program Files\Common Files\microsoft shared\CoreCon\1.0\Target\wce400 裡面,裡面會有很多目錄,看你是用那一種類型的CPU,到該資料夾裡面,將相關檔案複製一份到裝置上面
    2. 到VS2005功能表 "工具"→"選項"後,展開"裝置工具"的節點,選擇裝置,在右邊烈表找到Windows CE裝置,之後選擇"屬性",在傳輸部分是選擇"TCP連接傳輸",右邊有一個"設定"按鈕,點下去之後將裝置IP位址設定為"使用特定IP位址",並在下方設定你的裝置IP
    3. 開啟你的Windows CE裝置,利用檔案總管進到之前第1步複製檔案的地方,先執行"ConmanClient2.exe",之後執行"CMAccept.exe",這兩個直行後都是沒有介面會跑出來的,所以確定有去執行它就可以了
    4 在3分鐘之內,從開發電腦的VS2005開始偵錯,裝置就選擇"Windows CE 裝置",過一下子你會看到VS2005下面的StatusBar會顯示在部屬一些東西,部屬完成之後就可以遠端偵錯了。
    2008年6月26日 上午 03:32
  • kchuang1126 ,您好:

    我想參考您的方式,

    在WINCE5.0專案下,

    做個RS232的收發程式,

    然後在DMA-2440板子下作動,

    試了很久還是試不出來,

    希望能向您請教,

     

    我想做個輸出Write(1),

    然後READ() <8位元>,

    不曉得您是否有空說明您寫的程式。

     

    如果可以,

    以下是我的信箱:

    dddr520@yahoo.com.tw

    多謝您。

    2011年3月7日 上午 04:28