使用串口 [英] Working with serial port
本文介绍了使用串口的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
早上好,我想知道是否有人知道如何使用自动化系统?我在网上找到了这个
的例子 http://www.codeworks.it/net/VBNetRs232 .htm [ ^ ]
无法捕捉Spinning Electronic Turnstile事件?有人可以给我一个解决方案吗?
Good Morning guys, I wonder if anyone knows how to work with automation system? I found this
example on the net http://www.codeworks.it/net/VBNetRs232.htm[^]
Just can not capture the event Spinning Electronic Turnstile? Can someone pass me a solution?
推荐答案
您好
这是一个串口处理程序代码:
Hi
Here is a serial port handler code:
// Author: Jegan Thiyagesan
// Date: 12/02/2013
using System;
using System.IO.Ports;
namespace PortHandler
{
/// <summary>
/// Port handler that handles receiving and sending data over serial port.
/// </summary>
public class PortHandler
{
private const string Delimiter = "\r";
private const string Rx = "Rx << ";
private const string Tx = "Tx >> ";
private string m_data;
private SerialPort m_serialPort;
/// <summary>
/// Data received event handler
/// </summary>
public event EventHandler<EventArgs<string>> DataReceived;
/// <summary>
/// Data send event handler
/// </summary>
public event EventHandler<EventArgs<string>> DataSend;
/// <summary>
/// Error message event handler
/// </summary>
public event EventHandler<EventArgs<string>> ErrorMessage;
/// <summary>
/// Initiate data received event
/// </summary>
/// <param name="dataReceived"></param>
public void OnDataReceived(string dataReceived)
{
var handler = DataReceived;
if (handler != null)
{
handler(this, new EventArgs<string>(dataReceived));
}
}
/// <summary>
/// Initiate data send event
/// </summary>
/// <param name="dataSend"></param>
public void OnDataSend(string dataSend)
{
var handler = DataSend;
if (handler != null)
{
handler(this, new EventArgs<string>(dataSend));
}
}
/// <summary>
/// Initiate error message event.
/// </summary>
/// <param name="errorMessage"></param>
public void OnErrorMessage(string errorMessage)
{
var handler = ErrorMessage;
if (handler != null)
{
handler(this, new EventArgs<string>(errorMessage));
}
}
/// <summary>
/// return collections of available ports
/// </summary>
public string[] Ports
{
get
{
return SerialPort.GetPortNames();
}
}
/// <summary>
/// check is port open
/// </summary>
public bool IsPortOpen
{
get
{
return (m_serialPort != null && m_serialPort.IsOpen);
}
}
/// <summary>
/// basic constructor
/// </summary>
public PortHandler()
{
}
/// <summary>
/// Disconnect port
/// </summary>
public void DisconnectPort()
{
if (m_serialPort != null)
{
CloseSerialPort();
}
}
/// <summary>
/// Connect port
/// </summary>
/// <param name="portName"></param>
/// <param name="baudRate"></param>
public bool ConnectPort(string portName, int baudRate)
{
if (m_serialPort == null)
{
m_serialPort = new SerialPort
{
PortName = portName,
BaudRate = baudRate,
Parity = Parity.None,
StopBits = StopBits.One,
DataBits = 8,
Handshake = Handshake.None,
ReadTimeout = 500 //500 ms
};
}
else
{
CloseSerialPort();
m_serialPort.PortName = portName;
m_serialPort.BaudRate = baudRate;
}
OpenSerialPort();
return IsPortOpen;
}
/// <summary>
/// Send data over port
/// </summary>
/// <param name="data"></param>
public void SendData(string data)
{
if ((m_serialPort != null) && m_serialPort.IsOpen)
{
m_serialPort.DiscardOutBuffer();
m_serialPort.Write(data + Delimiter);
OnDataSend(Tx + data + Delimiter);
}
}
private void OpenSerialPort()
{
try
{
m_serialPort.DataReceived += SerialPortDataReceived;
m_serialPort.Open();
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.Message + ex.StackTrace);
}
}
private void CloseSerialPort()
{
if (m_serialPort.IsOpen)
{
m_serialPort.DataReceived -= SerialPortDataReceived;
m_serialPort.Close();
}
}
private void SerialPortDataReceived(object sender, SerialDataReceivedEventArgs e)
{
var serialPort = (SerialPort)sender;
var data = serialPort.ReadExisting();
ProcessData(data);
}
private void ProcessData(string data)
{
Console.Out.WriteLine(data + "\r");
}
}
}
我希望这个帮助你。
问候
Jegan
I hope this help you.
Regards
Jegan
这篇关于使用串口的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文