串口通信中数据的分段接受

一、在对话框的OnInitDialog中创建接受数据的文件,并启动AutoSaveData线程

 1 CTime t = CTime::GetTickCount();
 2 CString str = t.Format(_T("%Y-%m-%d"));
 3 if(!m_rFile.Open(m_strCurPath+_T("\\")+str+_T(".txt"),CFile::modeCreate | CFile::modeWrite |CFile::modeNoTruncate))
 4 {
 5     AfxMessageBox( "创建记录文件失败!");
 6     m_brFileOpen = FALSE;
 7 }else{
 8     m_brFileOpen = TRUE;
 9 }
10
11 m_Thread = AfxBeginThread(AutoSaveData,this);

二、线程方法实现如下

 1 UINT CSCOMMDlg::AutoSaveData(LPVOID pParam)
 2 {
 3     CSCOMMDlg* pDlg = (CSCOMMDlg*)pParam;
 4
 5     CString str;
 6     int currentPoint = 0;
 7     while(!pDlg->m_bExitThread)
 8     {
 9         if(pDlg->sourceUnChar[0])
10         {
11             CTime t = CTime::GetCurrentTime();
12             CString sTime = t.Format("%Y-%m-%d %H:%M:%S ");
13             str = sTime + str;
14             bool check = TRUE;
15             while(check)
16             {
17                 check = FALSE;
18                 while(pDlg->sourceUnChar[currentPoint])
19                 {
20                     check = TRUE;
21                     str += pDlg->sourceUnChar[currentPoint];
22                     currentPoint++;
23                 }
24                 Sleep(20);
25             }
26             currentPoint = 0;
27             pDlg->m_countPackage = 0;
28             memset(pDlg->sourceUnChar,0,BUFFERE_LEN*sizeof(char));
29             str += _T("\r\n");
30             if (pDlg->m_brFileOpen)
31             {
32                 pDlg->m_rFile.SeekToEnd();
33                 pDlg->m_rFile.Write(str,str.GetLength());
34                 pDlg->m_rFile.Flush();
35             }else{
36                 CTime t = CTime::GetTickCount();
37                 CString str = t.Format(_T("%Y-%m-%d"));
38                 if(!pDlg->m_rFile.Open(pDlg->m_strCurPath+_T("\\")+str+_T(".txt"),CFile::modeCreate | CFile::modeWrite |CFile::modeNoTruncate))
39                 {
40                     AfxMessageBox( "创建记录文件失败!");
41                     pDlg->m_brFileOpen = FALSE;
42                 }else{
43                     pDlg->m_brFileOpen = TRUE;
44                 }
45             }
46             str.Empty();
47         }
48     }
49     return 0;
50 }
时间: 2024-11-05 23:27:18

串口通信中数据的分段接受的相关文章

SPCOMM控件在Delphi串口通信中的应用

SPCOMM控件在Delphi串口通信中的应用 2010-07-08 22:20:31|  分类: 个人日记 |举报 |字号 订阅 2009-03-01 05:35 摘要:利用Delphi开发工业控制系统软件成为越来越多的开发人员的选择,而串口通信是这个过程中必须解决的问题之一.本文在对几种常用串口通信方法分析比较的基础上,着重讨论了Delphi开发环境下利用Spcomm控件实现PC机与单片机之间串口通信的方法,研究了Spcomm串口通信的关键技术问题,并通过一个实例给出了Spcomm控件在De

Qt串口通信接收数据不完整的解决方法(传输图片)

在使用串口接收数据时,当数据量大的时候会出现数据接收不完整的情况.因为串口数据获取函数readAll()由readyRead()信号触发,但readyRead()信号在串口读到起始标志时立即发送,并不保证一定是当前所发数据的起始部分.因此串口通信双方在通信前应制定好通信协议,规定好数据的起始和结束标志,串口当读到完整的起始和结束标志之后,才认定读完一条完整的数据. 本例中用串口定时发送当前时间,用"#"表示数据的结尾,定时时间为0毫秒,即能发多快就发多快. //发送 [cpp] vie

