c# 打开串口 SerialPort1.open()的问题

sjt3377 2009-03-03 08:53:36
c# 打开串口 SerialPort1.open()的问题 提示无法支持请求。谁知道!!!!!
...全文
844 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
sjt3377 2009-03-06
  • 打赏
  • 举报
回复
用了MSCOMM32.ocx 就可以打开了。不是端口被占用
睡神在睡觉 2009-03-04
  • 打赏
  • 举报
回复
同意楼上,检查你的端口是否被占用,或者你指定的端口是否存在
tigerleq 2009-03-04
  • 打赏
  • 举报
回复
端口被占用
CraxyMouse 2009-03-03
  • 打赏
  • 举报
回复
你可以参考一下这个!
还有检查一下你端口参数有没有设置正确
/******************************************************************
* Copyright(c) : Tangxu
* Description :
* CreateDate : 2006-9-01 04:53:08
* Creater : Tang.xu
* LastChangeDate:
* LastChanger :
* Version Info : 1.0.0
* ******************************************************************/
using System;
using System.IO.Ports;
using System.Threading;
using System.Text;

namespace Tangxu.Common
{
public class ReadCom
{
public ReadCom()
{
_ReadConfig = new ReadConfigure(System.Environment.CurrentDirectory + "\\Com_Info.xml");
}

public ReadCom(string sCom,int nBaud):this()
{

}

private byte[] _ReadBuffer;
private SerialPort ss_port = new SerialPort();
private static int nReadCount = 0;
private ReadConfigure _ReadConfig;

#region Initialize com port

public bool InitCom()//初始化建串口类实例
{
// return true;
try
{
ss_port.PortName = _ReadConfig.GetNodeValue("PORT");// _sComPort;
ss_port.BaudRate = int.Parse(_ReadConfig.GetNodeValue("BAUD"));//_nBaud;
ss_port.ReadBufferSize = 10240;
ss_port.DataBits = int.Parse(_ReadConfig.GetNodeValue("DATA"));//8;
switch (_ReadConfig.GetNodeValue("PARITY"))
{
case "None":
ss_port.Parity = Parity.None;
break;
case "Even":
ss_port.Parity = Parity.Even;
break;
case "Mark":
ss_port.Parity = Parity.Mark;
break;
case "Odd":
ss_port.Parity = Parity.Odd;
break;
case "Space":
ss_port.Parity = Parity.Mark;
break;
}
switch (_ReadConfig.GetNodeValue("STOP"))
{
case "1":
ss_port.StopBits = StopBits.One;
break;
case "1.5":
ss_port.StopBits = StopBits.OnePointFive;
break;
case "2":
ss_port.StopBits = StopBits.Two;
break;
}
ss_port.ReadTimeout = 600;
ss_port.WriteTimeout = 700;

ss_port.Open();//打开串口
return true;
}
catch (Exception ex)
{
throw new Exception("打开串口失败!\r\n错误信息:" + ex.Message);
}
}
#endregion

#region FreeDrv
/// <summary>
/// free opw
/// </summary>
public void FreeDrv()
{
try
{
if (ss_port != null)
{
ss_port.Close();
}
}
catch
{ }
}
#endregion

#region Write command to OPW
/// <summary>
/// 发操作命令给OPW设备
/// 并返回状态
/// </summary>
/// <param name="sCommand"> </param>
/// <returns> </returns>
public string WriteCommand(string sCommand)
{
StringBuilder sb = new StringBuilder();
bool bRead = true;
try
{
ss_port.DiscardInBuffer();
ss_port.Write(sCommand);
Thread.Sleep(1500);
while (bRead)
{
_ReadBuffer = new byte[ss_port.BytesToRead];
ss_port.Read(_ReadBuffer, 0, _ReadBuffer.Length);
sb.Append(Encoding.ASCII.GetString(_ReadBuffer));
Thread.Sleep(500);
if (ss_port.BytesToRead <= 0)
{
bRead= false;
}
}
if (sb.ToString().Length== 0)
{
nReadCount++;
}

if (nReadCount == 3)
{
nReadCount = 0;
throw new Exception("设置不正确或没有联接设备!");
}
}
catch (Exception ex)
{
throw new Exception("从设备获取数据失败!\r\n错误信息:" + ex.Message);
}
return sb.ToString(); ;
}

public string WriteCommand(byte[] bCommand)
{
StringBuilder sb = new StringBuilder();
bool bRead = true;
try
{
ss_port.DiscardInBuffer();
ss_port.Write(bCommand,0,bCommand.Length);
Thread.Sleep(1500);
while (bRead)
{
_ReadBuffer = new byte[ss_port.BytesToRead];
ss_port.Read(_ReadBuffer, 0, _ReadBuffer.Length);
sb.Append(Encoding.ASCII.GetString(_ReadBuffer));
Thread.Sleep(500);
if (ss_port.BytesToRead <= 0)
{
bRead = false;
}
}
if (sb.ToString().Length == 0)
{
nReadCount++;
}

if (nReadCount == 3)
{
nReadCount = 0;
throw new Exception("设置不正确或没有联接设备!");
}
}
catch (Exception ex)
{
throw new Exception("从设备获取数据失败!\r\n错误信息:" + ex.Message);
}
return sb.ToString();
}
#endregion

#region Get All COM Port
public string[] GetAllComPort()
{
string[] sAllPort = null;
try
{
sAllPort = SerialPort.GetPortNames();
}
catch (Exception ex)
{
throw new Exception("获取计算机COM口列表失败!\r\n错误信息:" + ex.Message);
}
return sAllPort;
}
#endregion
}

}
namespace 串口实例 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void btnSend_Click(object sender, EventArgs e) { //手动发送 SendMsg(); } private void SendMsg() { this.serialPort1.Write(this.txtSend.Text); } #region 控制输入数字 private void ComboBox_TextUpdate(object sender, EventArgs e) { ComboBox cbo = sender as ComboBox; int n; if (!int.TryParse(cbo.Text, out n)) { cbo.Text = cbo.Text.Substring(0, cbo.Text.Length - 1); } else { if (n <= 0) { cbo.Text = cbo.Text.Substring(0, cbo.Text.Length - 1); } } } private void txtTime_TextChanged(object sender, EventArgs e) { TextBox text = sender as TextBox; int n; if (!int.TryParse(text.Text, out n)) { text.Text = text.Text.Substring(0, text.Text.Length - 1); } else { if (n <= 0) { text.Text = text.Text.Substring(0, text.Text.Length - 1); } else { this.timer1.Interval = n; } } } #endregion /// /// 清空显示文本框 /// /// /// private void btnClear_Click(object sender, EventArgs e) { this.txtRecive.Clear(); } private void timer1_Tick(object sender, EventArgs e) { SendMsg(); } private void cbtSend_CheckedChanged(object sender, EventArgs e) { CheckBox check = sender as CheckBox; if (check.Checked) { this.timer1.Start(); } else { this.timer1.Stop(); } } /// /// 接收返回的数据 /// /// /// private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { string a=""; if (this.cbkShow16.Checked) { //十六进制显示 a = this.serialPort1.ReadExisting(); } else { //字符串显示 byte[] by = new byte[this.serialPort1.BytesToRead]; this.serialPort1.Read(by, 0, this.serialPort1.BytesToRead); a = Encoding.ASCII.GetString(by); } this.txtRecive.AppendText(a); this.txtRecive.ScrollToCaret(); } private void Form1_Load(object sender, EventArgs e) { //加载 this.serialPort1.RtsEnable = true; button1_Click(this.btnOpen, null); } private void button1_Click(object sender, EventArgs e) { Button btn = sender as Button; if (btn.Text == "打开端口") { try { this.serialPort1.PortName = this.cboPortName.Text; this.serialPort1.BaudRate = Convert.ToInt32(this.cboRaudRate.Text); this.serialPort1.DataBits = Convert.ToInt32(this.cboDataBits.Text); this.serialPort1.ReceivedBytesThreshold = Convert.ToInt32(this.cboReceivedBytesThreshold.Text); this.serialPort1.Open(); btn.Text = "关闭端口"; } catch { MessageBox.Show("打开端口失败,请检查端口是否被占用."); } } else { this.serialPort1.Close(); btn.Text = "打开端口"; } } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { try { this.serialPort1.Close(); } catch { } } } }
public partial class Form1 : Form { public Form1() { InitializeComponent(); } SerialPort port1 = new SerialPort(); string InputData = String.Empty; delegate void SetTextCallback(string text); private void Port_Select() {//获取机器中的串口地址 string[] ports = SerialPort.GetPortNames(); foreach (string port in ports) { comboBox1.Items.Add(port); } } private void Form1_Load_1(object sender, EventArgs e) { Port_Select(); this.comboBox1.SelectedIndex = 0; this.comboBox2.SelectedIndex = 0; } private void button1_Click(object sender, EventArgs e) { if (button1.Text == "关闭串口") //当要关闭串口的时候 { port1.DiscardOutBuffer(); port1.DiscardInBuffer(); port1.Close(); button1.Text = "打开串口"; label3.Text = "串口当前状况:未打开"; comboBox1.Enabled = true; comboBox2.Enabled = true; } else if (button1.Text == "打开串口") //当要打开串口的时候 { try { port1.PortName = comboBox1.SelectedItem.ToString(); port1.BaudRate = Convert.ToInt32(comboBox2.SelectedItem); port1.DataBits = 8; port1.RtsEnable = true; port1.Open(); port1.DiscardOutBuffer(); port1.DiscardInBuffer(); button1.Text = "关闭串口"; comboBox1.Enabled = false; comboBox2.Enabled = false; label3.Text = "串口:" + comboBox1.SelectedItem.ToString() + " 波特率:" + comboBox2.SelectedItem.ToString() + " 数据位:8 "; } catch { button1.Text = "打开串口"; label3.Text = "串口:" + comboBox1.SelectedItem.ToString() + "打开失败"; MessageBox.Show("该串口无法打开"); } } } 资源中部分代码
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO.Ports; namespace UART1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); COMNUM.SelectedIndex = 2; BaudRate.SelectedIndex = 3; DataBit.SelectedIndex = 3; StopBit.SelectedIndex = 1; CheckBit.SelectedIndex = 0; CharDisp.Checked = true; SendChar.Checked = true; CloseComm.Enabled = false; DataSend.Enabled = false; } private void OpenComm_Click(object sender, EventArgs e) { serialPort1.Close(); serialPort1.PortName = COMNUM.Text; serialPort1.BaudRate = Convert.ToInt32(BaudRate.Text); serialPort1.DataBits = Convert.ToInt32(DataBit.Text); int SPnum = 4; SPnum = StopBit.SelectedIndex; switch (SPnum) { case 0: serialPort1.StopBits = StopBits.None; break; case 1: serialPort1.StopBits = StopBits.One; break; case 2: serialPort1.StopBits = StopBits.OnePointFive; break; case 3: serialPort1.StopBits = StopBits.Two; break; default: break; } SPnum = CheckBit.SelectedIndex; switch (SPnum) { case 0: serialPort1.Parity = Parity.None; break; case 1: serialPort1.Parity = Parity.Odd; break; case 2: serialPort1.Parity = Parity.Even; break; default: break; } /***************异常处理!****************/ try { serialPort1.Open(); } catch (Exception ex) { MessageBox.Show("错误:"+ex.Message); } /*****************************************/ if (serialPort1.IsOpen) { CloseComm.Enabled = true; DataSend.Enabled = true; OpenComm.Enabled = false; COMNUM.Enabled = false; BaudRate.Enabled = false; DataBit.Enabled = false; StopBit.Enabled = false; CheckBit.Enabled = false; } } private void CloseComm_Click(object sender, EventArgs e) { try { serialPort1.Close(); CloseComm.Enabled = false; DataSend.Enabled = false; OpenComm.Enabled = true; COMNUM.Enabled = true; BaudRate.Enabled = true; DataBit.Enabled = true; StopBit.Enabled = true; CheckBit.Enabled = true; } catch (Exception ex) { MessageBox.Show("错误:" + ex.Message); CloseComm.Enabled = true; DataSend.Enabled = true; OpenComm.Enabled = false; COMNUM.Enabled = false; BaudRate.Enabled = false; DataBit.Enabled = false; StopBit.Enabled = false; CheckBit.Enabled = false; } } private void DataSend_Click(object sender, EventArgs e) { string InputString = SendBox.Text; /**********发送byte[]实例*********/ //byte[] SendBytes = new byte[]{0xff,0xe0,0xd0,0xc0,0xb0,0xa0,0x90,0x80,0x70,0x60}; //int DatasLength = SendBytes.Length; //serialPort1.Write(SendBytes, 0, DatasLength); /*******************************/ if (SendChar.Checked == true) //以字符形式发送,直接发送字符串 { try { char[] SendChars = InputString.ToCharArray(); int CharsLength = SendChars.Length; serialPort1.Encoding = System.Text.Encoding.GetEncoding("GB2312"); //解决中午乱码问题,国标2312编码格式 serialPort1.Write(SendChars, 0, CharsLength); } catch (Exception ex) { MessageBox.Show("错误:" + ex.Message); } } else { if (SendHEX.Checked == true) //以HEX形式发送,输入范围:0~255,即0~FF。 { try { byte SendByte = Convert.ToByte(InputString); try { serialPort1.Write(String.Format("{0:X}",SendByte)); } catch (Exception ex) { MessageBox.Show("错误:" + ex.Message); } } catch (Exception) { MessageBox.Show("请输入0~255,即0x00~0xFF!"); } } } } private void SerialPortDataReceive(object sender, SerialDataReceivedEventArgs e) { int ReceiveNums = serialPort1.BytesToRead; if (HEXDisp.Checked == true) { for (int i = 0; i < ReceiveNums; i++) { ReceiveBox.AppendText(String.Format("{0:X2} ", serialPort1.ReadByte())); } } else { if (CharDisp.Checked == true) { /* for (int i = 0; i < ReceiveNums; i++) { ReceiveBox.AppendText(String.Format("{0:X2}", Convert.ToChar(serialPort1.ReadByte()))); }*/ serialPort1.Encoding = System.Text.Encoding.GetEncoding("GB2312");//解决中午乱码问题,国标2312编码格式 ReceiveBox.AppendText(serialPort1.ReadExisting()); } } } private void ClearSend_Click(object sender, EventArgs e) { SendBox.Clear(); } private void ClearReceive_Click(object sender, EventArgs e) { ReceiveBox.Clear(); } private void Exit_Click(object sender, EventArgs e) { try { serialPort1.Close(); } catch (TimeoutException ex) { MessageBox.Show("错误:" + ex.Message); } Close(); } } }

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