电压监测系统
想问一下,从串口来的数据是否应该放在内存数组中,然后读入,可是,我不知道该在哪里定义这个数组,还有,要执行插入语句,应该怎么做呢?
测量到电压超限后,要执行一个通信命令,又该怎么做呢??
虚心求教!!!!!

解决方案 »

  1.   

    那就直接用动态数组吧.dim theV() as single每到来一个新数值就:redim preserve theV(ubound(theV)+1)theV(ubound(theV))=NewValue
      

  2.   

    3楼老马方法正确.
    LZ的:楼上你说的这个数组定义在哪里啊?
    当然是在接收到下位机返回的正确数据后,进入数据处理时.
    例(代码引自本人答复http://topic.csdn.net/u/20080724/14/5fbcb79d-5e12-43b5-9b92-c09b875e99db.html贴依据问贴者的通信协议写的):
    Option Explicit
        Dim strData As String
        Dim sjO2 As Single
        Dim sjCH4 As Single
        Dim sjCO2 As Single
        Dim sjCO As Single
        Dim sjSend() As Byte
        
    Private Sub Command1_Click() '查询测量结果
        ReDim sjSend(3)
        sjSend(0) = &H11
        sjSend(1) = &H1
        sjSend(2) = &H1
        sjSend(3) = &HED
        MSComm1.Output = sjSend
    End SubPrivate Sub Form_Load()
        Dim port As Integer
        port = 1
        MSComm1.CommPort = port                   'COM端口
        MSComm1.Settings = "9600,n,8,1"
        MSComm1.InputMode = comInputModeBinary      '采用二进制传输
        MSComm1.InBufferCount = 0   '清空接受缓冲区
        MSComm1.OutBufferCount = 0  '清空传输缓冲区
        MSComm1.RThreshold = 1      '产生MSComm事件
        MSComm1.InBufferSize = 1024
        MSComm1.PortOpen = True
    End SubPrivate Sub MSComm1_OnComm() '接收数据
        Dim BytReceived() As Byte
        Dim strBuff As String
        Select Case MSComm1.CommEvent
            Case 2
                MSComm1.InputLen = 0
                strBuff = MSComm1.Input
                BytReceived() = strBuff
                Dim i As Integer
                For i = 0 To UBound(BytReceived) '接收数据处理为16进制
                    If Len(Hex(BytReceived(i))) = 1 Then
                        strData = strData & "0" & Hex(BytReceived(i))
                    Else
                        strData = strData & Hex(BytReceived(i))
                    End If
                Next '                 2    2  2  4    4     4     4    2     2     2
                '数据处理代码 应答:[ACK] 0B 01 (CO) (CO2) (CH4) (O2) [ST1] [ST2] [CS]
                If Mid(strData, 1, 2) = "16" And Len(strData) = 2 * (Val("&H" & Mid(strData, 3, 2)) + 3) Then
                    '定义在此初,使用老马提供的方法写定义代码及后面的数据赋值句                Text1 = strData
                    sjCO = Val("&H" & Mid(strData, 7, 4)) / 10
                    sjCO2 = Val("&H" & Mid(strData, 11, 4)) / 1000
                    sjCH4 = Val("&H" & Mid(strData, 15, 4))
                    sjO2 = Val("&H" & Mid(strData, 19, 4)) / 100
                    Print sjCO, sjCO2, sjCH4, sjO2

                    strData = "" '为下次接收做清除
                End If
        End Select
    End Sub上述红色文字是指明定义处,绿色文字仅是说明多字段数据的取出.
      

  3.   

    lz是做plc的?楼上的方法不错 要是想要源码 我这到有