程序如下,是一个传感器的控制程序。
拜托了,这个程序实在是看不明白啊,
哪个大哥给写个白痴都能明白的备注。Private Sub Command2_Click()
contraler Command2, False, &H80FFFF, &H8000000F
    Timer.Enabled = False
    If Runmod = "stop" Then
        Text9.text = 0
        Text10.text = 0
        Text11.text = 0
        Text12.text = 0
        Text13.text = 0
        Text14.text = 0
        If outo = 0 And TESTBUG And pc <> -9999 Then '判断是否是手动还是自动
            MsgBox "现在是手动操作", vbDefaultButton1
        GoTo end6
        End If
        Dim n As Integer
        Dim va, vat, nl, vo As Single
        Dim dn As Integer
        va = Val(Text5(0).text)  '给定电压
        va0 = Val(Text5(4).text)
        vat = Text5(1).text '额定电压
        vo = Text5(2).text  '转换比
        nl = vat / vo
        dn = Val(Text5(3).text) '点数
        '判断参数是否正确
        If va0 = 0 And va = 0 Then
            MsgBox "输入不能为零", vbCritical
            GoTo end6
        End If
        If vat = 0 Then
            MsgBox "额定电压不能为0", vbDefaultButton2, "警告"
            'Call Command1_Click
            GoTo end6
        End If
        If nl = 0 Then
            MsgBox "转换比不能为0", vbDefaultButton2, "警告"
            'Call Command1_Click
            GoTo end6
        End If
        If va > MAXIDC Then
            MsgBox "转换比不能为0", vbDefaultButton2, "警告"
            'Call Command1_Click
            GoTo end6
        End If
        
        
        estate.devicermod = "testinitialize"
        dot1.buflen = dn
        ReDim dot1.buf(dot1.buflen)
        ReDim buf(dot1.buflen, MAXTCOUNT)  '点号-表值
        ReDim dbuf1(dot1.buflen + 1)
        ReDim dbuf2(dot1.buflen)
        j = 0
        Dim klt As Single
              Dim kmt, kmt2 As Single
        If va < va0 Then
            kmt = va0
            kmt2 = va
        Else
            kmt = va
            kmt2 = va0
        End If
        If kmt2 < 0 Then
            MsgBox "最小电压为0"
            kmt2 = 0
            Text5(4).text = 0
            GoTo end6
        End If
        klt = (va - va0) / dot1.buflen
        dot1.n1f = 1
        dot1.n1n2f = nl
        dot1.n2f = 1
        dot1.acdc = acdc
        dot1.ratedvalue = vat / Vl
        dot1.dot = 1
        For i = 0 To dot1.buflen '初始化理论曲线数据区
            dbuf1(i).X = -9999
            dbuf1(i).Y = -9999
            dbuf2(i).X = -9999
            dbuf2(i).Y = -9999
        Next i
        For i = 0 To dot1.buflen '初始化点数据区   实测曲线数据区
        dot1.buf(i) = (va0 + (i * klt)) / Vl
            dbuf1(i + 1).X = i * klt + va0
            dbuf1(i + 1).Y = i * klt / nl + va0 / nl
        Next i
        dbuf1(0).X = 0
        dbuf1(0).Y = 0
        zbz = createzuobiao(Int(kmt), dn, kmt / dot1.n1n2f, dn) '创建坐标
        ReDim da1(PLINEN * (dot1.buflen + 1))
        Pp1.Refresh '刷新绘图
        Command2.Enabled = False
      
        R8024.devicesendbuf = 0 '初始化给定
        sendrecive8024 R8024, com1
        timedelay 500 '延时
        testT = testT + 1
        '打印报表表头
        Call addreportgriditem1(bufdisplay, reportgid)
        'Mergegrid "直流电流传感器" & " 次测试", reportgid
        Mergegrid "车号:" & Combo1.List(Combo1.ListIndex) & "  型号:" & Combo2.List(Combo2.ListIndex) & "   操作人:" & Combo3.List(Combo3.ListIndex) & "   编号:" & Combo5.List(Combo5.ListIndex), reportgid
        Mergegrid "                          测试日期:" & Date, reportgid
        delegridrow reportgid.Rows - 3, reportgid
        biaohead "给定", 1, 1, 1, reportgid
        biaohead "传感器输出", 2, 3, 0, reportgid
        biaohead "数据分析", 4, reportgid.Cols - 1, 0, reportgid
        Call addreportgriditem1(bufdisplay, reportgid)
        For i = UBound(device) To MAXTCOUNT
            enabledevice device(i)
        Next i
        Tnumber = 1
        Runmod = "run" '置运行状态
        estate.systemmod = "starttest"
        Timer.Interval = 50
        Timer.Enabled = True
        'contraler Command3, True, &H80FFFF, &H8000000F
        'starttest
    ElseIf Runmod = "run" Then
         Runmod = "pause"
    ElseIf Runmod = "pause" Then
        Runmod = "run"
    End If
