private SerialPort m_SerialPort = null;
private string m_strPortName = "Com1";
private StopBits m_StopBits = StopBits.Two;
private Parity m_Parity = Parity.Even;
private int m_iDataBits = 8;
private int m_iBaudRate = 57600;
private int m_iCurrentRecieveByteCount = 0;--打开端口
public bool OpenCOM()
{
bool bResult = true;
try
{
if (m_SerialPort == null)
{
m_SerialPort = new SerialPort();
m_SerialPort.DataReceived += new SerialDataReceivedEventHandler(CpmPort_DataReceivedHandler);
}
else
{
m_SerialPort.DataReceived += new SerialDataReceivedEventHandler(ComPort_DataReceivedHandler);
} } if (m_SerialPort.IsOpen)
{
m_SerialPort.Close();
m_SendQueue.Clear();
} m_SerialPort.PortName = m_strPortName;
m_SerialPort.BaudRate = m_iBaudRate;
m_SerialPort.DataBits = m_iDataBits;
m_SerialPort.StopBits = m_StopBits;
m_SerialPort.Parity = m_Parity; m_SerialPort.Open();
}
catch (Exception ex)
{
// Throw open comport failed message
}
return bResult;
}--关闭端口
/// <summary>
/// close com port
/// </summary>
/// <returns></returns>
public bool CloseCOM()
{
bool bResult = true;
try
{
if (m_SerialPort.IsOpen)
{
m_SerialPort.Close();
m_SerialPort = null;
}
}
catch (Exception)
{
bResult = false;
}
return bResult;
}
---发送数据用
private void SendToCom(byte[] rabyteSentData)
{
int iSize = rabyteSentData.Length;
m_SerialPort.Write(rabyteSentData, 0, iSize);
}--接受com数据
/// <summary>
/// Received data event handler
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ComPort_DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{ //Setting timeout
m_SerialPort.ReadTimeout = 100; // Obtain the number of bytes waiting in the port's buffer
int bytes = m_SerialPort.BytesToRead; // Create a byte array buffer to hold the incoming data
byte[] buffer = new byte[bytes]; // Read the data from the port and store it in our buffer
m_SerialPort.Read(buffer, 0, bytes);
}
private string m_strPortName = "Com1";
private StopBits m_StopBits = StopBits.Two;
private Parity m_Parity = Parity.Even;
private int m_iDataBits = 8;
private int m_iBaudRate = 57600;
private int m_iCurrentRecieveByteCount = 0;--打开端口
public bool OpenCOM()
{
bool bResult = true;
try
{
if (m_SerialPort == null)
{
m_SerialPort = new SerialPort();
m_SerialPort.DataReceived += new SerialDataReceivedEventHandler(CpmPort_DataReceivedHandler);
}
else
{
m_SerialPort.DataReceived += new SerialDataReceivedEventHandler(ComPort_DataReceivedHandler);
} } if (m_SerialPort.IsOpen)
{
m_SerialPort.Close();
m_SendQueue.Clear();
} m_SerialPort.PortName = m_strPortName;
m_SerialPort.BaudRate = m_iBaudRate;
m_SerialPort.DataBits = m_iDataBits;
m_SerialPort.StopBits = m_StopBits;
m_SerialPort.Parity = m_Parity; m_SerialPort.Open();
}
catch (Exception ex)
{
// Throw open comport failed message
}
return bResult;
}--关闭端口
/// <summary>
/// close com port
/// </summary>
/// <returns></returns>
public bool CloseCOM()
{
bool bResult = true;
try
{
if (m_SerialPort.IsOpen)
{
m_SerialPort.Close();
m_SerialPort = null;
}
}
catch (Exception)
{
bResult = false;
}
return bResult;
}
---发送数据用
private void SendToCom(byte[] rabyteSentData)
{
int iSize = rabyteSentData.Length;
m_SerialPort.Write(rabyteSentData, 0, iSize);
}--接受com数据
/// <summary>
/// Received data event handler
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ComPort_DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{ //Setting timeout
m_SerialPort.ReadTimeout = 100; // Obtain the number of bytes waiting in the port's buffer
int bytes = m_SerialPort.BytesToRead; // Create a byte array buffer to hold the incoming data
byte[] buffer = new byte[bytes]; // Read the data from the port and store it in our buffer
m_SerialPort.Read(buffer, 0, bytes);
}
解决方案 »
- 一个类型转换的问题,C#高手请帮忙,谢谢
- 关于Application.DoEvents()失效的问题
- 关于房地产网站房源搜索功能
- C# label控件的背景色改为Transparent还是透明不了
- 用C#打开文件对话框,我设置了过滤条件为何还是全部显示出来?
- 请问datetimerpicker控件中的日期能不能设置成不同的背景色,例如把节日设置成绿色,其它的为白色.
- 帮帮忙,挺着急的
- 求救,winform(c#)+ access 打包问题。
- 汉字及特殊字符编码的问题
- 传不定个数参数用Hashtable,还是dataset或是datable,那个性能好一点
- c#数组问题请教
- 一个不懂的问题,希望大哥能帮帮忙
m_SerialPort.DataReceived += new SerialDataReceivedEventHandler(CpmPort_DataReceivedHandler);
}
else
{
m_SerialPort.DataReceived += new SerialDataReceivedEventHandler(ComPort_DataReceivedHandler);
}}这里copy错了如下:
m_SerialPort.DataReceived += new SerialDataReceivedEventHandler(ComPort_DataReceivedHandler);
int nBaudRates = Convert.ToInt32(textBox6.Text);
int nDataBits = Convert.ToInt32(textBox7.Text);
Parity pParity = (Parity)Enum.Parse(typeof(Parity), comboBox3.SelectedItem.ToString());
StopBits sStopBits = (StopBits)Enum.Parse(typeof(StopBits), comboBox4.SelectedItem.ToString()); string sTxt = textBox8.Text; serialPort1.PortName = sPortName;
serialPort1.BaudRate = nBaudRates;
serialPort1.DataBits = nDataBits;
serialPort1.Parity = pParity;
serialPort1.StopBits = sStopBits; serialPort1.Open(); serialPort1.WriteLine(sTxt);
serialPort1.Close();
try
{
serialPort1.Parity = System.IO.Ports.Parity.None;
serialPort1.StopBits = System.IO.Ports.StopBits.One;
serialPort1.BaudRate = 9600;
serialPort1 .DataBits =8;
serialPort1.PortName = "COM2";
serialPort1.ReadBufferSize = 1024;
serialPort1.WriteBufferSize = 1024;
serialPort1.WriteTimeout = 200;
serialPort1.Open();
serialPort1.ReadExisting();//设置Input从接收缓冲读取全部数据
serialPort1.ReceivedBytesThreshold = 1;//设置引发OnComm事件的字节长度
serialPort1.DiscardInBuffer();//清除接收缓冲区
serialPort1.DiscardOutBuffer(); //清除发送缓冲区
}
catch (System .Exception ex)
{
labState.Text = "请重新配置串口!请检查"+ex.Message;
}
但在打开的串口的时候报错?在模拟器PPC2003,WM5/6都可以打开并正常收发?
接收:控件的话在接收事件中处理
若是类对象的话,用timer或线程读该对象的接收缓冲区