当前位置:编程学习 > VB >>

为什么mscomm控件读取不出数据?

我是这么写的 
Private Sub Command1_Click() 
  MSComm1.CommPort = 1 
  MSComm1.Settings = "1200,N,7,2" 
  MSComm1.InputLen = 0 
  If MSComm1.PortOpen = False Then MSComm1.PortOpen = True 
  MSComm1.Output = "B" 
End Sub 
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
Private Sub MSComm1_OnComm() 
Static sdata As String 
Dim i As Integer 
Dim j As Integer 
Dim ss As String 
Dim ss1 As String 
Dim length As Integer 
If MSComm1.PortOpen = True Then 
sdata = MSComm1.Input 
    i = InStr(sdata, " ") 
    j = InStr(sdata, "-") 
    If j >= 1 Then i = j 
    If i >= 1 Then ss = Mid(sdata, i, 5) + "." + Mid(sdata, i + 5, 2) 
        Text1.Text = ss 
  Else 
  End If 
End Sub 
--------------------编程问答-------------------- http://topic.csdn.net/u/20090414/16/080dd028-ea1f-40f2-bd37-37963bbc9521.html
楼主在上述连接已经贴出过这些代码.
我还是在该链接的答复:
 
数显表与数显电子尺是两种外设. 
你必须有厂家数显电子尺的通信协议,不然是无的放矢. --------------------编程问答-------------------- 不好意思 我对通信协议是什么 还没弄清楚 今天我打电话了 厂家不提供
只是给了一些串口的设置
厂家说通信协议到网上随便查一下就可以
到底什么是通信协议呢? --------------------编程问答--------------------
可以跟厂家直接要一个例子。 --------------------编程问答-------------------- LZ:给段通信协议参考,那是串口通信的灵魂.
CL311 PC机通讯协议
0. 异步串行口通讯参数设置:
一位起始位、一位停止位、八位数据位、无奇偶校验。
波特率可设置。
1. 帧格式:
Head ID 帧长Len 命令Cmd 数据Data 异或和Vadd
说明:
Head:  81H。 ID: 仪器地址。
Vadd: 从ID  到Vadd  前字节异或和。
2. 帧功能:
2.1 读P、Q、I、V、F、φ命令。返回测量数据。
Head ID 05H 30H Vadd
    Cmd 30H  返回格式:

&H81 帧头 0
Address 仪器地址 1
Length of the strings 帧长 2
Command (30) 命令字 3
Flip_ABC As Byte    '相位开关控制 4
Freq As Single '频率 5 6
    Scale_Ua As Byte 'Ua档位  7
    Ua As Single 'Ua    8 9 10
    Phi_Ua As Single 'Ua相位   11 12 13
    Scale_Ub As Byte 'UB档位  14
    Ub As Single 'UB   15  16 17
    Phi_Ub As Single 'UB相位  18 19 20
    Scale_Uc As Byte 'UC档位  21
    Uc As Single 'UC  22 23 24
    Phi_Uc As Single 'UC相位  25 26 27
    Scale_Ia As Byte 'Ia档位  28
    Ia As Single 'Ia  29 30 31
    Phi_Ia As Single 'Ia相位  32 33 34
    Scale_Ib As Byte 'Ib档位  35
    Ib As Single 'Ib  36 37 38
    Phi_Ib As Single  'Ib相位  39 40 41
    Scale_Ic As Byte 'Ic档位  42
    Ic As Single 'Ic  43 44 45
    Phi_Ic As Single 'Ic相位  46 47 48
    Pa As Single 'A相有功功率  49 50 51
    Pb As Single 'B相有功功率 52 53 54
    Pc As Single 'C相有功功率 55 56 57
    Qa As Single 'A相无功功率 58 59 60
    Qb As Single 'B相无功功率 61 62 63
    Qc As Single 'C相无功功率 64 65 66
    Sa As Single 'A相视在功率 67 68 69
    Sb As Single 'B相视在功率 70 71 72
    Sc As Single 'C相视在功率 73 74 75
注:1)频率小数点及相位小数点为3
2)电压,电流小数点随档位不同而不同,其对应关系如下:
电压(V) 1000 600 400 220 100 60 20 10
电压档位 0 1 2 3 4 5 6 7
电压小数点 2 3 3 3 3 4 4 4

电流(25A) 25A 10A 5A 2A 1A 0.5A 0.2A 0.1A
电流档位 0 1 2 3 4 5 6 7
电流小数点 4 4 5 5 5 6 6 6
     .
电流(100A) 100A 50A 20A 10A
电流档位 4 5 6 7
电流小数点 3 4 4 4

功率小数点=电压小数点+电流小数点-5

2.2 CMD 32H  读测量数据:
Head ID 05H 32H Vadd
  Cmd 32H  返回格式:

