关于COM口通讯的问题

sodawater 2000-06-16 07:45:00
这个问题比较简单,是这样的,我怎么样才能判断我上次发的数据发完没
我编的程序段是这样的
WHILE(TRUE)
COMFILE.WRITE((HANDLE)COMFILE.m_hFile,&lpbuf);
这是一个循环发送,但在示波器上测出的数据不对
肯定是没有判断数据发完没有的原故与上次的数据重叠所至
不用直接对端口进行操作,用什么函数,怎样得到数据发完没有。
我发的数据是0x55,长度为1
...全文
283 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
sodawater 2000-06-24
  • 打赏
  • 举报
回复
现在这个问题已经解决了,谢谢各位
sodawater 2000-06-18
  • 打赏
  • 举报
回复
我是直接用CFile类打开的串口,不能用WriteFile,只能用Write怎么办?不知道有没有影响,等待函数?
sodawater 2000-06-18
  • 打赏
  • 举报
回复
我去试一下,我的串口通讯的问题是这样的,在低波特率下,输出正常
在高波特率下,28。8K下输出不正常,似乎夹杂着什么东西在里面,如发AA
AA可以被看到,但还有其它的东西混在一起发了在AA之间,不知道是不是没有做以下的
工作的原因
windoze 2000-06-18
  • 打赏
  • 举报
回复
上面的例子写错了:),应该是
DCB dcb;
memset(&dcb, 0, sizeof(DCB));
CString str="baud=28800 parity=N data=8 stop=1";
BuildCommDCB(str, &dcb);
SetCommState(SomeFile.m_hFile, &dcb);
windoze 2000-06-18
  • 打赏
  • 举报
回复
还有一点,串口实际的通信速率最大为9600bps,如果高于这个值,就会进行压缩,这时你需要用SetCommState设置串口的属性,比如:
DCB dcb;
memset(&dcb, 0, sizeof(DCB));
CString str="baud=28800 parity=N data=8 stop=1";
SetCommState(SomeFile.m_hFile, &dcb);
这样将串口的通信速率设为28800bps,无校验位,8位数据位,一位停止位。
windoze 2000-06-18
  • 打赏
  • 举报
回复
CFile类中有一个m_hFile成员变量,使用WriteFile(SomeFile.m_hFile, ...)就行了。
sodawater 2000-06-17
  • 打赏
  • 举报
回复
应该等待什么事件呢?
自定义的事件?怎样才能表达是写完了呢
请给一个实例好吗?后一种就是用异步文件读写的方式那种,
sjxf 2000-06-17
  • 打赏
  • 举报
回复
使用ReadFileEx
windoze 2000-06-17
  • 打赏
  • 举报
回复
异步文件读写的例子:

//创建事件对象
HANDLE hEvent=CreateEvent(NULL, FALSE, FALSE, NULL);

// ...

HANDLE hFile=CreateFile("COM1",...); //这我就不多写了

OVERLAPPED ol;
ol.hEvent=hEvent;
WriteFile(hFile, lpBuffer, dwBufferLen, &dwWrittenBytes, &ol);
// 写文件的操作立即返回,但是并没有完成

// ...

// 等待写操作完成
DWORD dwRet=WaitForSingleObject(hEvent, INFINITE);
// 当写操作完成后,前面的hEvent会被置位,Wait函数会阻塞直到hEvent置位为止。
// INFINITE表示无限等待,可以换成一个毫秒数,表示等待指定时间,若超时,dwRet的值为WAIT_TIMEOUT,正常情况下返回WAIT_OBJECT_0
windoze 2000-06-16
  • 打赏
  • 举报
回复
Flush是CFile的一个成员函数,其作用就是将缓冲区内的所有数据写入文件,对于串口来说就是写入串口。
这个函数会阻塞到数据全部写完或者出错为止,这样你就不用查询数据是否发送完了。对应的Windows API函数是FlushFileBuffers。

另外,你还可以采用异步文件读写的方式,也就是说当你写串口的时候,WriteFile函数会立即返回,到写入完成时,系统会使用一个你事先指定的Event对象通知你的程序,你的程序可是使用WaitForSingleObject等函数等待直到通知为止。

