-------通过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. C6678 srio communication via Switch

    First, I don't often give praise for support but I must say Travis, Karthik and Derek from TI have b ...

  2. JAVA的编码转换测试

    package test; import java.io.UnsupportedEncodingException; /** * * @author jim */ public class Test ...

  3. Alpha冲刺(三)

    Information: 队名:彳艮彳亍团队 组长博客:戳我进入 作业博客:班级博客本次作业的链接 Details: 组员1(组长)柯奇豪 过去两天完成了哪些任务 ssm框架的使用并实现简单的数据处理 ...

  4. mysql 游标CURSOR

    FETCH cursor_works INTO num,provinceIDs,cityIDs,SourceID; 定义的变量值必须与 游标中的字段不同,一一对应 DECLARE cursor_wor ...

  5. Oracle 已连接到空闲例程或ORA-01034: ORACLE not available

    因为是本地数据库没有重要资料,所以可以随便自己折腾. 出现问题原因:从生产数据库导入一个表到本地库测试,因数据量过大,在导入4-5个小时后,手动中断导入.是否异常关机不能确定. 之后再打开数据库出现一 ...

  6. android IntentService和ResultReceiver的异步处理

    IntentService和ResultReceiver的异步处理 1.在下载手机上从网络下载东西的时候会用到AsyncTask来方便处理,这里可以在用IntentService和ResultRece ...

  7. SSI简介 与 nginx开启SSI

    Server Side Include : 服务器端嵌入 原理 : 将内容发送到浏览器之前,可以使用“服务器端包含 (SSI)”指令将文本.图形或应用程序信息包含到网页中.因为包含 SSI 指令的文件 ...

  8. 苹果开发者账号提示“Unable to verify mobile phone number”的解决方案

    在注册苹果开发者账号时,会提示:"Unable to verify mobile phone number.".顾名思义,没有有效的手机号码. 解决方案: 进入到Your Appl ...

  9. 同一个程序里有多个版本的App

    在Xcode中添加多个targets进行版本控制,就是同一个app开发多个版本 以Xcode 9.3 为例 1. 创建 点击左侧工程项目文件,选择TARGETS 下的项目右击选择 Duplicate. ...

  10. Windows10电脑系统时间校准

    有时候新安装电脑系统,系统时间不对,需要主动去校准系统时间. 1.点击时间 2.日期和时间设置 3.其他日期.时间和区域设置 4.设置时间和日期 5.Internet 时间 6.点击立即更新,如果更新 ...