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 通信,自 ...
随机推荐
- 2018.08.27 rollcall(非旋treap)
描述 初始有一个空集,依次插入N个数Ai.有M次询问Bj,表示询问第Bj个数加入集合后的排名为j的数是多少 输入 第一行是两个整数N,M 接下来一行有N个整数,Ai 接下来一行有M个整数Bj,保证数据 ...
- hdu-2955(01背包+逆向思维+审题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2955 思路:注意p和m[i]是被抓的概率,不能直接用,要转换为逃跑的概率,然后将得到的钱视为背包体积再 ...
- gj6 深入python的set和dict
6.1 collections中的abc from collections.abc import Mapping, MutableMapping #dict属于mapping类型 a = {} pri ...
- ansible-playbook api 2.0 运行项目
上篇 api 的文章 <ansible-playbook api 2.0 直接运行> 介绍的是直接将 tasks 直接写在 代码中的,本文介绍 api 运行整个项目 [root@10_1_ ...
- 2015 - 4- 21 iOS开发越狱环境的搭建1
2015 - 4- 20 1. 越狱环境的搭建 http://www.iduuke.com/2030.html http://www.cnblogs.com/xiongwj0910/archi ...
- (KMP)剪花布条 -- hdu -- 2087
http://acm.hdu.edu.cn/showproblem.php?pid=2087 剪花布条 Time Limit: 1000/1000 MS (Java/Others) Memory ...
- poj3321-Apple Tree(DFS序+树状数组)
Apple Tree Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 36442 Accepted: 10894 Desc ...
- setTimeout问题
function fn(argu1){ alert(argu1); } setTimeout(fn, 1000, 12); setTimeout从第三个参数开始,之后的参数都是fn的.fn不用加(), ...
- eclipse/myeclipse清除workspace
打开Eclipse后,选择功能菜单里的 Windows -> Preferences->, 弹出对话框后,选择 General -> Startup and Shutdownwor ...
- ActiveMq 总结(二)
4.2.6 MessageConsumer MessageConsumer是一个由Session创建的对象,用来从Destination接收消息. 4.2.6.1 创建MessageConsumer ...