详情参见MSDN中关于CreateFile、ReadFile、ReadFileEx、WriteFile和WriteFileEx的说明。
sodawater 2000-06-16
  • 打赏
  • 举报
回复
什么是FLUSH,原理是什么?
我想用查询数据是否发完,然后继续发的这种方式,你先说说
什么是FLUSH吧
windoze 2000-06-16
  • 打赏
  • 举报
回复
使用Flush强制处理缓冲区中的数据。
001、VB串通讯视频教程源码41个 002、Visual Basic串通信工程开发实例导航随书源码7个 003、Visual Basic串通信与测控应用技术实战详解 源代码(15个全) 004、GE PLC串通讯,VB编制,读取内存单元 005、PC机与51单片机之间的串通讯,VB编的,分PC和单片机两部分 006、VB6的串通信程序,还有crc校验 007、VB Modbus RTU源码,其中协议部分已生成DLL,可直接调用 008、VB.net开发的串调试程序 009、VB.net实现串编程,希望大家有用 010、VB版串调试程序,包含VB源码及安装文件,适合调试串 011、VB编程RS232串控制DA数模转换 012、VB编程实现的串调试工具源码 013、VB编写的RS232串通信测试程序,以txt格式接受,可定义发送字符 014、VB编写的SouthStar串测试与51串烧写器V1.0版 015、VB编写的串调试助手1.0的源码 016、VB编写的串短信发送程序,需要数据线支持 017、VB编写的串通信程序,实现多机通信 018、VB编写的串通信程序,主要用于上位机与下位机间的通信 019、VB编写的串通信程序界面参考网上的程序较简单 020、VB编写的串通讯界面,主要面向51单片机的串通信 021、VB编写的单片机和PC串通信的调试程序 022、VB编写的仿真实电子琴操作界面,包含与FPGA串通信的功能 023、VB串API通讯,附带BAS文件全部源码,实现与饭卡读卡器通讯 024、VB串编程,关于上位机的应用,特别适合初级学习VB的学员 025、VB串编程调试精灵源码 026、VB串编程实现完整的多费率电表读数软件 027、VB串程序,,是一个串使用例程,对初学者有用,特别是工控类的 028、VB串传输文本,实现2台PC间的通信,类似简单的聊天工具 029、VB串的一个电子称的项目 030、VB串调试程序,用于通过串控制松下空调测试 031、VB串调试程序及源码 032、VB串调试软件源代码,可以参考修改为其它通讯程序 033、VB串调试软件源文件 034、VB串控制步进电机程序完整源码 035、VB串通信 6路10位AD转换数据采集源程序 036、VB串通信,API串通信模块源码 037、VB串通信,适用简单,适合初学者 038、VB串通信操作界面,进行数据采集,画实时曲线 039、VB串通信程序,可以读取串并显示保存数据,且能显示数据曲线 040、VB串通信的源码,学习的好资料 041、VB串通信调试器的源码程序 042、VB串通信设计视频演示源码 043、VB串通信示例 044、VB串通信数据源码 045、VB串通信之串接收程序 046、VB串通讯测试源代码,有文本和图形两种端数据观察方式 047、VB串通讯程序,用来跟单片机通讯 048、VB串通讯代码(部分) 049、VB串通讯的参考源程序 050、VB串通讯实例 高精度电压表(24bit) VB源程序 051、vb串通讯示例 052、VB串与伺服电机DSP2407通讯完整代码源程序 053、VB串源码,动力电池检测数据采集,内含电导巡检模块通讯报文,可,读写,保存,备份数据 054、VB串字节通信程序,包括:1字节发送子程序,n字节接收子程序 055、VB串行通信测试示例 056、VB串行通信试验程序 057、VB的MODEM通信源代码,智能化水电远端数据读取系统 058、VB的串源程序,包括串的配置界面,接收功能和发送功能 059、VB访问串,并读取电子秤上显示的数据 060、VB和西门子S7-300 PLC串通讯程序能实现读写功能 061、VB检测串工作状态 062、VB简单的串短信收发功能,使用短信猫测试通过 063、VB开发串通信,关于生物医学工程专业的血氧饱和度的设计 064、VB开发串通信软件,利用按钮控件控制高清晰数字展示台 065、VB开发的RS232串图像处理器驱动(摄像头驱动) 066、VB开发的串通信源码 067、VB开发的串与三菱FX PLC通讯源码 068、VB控制串232通讯,对飞利浦M1卡内数据进行处理,支持密码修改等 069、VB利用Mscomm控件编写的通讯终端,可做串通讯编程参考示例 070、VB平台单片机与PC机串通信的PC端程序。小巧易用,功能丰富 071、VB嵌入式串通讯波形分析显示软件 072、VB实现串调试LED信息显示屏设备主要代码 073、VB实现串调试工具的完整源码 074、vb实现串通信 文件传送系统,用vb以及mscomm控件实现 075、VB实现串通信,发送命令从而接收相应数据 076、VB使用mscom控件实现PC机与单片机串通信 077、VB通过COM读取条形码设备 078、VB通过串控制单片机读写24C02源代码 079、VB通讯程序,连接串可在电脑显示来电号码 080、VB下的串发短信程序,可选择端,设置短信中心号码 081、VB写的串通信,发送和接收实例 082、VB写的串通信分析程序源码 083、VB写的串通讯,通过串对单片机进行控制 084、VB写的串通讯软件,简单易学,适合初学者 085、VB写的通过串与考勤机连接通讯的程序 086、vb用控件的写的串程序,是vb的经典之作 087、VB与USB转串通讯完整程序,有详细说明,不需要安装驱动 088、vb与串通信的关于回路测试的小程序很实用 089、vb语言开发的串通信,可实现拨号传送文件等 090、VB中串事件处理函数的示例 091、VB中的串通讯,串通讯作为一种古老而又灵活的通讯方式,被广泛地应用 092、VB自动枚举系统串加摄象头图象采集,坐标系变换 093、Visual Basic2005与自动化系统监控(串并行控制)光盘
C#串介绍以及简单串通信程序设计实现 源代码和串程序介绍连接:https://www.cnblogs.com/JiYF/p/6618696.html 本站积分太贵,自己变得。。直接到连接地址下载代码 周末,没事干,写个简单的串通信工具,也算是本周末曾来过,废话不多,直接到主题 串介绍   串行接简称串,也称串行通信接或串行通讯(通常指COM),是采用串行通信方式的扩展接。(至于再详细,自己百度) 串应用:   工业领域使用较多,比如:数据采集,设备控制等等,好多都是用串通信来实现!你要是细心的话,你会发现,目前家用国网智能电能表就具备RS485通信总线(串行总线的一种)与RS232可以相互转化(当然一般,非专业的谁也不会闲的蛋疼,趴电表上瞎看,最多也就看看走了多少度电) RS232 DB9介绍: 1.示意图 2.针脚介绍: 载波检测(DCD) 接受数据(RXD) 发出数据(TXD) 数据终端准备好(DTR) 信号地线(SG) 数据准备好(DSR) 请求发送(RTS) 清除发送(CTS) 振铃指示(RI) 3.实物图: 以下是我购买XX公司的一个usb转串线:这个头就是一个公头,另一端是一个usb 笨小孩串工具运行图: 1.开启程序 2.发送一行字符串HelloBenXH,直接将针脚的发送和接收链接起来就可以测试了(针脚2 接受数据(RXD) 和3 发出数据(TXD))直接链接, C#代码实现:采用SerialPort 1.实例化一个SerialPort [csharp] view plain copy 在CODE上查看代码片派生到我的代码片 private SerialPort ComDevice = new SerialPort(); 2.初始化参数绑定接收数据事件 [csharp] view plain copy 在CODE上查看代码片派生到我的代码片 public void init() { btnSend.Enabled = false; cbbComList.Items.AddRange(SerialPort.GetPortNames()); if (cbbComList.Items.Count > 0) { cbbComList.SelectedIndex = 0; } cbbBaudRate.SelectedIndex = 5; cbbDataBits.SelectedIndex = 0; cbbParity.SelectedIndex = 0; cbbStopBits.SelectedIndex = 0; pictureBox1.BackgroundImage = Properties.Resources.red; ComDevice.DataReceived += new SerialDataReceivedEventHandler(Com_DataReceived);//绑定事件 }

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