在Linux中如何使用命令进行RS-232串口通信和数据包解析

文章首发于浩瀚先森博客 1. 获取串口号 在Linux系统中一切皆为文件,所以串口端口号也不例外,都是以设备文件的形式出现.也就是说我们可以用访问文本文件的命令来访问它们. a. 一般串口都是以/dev/ttyS#的格式显示,所以第一个连接的串口就是/dev/ttyS0,第二个连接的串口就是/dev/ttyS1-以此类推. b. USB转串口适配,没有额外驱动,它们会显示为/dev/ttyUSB#,如/dev/ttyUSB0 2. 配置串口属性 我们可以使用stty命令来更改配置串口属性(详情查

单片机串口通信中换行的两种方法

方法一: 在发送的字符串时用格式:"原字符串\r\n". 方法二: 在发送完字符或字符串后连续发送字符0x0d和0x0a,即可实现换行.即连续发送字符'\r'和'\n'. 部分代码例程: 方法一: UartSendStr("转换结束!\r\n"); 方法二(1): UartSendStr("转换结束!"); UartSendChar(0x0d); UartSendChar(0x0a); 方法二(2): UartSendStr("转换结束

【转】RS232串口通信详解

串口是计算机上一种非常通用的设备通信协议. --------------------------------- 串口的引脚定义: 9芯 信号方向来自 缩写 描述 1 调制解调器 CD 载波检测 2 调制解调器 RXD 接收数据 3 PC TXD 发送数据 4 PC DTR 数据终端准备好 5   GND 信号地 6 调制解调器 DSR 通讯设备准备好 7 PC RTS 请求发送 8 调制解调器 CTS 允许发送 9 调制解调器 RI 响铃指示器 两个串口连接时,接收数据针脚与发送数据针脚相连,彼

C#实现简单的串口通信

前言 本着学习研究的态度,用c#语言实现简单的串口通信工具. 一.串口通信原理 串口通信 串口通信(Serial Communications)的概念非常简单,串口按位(bit)发送和接收字节.尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据.它很简单并且能够实现远距离通信.由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据.其他线用于握手,但不是必须的.串口通信最重要的参数是波特率.数据位.停止位和奇偶校验.对于两个进行通信的

C#串口通信学习笔记

因为参加一个小项目,需要对继电器进行串口控制,所以这两天学习了基本的串口编程.同事那边有JAVA的串口通信包,不过是从网上下载的,比较零乱,难以准确掌握串口通信的流程和内含.因此,个人通过学习网上大牛的方法,利用C#实现了基本的串口通信编程.下面对学习成果进行总结归纳,希望对大家有所帮助. 一.串口通信简介 串行接口(串口)是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件.一般完成这种功能的电路,我们称为串行接口

深入理解51单片机串口通信

串口通信的基本认识 通信分为并行通信和串行通信,并行通信时的数据各个位同时传送,可以实现字节为单位通信,但通信线多占用资源,成本高.以前用到的的P1=0x55,一次给P1口的8个管脚分别赋值,同时进行信号输出,类似于8个车道可以过去8辆车,这样的形式是并行的,一般称P0,P1,P2,P3为51单片机的4组并行总线. 串行通信,就是一个车道,一个只能通过一辆车,如果一个0x55这样一个字节的数据要传输过去的话,假如低位在前,高位在后的话,那发送方式是:0-1-0-1-0-1-0-1,一位一位的进行

51单片机GPIO口模拟串口通信

51单片机GPIO口模拟串口通信 标签: bytetimer终端存储 2011-08-03 11:06 6387人阅读 评论(2) 收藏 举报 本文章已收录于: 分类: 深入C语言(20) 作者同类文章X 1 #include "reg52.h" 2 #include "intrins.h" 3 #include "math.h" 4 #include "stdio.h" 5 sbit BT_SND =P1^5; 6 sbit