-------通过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. Linux网络编程IPv4和IPv6的inet_addr、inet_aton、inet_pton等函数小结(转)

    原文:http://blog.csdn.net/ithomer/article/details/6100734 知识背景: 210.25.132.181属于IP地址的ASCII表示法,也就是字符串形式 ...

  2. Cloud Design Patterns: Prescriptive Architecture Guidance for Cloud Applications

    January 2014 Containing twenty-four design patterns and ten related guidance topics, this guide arti ...

  3. ntroducing K-Pattern: A Rapid Way to Make CRUD Operations with Entity Framework

    Download Source Introduction Earlier in the last year I made a different approach to work on Entity ...

  4. NET上传大文件出现网页无法显示的问题 默认的上传文件大小是4M

    需要在配置文件处进行修改 web.config中的<system.web></system.web>内加入如下代码: <httpRuntime executionTime ...

  5. ulua

    unity窗口 lua -> Gen LuaWrap + Binder 生成Wrap文件 此类脚本是对Unity中常用的组件进行二次包装 Lua运行后 会把Wrap文件加载到Lua运行环境中 使 ...

  6. 以太坊系列之七: p2p模块的dial--以太坊源码学习

    dial.go阅读手记 dial.go是负责和peer建立连接关系的地方,主要是实现 type dialer interface { /* peers已经有的结点 */ newTasks(runnin ...

  7. SQL语句也可以重构优化

    真的,不管是程序中的代码可以重构优化,在SQL Server的语句,也是可以的.下面举个例子,在存储过程中,所传入的数据参数不能为空,另外在对数据表进行更新时,所更新的字段如果是空的话,就更新,如果传 ...

  8. 严选 Android 路由框架优化(下篇)

    3 router 框架优化 3.1 apt 生成代码量过大问题优化 思考框架本身,其实可以发现仅有 router 映射表是需要根据注解编译生成的,其他的全部代码都是固定代码,完全可以 sdk 中直接编 ...

  9. day4学python 字符编码转换+元组概念

    字符编码转换+元组概念 字符编码转换 #coding:gbk //此处必声明 文件编码(看右下角编码格式) #用来得到python默认编码 import sys print(sys.getdefaul ...

  10. ASP.NET -- 获取浏览器信息

    1. 获取浏览器信息 private void GetBrowserInfo() { StringBuilder sb = new StringBuilder(); sb.AppendLine(str ...