C#,COM口,接收,发送数据
这里写一种,COM口的数据接收,发送方法。
1.COMHelper类
/// <summary>初始化串行端口</summary>
        private SerialPort _serialPort;
public SerialPort serialPort
        {
            get { return _serialPort; }
            set { _serialPort = value; }
        }
/// <summary>
        /// COM口通信构造函数
        /// </summary>
        /// <param name="PortID">通信端口</param>
        /// <param name="baudRate">波特率</param>
        /// <param name="parity">奇偶校验位</param>
        /// <param name="dataBits">标准数据位长度</param>
        /// <param name="stopBits">每个字节的标准停止位数</param>
        /// <param name="readTimeout">获取或设置读取操作未完成时发生超时之前的毫秒数</param>
        /// <param name="writeTimeout">获取或设置写入操作未完成时发生超时之前的毫秒数</param>
        public ComHelper(string PortID, int baudRate, Parity parity = Parity.None, int dataBits = 8, StopBits stopBits = StopBits.One, int readTimeout = 100, int writeTimeout = 100)
        {
            try
            {
                serialPort = new SerialPort();
                serialPort.PortName = "COM" + PortID;//通信端口
                serialPort.BaudRate = baudRate;//波特率
                serialPort.Encoding = Encoding.ASCII;
                serialPort.Parity = parity;//奇偶校验位
                serialPort.DataBits = dataBits;//标准数据位长度
                serialPort.StopBits = stopBits;//每个字节的标准停止位数
                serialPort.ReadTimeout = readTimeout;//获取或设置读取操作未完成时发生超时之前的毫秒数
                serialPort.WriteTimeout = writeTimeout;//获取或设置写入操作未完成时发生超时之前的毫秒数
            }
            catch (Exception ex) { throw new Exception(ex.Message); }
        }
/// <summary>
        /// 打开COM口
        /// </summary>
        /// <returns>true 打开成功;false 打开失败;</returns>
        public bool Open()
        {
            try
            {
                if (serialPort.IsOpen == false)
                {
                    serialPort.Open();
                    return true;
                }
            }
            catch (Exception ex)
            {
                LogImpl.Debug(ex.ToString());
            }
            return false;
        }
/// <summary>
        /// 关闭COM口
        /// </summary>
        /// <returns>true 关闭成功;false 关闭失败;</returns>
        public bool Close()
        {
            try
            {
                serialPort.Close();
                return true;
            }
            catch
            {
                return false;
            }
        }
/// <summary>
        /// 判断端口是否打开
        /// </summary>
        /// <returns></returns>
        public bool IsOpen()
        {
            try
            {
                return serialPort.IsOpen;
            }
            catch { throw; }
        }
/// <summary>
        /// 向COM口发送信息
        /// </summary>
        /// <param name="sendData">16进制的字节</param>
        public void WriteData(byte[] sendData)
        {
            try
            {
                if (IsOpen())
                {
                    Thread.Sleep(5);
                    serialPort.Write(sendData, 0, sendData.Length);
                }
            }
            catch { throw; }
        }
/// <summary>
        /// 接收来自COM的信息
        /// </summary>
        /// <returns>返回收到信息的数组</returns>
        public string[] ReceiveDataArray()
        {
try
            {
                Thread.Sleep(5);
                if (!serialPort.IsOpen) return null;
                int DataLength = serialPort.BytesToRead;
                byte[] ds = new byte[DataLength];
                int bytecount = serialPort.Read(ds, 0, DataLength);
                return ByteToStringArry(ds);
            }
            catch (Exception ex)
            {
                LogImpl.Debug(""+ex.ToString());
                throw;
            }
        }
/// <summary>
        /// 把字节型转换成十六进制字符串
        /// </summary>
        /// <param name="bytes"></param>
        /// <returns></returns>
        public static string[] ByteToStringArry(byte[] bytes)
        {
            try
            {
                string[] strArry = new string[bytes.Length];
                for (int i = 0; i < bytes.Length; i++)
                {
                    strArry[i] = String.Format("{0:X2} ", bytes[i]).Trim();
                }
                return strArry;
            }
            catch { throw; }
        }
/// <summary>
        /// 清除缓存数据
        /// </summary>
        public void ClearDataInBuffer()
        {
            try
            {
                serialPort.DiscardInBuffer();
                serialPort.DiscardOutBuffer();
            }
            catch { throw; }
        }
/// <summary>
        /// 注册 数据接收事件,在接收到数据时 触发
        /// </summary>
        /// <param name="serialPort_DataReceived"></param>
        public void AddReceiveEventHanlder(SerialPortDataReceivedDelegate serialPort_DataReceived)
        {
            try
            {
                serialPort.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived);
            }
            catch { throw; }
        }
//接收事件是否有效 true开始接收,false停止接收。默认true
public static bool ReceiveEventFlag = true;
        /// <summary>
        /// 接收数据触发,将接收的数据,通过一个定义的数据接收事件,传递出去。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            if (ReceiveEventFlag == false)
            {
                return;
            }
            string strReceive = ReceiveDataString();
            if (!string.IsNullOrEmpty(strReceive))
            {
                OnReceiveDataHanlder(new ReceiveEventArgs() { ReceiveData = strReceive });
            }
        }
#region 数据接收事件
        public event EventHandler<ReceiveEventArgs> ReceiveDataHandler;
protected void OnReceiveDataHanlder(ReceiveEventArgs e)
        {
            EventHandler<ReceiveEventArgs> handler = ReceiveDataHandler;
            if (handler != null) handler(this, e);
        }
        #endregion
