goole一下C# 串口,什么都有了,串口操作也不是很难,多试几下就行了

解决方案 »

  1.   


    using System.IO.Ports;
    public System.IO.Ports.SerialPort spComPort;
      

  2.   

    .NET 2.0之后的SerialPort组件来开发串口通讯其实已经很简单了,只要合理使用其事件驱动的机制,各种复杂的通讯需求基本上都可以很好解决。下面是.NET2.0后SerialPort组件通信收到的技术要点,你可以修改成你所需要的代码。 
    1).首先,SerialPort的ReceivedBytesThreshold先设置成1,表示只要有1个字符送达端口时便触发DataReceived事件 
    (2).当DataReceived触发时,先把ReceivedBytesThreshold设置成一个比较大的值,达到读取本次端口数据时,不再触发DataReceived. 
    (3).循环读取端口中的数据,直至读完。 
    (4).移除读取数据中的非法字符。 
    (5).触发一个后台线程处理收到的数据。 
    (6).在finally中把ReceivedBytesThreshold重置回1         private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) 
            { 
                if (sender.GetType() != typeof(System.IO.Ports.SerialPort)) 
                { 
                    return; 
                } 
                string strReceive = string.Empty; 
                string strCollect = string.Empty; 
                System.IO.Ports.SerialPort comPort = (System.IO.Ports.SerialPort)sender;             try 
                { 
                    comPort.ReceivedBytesThreshold = comPort.ReadBufferSize; 
                    while (true) 
                    { 
                        strReceive = comPort.ReadExisting(); 
                        if (string.Equals(strReceive, string.Empty)) 
                        { 
                            break; 
                        } 
                        else 
                        { 
                            strCollect += strReceive; 
                            Application.DoEvents(); 
                            Thread.Sleep(100); 
                        } 
                    } 
                    strCollect = strCollect.Replace("\0", string.Empty); 
                    strCollect = strCollect.Replace("\r\n", string.Empty); 
                    strCollect = strCollect.Replace("\r", string.Empty); 
                    strCollect = strCollect.Replace("\n", string.Empty);                 if (!this.bIsHandleCom) 
                    { 
                        this.bIsHandleCom = true; 
                        mReceiveData = strCollect; 
                        if (ThreadReceiveParser != null && !ThreadReceiveParser.IsAlive) //处理收到数据的线程 
                        { 
                            ThreadReceiveParser.Start(); 
                        } 
                    }             } 
                catch (Exception ex) 
                { 
                    MessageBox.Show(this, ex.ToString(), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); 
                } 
                finally 
                { 
                    comPort.ReceivedBytesThreshold = 1; 
                } 
            }
      

  3.   

    不管是RS232还是RS485
    新手的话serialPort这个控件可以基本帮你解决问题,如果想了解深层次的话这个可以看下C++/C#封装的类,第三方控件MSCOMM也不错。网上有最简单的例子:
    (1)新建一个项目,命名为Ex13_01,默认窗体为Form1。
    (2)在Form1窗体中,主要添加两个Button控件,分别用于执行发送数据和接受数据,添加两个TextBox控件,用于输入发送数据和显示接收数据。
    (3)主要程序代码。       
     private void button1_Click(object sender, EventArgs e)  
    {           
       serialPort1.PortName = "COM1";    
       serialPort1.BaudRate = 9600;          
       serialPort1.Open();         
       byte[] data = Encoding.Unicode.GetBytes(textBox1.Text);    
       string str = Convert.ToBase64String(data);   
       serialPort1.WriteLine(str);        
        MessageBox.Show("数据发送成功!","系统提示");      
      }      private void button2_Click(object sender, EventArgs e) 
    {         
       byte[] data = Convert.FromBase64String(serialPort1.ReadLine());  
       textBox2.Text = Encoding.Unicode.GetString(data);  
       serialPort1.Close();         
       MessageBox.Show("数据接收成功!","系统提示");    
    }
    //*********************************************************************
    以后精通后了解串口通讯就了解主要有分为应答模式,响应模式。应带模式:就是发送后等待一定时间后接收,根据需要判断接收数据是否有效。(上下位机控制使用比较多)响应模式:就是缓冲区内有数据就响应datarecivice事件,接收处理。另外建议连接下硬件上串口的分布,基本就三根线有用,2-3短接就是自收自发......
      

  4.   

    关于串口通信的VB的比较多,找找VB的了解了一点原理在用C#做,我就是这么搞滴。
      

  5.   

    不用买书看,MSDN就够你的了。SerialPort完全够你的了。