none
抓不到RS232 GPS訊號 ce 5.0 (C#) RRS feed

  • 問題

  • 想要撰寫在CE 5.0的嵌入式系統上執行的GPS應用程式,

    serial port是用Visual studio 2005拉的元件。

    在PC上面執行是可以抓到GPS的訊號,

    但在嵌入式系統上則沒有反應,在serial port的開啟就有問題...

    想請問關於C#在 CE 5.0上的Compact Frame Work 2,關於rs232的寫法,是不是有所不同呢?

    有看到版友Jeff撰寫的C# GPS程式在Pocket PC上的code,

    也試著修改它的範例code在CE5.0上執行,同樣抓不到rs232的訊號

    但小弟有使用GPSviewer在該裝置上執行,是抓得到GPS訊號的(雖然因為接收器位於室內無法成功定位)

    還是說在.Net 這部份 CE 5.0在rs232並沒有支援呢?

    感謝大家指教!

     

    小弟的程式碼如下

    ----------------------------

    Code Snippet

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.IO.Ports;

    namespace DeviceApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                           
            }     

            private void button3_Click(object sender, EventArgs e)
            {
                if (serialPort1.IsOpen == false) //判斷是否開啟serialPort
                {serialPort1.Open();  //如果未開啟,則開啟serial port
                textBox3.Text = "開啟Serial Port";
                }
                else
                {textBox3.Text = "Serial Port 已開啟"; //如果已啟動則提示使用者已啟動
                }                       
            }
            private void button2_Click(object sender, EventArgs e)
            {  
                serialPort1.Close(); //關閉serial port
                textBox1.Text = "";  //清空各textbox
                textBox2.Text = "";
                textBox3.Text = "";
                textBox4.Text = "";
            }

            private void button1_Click(object sender, EventArgs e)
            {    
                if (serialPort1.IsOpen == false)
                { textBox3.Text = "Serial Port 未開啟";
                }
                else
                {
                     string gpsdata = "";       
                     gpsdata = serialPort1.ReadLine();   //讀取GPS接收器傳來的資料                
                     char[] delimiterChar ={ ',' }; //分割字元為","
                     string[] words = gpsdata.Split(delimiterChar);  //以","切割資料                                       
                     if (words[0] == "$GPRMC") //選定RMC規格
                     {textBox1.Text = words[2]; //顯示資料正確性,V不可用,A可用
                      textBox2.Text = words[3]+words[4]; //顯示緯度
                      textBox4.Text = words[5] + words[6];//顯示經度
                      textBox3.Text = gpsdata;//顯示GPS字串資料
                     }
                }
            }
        }
    }

     

     

    ---------------

     

     

    2008年10月2日 上午 07:27

解答

所有回覆

  • 沒有看到你設定serialport的地方?有沒有確認過設定是否正確?之前也有些GPS的相關討論,建議可以先參考一下、測試看看。

     

    2008年10月6日 下午 03:01
    版主
  •  

    我是用拉元件的方式,有在屬性那邊設定好了。

    這樣的程式在PC上執行正常,但在嵌入式系統上就是不ok,所以來請教大家,請多多指教

    2008年10月6日 下午 03:05
  • 不要用ReadLine測試看看,我之前也是有遇到ReadLine去收,不管怎麼搞就是沒東西;直接開一個buffer(byte陣列)出來,之後直接用Read的指令去收資料測試看看。

     

    2008年10月6日 下午 03:09
    版主
  •  

    謝謝您的建議,我會試試看,但是在嵌入式系統上 在serial port開啟跟關閉的兩個button就會有問題,

    無法正常的開啟跟關閉port,執行的時候只會顯示port未開啟,

    所以才會懷疑是rs232寫法的問題。

    2008年10月6日 下午 03:15
  • Hi,

    無法開啟或是關閉所丟出的錯誤訊息是甚麼?你有確定過PortName的設定正確嗎?

     

    • 已標示為解答 Jonathan Hwu 2009年3月1日 上午 04:20
    2008年10月6日 下午 03:40
    版主
  •  

    我用C#读取串口数据时也收不到数据,后来用EVC做的,效果很好!

     

    代码在我的一个帖子中贴出来了。

    2008年10月15日 上午 01:41
  • Hi

    我遇過跟你一樣的問題,基本上Compact Framework 的serial port寫法是一樣的,我後來發現出問題的是WinCE將第一個串列埠設為Debug port,所以程式中的COM1會將資料傳向WinCE中的COM2而導致無法使用。

    解決方法是在 Platform Builder -> Parameter View中找到 platform.reg

    [HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial]

     "SysIntr"=dword : 13

     "IoBase"=dword : 02F8

    改為

     "SysIntr"=dword : 14

     "IoBase"=dword : 03F


    這樣就可以使用了。


    如果你想直接把它disable,這裡有一篇教你如何disable debug serial port 

    http://www.windowsembedded.com.tw/Forums/viewtopic.php?t=54&highlight=disable+debug+serial+port

    2008年11月4日 下午 02:32
  •  

    若你的GPS是外接,COM port是external,可以試試看你的程式是否能正確的接收COM port的資料。將你的Win CE device 的COM port連接PC或note book的COM port,在pc上執行Hyper Terminal. 將Hyper Terminal上的參數設的和你的WIN CE 程式COM port的參數一樣,執行你的Win CE 程式看能不能收到pc上Hyper Terminal送進來的字串,這樣可以測出你的Win CE的程式是否正確讀到資料。
    2008年11月14日 上午 12:43
  • 最後發現是port name的問題,設定好就有了。

    謝謝大家
    • 已標示為解答 Jonathan Hwu 2009年3月1日 上午 04:20
    2009年3月1日 上午 04:20
  • 請問port name要設成什麼?!謝謝
    2009年3月6日 上午 04:50
  • EX: COM1,COM2,COM3,COM4...etc.

    之前都沒有設定,所以預設值是COM1,在PC上測試兩個COM port都會通,我就以為沒問題了。

    但是到嵌入式系統上,卻必須選擇正確的COM port,

    建議使用下拉式選單,來設定比較方便。
    2009年3月6日 上午 05:49