WinForm—串口通讯
ialPort(串行端口资源)
常用属性:
BaudRate 此串行端口上要使用的波特率
DataBits 每发送/接收一个字节的数据位数目
DtrEnable 在通讯过程中是否启用数据终端就绪(Str)行
PortName 要打开的通讯端口的名称
RtsEnable 在通讯过程中是否启用请求发送(Rts)行
StopBits 每发送/接收一个字节的停止位数
常用事件:
DataReceived 每次从SerialPort接收数据时引发
应用:
0、查询串口 并加载
1、打开串口
2、发送数据
3、接收数据
//SerialPort数据读取
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
//此项目接收数据每12位为一组,并以“02”为开始标识符,第2到第7位的最后一个数字为传输的数据 //延迟100ms执行,为了防止SerialPort获取数据时,获取到的数据少于12位,显示框不显示数据问题
Thread.Sleep();
//当接收到的数据>=12位,即一个完整的数据时,再进行数据读取分析
if (serialPort1.BytesToRead >= )
{
try
{
//将缓存区的数据放入by数组中
byte[] by = new byte[serialPort1.BytesToRead];
while (serialPort1.BytesToRead > )
{
//★★★端口控件读取数据★★★
serialPort1.Read(by, , by.Length);
}
//result为最终显示结果
string result = "";
//循环判断by数组,找到开始标识符“02”
for (int j = ; j < by.Length; j++)
{
//将当前数据转换为16进制字符串后,不足2位的向左用“0”补齐
string currentby = Convert.ToString(by[j], ).PadLeft(, '');
//如果当前为数据开始标识符,则读取分析数据
if (currentby == "")
{
//当剩余数据包换一个完整的12位数据时进行读取分析
if (by.Length - j > )
{
//第2位开始到第7位结束,共6位为传输的数据
for (int k = j + ; k <= j + ; k++)
{
currentby = Convert.ToString(by[k], ).PadLeft(, '');
result += currentby.Substring(, );
//前三位为整数部分,后三位为小数部分
if (k == j + )
{
result += ".";
}
}
}
//展示数据
txt_Weight.Text = (Convert.ToDecimal(result)).ToString();
break;
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
}
SerialPort控件数据读取
4、数据接收错误
错误:将返回的数据处理后倒入指定的文本框,因线程问题出现错误
解决方案:Form.CheckForIllegalCrossThreadCalls = false;
WinForm—串口通讯的更多相关文章
- Winform 串口通讯之地磅
继上次的读卡之后,要做一个地磅的读取. 下面是我在读卡Demo上改的读取地磅的. 地磅是一直向串口发送数据的,所以需要截取数据来一直判断数据是否合法,然后计算出结果. 其中遇到了一个小问题,文末有介绍 ...
- Winform 串口通讯之读卡器
老板给我的第一个硬件就是一个读卡器, 说让我做一下试试,于是从网上查了查就写了出来,相当的简单. 但是后来还有一个地磅的串口通讯,我整整搞了一天. 在窗体类的构造函数中写入 Form.CheckFor ...
- C#串口通讯
本文提供一个用C#实现串口通讯实例,亲自编写,亲测可用! 开发环境:VS2008+.net FrameWork3.5(实际上2.0应该也可以) 第一步 创建一个WinForm窗体,拉入一些界面元素 重 ...
- C#串口通讯概念以及简单实现
最近在研究串口通讯,其中有几个比较重要的概念,RS-232这种适配于上位机和PC端进行连接,RS-232只限于PC串口和设备间点对点的通信.它很简单的就可以进行连接,由于串口通讯是异步的,也就是说你可 ...
- 嵌入式Linux学习笔记(六) 上位机QT界面实现和串口通讯实现
目录 (1).参考资料 (2).QT界面布局实现 (3).数据和操作逻辑 在上一章我们实现了下位机的协议制定,并通过串口通讯工具完成了对设备内外设(LED)的状态修改,下面就要进行上位机软件的实现了( ...
- C#串口通讯实例
本文参考<C#网络通信程序设计>(张晓明 编著) 程序界面如下图: 参数设置界面代码如下: using System; using System.Collections.Generic; ...
- delphi之动态库调用和串口通讯
串口通讯: Spcomm 控件属性: CommName :表示COM1,COM2等串口的名字: BaudRate:设定波特率9600,4800等 StartComm StopComm 函数Write ...
- 用SPCOMM 在 Delphi中实现串口通讯 转
用Delphi 实现串口通讯,常用的几种方法为:使用控件如MSCOMM和SPCOMM,使用API函数或者在Delphi 中调用其它串口通讯程序.利用API编写串口通信程序较为复杂,需要掌握大量通信 ...
- 西门子plc串口通讯方式
西门子plc串口通讯的三种方式 时间:2015-10-25 14:31:55编辑:电工栏目:西门子plc 导读:西门子plc串口通讯的三种方式,分为RS485 串口通信.PPI 通信.MPI 通信,自 ...
随机推荐
- cucumber安装可能发生的错误
1.--ignore-certification-errors 解决:可能是你的chromedriver版本与ruby版本不匹配,换一个版本 2.找不到文件,certification verify ...
- 使用Java实现网络爬虫
网络爬虫 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本. 另外一些不常使用的名字还有蚂蚁.自动索引.模 ...
- 2018.09.28 bzoj3688: 折线统计(dp+树状数组)
传送门 简单树状数组优化dp. 注意到k很小提示我们搜(d)(d)(d)索(p)(p)(p). 先按第一维排序. 用f[i][j][0/1]f[i][j][0/1]f[i][j][0/1]表示第i个点 ...
- 2018.08.17 洛谷P3110 [USACO14DEC]驮运(最短路)
传送门 一道sb最短路,从两个起点和终点跑一边最短路之后直接枚举两人的汇合点求最小值就行了. 代码: #include<bits/stdc++.h> #define N 40005 #de ...
- redis与ssm整合(用 redis 替代mybatis二级缓存)
SSM+redis整合 这里主要是利用redis去做mybatis的二级缓存,mybaits映射文件中所有的select都会刷新已有缓存,如果不存在就会新建缓存,所有的insert,update操作都 ...
- HDU 2037 今年暑假不AC (区间贪心)
题意:又是中文题... 析:先说一下区间贪心的一个定理,选择不相交的区间:数轴上有n个开区间(ai, bi).选择尽量多的区间,使得这些区间两两不相交,贪心策略是,一定是选bi小的.(想一下为什么). ...
- MySQL性能调优与架构设计——第 14 章 可扩展性设计之数据切分
第 14 章 可扩展性设计之数据切分 前言 通过 MySQL Replication 功能所实现的扩展总是会受到数据库大小的限制,一旦数据库过于庞大,尤其是当写入过于频繁,很难由一台主机支撑的时候,我 ...
- Business Cards
Problem Description Running a paper shop is not an easy job, especially with harsh customers. Today ...
- android周期性任务
一般任务调度机制的实现方式主要有: Thread sleep.Timer.ScheduledExecutor.Handler和其他第三方开源库.android的AlarmManager 1. Time ...
- Oracle 在not in中使用null的问题
http://www.linuxidc.com/Linux/2012-07/66212.htm 以前还专门小总结过一下Oracle中关于NULL的一些问题,碰巧今天在看书的过程中又看到了另外一个以前没 ...