我以前没学过vb,毕业设计却选了与vb相关的课题,有一部分不会,希望高手们能够不吝赐教。
设计的一部分:ai-708与vb串口通信,能够采集数据并实时显示。不是很懂,希望能够得到部分程序,感激不尽。

解决方案 »

  1.   

    http://support.microsoft.com/kb/194922/zh-cn
      

  2.   

    Private Sub Command1_Click()
        MSComm1.Output = Text1.Text
    End SubPrivate Sub Form_Load()    MSComm1.CommPort = 1 '设置Com1为通信端口
        MSComm1.Settings = "14400,E,8,1" '设置通信端口参数 9600赫兹、偶校验、8个数据位、1个停止位.(这里需要进一步说明的是:
        MSComm1.RThreshold = 1 '设置Input一次从接收缓冲读取字节数为100
        '最重要的一个,不要设得太多。
        MSComm1.PortOpen = True       '打开通信口
        Text2.Text = ""End SubPrivate Sub MSComm1_OnComm()
        Text2.Text = Text2.Text & MSComm1.Input
    End Sub
    这是串口通讯最简单的程序,可以实现通讯了,想要实现其他功能在加代码
      

  3.   

    谢谢。我会稍后试试的,我这里有一段程序,不知怎么采集不到数据,请高手帮我看看!!
    Option Explicit
    Dim pv(0 To 99) As Single
    Dim sv(0 To 99) As Single
    Dim mv(0 To 99) As Single
    Dim t As String
    Dim i
    Dim var As Variant
    Dim rd(9) As Byte
    Dim x(0 To 7) As Byte
    Private Sub cmdsend_click()
    x(0) = 129
    x(1) = 129
    x(2) = 82
    x(3) = 0
    x(4) = 0
    x(5) = 0
    x(6) = 83
    x(7) = 0
    MSComm1.Output = x
    Timer2.Enabled = True
    End Sub
    Private Sub form_load()
    Timer2.Interval = 1000
    Picture1.Scale (0, 1800)-(99, 0)
    Picture1.AutoRedraw = True
    Timer2.Enabled = False
    MSComm1.CommPort = 1
    If MSComm1.PortOpen = False Then
    MSComm1.Settings = "9600,n,8,2"
    MSComm1.InputMode = comInputModeBinary
    MSComm1.RThreshold = 1
    MSComm1.InputLen = 1
    MSComm1.PortOpen = True
    End If
    MSComm1.InBufferCount = 0
    cmdsend_click
    End Sub
    Private Sub mscomm1_oncomm()
    Select Case MSComm1.CommEvent
    Case comEvReceive
    MSComm1.RThreshold = 0
    Do
    DoEvents
    Loop Until MSComm1.inbuffercount >= 10
    var = MSComm1.Input
    rd(0) = var(0)
    var = MSComm1.Input
    rd(1) = var(0)
    Text1.Text = (rd(0) + rd(1) * 256) / 10
    var = MSComm1.Input
    rd(2) = var(0)
    var = MSComm1.Input
    rd(3) = var(0)
    Text2.Text = (rd(2) + rd(3) * 256) / 10
    var = MSComm1.Input
    rd(4) = var(0)
    var = MSComm1.Input
    rd(5) = var(0)
    Text3.Text = rd(4) + rd(5) * 256
    var = MSComm1.Input
    rd(6) = var(0)
    var = MSComm1.Input
    rd(7) = var(0)
    var = MSComm1.Input
    rd(8) = var(0)
    var = MSComm1.Input
    rd(9) = var(0)
    MSComm1.rthreshold = 1
    End Select
    Exit Sub
    End Sub
    Private Sub timer2_timer()
    cmdsend_click
    Picture1.AutoRedraw = True
    Picture1.Cls
    Picture1.ForeColor = &HFF
    For i = 0 To 98
    Picture1.Line (i, pv(i))-(i + 1, pv(i + 1))
    Next
    pv(99) = Val(Trim(Text1.Text)) * 10
    For i = 0 To 98
    pv(i) = pv(i + 1)
    Next
    Picture1.ForeColor = &HFF0000
    For i = 0 To 98
    Picture1.Line (i, sv(i))-(i + 1, sv(i + 1))
    Next
    sv(99) = Val(Trim(Text2.Text)) * 10
    For i = 0 To 98
    sv(i) = sv(i + 1)
    Next
    Picture1.ForeColor = &HC0000
    For i = 0 To 98
    Picture1.Line (i, mv(i))-(i + 1, mv(i + 1))
    Next
    mv(99) = Val(Trim(Text3.Text)) * 10
    For i = 0 To 98
    mv(i) = mv(i + 1)
    Next
    End Sub
      

  4.   

       部分708协议:仪表内部采用整型数据表示参数及测量值等,数据最大范围为:-2999—+32767。因此采用-32768—-7160之间的数值来表示地址代号,来降低因数据与地址重复造成冲突的可能性。AI仪表通讯协议规定,地址代号为两个字节,其数值范围(16进制数)是80H—BFH,两个字节必需相同,数值为(仪表地址+80H)。例如,仪表参数Addr=10(16进制数为0AH,0A+80H=8AH),则该仪表的地址表示为:
                                         8AH  8AH
    4.15H为仪表型号的特征:
    V5.0-V6.0版仪表开始,15H将逐步用于表示仪表的型号特征,这样从上位机软件就能实现对下位机仪表的自动识别。为了尽量与旧有仪表保持兼容,特作以下约定:
    (1)虽然AI系列仪表允许设置很低的通讯波特率,但1200及以下波特率的使用基本上没有,对于AI-708/808型仪表,15H仍返回波特率,这样其高位字节数通常应大于或等于5,当在软件中识别 15H高字节大于5时,上位机软件可识别为AI-708/808型仪表。
    (2)对于AI-708/808P型仪表,15H仍返回程序控制字,其高位字节数值为0,低位字节数据如下:
        (X)(X)(X)(X)(EV2)(EV1)(HOLD)(STOP)
    前4位( BIT)目前暂不用,程序中应允许起为任意值。
    HOLD 及STOP=0,则程序运行。
    STOP=0,HOLD=1则程序暂停,
    STOP=1,HOLD=1,则程序停止
    EV1,EV2表示事件输出状态,为1时表示事件输出动作,为0时表示事件输出无效。
    (3)AI-708H./Y型仪表,15H的高字节为1低字节备用,应允许其为任意值。
    (4)AI-708M型仪表,15H的高字节为3低字节备用,应允许其为任意值。
    读/写指令分别如下:
    读: 地址代号+52H(82)+要读参数的代号+0+0+CRC校验码
    写: 地址代号+43H(67)+要写参数的代号+写入数低字节+写入数高字节+CRC校验码
    读指令的CRC校验码为:要读参数的代号*256+82+ADDR
    ADDR为仪表地址参数值,范围是0-100(注意不要加上80H)。CRC为以上数做二进制16位整数加法后得到的余数(溢出部分不处理),余数为2个字节,其低字节在前,高字节在后。
    写指令的CRC校验码则为:要写的参数代号*256+67+要写的参数值+ADDR。
    要写得参数值用16位二进制整数表示。
        无论是读还是写,仪表都返回以下数据
        测量值PV+给定值SV+输出值MV及报警状态+所读/写参数值+CRC校验码
        其中PV、SV及所读参数值均为整数格式,各占2个字节,MV占一个字节,数值范
    围0-220,报警状态占一个字节,CRC校验码占2个字节,共10个字节。
        CRC校验码为PV+SV+(报警状态*256+MV)+参数值+ADDR,按整数加法相加后得到的余数。
        每2个8位数据代表一个16位整形数,低位字节在前,高位字节在后,各温度值采用补码表示,热电偶或热电阻输入时其单位都是0.1℃,1—5V或0—5V等线性输入时,单位都是线性最小单位。因为传递的是16位二进制数,所以无法表示小数点,要求用户在上位机处理。
        输出值和报警状态各占1个字节,报警状态采用二进制代码表示各报警信号,如下:
        位0 为0则上限报警(HIAL)不成立,为1为上限报警成立。
        位1 为0则下限报警(LoAL)不成立,为1为下限报警成立。
        位2 为0则正偏差报警(dHAL)不成立,为1为正偏差报警成立。