C#结合串口通信类实现串口通信源代码(原创)

it2022-05-09  28

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  中间可以有或者没有空格,但要保证有偶数位

TO 大家:    该程序源码已经放到本blog第一篇提供下载。

转载于:https://www.cnblogs.com/tuyile006/archive/2006/09/29/517882.html

相关资源:C#上位机串口通信助手源代码

最新回复(0)