社区
ATL
帖子详情
关于COM口通讯的问题
sodawater
2000-06-16 07:45:00
这个问题比较简单,是这样的,我怎么样才能判断我上次发的数据发完没
我编的程序段是这样的
WHILE(TRUE)
COMFILE.WRITE((HANDLE)COMFILE.m_hFile,&lpbuf);
这是一个循环发送,但在示波器上测出的数据不对
肯定是没有判断数据发完没有的原故与上次的数据重叠所至
不用直接对端口进行操作,用什么函数,怎样得到数据发完没有。
我发的数据是0x55,长度为1
...全文
285
12
打赏
收藏
关于COM口通讯的问题
这个问题比较简单,是这样的,我怎么样才能判断我上次发的数据发完没 我编的程序段是这样的 WHILE(TRUE) COMFILE.WRITE((HANDLE)COMFILE.m_hFile,&lpbuf); 这是一个循环发送,但在示波器上测出的数据不对 肯定是没有判断数据发完没有的原故与上次的数据重叠所至 不用直接对端口进行操作,用什么函数,怎样得到数据发完没有。 我发的数据是0x55,长度为1
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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强制处理缓冲区中的数据。
VB串
口
通信源码210个
001、VB串
口
通讯
视频教程源码41个 002、Visual Basic串
口
通信工程开发实例导航随书源码7个 003、Visual Basic串
口
通信与测控应用技术实战详解 源代码(15个全) 004、GE PLC串
口
通讯
,VB编制,读取内存单元 005、PC机...
C#串
口
介绍以及简单串
口
通信程序设计和实现
以下是我购买XX公司的一个usb转串
口
线:这个头就是一个公头,另一端是一个usb
口
笨小孩串
口
工具运行图: 1.开启程序 2.发送一行字符串HelloBenXH,直接将针脚的发送和接收链接起来就可以测试了(针脚2 接受数据...
串
口
通讯
协议
文章转载自http://www.cnblogs.
com
/firege/p/5805753.html20.1 串
口
通讯
协议简介串
口
通讯
(Serial
Com
munication)是一种设备间非常常用的串行
通讯
方式,因为它简单便捷,大部分电子设备都支持该
通讯
方式,电子工程师...
plc和pc串
口
通讯
接线_让你搞懂PLC串
口
通讯
和
通讯
接
口
,这东西估计没几个能说清楚~...
电力作业人员在使用PLC的时候会接触到很多的
通讯
协议以及
通讯
接
口
,最基本的PLC串
口
通讯
和基本的
通讯
接
口
你都了解吗?1,什么是串
口
通讯
?串
口
是计算机上一种非常通用设备通信的协议(不要与通用串行总线Universal ...
com
bus
通讯
_
COM
口
,串行
通讯
端
口
,RS-232接
口
基础知识
COM
口
即串行
通讯
端
口
。
COM
口
的接
口
标准规范和总线标准规范是RS-232,有时候也叫做RS-232
口
。电脑上的
com
口
多为9针,最大速率115200bps。通常用于连接鼠标(串
口
)及
通讯
设备(如连接外置式MODEM进行数据
通讯
)等。但...
ATL
3,245
社区成员
48,539
社区内容
发帖
与我相关
我的任务
ATL
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
复制链接
扫一扫
分享
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章