-------通过USB将硬件连接PC, 更新USB驱动,使用下面方法可控制相关设备。

//1声明一个串口对象
public static SerialPort MainModule_Port_ = new SerialPort();
//2给串口设置参数
CreateSerialPort(MainNode.MainModule_Port_, comboBox2.Text.Trim(), "", "");
//3设置参数方法
/// <summary>
/// 公共创建串口
/// </summary>
/// <param name="SP">串口对象</param>
/// <param name="SerialPortName">串口名</param>
/// <param name="BaudRate">波特率</param>
/// <param name="Parity">校验位</param>
public void CreateSerialPort(SerialPort SP, string SerialPortName, string BaudRate, string Parity)
{
try
{
//串口属性类
//SerialPortParamter app = new SerialPortParamter();
SP.PortName = SerialPortName;//串口号
SP.BaudRate = Convert.ToInt32(BaudRate);//波特率
SP.Parity = StringToParity(Parity);//校验位
SP.DataBits = ;//数据位
SP.StopBits = StringToStopBits("");//解析停止位
//SP = app.setParatemer();
SP.DtrEnable = true;
SP.RtsEnable = true;
}
catch (Exception ex)
{
MessageBox.Show("创建串口失败!" + SerialPortName);
}
}
//3.1串口属性校验位
public static System.IO.Ports.Parity StringToParity(string parity)
{
if (string.IsNullOrEmpty(parity))
{
return System.IO.Ports.Parity.None;
}
return (System.IO.Ports.Parity)Enum.Parse(typeof(System.IO.Ports.Parity), parity);
}
//3.2串口属性停止位
public static System.IO.Ports.StopBits StringToStopBits(string stopBits)
{
if (string.IsNullOrEmpty(stopBits))
{
return System.IO.Ports.StopBits.None;
}
return (System.IO.Ports.StopBits)Enum.Parse(typeof(System.IO.Ports.StopBits), stopBits);
}
//////////目前已经创建好了一个串口,下面用来发送指令,下面为16进制的645协议
string mess="68 19 00 00 19 67 37 68 91 08 33 33 34 33 33 35 34 35 d7 16";
byte[] messArray=StrSplitToByte(mess);
MainNode.MainModule_Port_.Write(messArray, , messArray.Length);//从串口发送协议,正常会将发送或收到帧保持到一个集合,供展示
///字符串 转 byte 数组
public static byte[] StrSplitToByte(string inSplitString)
{
string[] byteStrings;
byteStrings = inSplitString.Split(" ".ToCharArray());
byte[] byteOut;
byteOut = new byte[byteStrings.Length];
for (int i = ; i < byteStrings.Length; i++)
{
if (string.IsNullOrEmpty(byteStrings[i]))
{
continue;
}
byteOut[i] = Convert.ToByte(byteStrings[i], );
}
return byteOut;
}
//////////////发送了协议 ,我们希望得到回复,下面为如何接收协议
//接收帧方法,1376.2协议测试
private void __RecvThread_Agreement_13762()
{
while ( == )
{
try
{
if (MainNode.MainModule_Port_.IsOpen)
{
int iReadSize = MainNode.MainModule_Port_.BytesToRead;
if (iReadSize == )
{
Thread.Sleep();
continue;
}
byte[] readBuffer = new byte[iReadSize];
MainNode.MainModule_Port_.Read(readBuffer, , iReadSize);
//该方法是将接收的帧,在方法中根据帧格式进行判断,正确后放入同发送一起的集合中。
ProcessRecvData(readBuffer);//处理接收数据
}
}
catch (Exception e) { ;}
}
} ///////////////////////////////下面是算帧的校验位的方法
/// <summary>
/// 更新校验码645
/// 参数无需" "分隔
/// </summary>
public static string UpdateCS645(string baowen)
{
baowen = baowen.Trim();
string[] mess = null;// AnalysisMessage.separate(baowen, 2).Split(' ');
if (baowen.Trim().IndexOf(' ') == -)
{
mess = AnalysisMessage.separate(baowen, ).Split(' ');
}
else
{
mess = baowen.Split(' ');
} int cs = ;
for (int i = ; i < mess.Length; i++)
{
cs += Convert.ToInt32((HexConvert.BCDstrToBin(mess[i])), );
}
string csV = HexConvert.Mess10to16((cs % ).ToString());
if (csV.Length == )
return csV;
else if (csV.Length == )
return csV.Substring(, );
return csV.Substring(, );
}
/// <summary>
/// 更新校验码1376.2
/// </summary>
public static int UpdateCS(byte[] bs)
{
int cs = ;
for (int i = ; i < bs.Length - ; i++)
{
cs += bs[i];
}
return cs;
}

