当前位置:编程学习 > C#/ASP.NET >>

C#串口编程书

麻烦懂的朋友给推荐本C#串口编程的书籍。
我是C#新手。看了几本书。发现都不怎么好。
很多东西还是不懂。
有懂的哥哥姐姐们。推荐几本好书。
希望能看完书籍后 能自己写点东西。 --------------------编程问答-------------------- 网上有个C#串口的类,好好琢磨下,这点东西,就不必看书了。 --------------------编程问答-------------------- goole一下C# 串口,什么都有了,串口操作也不是很难,多试几下就行了 --------------------编程问答-------------------- 学习中 --------------------编程问答--------------------

using System.IO.Ports;
public System.IO.Ports.SerialPort spComPort;
--------------------编程问答-------------------- 楼主比较年轻,还没有到了可以举一反三的时候,
是麻烦点了。
--------------------编程问答-------------------- .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; 
            } 
        } --------------------编程问答-------------------- 哇 串口 第一次听说 又学习了 我也找资料去 --------------------编程问答--------------------
引用楼主 bo_devil 的回复:
麻烦懂的朋友给推荐本C#串口编程的书籍。
我是C#新手。看了几本书。发现都不怎么好。
很多东西还是不懂。
有懂的哥哥姐姐们。推荐几本好书。
希望能看完书籍后 能自己写点东西。

这个串口 真的到不用看书的地步了? --------------------编程问答--------------------
引用 4 楼 zhu4139365 的回复:
C# code

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


  有效。。 谢谢 --------------------编程问答-------------------- 不管是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短接就是自收自发......


--------------------编程问答-------------------- 研究下,可以的 --------------------编程问答-------------------- 关于串口通信的VB的比较多,找找VB的了解了一点原理在用C#做,我就是这么搞滴。 --------------------编程问答-------------------- --------------------编程问答-------------------- 不用买书看,MSDN就够你的了。SerialPort完全够你的了。 --------------------编程问答-------------------- 恼火恼火。在网上不停的看吧 --------------------编程问答--------------------
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,