当前位置:文档之家› 串口调试助手源代码

串口调试助手源代码

串口调试助手预源代码using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;using System.IO;using System.IO.Ports;using System.Threading;using DevExpress.XtraEditors;using System.Text.RegularExpressions;namespace WindowsFormsApplication3{public partial class Form1 : XtraForm {SerialPort sp1 = new SerialPort(); int Flag = 0;int StateChanged = 0;int StateChanged_Ascii = 1;int StateChanged_16 = 0;string Temp = null;string Temp_memoSend = null;private void memoSend_EditValueChanged(object sender, EventArgs e){}public Form1(){InitializeComponent();sp1.DataReceived += sp1_DataReceived;}private void Form1_Load(object sender, EventArgs e){this.MaximizeBox = false;//检查是否有串口string[] str = SerialPort.GetPortNames();if (str == null){MessageBox.Show("本机没有串口!", "error");return;}//添加串口项目foreach (string port in System.IO.Ports.SerialPort.GetPortNames()) {cbSerial.Properties.Items.Add(port);}//串口设置默认选择项cbSerial.SelectedIndex = 0;Control.CheckForIllegalCrossThreadCalls = false;sp1.DataReceived += newSerialDataReceivedEventHandler(sp1_DataReceived); //订阅委托}private void comboBoxEdit1_SelectedIndexChanged(object sender, EventArgse){}private void OpenSerial_Click(object sender, EventArgs e){sp1.Close();//SerialPort sp1 = new SerialPort();if (!sp1.IsOpen)//串口是关闭的,设置参数,打开串口{try{//获取串口号string serialName = cbSerial.SelectedItem.ToString(); sp1.PortName = serialName;//设置各参数string strBaudRate = cbBaudRate.Text;string strDateBits = cbDataBits.Text;string strStopBits = cbStop.Text;sp1.BaudRate = Convert.ToInt32(strBaudRate);//波特率sp1.DataBits = Convert.ToInt32(strDateBits);//数据位switch (cbStop.Text) //停止位{case "1":sp1.StopBits = StopBits.One;break;case "1.5":sp1.StopBits = StopBits.One;break;case "2":sp1.StopBits = StopBits.Two;break;default:MessageBox.Show("Error:参数不正确!", "Error"); break;}switch (cbParity.Text) //校验位{case "无":sp1.Parity = Parity.None;break;case "奇校验":sp1.Parity = Parity.Odd;break;case "偶校验":sp1.Parity = Parity.Even;break;default:MessageBox.Show("Error:参数不正确!", "Error"); break;}if (sp1.IsOpen == true){sp1.Close();}sp1.Open();//btnOpen.Enabled = false;labSerial.Text = "串口号:" + sp1.PortName;labState.Text = "状态:打开";}catch (System.Exception ex){MessageBox.Show("Error:" + ex.Message, "Error");return;}}}//private void CloseSerial_Click(object sender, EventArgs e)//{// if (sp1.IsOpen)// {// sp1.Close();// labSerial.Text = "串口号:" + sp1.PortName;// labState.Text = "状态:关闭";// }//}private void Send_Click(object sender, EventArgs e){string StrSend = memoSend.Text;if (!sp1.IsOpen){MessageBox.Show("请先打开串口!", "Error");return;}else{if (rbtnSendStr.Checked) //字符串发送{if (ckTimeSend.Checked&& !(string.IsNullOrEmpty(textTime.Text)))//判断是否定时发送数据{string Time = textTime.Text;tmSend.Interval = int.Parse(Time) * 1000;//时间单位是秒,化成毫秒单位tmSend.Start(); //开启定时器}else{sp1.Write(StrSend); //写入数据}}else //十六进制发送{if (ckTimeSend.Checked&& !(string.IsNullOrEmpty(textTime.Text))){string Time = textTime.Text;tmSend.Interval = int.Parse(Time) * 1000;tmSend.Start();}else{string StrSend_1 = StrSend.Trim(); //去掉前后的空格//string StrSend_2 = StrSend_1.Replace(" ", "");//string StrSend_3 = string.Join(" ",Regex.Matches(StrSend_2, @"..|.").Cast<Match>().ToList());string[] StrArray = StrSend_1.Split(' '); //用空格符隔开字符串数组var Str_Send = new List<string>();// int byteBufferLength = StrArray.Length; //数组StrArray的长度for (int i = 0; i < StrArray.Length; i++){if (StrArray[i].Trim() == ""){//byteBufferLength--;continue;}else{if (StrArray[i].Length < 3){Str_Send.Add(StrArray[i]);}else{Str_Send.AddRange(Devide(StrArray[i]));}}}int byteBufferLength = Str_Send.Count;byte[] byteBuffer = new byte[byteBufferLength];int ii = 0;for (int i = 0; i < Str_Send.Count; i++){//Byte[] bytesOfStr =Encoding.Default.GetBytes(StrArray[i]);int decNum = 0;//if (StrArray[i] == " ")//{// continue;//}//else//{//decNum = Convert.ToInt32(Str_Send[i], 16); //把字符串转成16进制数//byteBuffer[ii] = Convert.ToByte(decNum);//}try{decNum = Convert.ToInt32(Str_Send[i], 16); //把字符串转成16进制数byteBuffer[ii] = Convert.ToByte(decNum);}catch (System.Exception ex){MessageBox.Show("输入错误!", "提示");return;}ii++;}sp1.Write(byteBuffer, 0, byteBuffer.Length);//从第0个开始写入byteBuffer,长度bytebuffer的长度。

相关主题