![](https://csdnimg.cn/release/download_crawler_static/10497330/bg4.jpg)
机开始发送数据。一个简单的规则是 DTR/DSR 用于表示系统通信就绪,而 RTS/CT
S 用于单个数据包的传输。
在 LabWindows , 函数 SetCTSMode 使能或者禁止使用硬件握手 。 如果 CTS 模
式使能, LabWindows 使用如下规则:
当 PC 发送数据:
RS-232 库必须检测 CTS 线高后才能发送数据。
当 PC 接收数据:
如果端口打开,且输入队列有空接收数据,库函数置高 RTS 和 DTR 。
如果输入队列 90 %满,库函数置低 RTS ,但使 DTR 维持高电平。
如果端口队列近乎空了,库函数置高 RTS ,但使 DRT 维持高电平。
如果端口关闭,库函数置低 RTS 和 DTR 。
c , XModem 握手 : 最后讨论的握手叫做 XModem 文件传输协议 。 这个协议在 M
odem 通信中非常通用。尽管它通常使用在 Modem 通信中, XModem 协议能够直接
在其他遵循这个协议的设备通信中使用。在 LabWindows 中,实际的 XModem 应用
对用户隐藏了。只要 PC 和其他设备使用 XModem 协议,在文件传输中就使用 Lab
Windows 的 XModem 函数。函数是 XModemConfig , XModemSend 和 XModemRe
ceive 。
XModem 使用介于如下参数的协议: start_of_data 、 end_of_data 、 neg_ack 、 w
ait_delay 、 start_delay 、 max_tries 、 packet_size 。这些参数需要通信双方认定,标
准的 XModem 有一个标准的定义 : 然而 , 可以通过 XModemConfig 函数修改 , 以满
足具体需要。这些参数的使用方法由接收方发送的字符 neg_ack 确定。这通知发送
方其准备接收数据 。 它开始尝试发送 , 有一个超时参数 start_delay ; 当超时的尝试超
过 max_ties 次数,或者收到接收方发送的 start_of_data ,发送方停止尝试。如果从
发送方收到 start_of_data , 接收方将读取后继信息数据包 。 包中含有包的数目 、 包数
目的补码作为错误校验、 packet_size 字节大小的实际数据包,和进一步错误检查的
求和校验值。在读取数据后,接收方会调用 wait_delay ,然后想发送方发送响应 。 如
果发送方没有收到响应 , 它会重新发送数据包 , 直到收到响应或者超过重发次数的最
大值 max_tries 。如果一直没有收到响应,发送方通知用户传输数据失败。
由于数据必须以 pack_size 个字节按包发送 , 当最后一个数据包发送时 , 如果数
据不够放满一个数据包,后面会填充 ASCII 码 NULL ( 0 )字节。这导致接收的数据
比原数据多 。 在 XModem 情况下一定不要使用 XON/XOFF , 因为 XModem 发送方发
出包的数目很可能增加到 XON/OFF 控制字符的值,从而导致通信故障。