我想用VB做一个称重管理软件,但须读串口的数据,我下载了这样一个程序,但还是读取不了串口的数据。相关程序如下,请问该如何解决程序运行后提示:端口已打开但并没读入数据 在(通用)(声明)中定义程序所用变量:   Dim ab(4) As Byte '字节数据类型数组,用来存贮接收到的一组字节数据   Dim av As Variant '用来从接收缓冲区读取数据   Dim i As Integer   Dim j As Integer   Dim w As Integer '接收数据个数计数器   Dim b1 As Single   Dim b2 As Single   Dim WW As Single '十进制检测值   Dim TD(8) as Boolean '通道状态数组   Dim Wmax(8) As Single '最大值数组   Dim Wmin(8) As Single '最小值数组   在窗体中添加名为Command1的[开始]按钮和名为MSComm1的MSComm控件。   [开始]按钮的Click事件处理程序主要是对MSComm1控制的参数初始化设置,程序中大部分参数在设计时可在MSComm1控制的属性窗口中设置: Private Sub Command1_Click() '开始按钮 With MSComm1    .CommPort=2 '使用COM2    .Settings="9600,N,8,1" '设置通信口参数    .InBufferSize=40 '设置MSComm1接收缓冲区为40字节    .OutBufferSize=2 '设置MSComm1发送缓冲区为2字节    .InputMode = comInputModeBinary  '设置接收数据模式为二进制形式    .InputLen = 1           '设置Input 一次从接收缓冲读取字节数为1    .SThreshold = 1 '设置Output 一次从发送缓冲读取字节数为1    .InBufferCount = 0 '清除接收缓冲区    .OutBufferCount = 0 '清除发送缓冲区    For i=1 to 8    Wmax(i) = -99 '最大值赋初值    Wmin(i) = 99 '最小值赋初值    Next i    w = 0 '数据个数计数器清零    .RThreshold = 1 '设置接收一个字节产生OnComm事件    On Error Resume Next       '改变错误处理的方式。    Err.Clear    If .PortOpen = False Then '判断通信口是否打开     .PortOpen = True '打开通信口     If Err Then '错误处理      MsgBox "串口通信无效"      Exit Sub     End If    End If End With End Sub   为了达到实时数据采集目的,实时数据采集处理程序采用MSComm事件驱动方式。MSComm1_OnComm 的事件处理程序只处理comEvReceive事件,首先判断帧数据的开始字节,关闭OnComm接收事件,然后接收数据字节,将压缩BCD进行还原转换,再接收符号字节,判断数据符号,判断数据最大最小值,最后打开OnComm接收事件,等待下一次OnComm事件产生: Private Sub MSComm1_OnComm() With MSComm1 Select Case .CommEvent '判断MSComm1通讯事件   Case comEvReceive '收到Rthreshold个字节产生的接收事件    av = .Input '读取一个接收字节    ab(1) = av(0) '转换保存到字节数据类型数组    If ab(1) = 170 Then '判断是否为数据开始标志,0FAH=170      .RThreshold = 0 '关闭OnComm事件接收      W=W+1     '计数器加1      av = .Input '读取通道状态字节      ab(0) = av(0) '转换保存到字节数据类型数      For i = 1 To 8 '通道状态数组复位      TD(i) = False      Next i      cn = 2           '帧长度赋初值,一个开始字,一个状态字      If ab(0) >= 128 Then    '判断第八通状态      TD(8) = True       '第八道是真      ab(0) = ab(0) - 128   '第7位置零      cn = cn + 3       '帧长度加3个字节      End If      If ab(0) >= 64 Then     '判断第七通状态      TD(7) = True       '第七道是真      ab(0) = ab(0) - 64    '第6位置零      cn = cn + 3       '帧长度加3个字节      End If      If ab(0) >= 32 Then     '判断第六通状态      TD(6) = True       '第六道是真      ab(0) = ab(0) - 32    '第5位置零      cn = cn + 3       '帧长度加3个字节      End If      If ab(0) >= 16 Then     '判断第五通状态      TD(5) = True       '第五道是真      ab(0) = ab(0) - 16    '第4位置零      cn = cn + 3       '帧长度加3个字节      End If      If ab(0) >= 8 Then     '判断第四通状态      TD(4) = True       '第四道是真      ab(0) = ab(0) - 8     '第3位置零      cn = cn + 3       '帧长度加3个字节      End If      If ab(0) >= 4 Then     '判断第三通状态      TD(3) = True       '第三道是真      ab(0) = ab(0) - 4     '第2位置零      cn = cn + 3       '帧长度加3个字节      End If      If ab(0) >= 2 Then     '判断第二通状态      TD(2) = True       '第二道是真      ab(0) = ab(0) - 2     '第0位置零      cn = cn + 3       '帧长度加3个字节      End If      If ab(0) >= 1 Then     '判断第一通状态      TD(1) = True       '第一道是真      cn = cn + 3       '帧长度加3个字节      End If      For i = 1 To 8 '      If TD(i) = True Then       av = .Input    '读取第一个数据字节(BCD码高位字节)       ab(2) = av(0)    '转换保存到字节数据类型数组       av = .Input    '读取第二个数据字节(BCD码低位字节)       ab(3) = av(0)    '转换保存到字节数据类型数组       av = .Input    '读取第三个接收字节(符号位字节)       ab(4) = av(0)    '转换保存到字节数据类型数组       b1 = ab(2) - 6 * (ab(2) \ 16)   '高位字节压缩BCD码转换为实数       b2 = ab(3) - 6 * (ab(3) \ 16)   '低位字节压缩BCD码转换为实数       WW = b2 + b1 / 100 '数值组合,标定小数点       If ab(4) > 127 Then WW = -WW '判断数据符号位       Label1(i-1) = Format(WW,"0.00")   '显示毫米单位数值,2位小数       If WW>Wmax(i) And WW<51 Then     '判断最大值,仪表在刚开始工作时有干扰,会传导一些乱码,位移传感器有参数偏差,最大值一般都略大于50毫米,所以取51为极限最大值,取-51为极限最小值。        Wmax(i) = WW        Label2(i-1)=Format(Wmax(i),"0.00") '显示最大值       End If       If WW < Wmin(i) And WW > -51 Then '判断最小值        Wmin(i) = WW        Label3(i-1)=Format(Wmin(i),"0.00") '显示最小值       End If      End If      Next i     .RThreshold = cn '打开MSComm1事件接收    Else     .RThreshold = 1    End If   Case Else End Select End With End Sub