81H 帧头 0
ID 仪器地址 1
Len 帧长 2
Cmd (32H) 命令字 3
Flag CL311  接线方式 4
Flip_ABC As Byte    '相位开关控制 5
Freq '频率 6 7
Scale_Ua  'Ua档位  8
Scale_Ub  'Ub档位  9
Scale_Uc  'Uc档位  10
Scale_Ia  'Ia档位  11
Scale_Ib  'Ib档位  12
Scale_Ic  'Ic档位  13
Dot_Ua  'Ua小数点 14
Dot_Ub  'Ub小数点 15
Dot_Uc  'Uc小数点 16
Dot_Ia  'Ia小数点 17
Dot_Ib  'Ib小数点 18
Dot_Ic  'Ic小数点 19
Dot_PowerA  'A相功率小数点 20
Dot_PowerB   B相功率小数点 21
Dot_PowerC 'C相功率小数点 22
Ua As Single 'UA  23 24 25
Ia As Single 'Ia  26 27 28
Ub As Single 'UB   29 30 31
Ib As Single 'Ib  32 33 34
Uc As Single 'UC  35 36 37
Ic As Single 'Ic  38 39 40
Phi_Ua  'Ua相位  41 42 43
--------------------编程问答-------------------- 接上页:
Phi_Ia  'Ia相位  44 45 46
Phi_Ub  'UB相位  47 48 49
Phi_Ib  'Ib相位  50 51 52
Phi_Uc  'UC相位  53 54 55
Phi_Ic  'Ic相位  56 57 58
Pa  'A相有功功率  59 60 61
Pb  'B相有功功率 62 63 64
Pc  'C相有功功率 65 66 67
Qa 'A相无功功率 68 69 70
Qb  'B相无功功率 71 72 73
Qc 'C相无功功率 74 75 76
Sa 'A相视在功率 77 78 79
Sb  'B相视在功率 80 81 82
Sc  'C相视在功率 83 84 85
ΣP 总有功功率 86 87 88
ΣQ 总无功功率 89 90 91
ΣS 总视在功功率 92 93 94
COSΦ 有功功率因数 95 96 97
SINΦ 无功功率因数 98 99 99

  注: 1)频率小数点及相位小数点为3,功率因数小数点为5。
     2)接线方式定义:
电流输入方式(D0) D0=0 25A
D0=1 100A
接线方式(D3D2D1) D3D2D1=000 .XPQ
D3D2D1=001 △PQ
D3D2D1=010 Q90
D3D2D1=011 Q33
D3D2D1=100 Q60
        3)相位开关控制表示各相是否有信号:每一个bit对应一相:
D5 D4 D3 D2 D1 D0
IC UC IB UB IA UA

2.3 读谐波数据:
2.2.1 Va谐波
Head ID 08H 31H 20H 80H 09H Vadd

2.2.2 Ia谐波
Head ID 08H 31H 20H A0H 09H Vadd

2.2.3 Vb谐波
Head ID 08H 31H 20H C0H 09H Vadd

2.2.4  Ib谐波
Head ID 08H 31H 20H E0H 09H Vadd

2.2.5 Vc谐波
Head ID 08H 31H 20H 00H 0AH Vadd

2.2.6 Ic谐波
Head ID 08H 31H 20H 20H 0AH Vadd

读谐波数据返回:
1) 当CL311忙时,返回:
Head ID 06H 31H 42H Vadd

2) 当读数据正常时,返回:
Head ID 45H 31H 谐波数据 Vadd
注:
谐波数据为32个WORD,即64个BYTE。每两WORD为一个量。
总谐波含量 一次谐波含量 二次谐波含量 …… 十五次谐波含量
注:谐波小数点固定为2
2.3 CMD  60H
联机命令:LCD复位,PC联机控制LCD。返回OK。
Head ID 05H 60H Vadd

2.4 CMD  61H
PC控制LCD进入各画面状态。返回OK。
Head ID 06H 61H 画面序号 Vadd
说明:
画面序号0-----5
0:功率测量1:伏安测量2:相频测量3:谐波测量4:波形测量5:校电能表
2.5 CMD 62H
电能表控制命令。
Head ID 帧长 62H 命令字节N 数据 Vadd
说明:
命令字节N的低2位为命令序号:
      0   参数设置
1 启动命令
2 读误差及脉冲数
3 设置电能表常数、校验圈数

l 命令序号: 0   参数设置,返回OK。
Head ID 10H 62H 命令字节N 参数数据 Vadd
参数数据共八个字节:
0-----3 电能表常数
4-----7 校验圈数
8 表量限
9 表类型
其中:
表量限:
0 25A
1 100A
表类型:
0 PT4    三相四线有功电能表
1 QT4    三相四线真无功电能表
2 P32     三相三线有功电能表
3 Q32    三相三线真无功电能表
4 Q90    二元件90°无功电能表
5 Q60    二元件60°无功电能表
6 Q33    三元件无功电能表
命令字节N的高6位为电能表序号:
序号为0时参数设置对所有表有效,序号不为0时,参数设置只对此序号表有效。表序号范围1-----8。

