关于串口通讯的问题 请问有没用delphi 做过脚踏开发的?我想用spcom控件来做,如何来做,我了解下好像是通过检测com口的cts信号,单不成功,望各位给个意见 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 spcom可以做,他有一个ReceiveData事件用于接收数据,参数是Sender: TObject; Buffer: Pointer; BufferLength: Word软件和硬件间要把握手协议指定好,有的需要应答后才发有效数据,和硬件工程师确定一下握手协议先 http://topic.csdn.net/u/20090225/13/72941ca8-c089-4ebb-9c9e-172580d68aed.html看看有帮助吗? Rss订阅首页 »网络及通讯开发 » 串口的api函数:串口通讯类程序的主要Windows API函数 »正文串口的api函数:串口通讯类程序的主要Windows API函数 来源: 发布时间:星期三, 2008年7月16日 浏览:81次 评论:0编写串口通讯类程序涉及的主要Windows API函数,目前仅做索引而已: 1. 打开串口:用CreateFile函数打开。 2. 配置串口:用GetCommState (hComm , &dcb) 函数可读取串口设置的当前DCB结构;用GetCommProperties(hComm,lpCommProp)可知端口允许哪些设置;进行相关设置后用SetCommState (hComm , &dcb) 函数保存DCB设置。 3. 超时设置:用GetCommTimeouts (hComm , &timeouts) 可得到超时设置的 COMMTIMEOUT结构,作相关超时参数设置后用SetCommTimeouts (hComm , &timeouts) 保存设置。 4. 串口读写:用ReadFile函数读取串口数据,如果是异步读取则还需要用GetOverlappedResult函数来完成读取;WriteFile函数向串口写数据;PurgeComm ( hComm,PURGE_TXCLEAR)用于清除串口缓冲区(另参数PURGE_TXABORT中止所有后台写,PURGE_RXABORT中止任何后台读,PURGE_TXCLEAR清除发送缓冲区)。 5. 事件驱动I/O:用GetCommMask(hComm,&dwMask)返回可以报告给应用程序的事件(这些事件反映为串口针脚上电平高低的变化);用SetCommMask(hComm,dwMask)设置要等待的一个或多个事件的掩码(比如EV_RING表示测到振铃);用WaitCommEvent(hComm,&dwEvent,&Overlapped)来等待事件发生;额外的EscapeCommFunction函数可直接操纵串口针脚信号(DTR、RTS等) 6. 错误处理:用 ClearCommError (hComm,&dwErrorMask,&comstat) 来确定发生的故障,第二个参数包含所发生错误的掩码,第三个参数指向COMSTAT结构,该结构保存端口当前状态的一些有用信息,比如当前接收缓冲区有多少字节数据等等。 7. 关闭串口:用CloseHandle (hComm) 关闭。 欢迎大家更正、补充!________________________________________嗯,不错 ________________________________________帮你顶顶 ________________________________________继续—— 关于串口超时的设置,用GetCommTimeouts(hComm,&timeouts)可得到超时设置的COMMTIMEOUT结构,该结构内包括: ReadIntervalTimeout(读区间超时) ReadTotalTimeoutMultiplier(读总超时因子) ReadTotalTimeoutConstant(读总超时常数) WriteTotalTimeoutMultiplier(写总超时因子) WriteTotalTimeoutConstant(写总超时常数)。 总超时时间=总超时因子*要读写的字节数+总超时常数, 若设置总超时因子为0,则总超时时间只由总超时常数决定。 区间超时为读取两个字符间的超时设置。 若要使读函数只检测接收队列中处于等待状态的字节数,无字节处于等待则返回,方法是将ReadIntervalTimeout置为MAXDWORD,并将读超时因子和常数设为0 ________________________________________WaitForSingleObject函数 DWORD WaitForSingleObject( HANDLE hHandle, // handle of object to wait for DWORD dwMilliseconds // time-out interval in milliseconds ); 参数说明: hHandle 指定等待的对象。 DwMilliseconds 等待的超时时长(ms)。若设置为0,函数检测对象状态并立即返回;若为INFINITE, 则超时时长无限,一直等待对象为有信号状态再返回。 返回值: 若函数调用成功,返回以下值: WAIT_ABANDONED 指定对象是一个mutex互斥对象,并且没有被它的宿主线程释放掉(宿主线程已经结束)。此时该互斥对象的所有权将交予调用该等待函数的线程,并且其状态将被设为无信号(nonsignaled)。 WAIT_OBJECT_0 指定对象的状态变为有信号(Signaled) WAIT_TIMEOUT 超时. 若调用失败,返回WAIT_FAILED。调用GetLastError.可获得错误信息。 WaitForSingleObject函数可用于以下对象: Change notification 由 FindFirstChangeNotification函数返回其对应句柄handle,当指定目录或目录树中发生指定类型的改变时,其状态变为有信号。 Console input 当 CreateFile 函数的 CONIN$ 值被指定时返回其句柄(或GetStdHandle函数的返回),当控制台输入缓冲区中有还未读取的内容时其状态为有信号,当输入缓冲区为空时,状态为无信号。 Event CreateEvent 或 OpenEvent 返回其句柄,当调用SetEvent 或 PulseEvent 函数时变为有信号,对manual-reset event(手动复位)对象其状态重置为nonsignaled 通过 ResetEvent 函数,对 auto-reset event(自动复位)对象则在等待函数返回前自动重置为nonsignaled。 Event 对象也用于overlapped 操作中,其状态由系统设定。 Mutex CreateMutex or OpenMutex 返回其句柄,当互斥对象不被任何线程拥有时为有信号状态。等待函数为调用线程申请互斥对象的所有权,当获取时自动设互斥对象的状态为nonsignaled 。 Process CreateProcess or OpenProcess 返回其句柄,当进程结束时其状态变为有信号。 Semaphore CreateSemaphore or OpenSemaphore返回其句柄, semaphore 对象保持一个计数count(范围在0和设定的最大值间),当计数值大于0时其状态为有信号,为0时其状态为nonsignaled 。若当前状态为有信号,等待函数将计数值减1。ReleaseSemaphore可增加计数。 Thread CreateProcess, CreateThread或 CreateRemoteThread 返回其句柄,线程结束时状态变为有信号。 Timer CreateWaitableTimer or OpenWaitableTimer 返回其句柄,调用SetWaitableTimer 启动定时器,当到达预定时间时其状态变为有信号, CancelWaitableTimer 函数可关闭定时器(deactivate)。 ________________________________________调用ReadFile函数时,要读取的字节数如何确定: 用ClearCommError函数确定端口状态(缓冲区中处于等待的字节数可由其第三个参数即COMSTAT结构的成员cbInQue、cbOutQue确定): COMSTAT comstat; ……………………… ClearCommError (hComm,&dwErrorMask,&comstat); if (comstat.cbInQue>0) { ……………………… // 读取comstat.cbInQue字节数据 } ________________________________________按照串方式接收时有一点需要注意的: void ComWin32::SetEventCharacter(char evChar) { GetCommState(comHandle, &comDCB); comDCB.EvtChar = evChar; SetCommState(comHandle, &comDCB); } // ComWin32::SetEventCharacter() comWin32->SetEventCharacter(0xCC); // 设置串标记字符 comWin32->SetEventMask(EV_RXFLAG); // 设置串方式接收,有 0xCC 字符或者时间到返回消息 在每次调用WaitForSingleObject 或者 WaitForMultipleObjects 之后必须重新设置 串方式接收 comWin32->SetEventMask(EV_RXFLAG); 否则每次都是返回 WAIT_TIMEOUT ________________________________________漏了一个函数的代码: DWORD ComWin32::SetEventMask(DWORD eventMask) { if (!SetCommMask(comHandle, eventMask)) { comLastError = GetLastError(); return comLastError; } /* end of if */ // DWORD evWait = eventMask; DWORD count = 0; comEventMask = 0; WaitCommEvent(comHandle, &comEventMask, &ovComEvent); /* We expect ERROR_IO_PENDING returned from WaitCommEvent because we are waiting with an overlapped structure. */ if ((comLastError = GetLastError()) == ERROR_IO_PENDING) { // Perform overlapped operation if (GetOverlappedResult(comHandle, &ovComEvent, &count, FALSE)) ovComEvent.Offset += count; comLastError = NO_ERROR; } /* end of if */ return comLastError; } // ComWin32::SetEventMask() ________________________________________我觉得是这样的,如果设定了事件掩码(即comWin32->SetEventCharacter(0xCC); comWin32->SetEventMask(EV_RXFLAG); ), 那么可以调用WaitCommEvent来等待指定事件发生(也就是收到0xCC字符),而不必每次都重置:comWin32->SetEventMask(EV_RXFLAG); ________________________________________7楼的函数应该是正确的,顶下! 欢迎更多人来补充! ________________________________________串口DCB结构详细说明 成员 说明 DCBlength DCB结构大小,即sizeof(DCB),在调用SetCommState来更新DCB前必须作设置 BaudRate 指定当前采用的波特率,应与所连接的通讯设备相匹配 fBinary 指定是否允许二进制模式。Win32 API不支持非二进制模式传输,应设置为true fParity 指定奇偶校验是否允许,在为true时具体采用何种校验看Parity 设置 Parity 指定端口数据传输的校验方法。以下是可取值及其意义: 取值 意义 EVENPARITY 偶校验 MARKPARITY 标记校验,所发信息帧第9位恒为1 NOPARITY 无校验 ODDPARITY 奇校验 StopBits 指定端口当前使用的停止位数,可取值: 取值 意义 ONESTOPBIT 1停止位 ONE5STOPBITS 1.5停止位 TWOSTOPBITS 2停止位 fErrorChar 该值为TRUE,则用ErrorChar指定的字符代替奇偶校验错误的接收字符 ErrorChar 指定ErrorChar字符(代替接收到的奇偶校验发生错误时的字节) EvtChar 当接收到此字符时,会产生一个EV_RXFLAG事件,如果用SetCommMask函数中指定了EV_RXFLAG , 则可用WaitCommEvent 来监测该事件 EofChar 指定用于标示数据结束的字符 fNull 为TRUE时,接收时自动去掉空(0值)字节 fAbortOnError 读写操作发生错误时是否取消操作。若设置为true,则当发生读写错误时,将取消所有读写操作 (错误状态置为ERROR_IO_ABORTED),直到调用ClearCommError函数后才能重新进行通讯操作 fOutxCtsFlow 是否监控CTS(clear-to-send)信号来做输出流控。当设置为true时: 若CTS为低电平,则数据发送将被挂起,直至CTS变为高。 CTS的信号一般由DCE(通常是一个Modem)控制,DTE(通常是计算机)发送数据时监测CTS信号。 也就是说DCE通过把CTS置高来表明自己可以接收数据了 fRtsControl 设置RTS (request-to-send)流控,若为0则缺省取 RTS_CONTROL_HANDSHAKE。可取值及其意义: 取值 意义 RTS_CONTROL_DISABLE 打开设备时置RTS信号为低电平,应用程序可通过调用 EscapeCommFunction函数来改变RTS线电平状态 RTS_CONTROL_ENABLE 打开设备时置RTS信号为高电平,应用程序可通过调用 EscapeCommFunction函数来改变RTS线电平状态 RTS_CONTROL_HANDSHAKE 允许RTS信号握手,此时应用程序不能调用EscapeCommFunction函数。 当输入缓冲区已经有足够空间接收数据时,驱动程序置RTS为高以允许 DCE来发送;反之置RTS为低以阻止DCE发送数据。 RTS_CONTROL_TOGGLE 有字节要发送时RTS变高,当所有缓冲字节已被发送完毕后,RTS变低。 应用程序不能调用EscapeCommFunction函数。该值在Windows95系统忽略 fOutxDsrFlow 是否监控DSR (data-set-ready) 信号来做输出流控。当设置为true时: 若DSR为低电平,则数据发送将被挂起,直至DSR变为高。DSR的信号一般由DCE来控制 fDtrControl DTR (data-terminal-ready)流控,可取值如下: 取值 意义 DTR_CONTROL_DISABLE 打开设备时置DTR信号为低电平,应用程序可通过调用 EscapeCommFunction函数来改变DTR线电平状态 DTR_CONTROL_ENABLE 打开设备时置DTR信号为高电平,应用程序可通过调用 EscapeCommFunction函数来改变DTR线电平状态 DTR_CONTROL_HANDSHAKE 允许DTR信号握手,此时应用程序不能调用EscapeCommFunction函数 fDsrSensitivity 通讯设备是否对DSR信号敏感。若设置为TRUE,则当DSR为低时将会忽略所有接收的字节 fTXContinueOnXoff 当输入缓冲区满且驱动程序已发出XOFF字符时,是否停止发送。 当为TRUE时,XOFF被发送后发送仍然会继续;为FALSE时,则发送会停止, 直至输入缓冲区有XonLim字节的空余空间、驱动程序已发送XON字符之后发送继续。 fOutX XON/XOFF 流量控制在发送时是否可用。 如果为TRUE, 当 XOFF 值被收到的时候,发送停止;当 XON 值被收到的时候,发送继续 fInX XON/XOFF 流量控制在接收时是否可用。 如果为TRUE, 当 输入缓冲区已接收满XoffLim 字节时,发送XOFF字符; 当输入缓冲区已经有XonLim 字节的空余容量时,发送XON字符 XonLim 在XON字符发送前接收缓冲区内可允许的最小字节数 XoffLim 在XOFF字符发送前接收缓冲区内可允许的最大字节数 XonChar 指定XON字符 XoffChar 指定XOFF字符 fDummy2 保留,未启用 wReserved 未启用,必须设置为0 wReserved1 保留,未启用 使用ComPort控件,Delphi园地有下我就是用这个控件实现的,很简单 Delphi 64 open beta now available! delphi中两个页面调用问题. 用Delphi编写CGI程序,哪位大侠能给个简单的例子来参考 fastreport3.15相比2.53有什么改变? 操作outlook express问题? 在delphi中如何得到数据库记录总数 Delphi能定义 汇编语言的 段吗? 在XP下做的一个东西,在2000下怎么不能运行?? 加急! 网页获取所有链接问题 UDP打洞后,能收到别人发的消息,却收不到自己发的消息 如何判断是否assign了文件?
BufferLength: Word软件和硬件间要把握手协议指定好,有的需要应答后才发有效数据,和硬件工程师确定一下握手协议先
看看有帮助吗?
首页 »网络及通讯开发 » 串口的api函数:串口通讯类程序的主要Windows API函数 »正文
串口的api函数:串口通讯类程序的主要Windows API函数
来源: 发布时间:星期三, 2008年7月16日 浏览:81次 评论:0
编写串口通讯类程序涉及的主要Windows API函数,目前仅做索引而已:
1. 打开串口:用CreateFile函数打开。
2. 配置串口:用GetCommState (hComm , &dcb) 函数可读取串口设置的当前DCB结构;用GetCommProperties(hComm,lpCommProp)可知端口允许哪些设置;进行相关设置后用SetCommState (hComm , &dcb) 函数保存DCB设置。
3. 超时设置:用GetCommTimeouts (hComm , &timeouts) 可得到超时设置的 COMMTIMEOUT结构,作相关超时参数设置后用SetCommTimeouts (hComm , &timeouts) 保存设置。
4. 串口读写:用ReadFile函数读取串口数据,如果是异步读取则还需要用GetOverlappedResult函数来完成读取;WriteFile函数向串口写数据;PurgeComm ( hComm,PURGE_TXCLEAR)用于清除串口缓冲区(另参数PURGE_TXABORT中止所有后台写,PURGE_RXABORT中止任何后台读,PURGE_TXCLEAR清除发送缓冲区)。
5. 事件驱动I/O:用GetCommMask(hComm,&dwMask)返回可以报告给应用程序的事件(这些事件反映为串口针脚上电平高低的变化);用SetCommMask(hComm,dwMask)设置要等待的一个或多个事件的掩码(比如EV_RING表示测到振铃);用WaitCommEvent(hComm,&dwEvent,&Overlapped)来等待事件发生;额外的EscapeCommFunction函数可直接操纵串口针脚信号(DTR、RTS等)
6. 错误处理:用 ClearCommError (hComm,&dwErrorMask,&comstat) 来确定发生的故障,第二个参数包含所发生错误的掩码,第三个参数指向COMSTAT结构,该结构保存端口当前状态的一些有用信息,比如当前接收缓冲区有多少字节数据等等。
7. 关闭串口:用CloseHandle (hComm) 关闭。 欢迎大家更正、补充!
________________________________________
嗯,不错
________________________________________
帮你顶顶
________________________________________
继续——
关于串口超时的设置,用GetCommTimeouts(hComm,&timeouts)可得到超时设置的COMMTIMEOUT结构,该结构内包括:
ReadIntervalTimeout(读区间超时)
ReadTotalTimeoutMultiplier(读总超时因子)
ReadTotalTimeoutConstant(读总超时常数)
WriteTotalTimeoutMultiplier(写总超时因子)
WriteTotalTimeoutConstant(写总超时常数)。 总超时时间=总超时因子*要读写的字节数+总超时常数,
若设置总超时因子为0,则总超时时间只由总超时常数决定。 区间超时为读取两个字符间的超时设置。 若要使读函数只检测接收队列中处于等待状态的字节数,无字节处于等待则返回,方法是将ReadIntervalTimeout置为MAXDWORD,并将读超时因子和常数设为0
________________________________________
WaitForSingleObject函数
DWORD WaitForSingleObject(
HANDLE hHandle, // handle of object to wait for
DWORD dwMilliseconds // time-out interval in milliseconds
); 参数说明:
hHandle 指定等待的对象。
DwMilliseconds 等待的超时时长(ms)。若设置为0,函数检测对象状态并立即返回;若为INFINITE, 则超时时长无限,一直等待对象为有信号状态再返回。 返回值:
若函数调用成功,返回以下值:
WAIT_ABANDONED 指定对象是一个mutex互斥对象,并且没有被它的宿主线程释放掉(宿主线程已经结束)。此时该互斥对象的所有权将交予调用该等待函数的线程,并且其状态将被设为无信号(nonsignaled)。
WAIT_OBJECT_0 指定对象的状态变为有信号(Signaled)
WAIT_TIMEOUT 超时.
若调用失败,返回WAIT_FAILED。调用GetLastError.可获得错误信息。 WaitForSingleObject函数可用于以下对象:
Change notification 由 FindFirstChangeNotification函数返回其对应句柄handle,当指定目录或目录树中发生指定类型的改变时,其状态变为有信号。
Console input 当 CreateFile 函数的 CONIN$ 值被指定时返回其句柄(或GetStdHandle函数的返回),当控制台输入缓冲区中有还未读取的内容时其状态为有信号,当输入缓冲区为空时,状态为无信号。
Event CreateEvent 或 OpenEvent 返回其句柄,当调用SetEvent 或 PulseEvent 函数时变为有信号,对manual-reset event(手动复位)对象其状态重置为nonsignaled 通过 ResetEvent 函数,对 auto-reset event(自动复位)对象则在等待函数返回前自动重置为nonsignaled。 Event 对象也用于overlapped 操作中,其状态由系统设定。
Mutex CreateMutex or OpenMutex 返回其句柄,当互斥对象不被任何线程拥有时为有信号状态。等待函数为调用线程申请互斥对象的所有权,当获取时自动设互斥对象的状态为nonsignaled 。
Process CreateProcess or OpenProcess 返回其句柄,当进程结束时其状态变为有信号。
Semaphore CreateSemaphore or OpenSemaphore返回其句柄, semaphore 对象保持一个计数count(范围在0和设定的最大值间),当计数值大于0时其状态为有信号,为0时其状态为nonsignaled 。若当前状态为有信号,等待函数将计数值减1。ReleaseSemaphore可增加计数。
Thread CreateProcess, CreateThread或 CreateRemoteThread 返回其句柄,线程结束时状态变为有信号。
Timer CreateWaitableTimer or OpenWaitableTimer 返回其句柄,调用SetWaitableTimer 启动定时器,当到达预定时间时其状态变为有信号, CancelWaitableTimer 函数可关闭定时器(deactivate)。
________________________________________
调用ReadFile函数时,要读取的字节数如何确定:
用ClearCommError函数确定端口状态(缓冲区中处于等待的字节数可由其第三个参数即COMSTAT结构的成员cbInQue、cbOutQue确定):
COMSTAT comstat;
………………………
ClearCommError (hComm,&dwErrorMask,&comstat);
if (comstat.cbInQue>0)
{
……………………… // 读取comstat.cbInQue字节数据
}
________________________________________
按照串方式接收时有一点需要注意的:
void ComWin32::SetEventCharacter(char evChar)
{
GetCommState(comHandle, &comDCB);
comDCB.EvtChar = evChar;
SetCommState(comHandle, &comDCB);
} // ComWin32::SetEventCharacter() comWin32->SetEventCharacter(0xCC); // 设置串标记字符
comWin32->SetEventMask(EV_RXFLAG); // 设置串方式接收,有 0xCC 字符或者时间到返回消息 在每次调用WaitForSingleObject 或者 WaitForMultipleObjects 之后必须重新设置 串方式接收
comWin32->SetEventMask(EV_RXFLAG);
否则每次都是返回 WAIT_TIMEOUT
________________________________________
漏了一个函数的代码:
DWORD ComWin32::SetEventMask(DWORD eventMask)
{
if (!SetCommMask(comHandle, eventMask))
{
comLastError = GetLastError();
return comLastError;
} /* end of if */ // DWORD evWait = eventMask;
DWORD count = 0; comEventMask = 0;
WaitCommEvent(comHandle, &comEventMask, &ovComEvent); /*
We expect ERROR_IO_PENDING returned from WaitCommEvent
because we are waiting with an overlapped structure.
*/
if ((comLastError = GetLastError()) == ERROR_IO_PENDING)
{
// Perform overlapped operation
if (GetOverlappedResult(comHandle, &ovComEvent, &count, FALSE))
ovComEvent.Offset += count; comLastError = NO_ERROR;
} /* end of if */ return comLastError;
} // ComWin32::SetEventMask()
________________________________________
我觉得是这样的,如果设定了事件掩码(即comWin32->SetEventCharacter(0xCC); comWin32->SetEventMask(EV_RXFLAG); ),
那么可以调用WaitCommEvent来等待指定事件发生(也就是收到0xCC字符),而不必每次都重置:comWin32->SetEventMask(EV_RXFLAG);
________________________________________
7楼的函数应该是正确的,顶下!
欢迎更多人来补充!
________________________________________
串口DCB结构详细说明
成员 说明
DCBlength DCB结构大小,即sizeof(DCB),在调用SetCommState来更新DCB前必须作设置
BaudRate 指定当前采用的波特率,应与所连接的通讯设备相匹配
fBinary 指定是否允许二进制模式。Win32 API不支持非二进制模式传输,应设置为true
fParity 指定奇偶校验是否允许,在为true时具体采用何种校验看Parity 设置
Parity 指定端口数据传输的校验方法。以下是可取值及其意义:
取值 意义
EVENPARITY 偶校验
MARKPARITY 标记校验,所发信息帧第9位恒为1
NOPARITY 无校验
ODDPARITY 奇校验
StopBits 指定端口当前使用的停止位数,可取值:
取值 意义
ONESTOPBIT 1停止位
ONE5STOPBITS 1.5停止位
TWOSTOPBITS 2停止位
fErrorChar 该值为TRUE,则用ErrorChar指定的字符代替奇偶校验错误的接收字符
ErrorChar 指定ErrorChar字符(代替接收到的奇偶校验发生错误时的字节)
EvtChar 当接收到此字符时,会产生一个EV_RXFLAG事件,如果用SetCommMask函数中指定了EV_RXFLAG ,
则可用WaitCommEvent 来监测该事件
EofChar 指定用于标示数据结束的字符
fNull 为TRUE时,接收时自动去掉空(0值)字节
fAbortOnError 读写操作发生错误时是否取消操作。若设置为true,则当发生读写错误时,将取消所有读写操作
(错误状态置为ERROR_IO_ABORTED),直到调用ClearCommError函数后才能重新进行通讯操作
fOutxCtsFlow 是否监控CTS(clear-to-send)信号来做输出流控。当设置为true时:
若CTS为低电平,则数据发送将被挂起,直至CTS变为高。
CTS的信号一般由DCE(通常是一个Modem)控制,DTE(通常是计算机)发送数据时监测CTS信号。
也就是说DCE通过把CTS置高来表明自己可以接收数据了
fRtsControl 设置RTS (request-to-send)流控,若为0则缺省取 RTS_CONTROL_HANDSHAKE。可取值及其意义:
取值 意义
RTS_CONTROL_DISABLE 打开设备时置RTS信号为低电平,应用程序可通过调用
EscapeCommFunction函数来改变RTS线电平状态
RTS_CONTROL_ENABLE 打开设备时置RTS信号为高电平,应用程序可通过调用
EscapeCommFunction函数来改变RTS线电平状态
RTS_CONTROL_HANDSHAKE 允许RTS信号握手,此时应用程序不能调用EscapeCommFunction函数。
当输入缓冲区已经有足够空间接收数据时,驱动程序置RTS为高以允许
DCE来发送;反之置RTS为低以阻止DCE发送数据。
RTS_CONTROL_TOGGLE 有字节要发送时RTS变高,当所有缓冲字节已被发送完毕后,RTS变低。
应用程序不能调用EscapeCommFunction函数。该值在Windows95系统忽略
fOutxDsrFlow 是否监控DSR (data-set-ready) 信号来做输出流控。当设置为true时:
若DSR为低电平,则数据发送将被挂起,直至DSR变为高。DSR的信号一般由DCE来控制
fDtrControl DTR (data-terminal-ready)流控,可取值如下:
取值 意义
DTR_CONTROL_DISABLE 打开设备时置DTR信号为低电平,应用程序可通过调用
EscapeCommFunction函数来改变DTR线电平状态
DTR_CONTROL_ENABLE 打开设备时置DTR信号为高电平,应用程序可通过调用
EscapeCommFunction函数来改变DTR线电平状态
DTR_CONTROL_HANDSHAKE 允许DTR信号握手,此时应用程序不能调用EscapeCommFunction函数
fDsrSensitivity 通讯设备是否对DSR信号敏感。若设置为TRUE,则当DSR为低时将会忽略所有接收的字节
fTXContinueOnXoff 当输入缓冲区满且驱动程序已发出XOFF字符时,是否停止发送。
当为TRUE时,XOFF被发送后发送仍然会继续;为FALSE时,则发送会停止,
直至输入缓冲区有XonLim字节的空余空间、驱动程序已发送XON字符之后发送继续。
fOutX XON/XOFF 流量控制在发送时是否可用。
如果为TRUE, 当 XOFF 值被收到的时候,发送停止;当 XON 值被收到的时候,发送继续
fInX XON/XOFF 流量控制在接收时是否可用。
如果为TRUE, 当 输入缓冲区已接收满XoffLim 字节时,发送XOFF字符;
当输入缓冲区已经有XonLim 字节的空余容量时,发送XON字符
XonLim 在XON字符发送前接收缓冲区内可允许的最小字节数
XoffLim 在XOFF字符发送前接收缓冲区内可允许的最大字节数
XonChar 指定XON字符
XoffChar 指定XOFF字符
fDummy2 保留,未启用
wReserved 未启用,必须设置为0
wReserved1 保留,未启用
我就是用这个控件实现的,很简单