具体是这样的,PLC通过GPRS RTU 发送数据到远程windows上位机,上微机通过连接在串口的GPRS接收端拨号到因特网接收数据,请问C#如何接收通过串口到达的GPRS数据呢?俺是一点思路也没有,麻烦高手们帮忙给些思路。
接收的协议如下:
瞬时数据PLC 主动发送:028001#3F49B39D000000004263E7EA3EE0323D4256B34B##02 站号01 井号3F49B39D 浮点数  测量液量  (m3/h)00000000   浮点数 测量气量  (m3/h)4263E7EA  浮点数  测量含水率  (%)3EE0323D  浮点数  测量压力   (MPa)4256B34B  浮点数  测量温度   (℃)日测量数据上位发送命令 去  取数据发送命令  :0302##返回数据
:038006#Day#000C00140009001B3FB25885000000004271A63B3F158E80415DD21F##03 站号06 井号000C00140009001B  整数  分别 是  月  日  时  分40009001B 浮点数  测量液量  (m3/d)3FB25885  浮点数  测量油量  (m3/d)00000000   浮点数 测量气量  (m3/d)4271A63  浮点数  测量含水率  (%)3F158E80  浮点数  测量压力   (MPa)415DD21F  浮点数  测量温度   (℃)

解决方案 »

  1.   

    System.IO.Ports.SerialPort("COM1"); 在取来的字符串做分析
      

  2.   

    好久的事了,看看这个
    http://blog.sina.com.cn/s/blog_49b95c2101000a1v.htmlhttp://topic.csdn.net/u/20070426/09/54429632-f2c8-4316-9d7e-cc765c2f394e.html
    没准有帮助。
      

  3.   

    以前做過一個讀RS232的東西,一些程序片,樓主可以參考一下。SerialPort port = new SerialPort("COM1", 9600, Parity.Even, 7, StopBits.Two); private void Form1_Load(object sender, EventArgs e)
            {           
                try
                {
                    port.Open();
                    timer1.Enabled = true;
                    
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Port can't Open! " + ex.Message);
                    this.Close();            }
                finally
                {
                    // Close the port
                    port.Close();              
                   
                }
                        }
    private void READ_button_Click(object sender, EventArgs e)
            {           
               try
                    {
                        // Open the port for communications
                        port.Open();
                        // Write a string
                        port.WriteLine("01RETR");
                        //這里就可以寫樓主的“0302##”                    DATA_textBox.Text = port.ReadLine();
                        
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Port can't Open! " + ex.Message);
                    }
                    
                    finally
                    {
                        // Close the port
                        port.Close();                                  
                    }
                }
                
      

  4.   

    http://www.cnblogs.com/sky266/archive/2007/10/27/939381.html
    很多类型的都有!!
    看看吧!!
      

  5.   

    用serialport去读数据呀,这就是串口的读数据,有个datarecieved事件,然后你在从得到的数据进行字符串的分析。
      

  6.   

    http://www.cnblogs.com/jetxia/archive/2007/03/20/681366.html
      

  7.   

    串口的接收方式有两种轮询和中断,轮询稍微简单点,在窗体中
    加一个timer控件,设置好时间间隔即可
    至于接受串口数据,调用api函数
      

  8.   

    1.你先实现一个串口通讯的收发数据类 COMSocket.cs------->byte[] data=new byte[1024] 
    2.在接受的时后,如异步通讯时取出data
    COMSocket下的
    public void receive()
    {
    //一些接收回调的代码。收到数据就
    DataProcessor.PassData(data)}DataRecProcessor静态方法类处理你接受数据的模式或数据类别
    public static void PassData(byte[] data)
    {
    switch
    //...
    case
    //...调用你具体的处理方法DataProcessor.SerialPortRecXXOO}DataProcessor{
    public static void SerialPortRecXXOO(byte[] data)//处理气象数据
    {
    //byte[] to  结构struct 转换的方法调用气象数据结构.站号 .tostring()就得到了你要的值
    如果是byte[],encoding.default.getstring(000C00140009001B  整数  分别 是  月  日  时  分 );////这个你们发出去也要是string 转换byte[]发
    }public void byte2struct (byte[] data)
    {}
    }
    //声明气象数据结构 这里你要看一下具体的数据结构,能pass出每一位值,还有序列化数据,根据需要声明byte或byte[]
    struct 气象数据结构名
    {
    /*
    public byte 03 站号 06 井号 000C00140009001B  整数  分别 是  月  日  时  分 40009001B 浮点数  测量液量  (m3/d) 3FB25885  浮点数  测量油量  (m3/d) 00000000  浮点数 测量气量  (m3/d) 4271A63  浮点数  测量含水率  (%) 3F158E80  浮点数  测量压力  (MPa) 415DD21F  浮点数  测量温度  (℃) */
    }不明白了就问我[email protected]
      

  9.   

    还有串口收发的套接字是线程,与窗体交互会需要使用委托,调用InvokeRequid判断给窗体控件赋值(如文本框textbox.text)
      

  10.   

    串口初始化,设置串口名,波特率,奇偶校验,接收字节数等等.
    等readline接受到数据进行字符串处理,