`
- 浏览:
12492 次
- 性别:
- 来自:
青岛
-
今天我的串口接收数据的项目终于做完了,拿出来共享一下~~
using System.IO.Ports;
using System.Threading;
using System.IO;
namespace SerialPortDemo
{
public partial class Form1 : Form
{
bool isStar = false;
Thread threadReceive = null;
SerialPort serialPort = null;
int i = 0;
int k = 0;
public Form1()
{
InitializeComponent();
this.comboBox1.SelectedIndex = 0;
this.comboBox2.SelectedIndex = 2;
serialPort = new SerialPort();
if (serialPort.IsOpen)
serialPort.Close();
//获得参数
serialPort.PortName = comboBox1.SelectedItem.ToString();
serialPort.BaudRate = int.Parse(comboBox2.SelectedItem.ToString());
serialPort.Open();
ThreadStart method = new ThreadStart(ReceiveData);//在线程上执行此方法
threadReceive = new Thread(new ThreadStart(method));
}
private void button1_Click(object sender, EventArgs e)
{
try
{
if (button1.Text == "接收数据")
{
if (!isStar)//如果isStar等于true,则启动线程
{
threadReceive.Start();
this.toolStripStatusLabel1.Text = "正在接收数据......";
}
else
{
threadReceive.Resume();//如果isStar等于false,则解除挂起线程
this.toolStripStatusLabel1.Text = "暂停接收...";
}
button1.Text = "停止接收";
}
else
{
threadReceive.Suspend();//如果是"停止接收",则挂起线程
button1.Text = "接收数据";
this.toolStripStatusLabel1.Text = "暂停接收...";
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
serialPort.Close();
}
}
//不断循环接收数据
private void ReceiveData()
{
while (true)
{
Thread.Sleep(500);
this.isStar = true;
this.SynReceiveData();
}
}
//通过串口取数据
private void SynReceiveData()
{
MessageBox.Show("接收数据" + k);
k++;
string inputData = serialPort.ReadExisting();
try
{
if (inputData != string.Empty)
{
if (inputData.Trim().Length == 45)
{
SetText(inputData);
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
//分隔字符串并保存在指定目录下
private void SetText(string str)
{
string aa = str;
StreamWriter sw = null;
if (aa != string.Empty)
{
string aaa = aa.Insert(13, ",");
aaa = aaa.Insert(32, ",");
String fileName = "C:\\GAJ_PUB\\kaoqin";
if (Directory.Exists(fileName) == false)//如果目录不存在
{
Directory.CreateDirectory(fileName);//创建目录
sw = File.CreateText("C:\\GAJ_PUB\\kaoqin\\person" + i + ".txt");//创建文本
}
else
{
sw = File.CreateText("C:\\GAJ_PUB\\kaoqin\\person" + i + ".txt");
}
sw.WriteLine(aaa);
sw.Flush();
sw.Close();
i++;
MessageBox.Show("文件已存入指定目录下!!");
}
}
private void button2_Click(object sender, EventArgs e)
{
if (threadReceive.ThreadState==ThreadState.Running)//当前状态为启动线程
{
threadReceive.Abort();
this.Close();
}
else if (threadReceive.ThreadState == ThreadState.Suspended)//当前状态为挂起线程
{
threadReceive.Resume();
threadReceive.Abort();
this.Close();
}
else if (threadReceive.ThreadState == ThreadState.SuspendRequested)//当前状态为正在挂起线程
{
threadReceive.Resume();
threadReceive.Abort();
this.Close();
}
else if (threadReceive.ThreadState == ThreadState.Unstarted)
{
this.Close();
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (threadReceive.ThreadState == ThreadState.Running)//当前状态为启动线程
{
threadReceive.Abort();
this.Close();
}
else if (threadReceive.ThreadState == ThreadState.Suspended)//当前状态为挂起线程
{
threadReceive.Resume();
threadReceive.Abort();
this.Close();
}
else if (threadReceive.ThreadState == ThreadState.SuspendRequested)//当前状态为正在挂起线程
{
threadReceive.Resume();
threadReceive.Abort();
this.Close();
}
}
}
}
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
在MCGS中,通常使用事件驱动的方式,当串口接收到数据或发送数据成功时,会触发相应的事件,从而进行数据处理。 "教程"部分将详细解释串口通信的原理和MCGS中实现串口通信的步骤。这部分内容可能包括如何建立串口...
3. **编写收发程序**:利用MCGS提供的串口API函数,编写串口数据的发送和接收程序。对于自由口协议,我们需要自定义发送数据的结构和解析接收数据的逻辑。 4. **数据传输**:通过调用MCGS的“发送”函数,将待发送...
《MCGS昆仑通态串口数据收发驱动详解及应用》 MCGS(Multipurpose Control and Graphics System)昆仑通态是一款广泛应用于工业自动化领域的组态软件,它提供了丰富的功能,包括人机界面设计、数据采集与控制、报警...
MCGS触摸屏使用串口收发原始数据的例子,用TPC7062TI测试过可以用,这个用途很多,比如可用于和扫码器通讯。
STM32串口收发数据是嵌入式开发中的常见任务,主要涉及到STM32微控制器的通用同步/异步收发传输器(USART)功能。在这个过程中,我们需要配置USART来实现与个人计算机(PC)之间的通信。下面将详细介绍STM32如何设置...
在Qt框架下,实现串口接收数据的线程化处理是一项关键任务,特别是在处理高速串口数据流时。Qt提供了一套完整的QSerialPort模块,用于串口通信,而使用线程可以确保串口接收不影响主线程的性能,提供更流畅的用户...
4. 串口接收函数:串口接收函数用于处理串口接收中断,包括接收包括起始位'S'在内的十位数据到数据缓冲区。 5. 计算校验位函数:计算校验位函数用于计算校验和,确保数据传输的正确性。 6. 串口通信的优点:串口...
接收数据时,我们需要监听串口的事件,如数据到达事件,当有新数据到达时,通过读取函数获取数据并进行处理。在工控或仪表通信中,这些数据可能是特定的指令或反馈信息。 "科泽氯离子通信模拟.exe"可能是一个执行...
本文将详细介绍一个基于C#实现的简单串口收发数据实例,并深入探讨其内部原理和技术要点。 #### 二、串口通信基础知识回顾 在深入了解本实例之前,我们首先回顾一下串口通信的基本概念: 1. **串行通信**:数据按...
基于Modbus RTU协议,实例展示了串口通信数据接收不完整解决方案
9. **数据解析与格式化**:串口接收到的数据可能是原始的字节流或字符串,需要根据协议或约定进行解析,转换为有意义的数据结构。C#的字符串处理和正则表达式等工具能帮助你完成这个任务。 10. **可视化界面设计**...
- **数据收发**:通过MCGS的脚本语言或者事件驱动机制,编写收发数据的程序,实现数据的读取和发送。 - **错误处理**:在编写程序时,需要考虑串口通信可能遇到的错误,如超时、数据校验错误等,进行适当的异常...
基于VS2012MFC类库开发的简单串口通信实例,实现电脑与单片机之间的数据收发,可以作为学习之用,后期会有更新版本,这个仅为测试用
你可以重载`OnReceive`和`OnTransmit`成员函数,当串口接收到数据或发送数据时,这些函数会被自动调用。 在MFC串口RS232编程实例中,通常会有一个主窗口,包含一些控件如按钮、文本框等,用户可以通过点击按钮来...
我们可以创建一个时间序列数据结构,用于存储从串口接收到的数据点。 绘图部分涉及数据可视化,这是数据分析和监控的关键环节。在C#中,我们可以通过Chart控件的API动态更新数据。每当接收到新的数据点时,我们可以...
这样,即使串口接收数据时,主程序仍能继续运行。 4. **数据发送**: 发送数据到串口通过`Write`方法实现,可以是字符串或字节数组: ```csharp serialPort.Write("Hello, World!"); ``` 5. **异常处理与关闭...
在Unity中,我们有时需要与外部设备进行通信,例如通过串口(Serial Port)来收发数据,这在游戏控制台、虚拟现实应用或者物联网项目中尤为常见。在.NET框架下,Unity提供了丰富的API支持,让我们可以方便地实现串口...
3. **事件处理**:`SerialPort`类提供了丰富的事件,如`DataReceived`事件,当串口接收到数据时触发。我们通常会在此事件的事件处理函数中处理接收到的数据。例如: ```csharp port.DataReceived += new ...
总的来说,"C#源码(串口传送数据实例)"是一个实用的学习资源,它将帮助初学者掌握C#编程环境下串口通信的实践技巧。通过理解和分析这个实例,你可以更好地理解串口通信的工作原理,以及如何将其应用于实际项目中。...