⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spcp.bas

📁 串口双机互相连接
💻 BAS
📖 第 1 页 / 共 2 页
字号:
            bytTest(1) = 1
            bytTest(2) = 1
            bytTest(3) = 1
            bytTest(4) = Len(strFileName)
            bytTest(5) = Len(Str(intFileLenth))
            
            strSendFile = strFileName + Str(intFileLenth)               '负载中包含有文件名及长度信息
            
            frmMain.ctrMSComm.Output = bytTest                          '发送数据
            frmMain.ctrMSComm.Output = strSendFile
            
            intDataLenth = frmMain.GetOutBuffer \ 2                     '设置数据帧负载长度
            intDataCount = intFileLenth \ intDataLenth                  '计算数据帧数
            If intFileLenth - intDataLenth * intDataCount > 0 Then
                intDataCount = intDataCount + 1
            End If
            
            intDataNumber = 1                                           '计数器设置初值
            ReDim bytSendFile(intDataLenth - 1)
            
            For n = 1 To intDataLenth
                bytSendFile(n - 1) = bytFileBuffer(n - 1)               '准备第一帧数据
            Next n
            
            intCommFlag = 1
            
            
        Case 1                                                          '继续发送
            intCommFlag = 2
            
            If intDataNumber = intDataCount Then                        '计算数据帧负载长度
                intSendLen = intFileLenth - intDataLenth * (intDataCount - 1)
            Else
                intSendLen = intDataLenth
            End If
            
            ReDim bytSendFile(intSendLen - 1)
            
            For n = 1 To intSendLen                                     '加载数据
                bytSendFile(n - 1) = bytFileBuffer(intDataLenth * (intDataNumber - 1) + n - 1)
            Next n
            
            ReDim bytSend(5 + intSendLen)
            For n = 1 To intSendLen
                bytSend(n + 5) = bytSendFile(n - 1)
            Next n
            
            
            bytSend(0) = 0                                              '组织帧头
            bytSend(1) = 0
            bytSend(2) = intSendLen \ 100
            bytSend(3) = intSendLen - bytSend(2) * 100
            intSendLen = bytSend(2) + bytSend(3)
            bytSend(4) = intSendLen \ 100
            bytSend(5) = intSendLen - bytSend(4) * 100
            
            frmMain.ctrMSComm.Output = bytSend                          '发送数据帧
            
            intProgress = intDataNumber * 100 \ intDataCount            '更新进度条
            frmMain.prgFileTransfer.Value = intProgress
            
            intCommFlag = 1
            
        
        Case 2                                                          '重新发送
            intCommFlag = 2
            
            
            If intDataNumber = intDataCount Then                        '计算数据帧负载长度
                intSendLen = intFileLenth - intDataLenth * (intDataCount - 1)
            Else
                intSendLen = intDataLenth
            End If
            
            ReDim Preserve bytSendFile(intSendLen - 1)                  '加载数据
            
            ReDim bytSend(5 + intSendLen)
            For n = 1 To intSendLen
                bytSend(n + 5) = bytSendFile(n - 1)
            Next n
            
            
            bytSend(0) = 0                                              '组织帧头
            bytSend(1) = 0
            bytSend(2) = intSendLen \ 100
            bytSend(3) = intSendLen - bytSend(2) * 100
            intSendLen = bytSend(2) + bytSend(3)
            bytSend(4) = intSendLen \ 100
            bytSend(5) = intSendLen - bytSend(4) * 100
            
            frmMain.ctrMSComm.Output = bytSend                          '发送数据帧
            
            intProgress = intDataNumber * 100 \ intDataCount
            frmMain.prgFileTransfer.Value = intProgress                 '更新进度条
            
            intCommFlag = 1
        
        Case 4                                                           '完成
            intCommFlag = 8
            
            bytTest(0) = 0                                               '组织帧头
            bytTest(1) = 1
            bytTest(2) = 0
            bytTest(3) = 0
            bytTest(4) = 0
            bytTest(5) = 0
            
            frmMain.ctrMSComm.Output = bytTest                          '发送完成控制帧
            
            Close #intFileNumber                                        '关闭文件
            MsgBox ("发送完毕!")
            
            frmMain.prgFileTransfer.Value = 0                           '恢复进度条
            
            intCommFlag = 1
        
    
    End Select
    intCommFlag = 1


End Sub

'*******************************************************
'文件接收管理
'处理接收到的文件数据,重新拼装成文作
'*******************************************************
Public Sub FileReceiveManager(intFlag As Long)
    
    On Error GoTo FileError

    Dim bytTest(5) As Byte
    
    Select Case intFlag
        Case 0                                                              '新文件
            intCommFlag = 8
            
            
            Call frmMain.cmdFileSave_Click                                  '选择存放路径
            intFileNumber = FreeFile
            strFileDirectary = frmMain.ctrCommonDialog.FileName
            
            Open strFileDirectary For Binary As #intFileNumber              '打开(或新建)文件
            ReDim bytFileBuffer(intFileLenth - 1)                           '定义文件缓冲区
            intFileReceiveLenth = 0                                         '初始化文件长度计数器
            
            bytTest(0) = 0                                                  '组织帧头
            bytTest(1) = 1
            bytTest(2) = 0
            bytTest(3) = 1
            bytTest(4) = 0
            bytTest(5) = 0
            frmMain.ctrMSComm.Output = bytTest                              '请求发送数据
            
            
            
            intCommFlag = 1
            
        
        Case 1                                                              '继续接收,请求发送
            intCommFlag = 8
            
            For n = 1 To intReceiveLen
                bytFileBuffer(intFileReceiveLenth + n - 1) = bytReceive(n - 1)
            Next n
            intFileReceiveLenth = intFileReceiveLenth + intReceiveLen
            
            bytTest(0) = 0                                                  '组织帧头
            bytTest(1) = 1
            bytTest(2) = 0
            bytTest(3) = 1
            bytTest(4) = 1
            bytTest(5) = 0
            frmMain.ctrMSComm.Output = bytTest                              '发送请求
            
            intProgress = intFileReceiveLenth * 100 \ intFileLenth          '更新进度条
            frmMain.prgFileTransfer.Value = intProgress
            
            intCommFlag = 1
            
        
        Case 2                                                              '请求重新发送
            intCommFlag = 8
            
            bytTest(0) = 0                                                  '组织帧头
            bytTest(1) = 1
            bytTest(2) = 0
            bytTest(3) = 1
            bytTest(4) = 0
            bytTest(5) = 0
            frmMain.ctrMSComm.Output = bytTest                              '发送重发请求
            
            intCommFlag = 1
        
        Case 4                                                              '完成
            Put #intFileNumber, , bytFileBuffer                             '把文件写入磁盘
            Close #intFileNumber                                            '关闭文件
            MsgBox ("接收完毕!")
            
            frmMain.prgFileTransfer.Value = 0                               '恢复进度条
            
            intCommFlag = 1
            
        
    End Select
    intCommFlag = 1
    
FileError:
    
End Sub

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -