using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;namespace 串口程序2
{
public partial class Form1 : Form
{
//int i;
SerialPort sp=null; //define new 类 serialPort是字段但当做类型被使用
bool IsOpen = false;
bool isSetProperty=false; public Form1()
{
InitializeComponent();
} private void Form1_Load(object sender, EventArgs e)
{ //set forms
this.MaximumSize = this.Size;
this.MinimumSize = this.Size;
this.MaximizeBox = false; int i;
//set coms
for(i=0;i<256;i++)
{
cbxCOMPort.Items.Add ("COM " + (i + 1).ToString()); }
cbxCOMPort.SelectedIndex = 3;
//set BaudRate
cbxBaudRate.Items.Add("9600");
cbxBaudRate.Items.Add("19200");
cbxBaudRate.Items.Add("38400");
cbxBaudRate.SelectedIndex = 0;
//set Data
cbxData.Items.Add("8");
cbxData.Items.Add("7");
cbxData.Items.Add("6");
cbxData.Items.Add("5");
cbxData.SelectedIndex = 0;
//set Parity
cbxParity.Items.Add("无");
cbxParity.Items.Add("奇");
cbxParity.Items.Add("偶");
cbxParity.SelectedIndex = 0;
//set StopBit
//cbxStopBit.Items.Add("0");
cbxStopBit.Items.Add("1"); cbxStopBit.Items.Add("1.5");
cbxStopBit.Items.Add("2");
cbxStopBit.SelectedIndex=0; } private void btnCheckCOM_Click(object sender, EventArgs e)//Dontnot familar
{
int i;
cbxCOMPort.Items.Clear();
for (i = 0; i <= 256; i++)
这边可以 {
检测到COM4 try
{
SerialPort sp = new SerialPort("COM" + (i + 1).ToString());
sp.Open();
sp.Close();
cbxCOMPort.Items.Add("COM" + (i + 1).ToString()); }
catch (Exception)
{
lblStatus.Text="COM"+(i+1).ToString()+"不可用";
continue; } } }
private bool CheckPortSetting()
{
if (cbxCOMPort.Text.Trim() =="") return false;//Trim后如果没有()出现错误,Trim是一个方法组无法为它赋值
if (cbxBaudRate.Text.Trim() == "") return false;
if (cbxParity.Text.Trim() == "") return false;
if (cbxData.Text.Trim() == "") return false;
if (cbxStopBit.Text.Trim() == "") return false;
return true;
}
private bool CheckSendData()
{ if (txtSend.Text.Trim() == "") return false;
return true;
}
private void SetPortProperty()
{
//set the serialport's property
SerialPort sp = new SerialPort();
sp.PortName =Convert.ToString(cbxCOMPort.Text.Trim());
sp.BaudRate = Convert.ToInt32(cbxBaudRate.Text.Trim());
float f = Convert.ToSingle(cbxStopBit.Text.Trim()); // if (f == 0)
// {
// sp.StopBits =StopBits.None; // }
if (f == 1)
{ sp.StopBits = StopBits.One; }
else if(f==1.5)
{sp.StopBits = StopBits.OnePointFive; }
else
{sp.StopBits=StopBits.Two;}
//set data
sp.DataBits = Convert.ToInt16(cbxData.Text.Trim());
//set parity
string s=cbxParity.Text.Trim();
if (s.CompareTo("无")==0)
{sp.Parity=Parity.None; }
else if(s.CompareTo("奇校验")==0)
{sp.Parity=Parity.Odd;}
else
{sp.Parity=Parity.Even;}
//设置超时读取时间,这个不太明白
sp.ReadTimeout=-1;
try
{
这边老是 sp.Close();
出现异常 sp.Open();
IsOpen = true;
}
catch(Exception)
{
lblStatus.Text="打开串口时发生错误";
}
}
private void btnSend_Click(object sender, EventArgs e)
{
if (!CheckPortSetting())
{
MessageBox.Show("串口未设置!","错误提示");
return;
}
if (!CheckSendData())
{
MessageBox.Show("请输入要发送的数据!", "错误提示");
return;
}
if (!isSetProperty)
{
SetPortProperty();
// isSetPortProperty(); isSetProperty = true;
}
if (IsOpen)
{
try
{
sp.WriteLine(txtSend.Text);//这里也有问题,会直接跳到异常处理 }
catch (Exception)
{
lblStatus.Text = "发送数据时发生错误!";
return;
}
}
else
{
MessageBox.Show("串口未打开!","错误提示");
return;
}
txtSend.Text=""; } private void btnExit_Click(object sender, EventArgs e)
{
sp.Close();
this.Close();
} private void btnReceive_Click(object sender, EventArgs e)
{
if(IsOpen )
{
try
{
txtReceive.Text+=sp.ReadLine();
}
catch(Exception)
{
lblStatus.Text = "读取串口时发僧错误!";
return;
} }
else
{
MessageBox.Show("串口未打开!","错误提示");
return;
}
} private void txtSend_TextChanged(object sender, EventArgs e)
{ } private void txtReceive_TextChanged(object sender, EventArgs e)
{ }
}
}C#,异常
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;namespace 串口程序2
{
public partial class Form1 : Form
{
//int i;
SerialPort sp=null; //define new 类 serialPort是字段但当做类型被使用
bool IsOpen = false;
bool isSetProperty=false; public Form1()
{
InitializeComponent();
} private void Form1_Load(object sender, EventArgs e)
{ //set forms
this.MaximumSize = this.Size;
this.MinimumSize = this.Size;
this.MaximizeBox = false; int i;
//set coms
for(i=0;i<256;i++)
{
cbxCOMPort.Items.Add ("COM " + (i + 1).ToString()); }
cbxCOMPort.SelectedIndex = 3;
//set BaudRate
cbxBaudRate.Items.Add("9600");
cbxBaudRate.Items.Add("19200");
cbxBaudRate.Items.Add("38400");
cbxBaudRate.SelectedIndex = 0;
//set Data
cbxData.Items.Add("8");
cbxData.Items.Add("7");
cbxData.Items.Add("6");
cbxData.Items.Add("5");
cbxData.SelectedIndex = 0;
//set Parity
cbxParity.Items.Add("无");
cbxParity.Items.Add("奇");
cbxParity.Items.Add("偶");
cbxParity.SelectedIndex = 0;
//set StopBit
//cbxStopBit.Items.Add("0");
cbxStopBit.Items.Add("1"); cbxStopBit.Items.Add("1.5");
cbxStopBit.Items.Add("2");
cbxStopBit.SelectedIndex=0; } private void btnCheckCOM_Click(object sender, EventArgs e)//Dontnot familar
{
int i;
cbxCOMPort.Items.Clear();
for (i = 0; i <= 256; i++)
这边可以 {
检测到COM4 try
{
SerialPort sp = new SerialPort("COM" + (i + 1).ToString());
sp.Open();
sp.Close();
cbxCOMPort.Items.Add("COM" + (i + 1).ToString()); }
catch (Exception)
{
lblStatus.Text="COM"+(i+1).ToString()+"不可用";
continue; } } }
private bool CheckPortSetting()
{
if (cbxCOMPort.Text.Trim() =="") return false;//Trim后如果没有()出现错误,Trim是一个方法组无法为它赋值
if (cbxBaudRate.Text.Trim() == "") return false;
if (cbxParity.Text.Trim() == "") return false;
if (cbxData.Text.Trim() == "") return false;
if (cbxStopBit.Text.Trim() == "") return false;
return true;
}
private bool CheckSendData()
{ if (txtSend.Text.Trim() == "") return false;
return true;
}
private void SetPortProperty()
{
//set the serialport's property
SerialPort sp = new SerialPort();
sp.PortName =Convert.ToString(cbxCOMPort.Text.Trim());
sp.BaudRate = Convert.ToInt32(cbxBaudRate.Text.Trim());
float f = Convert.ToSingle(cbxStopBit.Text.Trim()); // if (f == 0)
// {
// sp.StopBits =StopBits.None; // }
if (f == 1)
{ sp.StopBits = StopBits.One; }
else if(f==1.5)
{sp.StopBits = StopBits.OnePointFive; }
else
{sp.StopBits=StopBits.Two;}
//set data
sp.DataBits = Convert.ToInt16(cbxData.Text.Trim());
//set parity
string s=cbxParity.Text.Trim();
if (s.CompareTo("无")==0)
{sp.Parity=Parity.None; }
else if(s.CompareTo("奇校验")==0)
{sp.Parity=Parity.Odd;}
else
{sp.Parity=Parity.Even;}
//设置超时读取时间,这个不太明白
sp.ReadTimeout=-1;
try
{
这边老是 sp.Close();
出现异常 sp.Open();
IsOpen = true;
}
catch(Exception)
{
lblStatus.Text="打开串口时发生错误";
}
}
private void btnSend_Click(object sender, EventArgs e)
{
if (!CheckPortSetting())
{
MessageBox.Show("串口未设置!","错误提示");
return;
}
if (!CheckSendData())
{
MessageBox.Show("请输入要发送的数据!", "错误提示");
return;
}
if (!isSetProperty)
{
SetPortProperty();
// isSetPortProperty(); isSetProperty = true;
}
if (IsOpen)
{
try
{
sp.WriteLine(txtSend.Text);//这里也有问题,会直接跳到异常处理 }
catch (Exception)
{
lblStatus.Text = "发送数据时发生错误!";
return;
}
}
else
{
MessageBox.Show("串口未打开!","错误提示");
return;
}
txtSend.Text=""; } private void btnExit_Click(object sender, EventArgs e)
{
sp.Close();
this.Close();
} private void btnReceive_Click(object sender, EventArgs e)
{
if(IsOpen )
{
try
{
txtReceive.Text+=sp.ReadLine();
}
catch(Exception)
{
lblStatus.Text = "读取串口时发僧错误!";
return;
} }
else
{
MessageBox.Show("串口未打开!","错误提示");
return;
}
} private void txtSend_TextChanged(object sender, EventArgs e)
{ } private void txtReceive_TextChanged(object sender, EventArgs e)
{ }
}
}C#,异常
if(s.CompareTo("无")==0)
{
sp.Parity=Parity.None;
}
else if(s.CompareTo("奇")==0)
{
sp.Parity=Parity.Odd;
}
else if(s.CompareTo("偶")==0)
{
sp.Parity=Parity.Even;
}
else
{
sp.Parity=Parity.None;
}
奇偶校验位没有设置好,这是主要问题。