大家好!!!!!!!!!!!!!!!
如何实现把数显表上的数据通过数据线连接到电脑显示出来~~~~~~~ 
功能如下图 

解决方案 »

  1.   

    具体按照硬件的通讯协议,用 Microsoft Winsock Control 6.0 控件进行通讯。
      

  2.   

    就如上所说,用mscomm控件,依照通讯协议,间隔一段时间不停的去读取数据,或者是数据表支持自动发送数据,在oncomm事件中接收并处理显示出来。
      

  3.   

    我的是电子数显卡尺和数显表~~~~~其实我是想做个适配器
    适配器可以把数字信号转变为RS-232C形式,并可作为量具与电脑之间的接口,进行数据分析。
    基本要求的功能如上~~~
    现在我的硬件(适配器)是有了,就是软件部分(我指的我的VB编程程序)读不出数据来
    可能我的MScomm写不好吧
    我是这样写的~~~~~~~~
    Private Sub MSComm1_OnComm()
    Dim inputbuffer As Variant
    inputbuffer1 = MSComm1.Input
    data1 = Mid(inputbuffer1, 1, 8)
    textcom1.Text = Val(data1) * 0.01
    End Sub
    表上的数据不会在textcom1上显示出来~~~
    什么原因呢??另外还有其他的问题~~不过现在主要是能把数据显示出来~
    各位大哥~~~~帮帮忙吧!!!!!!!!!!
      

  4.   

    Option ExplicitPrivate Sub Form_Load()
        MSComm1.RThreshold = 8 '接收数据长度'
    End SubPrivate Sub MSComm1_OnComm()
        Dim inputbuffer As Variant    Select Case MSComm1.CommEvent
            Case comEvReceive
                inputbuffer1 = MSComm1.Input()
                textcom1.Text = Val(inputbuffer1) * 0.01
        End Select
    End Sub
      

  5.   

    刚刚查了查那个适配器的一些参数,其中RS-232C接口标准协议,波特率: 9600 ;数据位:8;无奇偶校验;1位停止位,码型为ASCII码。每组数据含10个ASCII码,第一个ASCII码是符号位表示数据的正负值;第二到第八个ASCII码是表示数据,第九和第十个ASCII码用于控制:当“确认键”按下时,第九和第十个ASCII码分别为CHR($13)CHR($10),当无按键时,则分别为CHR($13),CHR($18)。
      

  6.   

    Private Sub Form_Load()
        MSComm1.CommPort = 1
        MSComm1.Settings = "9600, n, 8, 1"
        MSComm1.RThreshold = 10
        MSComm1.PortOpen = True
    End SubPrivate Sub MSComm1_OnComm()
        Dim inputbuffer As String
        Select Case MSComm1.CommEvent
            Case comEvReceive
                inputbuffer1 = MSComm1.Input()
                textcom1.Text = Mid(inputbuffer1, 1, 6) & "." & Mid(inputbuffer1, 7)
        End Select
    End Sub
      

  7.   

    先谢谢of123 ~~~~~你的代码能用,但是读出来的数据乱,比如我的表的数据是20.36但是程序显示的是
    http://p.blog.csdn.net/images/p_blog_csdn_net/lousn/EntryImages/20090729/未命名.jpg
      

  8.   

    textcom1.Text = Mid(inputbuffer1, 1, 6) & "." & Mid(inputbuffer1, 7) 这句改改,把小数点加到 "20" 和 "36" 之间就可以了。 
      

  9.   

    楼主有没有用过串口调试器调试?调试串口通信最好先用串口调试器调试好了,再写程序。
    http://download.csdn.net/source/1262066
      

  10.   

    再多嘴一句,楼主最好选用16进制方式通信试一试,可以把通信结果放上来,我们帮你分析分析。
    http://download.csdn.net/source/1441583
      

  11.   

    大家好~~~我刚用http://download.csdn.net/source/1441583里的超级串口调试了,数据如下不勾选十六进制的数据是显示后面那一段(++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++)
    我就猜是什么原因会让我昨天20.36的数据显示是36+(上面也有图)其中是一个原因吧
    难道是我的硬件问题????
    但是我用别人做好的软件(第一张图片,有16.03那张)就能显示出来呢??
    ?????????????????????????????????????????????????????????????????????????????????
      

  12.   

    你的第二字节总是 00,应该用二进制方式接收。
    Private Sub Form_Load() 
        MSComm1.CommPort = 1 
        MSComm1.Settings = "9600, n, 8, 1" 
        MSComm1.RThreshold = 10 
        MSComm1.InputMode = comInputModeBinary
        MSComm1.PortOpen = True 
    End Sub Private Sub MSComm1_OnComm() 
        Dim inputbuffer As Variant
        Dim data As String    Select Case MSComm1.CommEvent 
            Case comEvReceive 
                inputbuffer = MSComm1.Input() 
                data = StrConv(inputbuffer, vbUnicode)
                textcom1.Text = Left$(data,1) & CStr(Val(Mid$(Data, 3, 6))/100)
        End Select 
    End Sub
      

  13.   

    Option Explicit
        Dim strsj As StringPrivate Sub Form_Load()
        MSComm1.CommPort = 1
        MSComm1.Settings = "9600,n,8,1"
        MSComm1.RThreshold = 10
        MSComm1.InputMode = comInputModeBinary
        MSComm1.InputLen = 0
        MSComm1.PortOpen = True
    End SubPrivate Sub MSComm1_OnComm()
        Dim buffer() As Byte
        Dim i  As Integer
        Select Case MSComm1.CommEvent
            Case comEvReceive
                buffer = MSComm1.Input
                For i = 0 To UBound(buffer)
                    strsj = strsj & Right("0" & Hex(buffer(i)), 2)
                Next
                If Mid(strsj, 17, 2) = "0D" And Len(strsj) = 20 Then
                    Text1 = Chr(Val("&H" & Mid(strsj, 1, 2))) & Format(Val(Mid(strsj, 6, 1) & Mid(strsj, 8, 1) & Mid(strsj, 10, 1) & Mid(strsj, 12, 1) & Mid(strsj, 14, 1) & Mid(strsj, 16, 1)) / 100, "000.00")
                    strsj = ""
                End If
        End Select
    End Sub
      

  14.   

    这是他们给的数据:每组数据含10个ASCII码,第一个ASCII码是符号位表示数据的正负值;第二到第八个ASCII码是表示数据,第九和第十个ASCII码用于控制:当“确认键”按下时,第九和第十个ASCII码分别为CHR($13)CHR($10),当无按键时,则分别为CHR($13),CHR($18)。我的表其实可以显示成仔细看对照上面的参数就可以知道第一个表示正负,第二到第八个ASCII码是表示数据(其实那小5用别的怎么也显示不出来,这是个问题)
    我刚用VB老鸟的code,这句'textcom1.Text = Left$(data,1) & CStr(Val(Mid$(Data, 3, 6))/100)
    改为textcom1.Text = Left$(data,1) & CStr(Val(Mid$(Data, 1, 8))/100)曾经能显示完好(包括正负号),但是一下又不能显示了~~~~就在-0跟n0间闪
      

  15.   

    A)你收到的数据不一定只有这10个字节的数据,可能有其他数据产生了干扰
    B)也许数据传输太快,在触发 OnComm 到调用 Input() 中间又收到后续数据,导致没有按10字节进行拆分。在 Form_Load 中添加如下设置
    MSComm1.InputLen = 10
      

  16.   

    LZ:老鸟已经说的很清楚了,接收字节中有0X00,那是控制符,不能放要显示的字符串首,放了后面一个字符也看不见了.
    Text1.Text = chr(0) & "这是他们给的数据"
    Debug.Print Len(Text1.Text)
    LZ试办下上述代码就理解了.
      

  17.   

    真没留意,怎么又改成 Mid$(Data, 1, 8) 了!
      

  18.   

    !!!!!!!!!救命阿!!!!!!!!!!!
    我都调到烦完,晕完,现在还是不行~~~~~~~~~~~
    真的想过放弃>>>>>>>>>>>但是看到大家都那么帮忙>>>>>>>
    所以我不会放弃的,我先做其他的工作,下午继续努力!!!!!!!
    总之谢谢大家的帮忙!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      

  19.   

    看了你所说的通信协议和你通过串口调试器所得到的数据,你接受到的数据侦应该是:
    2B 00 30 30 30 39 35 31 0D 12
           ASCII码   字符
    第一位: 2B         +
    第二位: 00        无
    第三位: 30        0
    第四位: 30        0
    第五位: 30        0
    第六位: 39        9
    第七位: 35        5
    第八位: 31        1
    第九位: 0D        无法表示
    第十位: 12        无法表示其中:第九位和第十位就是楼主所说的:13 和 18 表示确认,这个没有问题。
    现在的关键点是怎么通过第二位到第八位来构建你的数据?只要搞清楚这个问题就可以解决问题了。
      

  20.   

    通过(阿根廷巫师) 的提示,我又不停的调试,终于发觉好像是这样读数
     ASCII码           字符 
    第一位: 2B        +     2D为-
    第二位: 00        无    都是00
    第三位: 30        0    30-39分别为1-9
    第四位: 30        0    30-39分别为1-9
    第五位: 30        0    30-39分别为1-9
    第六位: 39        9    30-39分别为1-9
    第七位: 35        5    30-39分别为1-9
    第八位: 31        1    30-39分别为1-9
    第九位: 0D        无法表示 
    第十位: 12        无法表示
    所以读数是9.51不知道该怎么些才能显示一致呢??
      

  21.   

    先谢谢VB老鸟
    23#的我试过了,读数不正确阿,我上面说过了
    我用VB老鸟的code,这句'textcom1.Text = Left$(data,1) & CStr(Val(Mid$(Data, 3, 6))/100) 
    3和6我改了好多次其中改为'textcom1.Text = Left$(data,1) & CStr(Val(Mid$(Data, 1, 8))/100)最接近我的仪器读数,只是小数点前面的数据一点都不对
    换其他的任何都不接近
      

  22.   

    不好意思VB老鸟 !!!!
    我刚刚新建了个文件,只是简单的放了一个Text 一个 MSComm,真的能读数
    现在问题是,我只是想在负数的时候才显示-号
    正数的时候前面不要+号,还有0.XX的时候只是显示.XX前面的0没有哦~~~~~~~~~~
      

  23.   


    呵呵,你已经悟到了真谛!
    剩余下来的就是把数组中的ASCII编码转换为字符即可:
      

  24.   

    如何显示是格式化的问题
    Dim dblValue As Double
    dblValue = Val(Left$(Data, 1) & "1") * Val(Mid$(Data, 3, 6)) / 100
    textcom1.Text = FormatNumber(dblValue, , vbTrue)
      

  25.   

    大家好,昨天休息了一天,今天要工作了!!!!!!!
    继续努力工作吧,刚弄了一下,现在我的问题是:
    1。我的量具数据默认显示为MM,当我把数据转换为英制的时候,他提示为2.大家看我的第一张贴图那些功能,我是按单位选择的时候显示在TEXTCOM1里面的.