串口通讯服务类

通讯事件类

    public class ComEvent
    {
        /// <summary>
        /// 数据接收事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="data"></param>
        public delegate void DataReceivedHandler(object sender, string data);

        /// <summary>
        /// 发送数据事件
        /// </summary>
        /// <param name="data"></param>
        public delegate void DataSendHandler(string data);
    }

  Com接口类

    [Guid(ComHelper.InterfaceId)]
    public interface IComHelper
    {
        void Open(string _port, int _baud, int _stopBits, int _databits, int _parity);
        void Open();
        event ComEvent.DataReceivedHandler DataReceived;
        event ComEvent.DataSendHandler DataSend;
        void Close();
        void Send(string data);
        string Read();
        bool IsComOpen();
    }

  串口通讯类

  public class ComHelper : IComHelper
    {
        public const string ClassId = "881F4CC7-EAD4-4185-A91E-612DEFCE1E83";
        public const string InterfaceId = "F8B914CC-6696-4f5e-BD27-D77780092261";

        #region Port Settings

        #region 定义
        private SerialPort sp = new SerialPort();
        private string m_port = "COM2";
        private int m_baud = 9600;
        private int m_stopBits = 1;
        private int m_parity = 0;
        private int m_dataBits = 8;
        private string m_ComMesage;
        private bool m_ComIsOpen;

        #endregion

        #region 属性
        /// <summary>
        ///串口
        /// </summary>
        /// <returns></returns>
        public SerialPort SerialPort
        {

            get { return sp; }
            set { sp = value; }
        }
        /// <summary>
        ///端口号
        /// </summary>
        /// <returns></returns>
        public string port
        {
            get { return m_port; }
            set { m_port = value; }
        }
        /// <summary>
        ///波特率
        /// </summary>
        /// <returns></returns>
        public int baudRate
        {
            get { return m_baud; }
            set { m_baud = value; }
        }
        /// <summary>
        ///停止位
        /// </summary>
        /// <returns></returns>
        public int stopBits
        {
            get { return m_stopBits; }
            set { m_stopBits = value; }
        }
        /// <summary>
        ///奇偶校验
        /// </summary>
        /// <returns></returns>
        public int parity
        {
            get { return m_parity; }
            set { m_parity = value; }
        }
        /// <summary>
        ///字节数
        /// </summary>
        /// <returns></returns>
        public int dataBits
        {
            get { return m_dataBits; }
            set { m_dataBits = value; }
        }
        /// <summary>
        ///端口异常信息
        /// </summary>
        /// <returns></returns>
        public string ComMesage
        {
            get { return m_ComMesage; }
            set { m_ComMesage = value; }
        }
        /// <summary>
        ///端口打开状态
        /// </summary>
        /// <returns></returns>
        public bool ComIsOpen
        {
            get { return m_ComIsOpen; }
            set { m_ComIsOpen = value; }
        }
        #endregion
        #endregion
        #region Settings
        public bool IsComOpen()
        {
            return m_ComIsOpen;
        }
        /// <summary>
        ///串口通讯类 默认端口COM2 波特率9600 停止位1 奇偶校验0 数据位8
        /// </summary>
        /// <returns></returns>
        public ComHelper()
        {
            sp = new SerialPort();
            m_port = "COM2";
            m_baud = 9600;
            m_stopBits = 1;
            m_parity = 0;
            m_dataBits = 8;
            m_ComMesage = "";
            m_ComIsOpen = false;
        }
        /// <summary>
        ///串口通讯类
        /// </summary>
        /// <returns></returns>
        public ComHelper(string _port, int _baud, int _stopBits, int _databits, int _parity)
        {
            m_port = _port;
            m_baud = _baud;
            m_stopBits = _stopBits;
            m_parity = _parity;
            m_dataBits = _databits;
        }
        #endregion
        /// <summary>
        ///打开串口
        /// </summary>
        /// <returns></returns>
        public void Open(string _port, int _baud, int _stopBits, int _databits, int _parity)
        {
            m_port = _port;
            m_baud = _baud;
            m_stopBits = _stopBits;
            m_parity = _parity;
            m_dataBits = _databits;
            Open();
        }
        /// <summary>
        ///打开串口
        /// </summary>
        /// <returns></returns>
        public void Open()
        {
            if (!sp.IsOpen)
            {
                switch (m_parity)
                {
                    case 0:
                        sp.Parity = Parity.None;
                        break;
                    case 1:
                        sp.Parity = Parity.Odd;
                        break;
                    case 2:
                        sp.Parity = Parity.Even;
                        break;
                }

                switch (m_stopBits)
                {
                    case 0:
                        sp.StopBits = StopBits.None;
                        break;
                    case 1:
                        sp.StopBits = StopBits.One;
                        break;
                    case 2:
                        sp.StopBits = StopBits.OnePointFive;
                        break;
                    case 3:
                        sp.StopBits = StopBits.Two;
                        break;
                }
                sp.PortName = m_port;
                sp.BaudRate = m_baud;
                sp.DataBits = m_dataBits;
                sp.ReadTimeout = 3000;
                sp.WriteTimeout = 5000;
                try
                {
                    sp.Open();
                    ComMesage = sp.PortName + " Open the Success!";
                    sp.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);
                }
                catch (Exception ee)
                {
                    ComMesage = "Error opening " + m_port + ": " + ee.Message;
                }
            }
            else
            {
                ComMesage = "Port Already in use by another application";
            }
            m_ComIsOpen = sp.IsOpen;
        }
        /// <summary>
        ///串口数据接收事件
        /// </summary>
        /// <returns></returns>
        public event ComEvent.DataReceivedHandler DataReceived;
        /// <summary>
        ///串口数据发送事件
        /// </summary>
        /// <returns></returns>
        public event ComEvent.DataSendHandler DataSend;
        /// <summary>
        ///关闭串口
        /// </summary>
        /// <returns></returns>
        public void Close()
        {
            if (sp.IsOpen)
            {
                try
                {
                    sp.Close();
                }
                catch (Exception err)
                {
                    ComMesage = "Error closing " + sp.PortName + ": " + err.Message;

                }
                ComMesage = sp.PortName + " closed Success";
            }
            else
            {
                ComMesage = sp.PortName + " is not open";

            }
            m_ComIsOpen = sp.IsOpen;
        }
        /// <summary>
        ///发送
        /// </summary>
        /// <returns></returns>
        public void Send(string data)
        {
            if (sp.IsOpen)
            {
                try
                {
                    data = data + "\r\n";

                    sp.WriteLine(data);
                    DataSend(data);
                    // sp.DiscardOutBuffer();
                }
                catch { }
            }
            else
            {
                ComMesage = sp.PortName + " is not open";
            }
        }
        /// <summary>
        ///读取
        /// </summary>
        /// <returns></returns>
        public string Read()
        {
            byte[] data = new byte[sp.BytesToRead];

            string buf = "";
            if (sp.IsOpen)
            {
                try
                {
                    //System.Threading.Thread.Sleep(50);
                    sp.Read(data, 0, data.Length);
                    buf = ASCIItoString(data);
                    while (buf.IndexOf("\r\n") == -1)
                    {
                        data = new byte[sp.BytesToRead];
                        sp.Read(data, 0, data.Length);
                        string temp = ASCIItoString(data);
                        buf = buf + temp;
                    }
                }
                catch (Exception eee)
                {
                    buf = sp.PortName + eee.Message;
                }
            }
            else
            {
                ComMesage = sp.PortName + " is not open";
            }
            sp.DiscardInBuffer();
            return buf;
        }
        /// <summary>
        ///ASCII码转字符
        /// <param name="string"></param>
        /// <returns></returns>
        private string ASCIItoString(byte[] asciiCode)
        {
            string aa = Encoding.ASCII.GetString(asciiCode);
            return aa;
        }
        /// <summary>
        ///去空格运算
        /// </summary>
        /// <param name="string"></param>
        /// <returns></returns>
        private string ReplaceSpace(string str)
        {
            string NewStr = null;
            string[] word = str.Split(new char[] { ‘ ‘ });
            foreach (string temp in word)
                NewStr += temp;
            return NewStr;
        }

        private void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            string ReDatas = Read();
            DataReceived(this, ReDatas);//输出数据
        }
    }

  

