zoukankan      html  css  js  c++  java
  • 串口通讯控件: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不使用握手协议,以免产生冲突。

  • 相关阅读:
    ZOJ 3332 Strange Country II
    ZOJ 3331 Process the Tasks(双塔DP)
    ZOJ 3326 An Awful Problem(模拟)
    HDU 1796 How many integers can you find(容斥原理)
    HDU 4059 The Boss on Mars(容斥原理)
    HDU 4135 Co-prime(容斥原理)
    HDU 5677 ztr loves substring(回文串加多重背包)
    CodeForces 668B Little Artem and Dance
    CodeForces 667A Pouring Rain
    Java实现 LeetCode 764 最大加号标志(暴力递推)
  • 原文地址:https://www.cnblogs.com/shylock/p/1324407.html
Copyright © 2011-2022 走看看