From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.



怎样在Visual Basic(尤其是 v6.0)中使用串口通信?



硬件: Serial>>RS-232

问题: 我想用Visual Basic控制串口仪器,应该怎样做?

解答:
首先,强烈建议考虑用NI-VISA(在Measurement Studio中可用)来控制串口仪器。如果不选用这种方法,还是有可能在Visual Basic中与串口建立接口的(这里的内容是采用了Visual Basic6.0)。 在Visual Basic中串口通信通过MSComm控件来实现。关于MSComm控件的全部文档和例子可以在Microsoft Developer Network上找到。下面是一些在利用Visual Basic控制串口设备通信时常见的一些问题。

  • Q: 我怎样在我的程序中添加MSComm控件?
    A: 在Visual Basic 6.0中: 右击toolbox并且选择“Component”找到 “Microsoft Comm Control 6.0”; 并且点击“OK”;. 将一个MSComm控件(它外观像一个电话)放到你的程序中(在运行时它是看不到的)。你可以给这个控件起个名字,它默认的名字是MSComm1。

  • Q: 我应该用MSComm控件的哪些属性?
    A: MSComm控件是通过对其属性的修改和读取来实现的,下面是一些有用的属性:
    CommPort 这个属性用于设置和返回正在使用的串口。
    Settings 这个属性包含了一个指定串口通信设置的字符串。 字符串按照格式 “波特率,奇偶校验,数据位,停止位”. 例如字符串 “9600,N,8,1”; 相当于设定 9600 波特率, 无校验, 8位数据位, 和一位停止位
    Handshaking 这个属性用于设置通信时的握手模式, 当应用它时,一份常量的列表将出现。
    InputLen 这个属性用于设定输入属性被访问时每次读取的字符数。将这个属性设为0将告诉MSComm读取所有数据。
    PortOpen 这个属性可以被用于设置或得到串口的状态。用这个属性可以打开或关闭串口。
    Input 访问这个属性的读数 InputLen 缓冲区中的比特数然后把它们从缓冲区清空。
    Output 设置这个属性给串口一个命令。
    InBufferCount 这个属性返回当前在缓冲区中的比特数。


  • Q: 我怎样在Visual Basic中发送回车和换行?
    A: Visual Basic中有一个字符串常量叫vbLf用来换行,一个字符串常量叫 vbCr用来回车,和一个 vbCrLf常量可以同时发送回车和换行。 可以连接字符串通过&操作符。

  • Q: 为何通过串口向我的仪器发送数据,但没有得到响应?
    A: 确认你在发送正确的终止字符(通常是vbLf或vbCr) 并且具有适当的握手模式。

  • Q: 为何我从仪器收到了一些数据,但是没有我应该得到的多?
    A: 你可能需要给仪器时间去响应。如果你知道你应该得到多少比特的数据,你可以使用while循环和InBufferCount属性去等,直到缓冲区得到应该得到的数据量。同时,你可以利用具有Now值和DataDiff功能的Date数据类型的变量去等一段时间。

  • Q: 我怎样分析VB中的响应?
    A: 分析响应最好的方法是通过设定 InputLen = 1 一次读一个字符,并且检查分隔符。 如果它不是分隔符你可以将它加入缓冲区。如果放入while循环,可以排除时间因素并且去分析数据。



相关链接: Microsoft Developer Network

附件:





报告日期: 09/18/2003
最近更新: 08/21/2008
文档编号: 31HBCB1P