时间: 2024-08-07 16:44:14

串口通讯服务类的相关文章

串口通讯常用类

1.Mymath using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace BIZHexagonalDevice { class MyMath { /// <summary> /// 字符串转BYTE数组 /// </summary> /// <param name="dat

通讯聚合类Chrome 扩展:All-in-One Messenger,把主流聊天服务聚合在一个应用窗口内

原文地址:http://whosmall.com/?post=420 本文标签: Chrome扩展 Chrome浏览器 通讯聚合类Chrome扩展 All-in-One-Messenger 主流聊天服务聚合 我发现了 All-in-One Messenger,它是一款轻量的 Chrome 扩展,作用与 Franz基本相同,只需要打开一个窗口,所有的通讯服务会以网页标签栏的形式呈现,方便你自如切换,可以大大提高了沟通的效率.但是和「庞大」的 Franz 相比,All-in-One Messenge

自定义串口通讯类的实现

前面写串口通讯是有界面的,后面的项目感觉串口通讯只是辅助的作用,应该专门写一个不可视的类来做,这样的好处是通讯模块是独立的,要用的时候直接引用就行了. using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.IO;using System.IO.Ports;using System.Threading;us

JAVA串口开发帮助类分享-及写在马年末

在系统集成开发过程中,存在着各式的传输途径,其中串口经常因其安全性高获得了数据安全传输的重用,通过串口传输可以从硬件上保证数据传输的单向性,这是其它介质所不具备的物理条件.下面我就串口java开发的过程分享一下,并分享一个SerialPortHandler串口开发帮助类,以提高串口开发效率. 1.部署开发环境. 拷贝RXTXcomm.jar 文件到 \jre\lib\ext 目录下,拷贝rxtxSerial.dll文件到 \jre\bin目录下.注意是jre目录下,并非jdk\jre下:注意dl

DICOM医学图像处理:全面分析DICOM3.0标准中的通讯服务模块

背景: 最近在做关于PACS终端与RIS系统之间进行worklist查询的相关调试工作,因此又重新对DICOM3.0标准中关于网络传输的部分进行了阅读,在此将本周的工作进行一下总结,以加深对DICOM3.0标准的认识,从底层更加清晰的了解worklist查询.C-STORE.C-FIND等各种服务. 要点: 1)名词简称 该部分中会出现很多的常见名词的缩写,因此为了更好的理解其含义,先给出各个名词所对应的全称,这里没有用中文进行翻译原因有二,其一是因为英文很简单,而且表意很清楚,其二是因为目前D

java web下串口通讯

最近在做java串口通讯,主要是用个人电脑通过串口从RS485读取数据,并通过crc循环冗余校验,把接收正确的数据解析,插入数据库mysql,并用SSH技术把数据库数据以表格以及图表形式显示      思路: 1.为了从RS485读取数据,由于暂时没有硬件设备,系统是win7,故采用Virtual Serial Port Drive(VSPD)这块虚拟串口软件代替.并下载sscom32.exe模拟串口通信软件. 2. 要想实现串口通信,用Java实现串口通信(windows系统下),需要用到su

串口通讯的代码 。是别人写的 我加了些注释。

// Communication.h: interface for the CCommunication class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_COMMUNICATION_H__6CA00576_F088_11D1_89BB_8311A0F2733D__INCLUDED_) #define AFX_COMMUNICATION_H__6CA0

简单的串口通讯程序

很早以前写过串口通讯的代码,今天又要用到,做了一个简单的类封装. 代码如下: rs485Test.h #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <termios.h> #include <fcntl.h> #include <errno

Winform 串口通讯之读卡器

老板给我的第一个硬件就是一个读卡器, 说让我做一下试试,于是从网上查了查就写了出来,相当的简单. 但是后来还有一个地磅的串口通讯,我整整搞了一天. 在窗体类的构造函数中写入 Form.CheckForIllegalCrossThreadCalls = false; 可以在线程外更新窗体,这样就可以一直接收数据,一直更新ui了. 打开串口按钮: 1 //实例化 2 SerialPort Myport = new SerialPort(); 3 //设置串口端口 4 Myport.PortName