C#结合串口通信类实现串口通信源代码

mycom是串口通信类,在本blog前一篇中有完整代码。( C#串口通信编程类(修改版) )
下面是串口通讯测试程序的源代码,将mycom类放在此项目中
可以实现简单的串口通信,希望读者能通过这个程序对串口通信过程有一个初步的了解:

 

using  System;
using  System.Drawing;
using  System.Collections;
using  System.ComponentModel;
using  System.Windows.Forms;
using  System.Data;
using  System.Threading;
namespace  BusApp
{
 
///   <summary>
 
///  Form1 的摘要说明。
 
///   </summary>
  public   class  Form1 : System.Windows.Forms.Form
 {
  
private  System.Windows.Forms.Label label1;
  
private  System.Windows.Forms.Label label2;
  
private  System.Windows.Forms.Button button1;
  
private  System.Windows.Forms.GroupBox groupBox1;
  
private  System.Windows.Forms.Label label3;
  
private  System.Windows.Forms.Label label4;
  
private  System.Windows.Forms.Label label5;
  
private  System.Windows.Forms.Label label6;
  
private  System.Windows.Forms.Button button2;
  
private  System.Windows.Forms.Button button3;
  
private  System.Windows.Forms.Button button4;
  
private  System.Windows.Forms.TextBox textBox8;
  
private  System.Windows.Forms.Label label7;

  
public   int  iPort = 1 // 1,2,3,4
   public   int  iRate = 9600 // 1200,2400,4800,9600
   public   byte  bSize = 8 // 8 bits
   public   byte  bParity = 0 //  0-4=no,odd,even,mark,space 
   public   byte  bStopBits = 1 //  0,1,2 = 1, 1.5, 2 
   public   int  iTimeout = 1000 ;
  
public  mycom mycom1 = new  mycom();
  
public   byte [] recb;

  
private  System.Windows.Forms.TextBox msg;
  
private  System.Windows.Forms.TextBox t_port;
  
private  System.Windows.Forms.TextBox t_rate;
  
private  System.Windows.Forms.TextBox t_bytesize;
  
private  System.Windows.Forms.TextBox t_stopbyte;
  
private  System.Windows.Forms.TextBox t_parity;
  
private  System.Windows.Forms.TextBox t_send;
  
private  System.Windows.Forms.Button button5;  // readTimeOut
   ///   <summary>
  
///  必需的设计器变量。
  
///   </summary>
   private  System.ComponentModel.Container components  =   null ;

  
public  Form1()
  {
   InitializeComponent();
  }

  
///   <summary>
  
///  清理所有正在使用的资源。
  
///   </summary>
   protected   override   void  Dispose(  bool  disposing )
  {
   
if ( disposing )
   {
    
if  (components  !=   null
    {
     components.Dispose();
    }
   }
   
base .Dispose( disposing );
  }

  
#region  Windows 窗体设计器生成的代码
  
///   <summary>
  
///  设计器支持所需的方法 - 不要使用代码编辑器修改
  
///  此方法的内容。
  
///   </summary>
   private   void  InitializeComponent()
  {
   
this .msg  =   new  System.Windows.Forms.TextBox();
   
this .label1  =   new  System.Windows.Forms.Label();
   
this .label2  =   new  System.Windows.Forms.Label();
   
this .t_send  =   new  System.Windows.Forms.TextBox();
   
this .button1  =   new  System.Windows.Forms.Button();
   
this .groupBox1  =   new  System.Windows.Forms.GroupBox();
   
this .button2  =   new  System.Windows.Forms.Button();
   
this .t_port  =   new  System.Windows.Forms.TextBox();
   
this .label3  =   new  System.Windows.Forms.Label();
   
this .t_rate  =   new  System.Windows.Forms.TextBox();
   
this .label4  =   new  System.Windows.Forms.Label();
   
this .t_bytesize  =   new  System.Windows.Forms.TextBox();
   
this .label5  =   new  System.Windows.Forms.Label();
   
this .t_stopbyte  =   new  System.Windows.Forms.TextBox();
   
this .label6  =   new  System.Windows.Forms.Label();
   
this .t_parity  =   new  System.Windows.Forms.TextBox();
   
this .button3  =   new  System.Windows.Forms.Button();
   
this .button4  =   new  System.Windows.Forms.Button();
   
this .textBox8  =   new  System.Windows.Forms.TextBox();
   
this .label7  =   new  System.Windows.Forms.Label();
   
this .button5  =   new  System.Windows.Forms.Button();
   
this .groupBox1.SuspendLayout();
   
this .SuspendLayout();
   
//  
   
//  msg
   
//  
    this .msg.ForeColor  =  System.Drawing.Color.Green;
   
this .msg.Location  =   new  System.Drawing.Point( 0 0 );
   
this .msg.Multiline  =   true ;
   
this .msg.Name  =   " msg " ;
   
this .msg.ScrollBars  =  System.Windows.Forms.ScrollBars.Vertical;
   
this .msg.Size  =   new  System.Drawing.Size( 512 264 );
   
this .msg.TabIndex  =   0 ;
   
this .msg.Text  =   "" ;
   
//  
   
//  label1
   
//  
    this .label1.Location  =   new  System.Drawing.Point( 16 24 );
   
this .label1.Name  =   " label1 " ;
   
this .label1.Size  =   new  System.Drawing.Size( 56 16 );
   
this .label1.TabIndex  =   1 ;
   
this .label1.Text  =   " 串口号: " ;
   
//  
   
//  label2
   
//  
    this .label2.ForeColor  =  System.Drawing.Color.FromArgb(((System.Byte)( 192 )), ((System.Byte)( 64 )), ((System.Byte)( 0 )));
   
this .label2.Location  =   new  System.Drawing.Point( 8 280 );
   
this .label2.Name  =   " label2 " ;
   
this .label2.Size  =   new  System.Drawing.Size( 80 16 );
   
this .label2.TabIndex  =   1 ;
   
this .label2.Text  =   " 设置数据包: " ;
   
//  
   
//  t_send
   
//  
    this .t_send.BorderStyle  =  System.Windows.Forms.BorderStyle.FixedSingle;
   
this .t_send.ForeColor  =  System.Drawing.Color.FromArgb(((System.Byte)( 255 )), ((System.Byte)( 128 )), ((System.Byte)( 0 )));
   
this .t_send.Location  =   new  System.Drawing.Point( 80 272 );
   
this .t_send.Name  =   " t_send " ;
   
this .t_send.Size  =   new  System.Drawing.Size( 344 21 );
   
this .t_send.TabIndex  =   2 ;
   
this .t_send.Text  =   "" ;
   
//  
   
//  button1
   
//  
    this .button1.Location  =   new  System.Drawing.Point( 432 272 );
   
this .button1.Name  =   " button1 " ;
   
this .button1.Size  =   new  System.Drawing.Size( 40 23 );
   
this .button1.TabIndex  =   3 ;
   
this .button1.Text  =   " 发送 " ;
   
this .button1.Click  +=   new  System.EventHandler( this .button1_Click);
   
//  
   
//  groupBox1
   
//  
    this .groupBox1.Controls.Add( this .button2);
   
this .groupBox1.Controls.Add( this .t_port);
   
this .groupBox1.Controls.Add( this .label1);
   
this .groupBox1.Controls.Add( this .label3);
   
this .groupBox1.Controls.Add( this .t_rate);
   
this .groupBox1.Controls.Add( this .label4);
   
this .groupBox1.Controls.Add( this .t_bytesize);
   
this .groupBox1.Controls.Add( this .label5);
   
this .groupBox1.Controls.Add( this .t_stopbyte);
   
this .groupBox1.Controls.Add( this .label6);
   
this .groupBox1.Controls.Add( this .t_parity);
   
this .groupBox1.ForeColor  =  System.Drawing.Color.FromArgb(((System.Byte)( 192 )), ((System.Byte)( 64 )), ((System.Byte)( 0 )));
   
this .groupBox1.Location  =   new  System.Drawing.Point( 8 304 );
   
this .groupBox1.Name  =   " groupBox1 " ;
   
this .groupBox1.Size  =   new  System.Drawing.Size( 176 216 );
   
this .groupBox1.TabIndex  =   4 ;
   
this .groupBox1.TabStop  =   false ;
   
this .groupBox1.Text  =   " 参数设置 " ;
   
//  
   
//  button2
   
//  
    this .button2.FlatStyle  =  System.Windows.Forms.FlatStyle.Popup;
   
this .button2.Location  =   new  System.Drawing.Point( 80 184 );
   
this .button2.Name  =   " button2 " ;
   
this .button2.TabIndex  =   3 ;
   
this .button2.Text  =   " 应用设置 " ;
   
this .button2.Click  +=   new  System.EventHandler( this .button2_Click);
   
//  
   
//  t_port
   
//  
    this .t_port.BorderStyle  =  System.Windows.Forms.BorderStyle.FixedSingle;
   
this .t_port.Location  =   new  System.Drawing.Point( 80 16 );
   
this .t_port.Name  =   " t_port " ;
   
this .t_port.Size  =   new  System.Drawing.Size( 80 21 );
   
this .t_port.TabIndex  =   2 ;
   
this .t_port.Text  =   " 1 " ;
   
//  
   
//  label3
   
//  
    this .label3.Location  =   new  System.Drawing.Point( 16 58 );
   
this .label3.Name  =   " label3 " ;
   
this .label3.Size  =   new  System.Drawing.Size( 56 16 );
   
this .label3.TabIndex  =   1 ;
   
this .label3.Text  =   " 波特率: " ;
   
//  
   
//  t_rate
   
//  
    this .t_rate.BorderStyle  =  System.Windows.Forms.BorderStyle.FixedSingle;
   
this .t_rate.Location  =   new  System.Drawing.Point( 80 50 );
   
this .t_rate.Name  =   " t_rate " ;
   
this .t_rate.Size  =   new  System.Drawing.Size( 80 21 );
   
this .t_rate.TabIndex  =   2 ;
   
this .t_rate.Text  =   " 9600 " ;
   
//  
   
//  label4
   
//  
    this .label4.Location  =   new  System.Drawing.Point( 16 92 );
   
this .label4.Name  =   " label4 " ;
   
this .label4.Size  =   new  System.Drawing.Size( 56 16 );
   
this .label4.TabIndex  =   1 ;
   
this .label4.Text  =   " 数据位: " ;
   
//  
   
//  t_bytesize
   
//  
    this .t_bytesize.BorderStyle  =  System.Windows.Forms.BorderStyle.FixedSingle;
   
this .t_bytesize.Location  =   new  System.Drawing.Point( 80 84 );
   
this .t_bytesize.Name  =   " t_bytesize " ;
   
this .t_bytesize.Size  =   new  System.Drawing.Size( 80 21 );
   
this .t_bytesize.TabIndex  =   2 ;
   
this .t_bytesize.Text  =   " 8 " ;
   
//  
   
//  label5
   
//  
    this .label5.Location  =   new  System.Drawing.Point( 16 126 );
   
this .label5.Name  =   " label5 " ;
   
this .label5.Size  =   new  System.Drawing.Size( 56 16 );
   
this .label5.TabIndex  =   1 ;
   
this .label5.Text  =   " 停止位: " ;
   
//  
   
//  t_stopbyte
   
//  
    this .t_stopbyte.BorderStyle  =  System.Windows.Forms.BorderStyle.FixedSingle;
   
this .t_stopbyte.Location  =   new  System.Drawing.Point( 80 118 );
   
this .t_stopbyte.Name  =   " t_stopbyte " ;
   
this .t_stopbyte.Size  =   new  System.Drawing.Size( 80 21 );
   
this .t_stopbyte.TabIndex  =   2 ;
   
this .t_stopbyte.Text  =   " 1 " ;
   
//  
   
//  label6
   
//  
    this .label6.Location  =   new  System.Drawing.Point( 16 160 );
   
this .label6.Name  =   " label6 " ;
   
this .label6.Size  =   new  System.Drawing.Size( 56 16 );
   
this .label6.TabIndex  =   1 ;
   
this .label6.Text  =   " 校验位: " ;
   
//  
   
//  t_parity
   
//  
    this .t_parity.BorderStyle  =  System.Windows.Forms.BorderStyle.FixedSingle;
   
this .t_parity.Enabled  =   false ;
   
this .t_parity.Location  =   new  System.Drawing.Point( 80 152 );
   
this .t_parity.Name  =   " t_parity " ;
   
this .t_parity.Size  =   new  System.Drawing.Size( 80 21 );
   
this .t_parity.TabIndex  =   2 ;
   
this .t_parity.Text  =   " 0 " ;
   
//  
   
//  button3
   
//  
    this .button3.Location  =   new  System.Drawing.Point( 472 272 );
   
this .button3.Name  =   " button3 " ;
   
this .button3.Size  =   new  System.Drawing.Size( 40 23 );
   
this .button3.TabIndex  =   3 ;
   
this .button3.Text  =   " 清空 " ;
   
this .button3.Click  +=   new  System.EventHandler( this .button3_Click);
   
//  
   
//  button4
   
//  
    this .button4.FlatStyle  =  System.Windows.Forms.FlatStyle.Popup;
   
this .button4.Location  =   new  System.Drawing.Point( 432 312 );
   
this .button4.Name  =   " button4 " ;
   
this .button4.Size  =   new  System.Drawing.Size( 72 23 );
   
this .button4.TabIndex  =   6 ;
   
this .button4.Text  =   " 初始化 " ;
   
//  
   
//  textBox8
   
//  
    this .textBox8.BorderStyle  =  System.Windows.Forms.BorderStyle.FixedSingle;
   
this .textBox8.ForeColor  =  System.Drawing.Color.FromArgb(((System.Byte)( 255 )), ((System.Byte)( 128 )), ((System.Byte)( 0 )));
   
this .textBox8.Location  =   new  System.Drawing.Point( 288 312 );
   
this .textBox8.Name  =   " textBox8 " ;
   
this .textBox8.Size  =   new  System.Drawing.Size( 136 21 );
   
this .textBox8.TabIndex  =   7 ;
   
this .textBox8.Text  =   "" ;
   
//  
   
//  label7
   
//  
    this .label7.Location  =   new  System.Drawing.Point( 200 320 );
   
this .label7.Name  =   " label7 " ;
   
this .label7.Size  =   new  System.Drawing.Size( 100 16 );
   
this .label7.TabIndex  =   8 ;
   
this .label7.Text  =   " 设置本机地址: " ;
   
//  
   
//  button5
   
//  
    this .button5.FlatStyle  =  System.Windows.Forms.FlatStyle.Popup;
   
this .button5.Location  =   new  System.Drawing.Point( 440 504 );
   
this .button5.Name  =   " button5 " ;
   
this .button5.Size  =   new  System.Drawing.Size( 64 23 );
   
this .button5.TabIndex  =   9 ;
   
this .button5.Text  =   " 关闭串口 " ;
   
this .button5.Click  +=   new  System.EventHandler( this .button5_Click);
   
//  
   
//  Form1
   
//  
    this .AutoScaleBaseSize  =   new  System.Drawing.Size( 6 14 );
   
this .ClientSize  =   new  System.Drawing.Size( 512 533 );
   
this .Controls.Add( this .button5);
   
this .Controls.Add( this .textBox8);
   
this .Controls.Add( this .label7);
   
this .Controls.Add( this .button4);
   
this .Controls.Add( this .groupBox1);
   
this .Controls.Add( this .button1);
   
this .Controls.Add( this .t_send);
   
this .Controls.Add( this .msg);
   
this .Controls.Add( this .label2);
   
this .Controls.Add( this .button3);
   
this .Name  =   " Form1 " ;
   
this .Text  =   " 串口通讯(小y设计) " ;
   
this .Closing  +=   new  System.ComponentModel.CancelEventHandler( this .Form1_Closing);
   
this .Load  +=   new  System.EventHandler( this .Form1_Load);
   
this .groupBox1.ResumeLayout( false );
   
this .ResumeLayout( false );

  }
  
#endregion

  
///   <summary>
  
///  应用程序的主入口点。
  
///   </summary>
  [STAThread]
  
static   void  Main() 
  {
   Application.Run(
new  Form1());
  }
// 程序开启,串口初始化
   private   void  Form1_Load( object  sender, System.EventArgs e)
  {
   mycom1.PortNum
= iPort;
   mycom1.BaudRate
= iRate;
   mycom1.ByteSize
= bSize;
   mycom1.Parity
= bParity;
   mycom1.StopBits
= bStopBits;
   mycom1.ReadTimeout
= iTimeout;
   
if ( this .OpenCom())
    msg.AppendText(
" 串口初始化成功……\r\n " );
   
else
    msg.AppendText(
" 串口初始化失败!\r\n " );
  }
// 显示包信息
   public   string  dis_package( byte [] reb)
  {
   
string  temp = "" ;
   
foreach ( byte  b  in  reb)
    temp
+= b.ToString( " X2 " ) + "   " ;
   
return  temp;
  }
// 开串口
   public   bool  OpenCom()
  {
   
try
   {
     
if  (mycom1.Opened)
     {
      mycom1.Close();
      mycom1.Open(); 
// 打开串口
     }
     
else
     {
      mycom1.Open();
// 打开串口
     }
     
return   true ;
   }
   
catch (Exception e) 
   {
     MessageBox.Show(
" 错误: "   +  e.Message);
     
return   false ;
   } 

  }
// 发送按钮
   private   void  button1_Click( object  sender, System.EventArgs e)
  {
   
if (t_send.Text == "" )
   {MessageBox.Show(
" 发送数据为空! " ); return ;}
   
byte [] temp1 = mysendb();
   
int  sendnumb = 0 ;
   
try
   {
    sendnumb
= mycom1.Write(temp1);
     msg.AppendText(
" \r\n发送数据( " + sendnumb + " ): " + dis_package(temp1));
    recb
= mycom1.Read( 50 );
    
// if(recb.Length!=0)
     msg.AppendText( " \r\n接收到数据包: " + dis_package(recb));
   }
   
catch
   {msg.AppendText(
" \r\n发送失败! " ); return ;}
   
   
// OpenCom();
  }
// 去掉发送数组中的空格
   public   string  delspace( string  putin)
  {
   
string  putout = "" ;
   
for ( int  i = 0 ;i < putin.Length;i ++ )
   {
    
if (putin[i] != '   ' )
     putout
+= putin[i];
   }
   
return  putout;
  }
// 提取数据包
   public   byte [] mysendb()
  {
   
string  temps = delspace(t_send.Text);
   
byte [] tempb = new   byte [ 50 ];
   
int  j = 0 ;
   
for ( int  i = 0 ;i < temps.Length;i = i + 2 ,j ++ )
    tempb[j]
= Convert.ToByte(temps.Substring(i, 2 ), 16 );
   
byte [] send = new   byte [j];
   Array.Copy(tempb,send,j);
   
return  send;
  }
// 清空按钮
   private   void  button3_Click( object  sender, System.EventArgs e)
  {
   t_send.Text
= string .Empty;
   msg.Text
= string .Empty;
  }

// 参数设置
   private   void  button2_Click( object  sender, System.EventArgs e)
  {
    mycom1.PortNum
= Convert.ToInt16(t_port.Text);  // 1,2,3,4
   mycom1.BaudRate = Convert.ToInt16(t_rate.Text);  // 1200,2400,4800,9600
   mycom1.ByteSize = Convert.ToByte(t_bytesize.Text, 10 );  // 8 bits
   mycom1.Parity = Convert.ToByte(t_parity.Text, 10 );  //  0-4=no,odd,even,mark,space
   mycom1.StopBits = Convert.ToByte(t_stopbyte.Text, 10 );  //  0,1,2 = 1, 1.5, 2 
   
// iTimeout=3;
    if ( this .OpenCom())
    msg.AppendText(
" 串口初始化成功……\r\n " );
   
else
    msg.AppendText(
" 串口初始化失败!\r\n " );
  }
// 程序关闭,结束串口
   private   void  Form1_Closing( object  sender, System.ComponentModel.CancelEventArgs e)
  {
   mycom1.Close();
  }

  
private   void  button5_Click( object  sender, System.EventArgs e)
  {
   
if (mycom1.Opened)
   {
    mycom1.Close();
    button5.Text
= " 开启串口 " ;
    msg.AppendText(
" \r\n串口被关闭…… " );
   }
   
else
   {
    mycom1.Open();
    button5.Text
= " 关闭串口 " ;
    msg.AppendText(
" \r\n串口成功开启…… " );
   }
  }
 }
}

 

注意:发送数据包的格式是16进制数据如:02 45 66 FA  中间可以有或者没有空格,但要保证有偶数位

你可能感兴趣的:(源代码)