使用串口 [英] Working with serial port

查看:100
本文介绍了使用串口的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

早上好,我想知道是否有人知道如何使用自动化系统?我在网上找到了这个

的例子 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