C#串口编程 操作硬件的更多相关文章

  1. c# 实现串口编程-操作LED屏幕

    串口编程主要用到SerialPort这个类,主要实现对串口发送字节数组然后点阵屏显示相关信息,其实这个功能很简单下面给大家把整体思路用流程图展现如下:. 其实整体思路就如流程图.下面是整个流程图的一个 ...

  2. Android通过JNI实现与C语言的串口通讯操作蓝牙硬件模块

    一直想写一份技术文档,但因为自感能力有限而无从下笔,近期做了个关于Android平台下实现与C语言的通讯来操作蓝牙模块的项目,中间碰到了很多问题,也在网上查了很多资料,在完毕主要功能后.也有一些人在网 ...

  3. storysnail的Linux串口编程笔记

    storysnail的Linux串口编程笔记 作者 He YiJun – storysnail<at>gmail.com 团队 ls 版权 转载请保留本声明! 本文档包含的原创代码根据Ge ...

  4. storysnail的Windows串口编程笔记

    storysnail的Windows串口编程笔记 作者 He YiJun – storysnail<at>gmail.com 团队 ls 版权 转载请保留本声明! 本文档包含的原创代码根据 ...

  5. Linux下串口编程【转】

    本文转载自:http://blog.csdn.net/w282529350/article/details/7378388 /************声明:本人只是见到这篇文章对我帮助很大才转载的,但 ...

  6. PB串口编程资料(转)

    ----MSCOMM32参数基本介绍2008年03月29日 星期六 上午 11:37MSComm 控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能.MSComm控件在串口编程时非常方便,程序 ...

  7. Linux串口编程(转载)

    在嵌入式Linux中,串口是一个字设备,访问具体的串行端口的编程与读/写文件 的操作类似,只需打开相应的设备文件即可操作.串口编程特殊在于串 口通信时相关参数与属性的设置.嵌入式Linux的串口编程时 ...

  8. Linux串口编程详解(转)

    串口本身,标准和硬件 † 串口是计算机上的串行通讯的物理接口.计算机历史上,串口曾经被广泛用于连接计算机和终端设备和各种外部设备.虽然以太网接口和USB接口也是以一个串行流进行数据传送的,但是串口连接 ...

  9. linux串口编程总结

    串口本身.标准和硬件 † 串口是计算机上的串行通讯的物理接口.计算机历史上,串口以前被广泛用于连接计算机和终端设备和各种外部设备.尽管以太网接口和USB接口也是以一个串行流进行数据传送的.可是串口连接 ...

随机推荐

  1. 第十八课 Gazebo仿真器

    1.Gazebo概述 在Gazebo中的模拟效果是非常好的. 它的特性 Dynamics Simulation 直接控制物理引擎参数 Building Editor 无需代码即可在Gazebo中创建机 ...

  2. Office Web APP预览如何去掉顶部版权标志“Microsoft Office Web Apps”

    在Office Web APP的预览会涉及4中类型的文 件:Word.Excel.PowerPoint.PDF,不同的类型在预览时调用的文件是不一样的,其中Word和 PDF调用的是同一个文件.每个预 ...

  3. Appium移动端自动化测试之应用操作详解(四)

    应用操作篇 1.1).安装应用 desired_caps = { 'platformName': 'Android', 'platformVersion': '5.0.0.0', 'deviceNam ...

  4. Http中的身份传递

    IIS默认的身份验证方式 身份传递策略包括使用操作系统的委派功能或在应用程序级传递票证和/或凭证 为了阻止IIS的身份验证委派,可以在web.config加入如下设置, <system.web& ...

  5. adb命令安装及卸载应用

    一.手机连接电脑,检测手机是否已开启授权并连接成功 adb devices 二.安装应用 adb install UYUN-CARRIER-Android.apk 三.卸载应用 1.查看应用包名 ad ...

  6. <%@ include > 与< jsp:include >

    include指令表示在JSP编译时插入一个包含文本或者代码的文件,把文件中的文本静态地包含过去.也就是说,会把被包含的页面拷贝到包含的页面中指令所在的位置. 语法格式:<%@ include ...

  7. C# - dynamic 特性

    dynamic是FrameWork4.0的新特性.dynamic的出现让C#具有了弱语言类型的特性.编译器在编译的时候不再对类型进行检查,编译期默认dynamic对象支持你想要的任何特性. 比如,即使 ...

  8. 使用java实现单链表----(java中的引用就是指针)

    //一直以为java中没有指针,其实java的引用就是指针,只不过堆栈中的引用储存了在堆中的地址,可以看做java中的指针.public class sibgleLink<E> { // ...

  9. 一、认识Node.js

    1.什么是Note.js? 简单的说 Node.js 就是运行在服务端的 JavaScript.Node.js 是一个 Javascript 运行环境(runtime).它让 JavaScript 可 ...

  10. 标准库函数begin和end------c++primer

    尽管能计算得到尾后指针,但这种用法极易出错.为了让指针的使用更简单.更安全,c++新标准引入了两个名为begin和end的函数.这两个函数与容器中的两个同名成员功能类似,不过数组毕竟不是类类型,因此这 ...