这个helper类,没多少东西,一般也够用了,主要就是,读取,写入。
2.页面或其他地方使用
public ComHelper comHelp;
string PortID = System.Configuration.ConfigurationManager.AppSettings["PeopleAdr"];
            int baudRate = 9600;
            int dataBits = 8;
            System.IO.Ports.StopBits oStopBits = System.IO.Ports.StopBits.One;
            //无奇偶校验位
            System.IO.Ports.Parity oParity = System.IO.Ports.Parity.None;
            int ReadTimeout = 100;
            int WriteTimeout = -1;
            comHelp = new ComHelper(PortID, baudRate, oParity, dataBits, oStopBits, ReadTimeout, WriteTimeout);
            if (!comHelp.IsOpen()) comHelp.Open();
comHelp.AddReceiveEventHanlder(comHelp.serialPort_DataReceived);//将接收到数据,处理数据的方法注册进去
            comHelp.ReceiveDataHandler += new EventHandler<ReceiveEventArgs>(rds_ReceiveDataHandler);//将传递接收数据的方法注册进去,如果接收到数据,触发事件,自动存串口数据。
public string strComReciveData = "";//从COM口接收到的数据,如果接收到数据,通过事件触发,会自动有值。
        void rds_ReceiveDataHandler(object sender, ReceiveEventArgs e)
        {
            try
            {
                strComReciveData = e.ReceiveData;
                Thread.Sleep(200);
                //清空缓存
                comHelp.ClearDataInBuffer();
            }
            catch (Exception ex)
            {
                LogImpl.Debug(ex.ToString());
                Thread.Sleep(200);
            }
        }
//这是写入数据,就简单多了。
byte[] send = new byte[] { 0x7F, 0x02, 0x8F };
            comHelp.WriteData(send);
C#,COM口,接收,发送数据的更多相关文章
- AJAX中使用post,get接收发送数据的区别
		
如何发起请求 xhr.send(); 备注: 如果是get方式,send()命令中不用写任何参数 传递的数据可以写在url中,服务器用$_GEET["参数名"]接收 如果是post ...
 - 读取com口接收byte数据的处理
		
procedure Tfrm_CheckCloth.cnrs232ReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word); ...
 - PHP发送和接收POST数据
		
1. 发送post数据 $data = '{ "id": "17999030", "method": "sayHello" ...
 - STM32移植RT-Thread后的串口在调试助手上出现:(mq != RT_NULL) assert failed at rt_mq_recv:2085和串口只发送数据不能接收数据问题
		
STM32移植RT-Thread后的串口在调试助手上出现:(mq != RT_NULL) assert failed at rt_mq_recv:2085的问题讨论:http://www.rt-thr ...
 - C#串口通信—向串口发送数据,同步接收返回数据
		
最近写C#串口通信程序,系统是B/S架构.SerialPort类有一个DataReceived事件,用来接收串口返回的数据,但这种方式在C/S架构下很好用,但B/S就不好处理了.所以写了一个同步模式接 ...
 - nodejs实现Websocket的数据接收发送
		
在去年的时候,写过一篇关于websocket的博文:http://www.cnblogs.com/axes/p/3586132.html ,里面主要是借助了nodejs-websocket这个插件,后 ...
 - Android蓝牙连接以及数据接收发送
		
1.加入权限 <uses-feature android:name="android.hardware.bluetooth_le" android:required=&quo ...
 - stm32 usb数据接收与数据发送程序流程分析
		
http://blog.csdn.net/u011318735/article/details/17424349 既然学习了USB,那就必须的搞懂USB设备与USB主机数据是怎么通讯的.这里主要讲设备 ...
 - Java基础知识强化之网络编程笔记06:TCP之TCP协议发送数据 和 接收数据
		
1. TCP协议发送数据 和 接收数据 TCP协议接收数据:• 创建接收端的Socket对象• 监听客户端连接.返回一个对应的Socket对象• 获取输入流,读取数据显示在控制台• 释放资源 TCP协 ...
 
随机推荐
- 201521123038 《Java程序设计》 第十二周学习总结
			
201521123038 <Java程序设计> 第十二周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student ...
 - 201521123087 《Java程序设计》第9周学习总结
			
1. 本周学习总结 2. 书 面作业 本次PTA作业题集异常 常用异常题目5-11.1 截图你的提交结果(出现学号)1.2 自己以前编写的代码中经常出现什么异常.需要捕获吗(为什么)?应如何避免? ...
 - 201521123066 《Java程序设计》第九周学习总结
			
1.本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己以前编写的代码中经常出现什 ...
 - tsst
			
import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Sc ...
 - python 实现文本文件中的数字按序排序(位操作,低内存占用)
			
文本文件内容 ./txt 3241155299893344 处理代码: import sys a = bytearray(b'') for i in range(100): a.append(or ...
 - Laravel的Nginx重写规则完整代码
			
laravel基本重写规则 location / { index index.html index.htm index.php; try_files $uri $uri/ /index.php?$qu ...
 - apriori关联规则
			
挖掘数据集:贩物篮数据 频繁模式:频繁地出现在数据集中的模式,例如项集,子结构,子序列等 挖掘目标:频繁模式,频繁项集,关联规则等 关联规则:牛奶=>鸡蛋[支持度=2%,置信度=60%] ...
 - stl 和并查集应用
			
抱歉这么久才写出一篇文章,最近进度有点慢.这么慢是有原因的,我在想如何改进能让大家看系列文章的时候更方便一些,现在这个问题有了答案,在以后的推送中,我将尽量把例题和相关知识点在同一天推出,其次在代码分 ...
 - sessionStorage、localStorage 存储及如何存储数组与对象
			
1.存储,获取,清楚 sessionStorage.setItem("key",val) sessionStorage.getItem("key") sessi ...
 - Swiper.js使用方法
			
<!DOCTYPE html> <html> <head> ... <link rel="stylesheet" href=" ...