l 命令序号: 1   启动命令,返回OK。
Head ID 06H 62H 1 Vadd

l 命令序号: 2   读误差及脉冲数
Head ID 06H 62H 2 Vadd
返回格式:
Head ID 35H 62H 启动标志 八路脉冲数 八路误差 Vadd
每路误差占四个字节,每路脉冲占四个字节。
启动标志占两个字节: 0 误差、脉冲无效
1 启动标志,误差、脉冲有效

l 命令序号: 3 设置电能表常数、校验圈数
Head ID 46H 62H   命令字节N 8路表常数 8路校验圈数 Vadd
每块表表常数占四个字节,每块表校验圈数占四个字节。


2.6 CMD 63H
PC控制LCD退出各画面状态,进入初始画面。返回OK。
Head ID 05H 63H Vadd

2.7 CMD 64H
PC控制接线方式。返回OK。
Head ID 06H 64H 接线方式 Vadd
注: 本命令适用画面:功率测量、伏安测量、相频测量
接线方式:
0 YPQ
1 △PQ
2 △Q90
3 △Q3
4 △Q60°

2.8 CMD 65H
PC控制电流量限。返回OK。
Head ID 06H 65H 电流量限 Vadd
注: 本命令适用画面:功率测量、伏安测量
电流量限: 0:25A
   1:100A
2.9 CMD 66H
脱机命令。
Head ID 05H 66H Vadd
当响应此命令后或按键脱机后,返回:
Head ID 06H 66H 55H Vadd

2.10 CMD 20H
读取仪器型号、序列号、软件版本号。
Head ID 05H 20H Vadd
返回:
1)如果仪器型号、序列号、软件版本号无效,返回错误标志。
Head ID 06H 20H 45H Vadd

2)如果仪器型号、序列号、软件版本号有效,返回:
Head ID 0DH 20H 数据 Vadd
注:数据格式:
0---7 型号
8---13 软件版本号
14---17 序列号
仪器型号与软件版本号由字符串表示。
序列号为一长整数。
3   返回OK格式:
Head ID 06H Cmd 4BH Vadd

4 注:对LCD的控制操作须延时等待3秒。
--------------------编程问答--------------------  
这个是RS232的通讯协议吗?
顺序 1 2 3 4 5 6 7 8 9 10
公制 S N1 N1 N 。 N N N CR LX
英制 S N 。 N N N N N CR LX

S:负号或空格 N1:负号或空格或0-9数字 N:0-9数字 CR:回车 LX:换行
--------------------编程问答-------------------- 代码如下:
Option Explicit
    Dim sdata As String
    Dim i As Integer

Private Sub Form_Load()
    MSComm1.CommPort = 1
    MSComm1.Settings = "1200,N,7,2" '此处设置必须与称的设置相同
    MSComm1.InputMode = comInputModeText
    MSComm1.InputLen = 0
    MSComm1.RThreshold = 1
    MSComm1.PortOpen = True
End Sub

Private Sub MSComm1_OnComm()
    Dim i As Integer
    Dim j As Integer
    Dim ss As String
    Dim ss1 As String
    Dim length As Integer
    Select Case MSComm1.CommEvent
        Case 2
            sdata = sdata & MSComm1.Input
            Text1 = sdata '显示全部接收的内容
              If Mid(sdata, 9, 2) = vbCrLf Then
                i = InStr(sdata, ".") '确定小数点位置即公英制判断
                  If i = 3 Then
                    Text2 = "英制" & Mid(sdata, 1, 8)
                ElseIf i = 5 Then
                    Text2 = "公制" & Mid(sdata, 3, 6)
                End If
                sdata = ""
            End If
    End Select
End Sub
--------------------编程问答-------------------- 7楼的 
今天我试了你给我代码 不好使啊
我在窗体中 添加了 mscomm,text1,text2三个控件 用你的代码运行后 text1,text2都没有任何数据显示
怎么回事呢? --------------------编程问答-------------------- 检查你的通信线接法及是否连接好,或者检查你的下位机.我的代码经双COM口调试过无问题.
--------------------编程问答-------------------- 通信线绝对没问题,什么是下位机?
我只需要电脑显示出电子千分尺液晶屏上的数据即可,不需要握手协议
怎么这么难呢
顺便问一下vbCrLf是什么意思? --------------------编程问答-------------------- 在这里说不清楚 能加我qq吗?
我的qq是47104140 
在线等 --------------------编程问答-------------------- 已在QQ上 --------------------编程问答-------------------- 为什么不用串口调试器试一试看先?一试便知大概问题在什么地方了。
我高度怀疑楼主的inputMode属性设置,你可试一试二进制方式。
补充:VB ,  控件
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,