串口通讯控件:Communications控件
串口通讯控件:Communications控件
该控件包含在MS Comm Control 6.0中,主要用它来操作调制解调器和其他串口通讯设备。在程序和串口设备间传送数据。
★ 设置要连接到哪个COM通讯端口:CommPort属性,值从1-16,如本人的调制解调器连接在COM4端口,就用MSComm1.CommPort = 4.
★ 设置数据通讯参数(即怎样进行通讯):Settings属性,它是1个字符串,包含4个方面的内容:①波特率--缺省为9600,就用缺省值;②奇偶校验--通常不用,设置为N;③数据位数--1个数据块的比特数,如8;④停止位数--指出何时接收到1个完整数据块,如设为1。这四方面用逗号隔开,如:MSComm1.Settings = "9600,n,8,1"
★ 打开/关闭通讯端口:PortOpen属性,设为True打开端口,为False关闭端口,该属性要在设好CommPort和Settings属性之后,再打开。如MSComm1.PortOpen = True
★ 在程序中向打开的设备发送数据(命令):OutPut属性,如让调制解调器拨号:MSComm1.Output = "ATX3DT 6671001" & vbCr,(具体命令格式请查阅调制解调器AT命令集)。该属性的功能是:在输出(发送)缓冲区写数据,好送给打开的串口设备。打开端口后,在内存中创建了1个输入(接收)缓冲区和输出(发送)缓冲区,输入缓冲区存放从端口接收到的数据,等候程序读取;输出缓冲区存放程序发送给端口设备的数据。以控制设备。用它们接收/发送数据,OutPut可发送文本,也可发送Byte字节数据,如: 发送 AT 命令:MSComm1.Output = "ATX3DT 0797-6671001" 发送文本字符串MsComm1.Output = " This is a text string " 发送 Byte 数组数据MSComm1.Output = Out;(先要Dim Out() As Byte)。 注:每发送完1行要加上vbCr回车结束。
★ 接收从设备传入的数据到程序:Input属性,该属性从输入缓冲区获取数据,如将缓冲区中的数据读到文本框中,Text1.Text = MSComm1.Input。可以以文本或二进制的格式读取--将InputMode属性设为0(文本格式)或1(二进制格式)。注:如果以二进制方式获取,要将数据放到程序中某个Byte型数组里。 InputLen属性:每次使用Input可从输入缓冲区中获取的字符数,为0取得全部数据,也可设一定的值,使每次读取1个数据块。 EOFEnable属性:当接收到文件结束符EOF(ASCII值26)时是否停止接收并触发OnComm事件 。也可在属性页中选中"允许EOF"复选框。
★ 设置输入缓冲区和输出缓冲区大小:在属性页中或属性窗口设置, 输入缓冲区大小--InBufferSize属性; 输出缓冲区大小--OutBufferSize属性。 缓冲区过大浪费资源,过小可能使缓冲区溢出,丢失数据。
★ 检测当前输入和输出缓冲区中的字节数:InBufferCount属性和OutBufferCount属性,如果把它们设为0,就会清空输入或输出缓冲区。
★ 设置R阀值和S阀值(属性页):在属性窗口对应为Rthreshold属性和Sthreshold属性,意为:Rthreshold--当输入缓冲区接收到该属性指定的字节数时,触发OnComm事件,如果不用Input属性移去输入缓冲区中数据,会连续触发OnComm事件。Sthreshold--当输出缓冲区中字节数少于该属性指定的值时,触发OnComm事件。 如果将它们设为0,表示不触发OnComm事件。
★ 当通讯中发生一些情况或错误时,将触发OnComm事件,因此可对通讯过程进行监视,并提示用户,控件的CommEvent属性会返回发生的具体情况和错误。如下: ComEvSend值1:发送缓冲区中的字符数少于Sthreshold ComEvReceive值2:接收到 Rthreshold 个字符。在使用 Input 属性移去接收缓冲区中的数据之前,该事件将持续产生 ComEvCTS值3: 信号发生变化
ComEvDSR值4: DSR 信号发生变化。该事件仅在DSR由1变为0时触发 ComEvCD值5: CD 信号发生变化
ComEvRing 值6: 检测到电话振铃。某些 UART(通用异步收发器)可能不支持本事件
ComEvEOF值7:收到文件结束符(ASCII 字符 26)
ComEventBreak值1001:收到 Break 信号
ComEventFrame值1004:帧错误。硬件检测到帧错误
ComEventOverrun值1006:端口超限。在下一个字符到达端口之前,前一字符还没有从硬件中读走,因而丢失
ComEventRxOver值1008:接收缓冲区溢出。接收缓冲区已没有空间 ComEventRxParity值1009:奇偶校验错误。硬件检测到奇偶校验错误 ComEventTxFull值1010:发送缓冲区满。在试图将字符传入发送缓冲区时,该缓冲区已满
ComEventDCB值1011:在为端口获取设备控制块 (DCB) 时,发生本不可预料的错误
★ 握手协议:其作用是保证不会因发生缓冲区溢出而丢失数据。也就是使接收数据的速度不超过缓冲区的限制。属性窗口中为Handshaking属性,可能值如下: 0--不使用握手协议(缺省);1--Xon/XOff 握手;2--RTS/CTS (请求发送/清除发送) 握手;3--两者,RTS 握手和XOn/XOff 握手。而实际上,很多情况下通讯协议本身能处理握手,所以一般此属性设为0不使用握手协议,以免产生冲突。