• 创建C#串口通信程序详解


    在.NET平台下创建C#串口通信程序,.NET 2.0提供了串口通信的功能,其命名空间是System.IO.Ports。这个新的框架不但可以访问计算机上的串口,还可以和串口设备进行通信。我们将使用标准的RS 232 C 在PC间通信。它工作在全双工模式下,而且我们不打算使用任何的握手或流控制器,而是使用无modem连接。创建C#串口通信程序的具体实现是如何的呢?让我们开始吧:

    创建C#串口通信程序之命名空间

        System.IO.Ports命名空间中最重用的是SerialPort 类。

    创建C#串口通信程序之创建SerialPort 对象

        通过创建SerialPort 对象,我们可以在程序中控制串口通信的全过程。

        我们将要用到的SerialPort 类的方法:

        ReadLine():从输入缓冲区读一新行的值,如果没有,会返回NULL

        WriteLine(string):写入输出缓冲

        Open():打开一个新的串口连接

        Close():关闭

    1. //create a Serial Port object  
    2. SerialPort sp = new SerialPort (); 

        默认情况下,DataBits 值是8,StopBits 是1,通信端口是COM1。这些都可以在下面的属性中重新设置:

        BaudRate:串口的波特率

        StopBits:每个字节的停止位数量

        ReadTimeout:当读操作没有完成时的停止时间。单位,毫秒

        还有不少其它公共属性,自己查阅MSDN。

    创建C#串口通信程序之串口的硬件知识

        在数据传输的时候,每个字节的数据通过单个的电缆线传输。包包括开始位,数据,结束为。一旦

        开始位传出,后面就会传数据,可能是5,6,7或8位,就看你的设定了。发送和接收必须设定同样

    的波特率和数据位数。

    创建C#串口通信程序之无猫模式

        没有Modem模式的电缆只是简单地交叉传送和接收线。同样DTR & DSR, 和 RTS & CTS也需要交叉。

        这里,我们三条线。互连2和3(一段的2pin连接3pin),连接两端的5pin。

    创建C#串口通信程序示例程序

        如果想使用默认属性,按“Save Status”按钮,如果想改变属性按“Property”。设定好之后,可以通信了。

        主窗口的代码

    1. #region Using directives  
    2.  
    3. using System;  
    4. using System.Collections.Generic;  
    5. using System.ComponentModel;  
    6. using System.Data;  
    7. using System.Drawing;  
    8. using System.Windows.Forms;  
    9. using System.IO.Ports;  
    10.  
    11. #endregion  
    12.  
    13. namespace Serialexpample  
    14. {  
    15. partial class Form1 : Form  
    16. {  
    17. //create instance of property page  
    18. //property page is used to set values for stop bits and  
    19. //baud rate  
    20.  
    21. PropertyPage pp = new PropertyPage();  
    22.  
    23. //create an Serial Port object  
    24. SerialPort sp = new SerialPort();  
    25.  
    26. public Form1()  
    27. {  
    28. InitializeComponent();  
    29. }  
    30.  
    31. private void propertyButton_Click(object sender, EventArgs e)  
    32. {  
    33. //show property dialog  
    34. pp.ShowDialog();  
    35.  
    36. propertyButton.Hide();  
    37. }  
    38.  
    39. private void sendButton_Click(object sender, EventArgs e)  
    40. {  
    41. try 
    42. {  
    43. //write line to serial port  
    44. sp.WriteLine(textBox.Text);  
    45. //clear the text box  
    46. textBox.Text = "";  
    47. }  
    48. catch (System.Exception ex)  
    49. {  
    50. baudRatelLabel.Text = ex.Message;  
    51. }  
    52.  
    53. }  
    54.  
    55. private void ReadButton_Click(  
    56. object sender, EventArgs e)  
    57. {  
    58. try 
    59. {  
    60. //clear the text box  
    61. textBox.Text = "";  
    62. //read serial port and displayed the data in text box  
    63. textBox.Text = sp.ReadLine();  
    64. }  
    65. catch(System.Exception ex)  
    66. {  
    67. baudRatelLabel.Text = ex.Message;  
    68. }  
    69. }  
    70.  
    71. private void Form1_Load(object sender, EventArgs e)  
    72. {  
    73.  
    74. }  
    75.  
    76. private void Form1_FormClosing(  
    77. object sender, FormClosingEventArgs e)  
    78. {  
    79. MessageBox.Show("Do u want to Close the App");  
    80. sp.Close();  
    81. }  
    82.  
    83. private void startCommButton_Click(  
    84. object sender, EventArgs e)  
    85. {  
    86. startCommButton.Hide();  
    87. sendButton.Show();  
    88. readButton.Show();  
    89. textBox.Show();  
    90. }  
    91.  
    92. //when we want to save the status(value)  
    93. private void saveStatusButton_Click_1(  
    94. object sender, EventArgs e)  
    95. {  
    96. //display values  
    97. //if no property is set the default values  
    98. if (pp.bRate == "" && pp.sBits == "")  
    99. {  
    100. dataBitLabel.Text = "BaudRate = " +  
    101.  sp.BaudRate.ToString();  
    102. readTimeOutLabel.Text = "StopBits = " +   
    103. sp.StopBits.ToString();  
    104. }  
    105. else 
    106. {  
    107. dataBitLabel.Text = "BaudRate = " +  
    108.  pp.bRate;  
    109. readTimeOutLabel.Text = "StopBits = " + pp.sBits;  
    110. }  //创建C#串口通信程序
    111.  
    112. parityLabel.Text = "DataBits = " +  
    113.  sp.DataBits.ToString();  
    114. stopBitLabel.Text = "Parity = " +  
    115.  sp.Parity.ToString();  
    116. readTimeOutLabel.Text = "ReadTimeout = " +  
    117.   sp.ReadTimeout.ToString();  
    118.  
    119. if (propertyButton.Visible == true)  
    120. propertyButton.Hide();  
    121. saveStatusButton.Hide();  
    122. startCommButton.Show();  
    123.  
    124. try 
    125. {  
    126. //open serial port  
    127. sp.Open();  
    128. //set read time out to 500 ms  
    129. sp.ReadTimeout = 500;  
    130. }  
    131. catch (System.Exception ex)  
    132. {  
    133. baudRatelLabel.Text = ex.Message;  
    134. }  
    135. }  
    136. }  
    137. }  

    创建C#串口通信程序之属性设置对话框代码:

    1. #region Using directives  
    2.  
    3. using System;  
    4. using System.Collections.Generic;  
    5. using System.ComponentModel;  
    6. using System.Data;  
    7. using System.Drawing;  
    8. using System.Text;  
    9. using System.Windows.Forms;  
    10.  
    11. #endregion  
    12.  
    13. namespace Serialexpample  
    14. {  
    15. partial class PropertyPage : Form  
    16. {  
    17. //variables for storing values of baud rate and stop bits  
    18. private string baudR="";  
    19. private string stopB="";  
    20.  
    21. //property for setting and getting baud rate and stop bits  
    22. public string bRate  
    23. {  
    24. get 
    25. {  
    26. return baudR;  
    27. }  
    28. set 
    29. {  
    30. baudR = value;  
    31. }  
    32. }  
    33.  
    34. public string sBits  
    35. {  
    36. get 
    37. {  
    38. return stopB;  
    39. }  
    40. set 
    41. {  
    42. stopB = value;  
    43. }  
    44. }  
    45.  
    46. public PropertyPage()  
    47. {  
    48. InitializeComponent();  
    49. }  
    50.  
    51. private void cancelButton_Click(  
    52. object sender, EventArgs e)  
    53. {  
    54. this.bRate = "";  
    55. this.sBits = "";  
    56. //close form  
    57. this.Close();  
    58. }  
    59.  
    60. private void okButton_Click_1(  
    61. object sender, EventArgs e)  
    62. {  
    63. //here we set the value for stop bits and baud rate.  
    64. this.bRate = BaudRateComboBox.Text;  
    65. this.sBits = stopBitComboBox.Text;  
    66. //  
    67. this.Close();  
    68.  
    69. }  
    70. }  

        C#串口通信程序创建的相关内容就向你介绍到这里,希望对你了解创建C#串口通信程序的步骤和需要注意的事宜。

  • 相关阅读:
    C语言:运算结果保留两位小数
    FFmpeg: AVFrame中的data和extend_data的区别
    android studio: 配置版权信息(转)
    C++: C++11 成员函数作为pthread线程 (转)
    android studio: 取消行注释在第一列
    C 语言 int 读写是否需要加锁
    【转】浅析Linux中的零拷贝技术--简单形象
    【转】Linux 内核态与用户态--简明清晰的介绍
    delete如何找到多重继承对象的内存块起始地址
    【转】内存管理内幕mallco及free函数实现--简易内存分配器、内存池、GC技术
  • 原文地址:https://www.cnblogs.com/gc2013/p/3968275.html
Copyright © 2020-2023  润新知