文章首发于浩瀚先森博客

直接上代码

public struct SerialPara
{
private string portName;
public string PortNameSetGet
{
get { return portName; }
set { portName = value; }
} private int baudRate;
public int BaudRateSetGet
{
get { return baudRate; }
set { baudRate = value; }
} private Parity parity;
public Parity ParitySetGet
{
get { return parity; }
set { parity = value; }
} private int databit;
public int DatabitSetGet
{
get { return databit; }
set { databit = value; }
} private StopBits stopBits;
public StopBits StopBitsSetGet
{
get { return stopBits; }
set { stopBits = value; }
}
} public class SerialCommClass
{
SerialPara sp;
public SerialCommClass(SerialPara sp_temp)
{
this.sp = new SerialPara();
sp.PortNameSetGet = sp_temp.PortNameSetGet;
sp.BaudRateSetGet = sp_temp.BaudRateSetGet;
sp.ParitySetGet = sp_temp.ParitySetGet;
sp.DatabitSetGet = sp_temp.DatabitSetGet;
sp.StopBitsSetGet = sp_temp.StopBitsSetGet;
} public bool Serial_Connect(ref SerialPort serialPort)
{
/*check serial parameter*/
if(!checkSerialPara(this.sp))
return false; /*Serial Port configuration*/
serialPort.PortName = sp.PortNameSetGet;
serialPort.BaudRate = sp.BaudRateSetGet;
serialPort.DataBits = sp.DatabitSetGet;
serialPort.Parity = sp.ParitySetGet;
serialPort.StopBits = sp.StopBitsSetGet; try
{
serialPort.Open();
}
catch (Exception exc)
{
return false;
}
return true;
} //发送字符串数据
public bool SendStringData(ref SerialPort serialPort,string data)
{
if (serialPort.IsOpen)
{
serialPort.Write(data);
return true;
}
else
{
return false;
}
} //发送二进制数据
public string SendBytesData(ref SerialPort serialPort, string data)
{
//byte[] bytesSend = System.Text.Encoding.Default.GetBytes(data);
byte[] bytesSend = strToToHexByte(data);
if (bytesSend == null)
return null;
try
{
serialPort.Write(bytesSend, 0, bytesSend.Length);
return bytesSend.Length + "";
}
catch (Exception e)
{
return null;
}
} /*check serial parameter*/
private bool checkSerialPara(SerialPara sp)
{
if(sp.PortNameSetGet==null)
return false;
return true;
} /// <summary>
/// 字符串转16进制字节数组
/// </summary>
/// <param name="hexString"></param>
/// <returns></returns>
private static byte[] strToToHexByte(string hexString)
{
hexString = hexString.Replace(" ", "");
if (hexString.Substring(0, 2) == "0x" || hexString.Substring(0, 2) == "0X")
hexString = hexString.Substring(2, hexString.Length - 2);
byte[] returnBytes = new byte[hexString.Length / 2];
try
{
for (int i = 0; i < returnBytes.Length; i++)
returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
//returnBytes[returnBytes.Length - i - 1] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
}
catch (Exception e)
{
return null;
}
return returnBytes;
}
}

