这里写一种,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口,接收,发送数据的更多相关文章

  1. AJAX中使用post,get接收发送数据的区别

    如何发起请求 xhr.send(); 备注: 如果是get方式,send()命令中不用写任何参数 传递的数据可以写在url中,服务器用$_GEET["参数名"]接收 如果是post ...

  2. 读取com口接收byte数据的处理

    procedure Tfrm_CheckCloth.cnrs232ReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word); ...

  3. PHP发送和接收POST数据

    1. 发送post数据 $data = '{ "id": "17999030", "method": "sayHello" ...

  4. 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 ...

  5. C#串口通信—向串口发送数据,同步接收返回数据

    最近写C#串口通信程序,系统是B/S架构.SerialPort类有一个DataReceived事件,用来接收串口返回的数据,但这种方式在C/S架构下很好用,但B/S就不好处理了.所以写了一个同步模式接 ...

  6. nodejs实现Websocket的数据接收发送

    在去年的时候,写过一篇关于websocket的博文:http://www.cnblogs.com/axes/p/3586132.html ,里面主要是借助了nodejs-websocket这个插件,后 ...

  7. Android蓝牙连接以及数据接收发送

    1.加入权限 <uses-feature android:name="android.hardware.bluetooth_le" android:required=&quo ...

  8. stm32 usb数据接收与数据发送程序流程分析

    http://blog.csdn.net/u011318735/article/details/17424349 既然学习了USB,那就必须的搞懂USB设备与USB主机数据是怎么通讯的.这里主要讲设备 ...

  9. Java基础知识强化之网络编程笔记06:TCP之TCP协议发送数据 和 接收数据

    1. TCP协议发送数据 和 接收数据 TCP协议接收数据:• 创建接收端的Socket对象• 监听客户端连接.返回一个对应的Socket对象• 获取输入流,读取数据显示在控制台• 释放资源 TCP协 ...

随机推荐

  1. 201521123052《Java程序设计》第9周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己 ...

  2. 201521123080《Java程序设计》第14周学习总结

    本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 书面作业 MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自己的学号.姓名) ...

  3. java课程设计---计算器(201521123020 邱伟达)

    1.团队课程设计博客链接 http://www.cnblogs.com/br0823/p/7064407.html 2.个人负责模板或任务说明 1.初始化按键 2.实现加减乘除开方乘方等运算 3.每个 ...

  4. Java swing: 实现ActionListener监听器的三种途径

    Swing是目前Java中不可缺少的窗口工具组,是用户建立图形化用户界面(GUI)程序的 强大工具.Java Swing组件自动产生各种事件来响应用户行为.如当用户点击按钮或选择菜单项目时,Swing ...

  5. python os语法

    前几天做了一个文件替换功能用到些python os的功能,感觉python os模块的功能非常的强大, 如果你希望你的python程序能够与平台无关的话,这个模块是尤为重要的.即它允许一个程序在编写后 ...

  6. New Features and changes of Ninject 3.3

    Ninject 3.3 beta1 has gone live. This release mainly focus on bug fix and platform update. Support . ...

  7. PHP数据库45道题整理~~~啦啦啦

    select * FROM student-- 二:查询student表中所有记录select * FROM score WHERE Degree>60 AND Degree<80-- 四 ...

  8. Spring中的Service/DAO/DTO

  9. ASP.NET Core中如何调整HTTP请求大小的几种方式

    一.前言 一般的情况下,我们都无需调用HTTP请求的大小,只有在上传一些大文件,或者使用HTTP协议写入较大的值时(如调用WebService)才可能会调用HTTP最大请求值. 在ASP.NET Co ...

  10. Run Away 模拟退火

    Run Away Time Limit:5000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Sta ...