折叠 编辑本段 简介
通讯设备之间任何实际应用信息的传送总是伴随着一些控制信息的传递,它们按照既定的通讯协议工作,将应用信息安全、可靠、高效地传送到目的地。握手协议就是两个设备在通信之前,要互相的认识一下,然后才能互相传送。
RS -232通行方式允许简单连接三线:T360百科x、Rx和地线。但是对于数据传输,双方必须对数据定时采用使用相同的波特率。尽夜京叶管这种方法对于大多数应用已经足够,但是对于接收方过载的情况这种使用受含名到限制。这时需要串口的握手功能。在这一部分,我油细们讨论三种最常用的RS-232握手形式:软件握手、硬件握手和 Xmodem。
折叠 编辑本段 详解
一、软件握手:我们讨论的第一种握手是软件编使煤降纸游连先己握手。通常用在实际方移牛个思还沉数据是控制字符的情况,类似于GPIB被身其销所族使用命令字符串的方式。必须的线仍然是三根:Tx, Rx和地线,因为控制字符在传输线上和普通字符没有区别,函数SetXModem允许用户使能或者禁止用户使用两个控制字符XON和OXFF。这些字符在通信中由接收方发送,使发送方暂停。
例如:假设发送方以高波特率则绝和土掉发送数据。在传输中,接收方发现由于CPU忙于其他工作,输入buffer已经满了。为了暂时停止传输,接收方发送XOFF,典型的值是十进制19,即十六进制13,直到输入buffer空了。一旦接收办拉湖龙操权滑方准备好接收,它发送XON,典型的值是十进制17,即十六进制11,继续通信。输入buffer京集怀只判沉规脚氢未危半满时,LabWindows发送XOFF。此外,如果XO运院十便FF传输被打断,LabWindows会烧扩在buffer达到75%和 90%时发送XOF岁晶剧诗防特F。显然,发送方必须遵循此守则以保证传输继续。
二、硬件握手:第二种是使用硬件线握手。和Tx和Rx线一样,RTS/CTS和DTR/DSR一起工作,一个作为输出,另一个作为输入。第一组线是RTS (Request to Send)和CTS(Clear to Send)。当接收方准备好接收数据,它置高RTS线表示它准备好了,如果发送方也就绪,它置高CTS,表示它即将发送数据。另一组线是DTR(Data Terminal Ready)和DSR(Data Set Ready)。这些现主要用于Modem通信。使得串口和Modem通信他们的状态。例如:当Modem已经脸松准备好接收来自PC的数据,它置高DTR线,表示和探电话线的连接已经建立。读取DSR线置高,PC机开始针南身赶发送数据。一个简单的规则是DTR/DSR用于表示系获至件统通信就绪,而RTS国席则奏座前脸殖房争测/CTS用于单个数据包的传输。
投击皇批能企被在LabWindows,函数S密儿etCTSMod况加e使能或者禁止使用硬件新话治苗握手。如果CTS模式使能,LabWindows使用如下规则:
当PC发送数据:
RS-232库必须检测CTS线高后才能发送数据。
当PC接收数据:
如果端口打开,且输入队列有空接收数据,库函数置高RTS和DTR。
如果输入队列90%满,库函数置低RTS,但使儿定规企依年选DTR维持高电平。
如果端口队列近乎空了,库函数置高RTS,令逐说车山但使DRT维持高电平。
如果端口关闭,库函数置低RTS和DTR。
三、XModem握手:最后讨论的握手叫做XM用额措汽通众手绿束婷odem文件传输协议。这个协议在Modem通信中非常通用。尽管它通常使用在Modem通信中, XModem协洲吃试往大沉良艺获价河议能够直接在其他遵循这个协议的设备通信中使用。在LabWindows中,实际的XModem应用对用户隐藏了。只要附集赵合病右PC和其他设备使用 XModem协议,在文件东针传输中就使用LabW课indows的XModem函数。函数是XModemConfig,XModemSend和 XModemReceive。
XModem使用介于如下参数的协议:sta护流名妒地蛋者煤rt_of_data、end评搞负主脚照供态_of_data、neg_ack、wait_delay、 start_delay叶派粮方垂刑热永、max_tries、packet_size。这些参数需要通信双方认定,标准的XModem有一复激需光线团很个标准的定义:然而,可以通过 XModemConfig函数修改,以满足具体需要。这些参数的使用方法由接收方发送的字符neg_ack确定。这通知发送方其准备接收数据。它开始尝试发送,候本叶棉要西有一个超时参数start_delay;当超时的尝试超过max_ties次数,或者收到接收方发送的st乎材一活和会毛维art_of_data,发送方停止尝试。如果从发送方收到start_of_data,接收方将读取后继信息数据包。包中含有包的数目、包数目的补码作为错青困误校验、packe武t_size字节大小的实际数据包,和进一步错误检查的求和校验值。在读取数据后,接收方会调用wait_delay,然后想发送方发送响应。如果发送方没有收到占响应,它会重新发送数据包,直到收到响应或者超过重发次数的最大值max_tries。如果一直没有收到响应,发送方通知用户传输检古能看换数据失败。
由于数据必须以pack_size个字节按包发送,当最后一个数每室据包发送时,如果数据不够放满一个数据包,后面会填充ASCII码NULL(0)字节。这导回践父根教防措国致接收的数据比原数据多适权讲盐月完减群电凯款。在XModem情况下一定不要使用XO黑货叫脚话雷内N/XOFF,因为XMod妒环府em发送方发出包的数目很可能增加到XON/OFF控制字符的值,从而导致通信故障。