'定义窗体级变量
'在显示、绘图、报警等过程中使用
Dim data(1000) As Single                  '用于存储液位采样值
Dim num As Integer                            '用于存储采样值个数
'串口初始化
'在窗体的Load事件中加入下列代码对串口进行初始化:
Private Sub Form_Load()
  MSComm1.CommPort = 1
  MSComm1.InputMode = 1
  MSComm1.RThreshold = 1                      '设置接收一个字节产生OnComm事件
  MSComm1.SThreshold = 1                       '设置Output 一次从发送缓冲读取字节数为1
  MSComm1.Settings = "9600,n,8,1"
  MSComm1.PortOpen = True
  Call tabinit                                 '调用表格初始化子程序
End Sub
'开始采集
Private Sub Cmdstart_Click()  Timer1.Enabled = True
End Sub
'停止采集
Private Sub Cmdstop_Click()
  Timer1.Enabled = False
End SubPrivate Sub MSComm1_Click()End Sub'每隔1000ms向仪表发送读数据命令串
'程序中仪表号(即地址代号)要与仪表设定值一致,否则不能返回数据。
Private Sub Timer1_Timer()
 Dim a()   As Byte
     
 MSComm1.Output = Chr(&H00) & Chr(&H01)                     "这段不会写,地址是00,想读通道1的数据"
End Sub
'获取液位测量值并显示
'每发送一次指令,触发下面事件,返回数据串
Private Sub MSComm1_OnComm()
  Dim Inbyte() As Byte
  Dim buffer As String
  Dim data2a, data2b As String
  Dim data2 As String
  If num > 199 Then Call renew
  '读取仪表返回数据串
  Select Case MSComm1.CommEvent
    Case comEvReceive                    '是接收事件
      Inbyte = MSComm1.Input
      For i = LBound(Inbyte) To UBound(Inbyte)
        buffer = buffer + Hex(Inbyte(i)) + Chr(32)
      Next i
    Case comEvSend
  End Select
  '获取十进制测量数据
  If Len(Trim(Mid(buffer, 1, 2))) = 1 Then
    data(num) = Val("&H" & Mid(buffer, 3, 2) & Str("0") & Mid(buffer, 1, 2)) * 0.1
  Else
    data(num) = Val("&H" & Mid(buffer, 3, 2) & Mid(buffer, 1, 2)) * 0.1
  End If
  '获取十六进制测量数据
  If Len(Trim(Mid(buffer, 1, 2))) = 1 Then
    data2a = Str("0") & Trim(Mid(buffer, 1, 2))
  Else
    data2a = Mid(buffer, 1, 2)
  End If
  If Len(Trim(Mid(buffer, 3, 2))) = 1 Then
    data2b = Str("0") & Trim(Mid(buffer, 3, 2))
  Else
    data2b = Mid(buffer, 3, 2)
  End If
  data2 = datatemp2a & " " & datatemp2b
   '显示测量液位值
  If data(num) <> 0 Then
    Grid.Col = 1: Grid.Row = num + 1
    Grid.Text = Format$(data(num), "0.0")
    TempText = Format$(data(num), "0.0")      '10进制显示,保留一位小数
    'Text2.Text = datatemp2                       '16进制显示
    num = num + 1
    
    Call draw                                     '调用绘曲线过程
  End If
End Sub'绘制温度实时变化曲线
Private Sub draw()
  Picture1.Cls
  Picture1.DrawWidth = 1
  Picture1.BackColor = QBColor(15)
  Picture1.Scale (0, 50)-(200, 0)
  For i = 1 To num - 1
    X1 = (i - 1): Y1 = datatemp(i - 1)
    X2 = i: Y2 = datatemp(i)
    Picture1.Line (X1, Y1)-(X2, Y2), QBColor(0)
  Next i
End Sub
'刷新
Private Sub renew()
  If num = 0 Then Exit Sub
  TempText.Text = "": AverText.Text = ""
  MinText.Text = "": MaxText.Text = ""
  Grid.Clear
  Picture1.Cls
  For i = 0 To num - 1
    datatemp(i) = 0
  Next i
  num = 0
  Call tabinit
End Sub
'数据表格初始化
Public Sub tabinit()
  Grid.Cols = 2
  Grid.Rows = 200 + 1
  Grid.ColWidth(0) = 700
  Grid.ColWidth(1) = 950
  Grid.Col = 0
  For i = 1 To 200
    Grid.Row = i
    Grid.Text = "  " + Str$(i)
  Next i
  Grid.Row = 0
  Grid.Col = 0: Grid.Text = " 序号"
  Grid.Col = 1: Grid.Text = " 液位值"
  Grid.TopRow = 1                                
  Grid.LeftCol = 1
End Sub
'当退出程序时,关闭串行口
Private Sub Cmdquit_Click()
  Unload Me
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
  MSComm1.PortOpen = False           '关闭串口
End Sub问题:
1从8017模块手册上了解,数据发送是被动的。接受数据,需要发送一个命令,如:#032(读地址03的模块的通道2地址),我想读00模块的通道1地址,我应该怎么在VB程序中实现?
2此程序不知还有哪些不足,如何改正?
本人,VB新人,望各位赐教