end6:    contraler Command2, True, &H80FFFF, &H8000000F
Timer.Enabled = True
End Sub

解决方案 »

  1.   

    你的代码到注释已经很清楚了.一共用以下几部分:
    1. '判断参数是否正确 
    2. 计算并初始化数据及绘图区域.
    3. 绘制图形
    4. 打印报表5. 最后用以下代码设置状况.(运行中,暂停中)
     ElseIf Runmod = "run" Then 
            Runmod = "pause" 
        ElseIf Runmod = "pause" Then 
            Runmod = "run" 
        End If 
      

  2.   

    这一端看不明白...能给解释细点吗?
    VB我连入门都算不上...
    又太多东西看不懂了。R8024.devicesendbuf = 0 '初始化给定 
            sendrecive8024 R8024, com1 
            timedelay 500 '延时 
            testT = testT + 1 
            '打印报表表头 
            Call addreportgriditem1(bufdisplay, reportgid) 
            'Mergegrid "直流电流传感器" & " 次测试", reportgid 
            Mergegrid "车号:" & Combo1.List(Combo1.ListIndex) & "  型号:" & Combo2.List(Combo2.ListIndex) & "  操作人:" & Combo3.List(Combo3.ListIndex) & "  编号:" & Combo5.List(Combo5.ListIndex), reportgid 
            Mergegrid "                          测试日期:" & Date, reportgid 
            delegridrow reportgid.Rows - 3, reportgid 
            biaohead "给定", 1, 1, 1, reportgid 
            biaohead "传感器输出", 2, 3, 0, reportgid 
            biaohead "数据分析", 4, reportgid.Cols - 1, 0, reportgid 
            Call addreportgriditem1(bufdisplay, reportgid) 
            For i = UBound(device) To MAXTCOUNT 
                enabledevice device(i) 
            Next i 
            Tnumber = 1 
            Runmod = "run" '置运行状态 
            estate.systemmod = "starttest" 
            Timer.Interval = 50 
            Timer.Enabled = True 
            'contraler Command3, True, &H80FFFF, &H8000000F 
            'starttest 
        ElseIf Runmod = "run" Then 
            Runmod = "pause" 
        ElseIf Runmod = "pause" Then 
            Runmod = "run" 
        End If 
    end6:    contraler Command2, True, &H80FFFF, &H8000000F 
    Timer.Enabled = True 
      

  3.   

    哦哦,明白点了,原来是还要调用关于测试的那段代码...
    那段代码好长啊,我都不好意思往上发了...那个,弱弱的问一下谁能告诉我下面几个语句都是什么意思:        pc = getdata(dev8055I.devicedrecivebuf)
    -------------------------------------------------
           setcmd8055 dev8055(i), adr8055(i), SET1
    -------------------------------------------------
           sendrecive8055 dev8055(i), com1
    -------------------------------------------------
           sendrecive8024 R8024, com1
    -------------------------------------------------
           Call addreportgriditem1(bufdisplay, reportgid)
      

  4.   

            pc = getdata(dev8055I.devicedrecivebuf) '   调用 getdata 方法.  方法要求传入参数 .现在传入的参数是dev8055I.devicedrecivebuf
    '通过此方法计算后的返回值赋给 pc .
    '要了解详情,要去读 getdata 方法
    ------------------------------------------------- 
          setcmd8055 dev8055(i), adr8055(i), SET1 
    ------------------------------------------------- 
          sendrecive8055 dev8055(i), com1 
    ------------------------------------------------- 
          sendrecive8024 R8024, com1 
    ------------------------------------------------- 
          Call addreportgriditem1(bufdisplay, reportgid) '同上, 以上分别调用了:
    setcmd8055
    sendrecive8055 
    sendrecive8024
    addreportgriditem1方法,不用返回值.以上方法只是对接收到的参数进行了处理,或完成了一定的事务.