-------通过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. jqgrid 编辑表格(包含下拉框)

    .1在jqgrid 按钮 <asp:JQGridColumn TextAlign=" DataField="act" Visible="True" ...

  2. Regist&Login

    关于注册页面和登录页面的业务流程 form表单中确定action提交地址 method 确定提交的方法--->写出相对应的Servlet,假如接受的数据不多 ,那么用 String userna ...

  3. Java SimpleDateFormat工具类

    package AnimalDemo; import java.text.ParseException; import java.text.SimpleDateFormat; import java. ...

  4. (转)EASYUI+MVC4通用权限管理平台

    原文地址:http://www.cnblogs.com/hn731/archive/2013/07/15/3190947.html 通用权限案例平台在经过几年的实际项目使用,并取得了不错的用户好评.在 ...

  5. 生日蜡烛——第七届蓝桥杯C语言B组(省赛)第二题

    原创 生日蜡烛 某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛. 现在算起来,他一共吹熄了236根蜡烛. 请问,他从多少岁开始过生日party的? 请填写他开始过生日 ...

  6. wc.exe指令(C++)

    https://github.com/kielingpao/wc 项目相关要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程序,模仿已有wc.ex ...

  7. TSQL--SET ANSI_NULLS OFF

    当ANSI_NULLS 为ON时,遵循SQL92的标准,只能使用IS NULL 来判断值是否为NULL, 而不能使用=或<>来与NULL做比较,任何值包括NULL值与NULL值做=或< ...

  8. Job-Show Liang,你来掌管诺基亚王国,可好?

    保留我一向高大上风格,开头当然来一个段子 在即将到来MWC(Mobile World Congress缩写,世界移动通信大会),很高兴能听到小诺来参展,我不得不给它32个赞,因为小诺已经好几届没有浮头 ...

  9. C语言编程学习:链表的来源分析

    C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...

  10. MVC进阶篇(二)—路由机制

    前言 这个东西好像,一般也不经常动,都用默认的即可.由于MVC模式在framework里面的解析机制,区别与webform模式,是采用解析路由机制的url.从来实例化视图列对象,然后对该action进 ...