用VB写了个串口调试小软件。有几个问题请教各位!
1、文件格式为bin 的十六进制文件,大小为1K-100K之间,VB怎么用串口控件把该文件正确发送出去?怎么准确计算该bin文件的字节数?
2、用串口发送文件时,进度条怎么做?该调用哪个控件?
      希望各位不啬赐教。先谢谢了!

解决方案 »

  1.   

    不用控件就行
    CreateFile
    ReadFile
    WriteFile
    就能发送了
      

  2.   

    串口软件有个发送文本框:
    点击打开文件按钮时所打开文件装入发送文本框程序如下:
    Private Sub Command7_Click()
      CommonDialog1.Filter = "文本文件(*.txt)|*.txt|Word文件(*.doc)|*.doc|16进制文件(*.hex)|*.hex|(*.bin)|*.bin|所有文件(*.*)|*.*"
      CommonDialog1.FilterIndex = 1
      CommonDialog1.ShowOpen
      TextSend.LoadFile CommonDialog1.FileName, 1
    End Sub
    上面程序发送文本框只能正确显示装入的*.txt、*.hex文件。请教各位怎么才能正确的把*.doc、*.bin文件装入发送文本框并且显示正确?
      

  3.   

    点击发送数据按钮时程序如下:
    Private Sub Command2_Click()
     Dim datalong, datasend As Long
        datalong = Len(TextSend.Text)  '计算待发送的文件长度
     On Error GoTo err:
        For datasend = 1 To datalong Step 2
             If Option6.Value = True Then       '十六进制发送
                 byteout(0) = "&H" & Mid(TextSend.Text, datasend, 2)
                 MSComm1.Output = byteout()
             ElseIf Option5.Value = True Then   '十进制发送
                byteout(0) = Val(Mid(TextSend.Text, datasend, 2))
                MSComm1.Output = byteout()
             ElseIf Option4.Value = True Then   '文本发送
                byteouttext(0) = Mid(TextSend.Text, datasend, 1)
                MSComm1.Output = byteouttext(0)
                datasend = datasend - 1
             End If
           SendCount = SendCount + 1
           Label8.Caption = SendCount
       Next
          If Loopsend = 1 Then
            Timer2.Interval = Val(TextDelay.Text)
            Timer2.Enabled = True
          Else
            Timer2.Enabled = False
            
          End If
     Exit Sub
    err:
        SendCount = 0
        Label8.Caption = "发送的数据"
        MsgBox "数据类型错误,请选择正确的发送模式!", vbInformation, "提示"
        If Check2.Value = 1 Then  '自动发送
          Timer2.Enabled = False
          Loopsend = 0
          Check2.Value = 0
        End If
    End Sub
    上面程序能正确发送*.txt、*.hex文件,能正确计算出该文件的字节数。请教各位该怎么正确的计算出比如*.doc、*.bin文件字节数?并且正确的把该文件发送出去???
      

  4.   

    串口发送部分需控制发送节奏。
    Option Explicit
        Dim i As Long
        Dim sj() As Byte
        Dim jlcd As IntegerPrivate Sub cmdOpen_Click() '检测文件长度
        CommonDialog1.ShowOpen
        Open CommonDialog1.FileName For Binary As #1
            jlcd = LOF(1)
        Close
        Text2 = jlcd
        ReDim sj(jlcd - 1)
        Text1 = UBound(sj)
    End SubPrivate Sub CmdBIn_Click() '将文件读到BYTE数组
        Open CommonDialog1.FileName For Binary As #1
        For i = 1 To jlcd
            Get #1, i, sj(i - 1)
        Next
        Close #1
    End Sub
      

  5.   

    发送的问题很简单,先用Open函数以2进制模式打开要发送的文件,然后将文件的内容分段读入数组,然后再设置mscomm.Output为要发送的数组,发送完成后再读入下一段内容到数组,循环下去直到将文件里的所有内容都发送完成。问题是文件发出去以后接收端怎么接收?怎么保证数据的准确性?采用什么校验方式,需不需要增加校验码?发送端完成一个数据包的发送以后需不需要等收到接收端的响应以后再发送下一个数据包?如果接收端发现接收到的数据有误怎么处理,是请求重发错误的数据包还是抛出一个错误终止通讯?等等等等…………亏你还是号称从事电子方面开发工作的,通讯方面的基本常识都没有
      

  6.   

    关于控制发送节奏,请参阅下列连接:
    http://topic.csdn.net/u/20071114/16/de3ade11-509e-43eb-a638-0dac7bcef821.html
    至于如何正确接收和发送,“可找人民邮电出版社”的“VLSUAL BISIC 串口通信工程实例导航”一书的“第七章 双机互联”文章及代码参考。
      

  7.   

    发送文件到串口,这样吧:Private Sub Command1_Click()
        Dim Buff() As Byte, I As Long
        
        Open "\\?\COM1" For Binary As #1        '在此之前先设置好串口
            Open "XXXX.DOC" For Binary As #2    '二进制打开目标文件
                ReDim Buff(LOF(2) - 1)          '分配缓冲区
                Get #2, , Buff                  '读进内存
                Put #1, , Buff                  '一次写到串口
                
                '由于我没有串口,所以无法测试上面一次写入会不会有问题.
                '所以如果不行,就自己用循环,一个字节一个字节写入吧.
                
    '            For I = 0 To UBound(Buff)
    '                Put #1, , Buff(I)
    '                '这里可以添加发送进度统计的代码
    '            Next I
            Close #2
        Close #1
    End Sub如果要看看从串口里返回的内容,应该是用GET就可以取回了.
      

  8.   

    to:CityBird
      谢谢你的答复.我是在问具体问题,让提问简单明了.难道我在提问前要把我程序的整体思想和我所做的项目阐述出来,证明我对通讯很有研究?
      鄙人在电子行业混了十余年,上市的产品数量不下100万件.从来都是低调做人.不喜欢你这般口气回答别人的提问!!  望你好自为之!!