c#串口通信类代码可以直接调用的更多相关文章

  1. 串口通信类,WPF

    参考之前的资料,写了一个自己常用的串口类, 字符串发送类型用了两种方式,char[] 和byte[] : 数据接收也是采用两种 char[] 和byte[] 两种. 类代码贴出来: public cl ...

  2. VC 串口通信类

    为了节省时间,我就贴出来吧 头文件 SerialPort.h /******************************************************************** ...

  3. java 串口通信 代码

    下面是我自己实现的串口接收的类,串口发送比较简单,就直接发送就可以了.下面的这个类可以直接使用. package com.boomdts.weather_monitor.util; import ja ...

  4. C\C++串口通信编程的一点技术记录

    新工作接的第一个活,要写一个配合设备调试的上位机程序. 除了MFC界面的部分,就是要处理几条命令. 串口通信部分代码借鉴的是这一篇文章:http://blog.sina.com.cn/s/blog_a ...

  5. boost实现串口通信(一):小试牛刀

    /************************************************************************/ /* 功能:boost实现串口通信类 */ /* ...

  6. Qt 串口通信

    在Qt5之前,串口通信基本依赖于第三方库,下面是我曾接触过的串口通信类库: 名称 语言 平台   QextSerialPort QT C++ Win/Linux http://sourceforge. ...

  7. Qt串口通信

    1. Qt串口通信类QSerialPort 在Qt5的的更新中,新增了串口通信的相关接口类QSerialPort,这使得在开发者在使用Qt进行UI开发时,可以更加简单有效地实现串口通信的相关功能. 开 ...

  8. C++实现串口通信问题(与Arduino)

    参考1(已验证稍加修改可与Arduino通信):https://blog.csdn.net/qq_36106219/article/details/81701368 参考2(比较全,main函数需要自 ...

  9. c#中实现串口通信的几种方法

    c#中实现串口通信的几种方法 通常,在C#中实现串口通信,我们有四种方法: 第一:通过MSCOMM控件这是最简单的,最方便的方法.可功能上很难做到控制自如,同时这个控件并不是系统本身所带,所以还得注册 ...

随机推荐

  1. Ajax的核心对象创建步骤

    * Ajax具有核心对象 * XMLHttpRequest对象 * 如何创建XMLHttpRequest对象 function getXhr(){ // 声明XMLHttpRequest对象 var ...

  2. jquery如何实现(textarea) placeholder自动换行?

    思路:利用文本框的聚焦和失焦事件 1.HTML结构 <textarea id="text1"></textarea> 2.js方法 <script&g ...

  3. SharePoint项目实践中如何实现非打破继承看上去很美的权限控制

    首先对于比较机密的数据,打破继承还是必须要的. 但是对于一些普通申请单据,虽然客户也希望用户不要看到其他人的申请单据,但是我还是不推荐打破继承,应为打破继承一方面会造成网站的权限管理特别的凌乱,另一方 ...

  4. Android自定义控件7--自定义开关--绘制界面内容

    本文实现全自定义控件--自定义开关 本文地址:http://www.cnblogs.com/wuyudong/p/5922316.html,转载请注明源地址. 自定义开关 (View),本文完成下面内 ...

  5. iOS面试题总结 (三)

    22 键值编码KVC KVC全称key valued coding 键值编码 提到KVC,就不能不提反射机制,反射机制就是在运行状态中,对于任意一个类,都能够调用他的所有属性和方法,对于任意一个对象, ...

  6. iOS开发之功能模块--关于自定义TabBar条

    只上项目中用到的代码: 1.实现重写TabBar的TabBarItem,然后在中间额外加一个按钮. #import <UIKit/UIKit.h> @interface BikeTabBa ...

  7. IIS7如何部署asp.net网站

      第一步:发布网站 右键asp.net web项目,选择发布, 然后新建配置文件名称并选择 "文件系统" 发布方法. 目标位置选择本地新建的文件夹如: IISWebSite 第二 ...

  8. MySQL server version for the right syntax to use near 'TYPE=MyISAM'

    最近将一个版本为4.0.18-Max的MySQL数据库迁移到5.6.20-enterprise-commercial-advanced上.好吧,这是我迄今为止,见到过的最古老版本的MySQL数据库,这 ...

  9. [AlwaysOn Availability Groups]AG扩展事件

    AG扩展事件 SQL Server 2012定义了一些关于AlwaysOn的扩展事件.你可以监控这些扩展事件来帮助诊断AG的根本问题.你也可以使用以下语句查看扩展事件: SELECT * FROM s ...

  10. MongoDB学习笔记~MongoDB实体中的值对象

    回到目录 注意,这里说的值对象是指在MongoDB实体类中的,并不是DDD中的值对象,不过,两者也是联系,就是它是对类的补充,自己本身没有存在的价值,而在值对象中,也是不需要有主键Id的,这与DDD也 ...