我有一个通过串行端口生成消息的设备。当我重新启动设备时,IO完成端口停止读取字节。代码是调用GetQueuedCompletionStatus():BOOLbRet=GetQueuedCompletionStatus(m_hCompletionPort,&dwBytesTransferred,&dwCompletionKey,&pOverlapped,INFINITE);PortMon看起来像:...IRP_MJ_WRITESerial1SUCCESSLENGTH:7REBOOT.IRP_MJ_READSerial1CANCELLEDLENGTH:1记录显示以下结果:bRet=true
我正在尝试在windows(xp)机器上通过串口实现一个协议(protocol)。问题在于协议(protocol)中的消息同步是通过消息中的间隙完成的,即发送字节之间的x毫秒间隙表示新消息。现在,我不知道是否有可能准确地检测到这个差距。我正在使用win32/serport.hapi读取我们服务器的多个线程之一。来自串口的数据被缓冲,所以如果我们的软件有足够的(并且会有足够的)延迟,我将在一个读取序列中从端口缓冲区获取多条消息。有没有一种从串行端口读取的方法,以便我可以在接收到特定字节时检测到间隙? 最佳答案 如果您想对Windows
我想编写一个读取串行端口(V.24)的程序。使用来自串行端口的信息,我需要拆分一个字符串,并将其添加到MySQL数据库中。我不太了解C,所以我需要一些帮助,了解我应该使用哪些函数程序要在windowsXP下运行,我要把它做成服务。谢谢,塞巴斯蒂安 最佳答案 服务很难调试。我建议首先将您的代码编写为普通应用程序-命令行即可-然后,一旦它工作,将其转换为服务(这是一个机械过程)。一般来说,第一次使用C编写的基于WindowsGUI的应用程序是一个PITA。非常挑剔,非常敏感。命令行应用程序或服务会容易得多。
我花了好几个小时寻找一种写入串行端口的方法。我发现我无法实现的每一种方式。我目前用于Recvfrom()函数的程序要求我禁用预编译header(我不确定这是否是一个问题)。所以我基本上要问的是,有没有一种方法可以通过串行端口传输变量,如果可以,最简单的方法是什么。 最佳答案 预编译header并不是真正的问题-如果您直接在项目中包含其他代码而不是构建库,您可能必须将#includestdaxf.h添加到该代码,或者您只需将.h和.cpp文件直接包含到您的代码文件中即可。如果您想与serialportdirectlyinwin32交谈
在过去的几个小时(几天)里,我一直在谷歌上搜索,以找到一个简单的工作示例,说明如何在Windows上的ANSIC中打开串行端口。我尝试打开一个txt文件,通过char方式发送到串口。(如果你能给我一个提示如何延迟1秒按字符发送字符,我也会很高兴!)这是我的代码,但不知何故它不起作用:(FILE*file;file=fopen("text.txt","r");if(file){while((c=getc(file))!=EOF){FILE*fp;fp=open("COM1",O_RDWR|O_NOCTTY|O_NDELAY);if(fp==-1)puts("Couldn'topenpor
我正在开发一个应用程序,它从连接在Windows7的串行端口上的设备(微Controller)读取数据,并将所有读取的数据显示到基于Qt的UI应用程序中。环境:Qt:Qt5.6.0操作系统:Windows7在实现从Windows串行端口连续读取之前。我实现了一个测试应用程序,使用QSerialPort类在按下按钮(QtGUI中的某个按钮)时从串行端口读取数据,它工作正常。所以我开始实现从串口连接的设备连续读取示例:1.连接按钮按下。连接到设备。2.按下启动按钮。开始阅读。3.停止按钮按下。停止阅读。这里我的代码与我的测试应用程序相同,但需要继续阅读。当我连接到设备(按下连接按钮)时,我
我正在使用的操作系统是Windows7。我需要以一定的时间间隔从宽带卡中获取数据。这辆车将数据发送到两个独立的COM端口。COM3和COM4。每个时间间隔我都需要查询两个串行端口上的信息行并将它们写入文件。如何从两个COM端口读取数据?我必须使用线程吗?同时打开两者是好的做法吗? 最佳答案 看看这个tutorial.如果您打开com端口,然后调用WaitComEvent在重叠IO中,您将在OVERLAPPED中获得句柄可用于WaitForMultipleObjects.您应该能够在一个线程中使用下面的大纲来完成它:HANDLEhSe
读取串口数据后需要清空串口数据再读取数据吗?我在WindowsXP上使用C/C++我该怎么做?提前致谢 最佳答案 清除接收缓冲区几乎总是错误的。串行端口通信本质上是异步的,您将冒删除良好数据的风险。仅当您使用主从协议(protocol)(设备仅在主机查询时才传输)才允许清除。但是,如果接收缓冲区实际上有数据要清除,那么您将忽略协议(protocol)违规,这是您永远不想忽略的事情。可靠的串口通信需要一个协议(protocol)。用于验证消息完整性的校验和和用于从数据损坏中恢复的ACK/NAK握手。查看RFC916中描述的RATP协议
我正在通过从WindowsHyperTerminal发送数据来测试我的应用程序通过串行端口接收数据的情况,这大部分工作正常。例如,如果我发送:敏捷的棕狐我收到:敏捷的棕狐但是,如果我发送:UUUUUUUUUUU我收到了UUÕUÕUÕUÕUÕ或者如果我发送:aaaaaaaaaaa我收到:aaáaáaáaáaá因此对于任何长度超过2的重复字符串,第3、5、7等字符会因设置高位而损坏。两台机器上的串口设置完全相同。 最佳答案 我找到了这个:http://seetron.com/archive/html/ht_tip1.htm最后一段说:S
我正在尝试让微Controller通过串行端口与WindowsPC通信。在我看来,Windows正在缓冲COM1上的输入,这样如果我停止两个程序的运行,然后仅重新启动Windows程序,它仍会接收微Controller程序先前运行的一些输出。打开COM1后,我可以在开始读取之前刷新其接收缓冲区吗?是否有函数调用来执行此操作? 最佳答案 我相信您正在寻找的函数是PurgeComm,您将打开端口时从CreateFile()获得的HANDLE传递给它。我不确定,但我相信每次打开时串口也会自动刷新。但是,更好的方法是使用ReadFile(或