我写了一段小小的程序,用c#写的,是一段连接串口的程序
一开始还是运行正常连接上串口的,不知道为什么睡了一觉,就发现“串口拒接访问”了,好郁闷代码如下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 chuankou2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} /// <summary>
/// 创建一个串口对象(全局变量)
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
SerialPort port; /// <summary>
/// 串口的初始化
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void InitPort(string portName)
{
port = new SerialPort();
port.PortName = portName;
port.BaudRate = 9600;
port.Parity = Parity.None;
port.StopBits = StopBits.One;
port.Handshake = Handshake.RequestToSend;
port.ReceivedBytesThreshold = 4;
port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
} void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
throw new NotImplementedException();
///在这里对接受的数据进行处理
} private void Form1_Load(object sender, EventArgs e)
{
cbName.Items.Clear();
cbName.Items.AddRange(SerialPort.GetPortNames());
cbName.SelectedIndex = 0;
} /// <summary>
/// 打开串口
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void OpenPort()
{
try
{
port.Open();
}
catch
{
if (port.IsOpen)
{
MessageBox.Show("Open Success");
}
else
{
MessageBox.Show("Open Fail");
}
}
finally
{
port.Close();
}
} private void btnOpen_Click(object sender, EventArgs e)
{
InitPort(this.cbName.SelectedItem.ToString());
OpenPort();
}
}
}
一开始还是运行正常连接上串口的,不知道为什么睡了一觉,就发现“串口拒接访问”了,好郁闷代码如下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 chuankou2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} /// <summary>
/// 创建一个串口对象(全局变量)
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
SerialPort port; /// <summary>
/// 串口的初始化
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void InitPort(string portName)
{
port = new SerialPort();
port.PortName = portName;
port.BaudRate = 9600;
port.Parity = Parity.None;
port.StopBits = StopBits.One;
port.Handshake = Handshake.RequestToSend;
port.ReceivedBytesThreshold = 4;
port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
} void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
throw new NotImplementedException();
///在这里对接受的数据进行处理
} private void Form1_Load(object sender, EventArgs e)
{
cbName.Items.Clear();
cbName.Items.AddRange(SerialPort.GetPortNames());
cbName.SelectedIndex = 0;
} /// <summary>
/// 打开串口
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void OpenPort()
{
try
{
port.Open();
}
catch
{
if (port.IsOpen)
{
MessageBox.Show("Open Success");
}
else
{
MessageBox.Show("Open Fail");
}
}
finally
{
port.Close();
}
} private void btnOpen_Click(object sender, EventArgs e)
{
InitPort(this.cbName.SelectedItem.ToString());
OpenPort();
}
}
}
finally
{
//port.Close();
}
1,程序退出时要将串口关闭,
2,为确保安全打开串口,在打开前判断是否已经是打开的,若是则先关闭再打开,
3,从你上面代码可以看出,虽然串口打开失败,但抛出的异常显示已经成功,并不是本程序开的,或已经不是本次打开的进程ID,应该这样写:/// <summary>
/// 打开串口
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void OpenPort()
{
try
{
if(port.isopen())
{
port.close();
}
port.Open();
}
catch(Exception ex)
{
//if (port.IsOpen)
//{
MessageBox.Show(ex.Message);//"Open Success");
//}
//else
//{
//MessageBox.Show("Open Fail");
//}
}
finally
{
//port.Close();
}
}