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

📄 frmmodbusplat.frm

📁 一个modbus的测试工具
💻 FRM
📖 第 1 页 / 共 4 页
字号:
                        iAddress = byInBuffer(2) * &H100 + byInBuffer(3)
                        iAddress = iAddress - gtPLSet.iInputAddress
                        iDataCount = byInBuffer(4) * &H100 + byInBuffer(5)
                        If iAddress < 0 Then
                            iPkgLen = 2 + gtPLSet.byCRCByte
                            ReDim byOutBuffer(iPkgLen)
                            byOutBuffer(0) = gtPLSet.byAddress
                            byOutBuffer(1) = &H81
                            byOutBuffer(2) = &H2
                        ElseIf iDataCount > gcMAXINPUT Or iDataCount < 1 Then
                            iPkgLen = 2 + gtPLSet.byCRCByte
                            ReDim byOutBuffer(iPkgLen)
                            byOutBuffer(0) = gtPLSet.byAddress
                            byOutBuffer(1) = &H81
                            byOutBuffer(2) = &H3
                        Else
                            If iDataCount Mod 8 = 0 Then
                                byByteCount = Int(iDataCount / 8)
                            Else
                                byByteCount = Int(iDataCount / 8) + 1
                            End If
                            iPkgLen = 2 + byByteCount + gtPLSet.byCRCByte
                            ReDim byOutBuffer(iPkgLen)
                            byOutBuffer(0) = gtPLSet.byAddress
                            byOutBuffer(1) = &H2
                            byOutBuffer(2) = byByteCount
                            For i = 0 To byByteCount - 1
                                byOutBuffer(3 + i) = 0
                                For j = 0 To 15
                                    byOutBuffer(3 + i) = byOutBuffer(3 + i) + gbyInput(iAddress) * 2 ^ j
                                    iAddress = iAddress + 1
                                Next j
                            Next i
                        End If
                    Case 3          ' holding register
                        iAddress = byInBuffer(2) * &H100 + byInBuffer(3)
                        iAddress = iAddress - gtPLSet.iHoldRegAddress
                        iDataCount = byInBuffer(4) * &H100 + byInBuffer(5)
                        If iAddress < 0 Then
                            iPkgLen = 2 + gtPLSet.byCRCByte
                            ReDim byOutBuffer(iPkgLen)
                            byOutBuffer(0) = gtPLSet.byAddress
                            byOutBuffer(1) = &H81
                            byOutBuffer(2) = &H2
                        ElseIf iDataCount > gcMAXHOLDREG Or iDataCount < 1 Or iDataCount > 125 Then
                            iPkgLen = 2 + gtPLSet.byCRCByte
                            ReDim byOutBuffer(iPkgLen)
                            byOutBuffer(0) = gtPLSet.byAddress
                            byOutBuffer(1) = &H81
                            byOutBuffer(2) = &H3
                        Else
                            byByteCount = iDataCount * 2
                            iPkgLen = 2 + byByteCount + gtPLSet.byCRCByte
                            ReDim byOutBuffer(iPkgLen)
                            byOutBuffer(0) = gtPLSet.byAddress
                            byOutBuffer(1) = &H3
                            byOutBuffer(2) = byByteCount
                            For i = 0 To byByteCount - 1 Step 2
                                byOutBuffer(3 + i) = gfunRightMove(giHoldReg(iAddress), 8)
                                byOutBuffer(4 + i) = giHoldReg(iAddress) And &HFF
                                iAddress = iAddress + 1
                            Next i
                        End If
                    Case 4             ' input register
                        iAddress = byInBuffer(2) * &H100 + byInBuffer(3)
                        iAddress = iAddress - gtPLSet.iInputRegAddress
                        iDataCount = byInBuffer(4) * &H100 + byInBuffer(5)
                        If iAddress < 0 Then
                            iPkgLen = 2 + gtPLSet.byCRCByte
                            ReDim byOutBuffer(iPkgLen)
                            byOutBuffer(0) = gtPLSet.byAddress
                            byOutBuffer(1) = &H81
                            byOutBuffer(2) = &H2
                        ElseIf iDataCount > gcMAXINPUTREG Or iDataCount < 1 Or iDataCount > 125 Then
                            iPkgLen = 2 + gtPLSet.byCRCByte
                            ReDim byOutBuffer(iPkgLen)
                            byOutBuffer(0) = gtPLSet.byAddress
                            byOutBuffer(1) = &H81
                            byOutBuffer(2) = &H3
                        Else
                            byByteCount = iDataCount * 2
                            iPkgLen = 2 + byByteCount + gtPLSet.byCRCByte
                            ReDim byOutBuffer(iPkgLen)
                            byOutBuffer(0) = gtPLSet.byAddress
                            byOutBuffer(1) = &H4
                            byOutBuffer(2) = byByteCount
                            For i = 0 To byByteCount - 1 Step 2
                                byOutBuffer(3 + i) = gfunRightMove(giInputReg(iAddress), 8)
                                byOutBuffer(4 + i) = giInputReg(iAddress) And &HFF
                                iAddress = iAddress + 1
                            Next i
                        End If
                    Case 5              ' force single coil
                        iAddress = byInBuffer(2) * &H100 + byInBuffer(3)
                        iAddress = iAddress - gtPLSet.iForceCoilAddress
                        If iAddress < 0 Then
                            iPkgLen = 2 + gtPLSet.byCRCByte
                            ReDim byOutBuffer(iPkgLen)
                            byOutBuffer(0) = gtPLSet.byAddress
                            byOutBuffer(1) = &H81
                            byOutBuffer(2) = &H2
                        Else
                            If byInBuffer(4) = &HFF And byInBuffer(5) = &H0 Then
                                gbyForceCoil(iAddress) = 1
                                iPkgLen = 5 + gtPLSet.byCRCByte
                                ReDim byOutBuffer(iPkgLen)
                                byOutBuffer(0) = gtPLSet.byAddress
                                For i = 1 To 5
                                    byOutBuffer(i) = byInBuffer(i)
                                Next i
                            ElseIf byInBuffer(4) = &H0 And byInBuffer(5) = &H0 Then
                                gbyForceCoil(iAddress) = 0
                                iPkgLen = 5 + gtPLSet.byCRCByte
                                ReDim byOutBuffer(iPkgLen)
                                byOutBuffer(0) = gtPLSet.byAddress
                                For i = 1 To 5
                                    byOutBuffer(i) = byInBuffer(i)
                                Next i
                            Else
                                iPkgLen = 2 + gtPLSet.byCRCByte
                                ReDim byOutBuffer(iPkgLen)
                                byOutBuffer(0) = gtPLSet.byAddress
                                byOutBuffer(1) = &H81
                                byOutBuffer(2) = &H2
                            End If
                        End If
                    Case 6              ' preset single register
                        iAddress = byInBuffer(2) * &H100 + byInBuffer(3)
                        iAddress = iAddress - gtPLSet.iPresetRegAddress
                        If iAddress < 0 Then
                            iPkgLen = 2 + gtPLSet.byCRCByte
                            ReDim byOutBuffer(iPkgLen)
                            byOutBuffer(0) = gtPLSet.byAddress
                            byOutBuffer(1) = &H81
                            byOutBuffer(2) = &H2
                        Else
                            giPresetReg(iAddress) = byOutBuffer(4) * &H100 + byOutBuffer(5)
                            iPkgLen = 2 + gtPLSet.byCRCByte
                            ReDim byOutBuffer(iPkgLen)
                            byOutBuffer(0) = gtPLSet.byAddress
                            For i = 1 To 5
                                byOutBuffer(i) = byInBuffer(i)
                            Next i
                        End If
                    Case 15             ' force multiple coils
                        iAddress = byInBuffer(2) * &H100 + byInBuffer(3)
                        iAddress = iAddress - gtPLSet.iForceCoilAddress
                        iDataCount = byInBuffer(4) * &H100 + byInBuffer(5)
                        If iDataCount Mod 8 = 0 Then
                            byByteCount = Int(iDataCount / 8)
                        Else
                            byByteCount = Int(iDataCount / 8) + 1
                        End If
                        If iAddress < 0 Then
                            iPkgLen = 2 + gtPLSet.byCRCByte
                            ReDim byOutBuffer(iPkgLen)
                            byOutBuffer(0) = gtPLSet.byAddress
                            byOutBuffer(1) = &H81
                            byOutBuffer(2) = &H2
                        ElseIf iDataCount > gcMAXFORCECOIL Or iDataCount < 1 Or byByteCount <> byInBuffer(6) Then
                            iPkgLen = 2 + gtPLSet.byCRCByte
                            ReDim byOutBuffer(iPkgLen)
                            byOutBuffer(0) = gtPLSet.byAddress
                            byOutBuffer(1) = &H81
                            byOutBuffer(2) = &H3
                        Else
                            For i = 0 To byByteCount - 1
                                For j = 0 To 7
                                    If byInBuffer(7 + i) And 2 ^ j Then
                                        gbyForceCoil(iAddress + j) = 1
                                    Else
                                        gbyForceCoil(iAddress + j) = 0
                                    End If
                                Next j
                                iAddress = iAddress + 8
                            Next i
                            iPkgLen = 5 + gtPLSet.byCRCByte
                            ReDim byOutBuffer(iPkgLen)
                            byOutBuffer(0) = gtPLSet.byAddress
                            For i = 1 To 5
                                byOutBuffer(i) = byInBuffer(i)
                            Next i
                        End If
                    Case 16             ' preset multiple registers
                        iAddress = byInBuffer(2) * &H100 + byInBuffer(3)
                        iAddress = iAddress - gtPLSet.iForceCoilAddress
                        iDataCount = byInBuffer(4) * &H100 + byInBuffer(5)
                        byByteCount = iDataCount * 2
                        If iAddress < 0 Then
                            iPkgLen = 2 + gtPLSet.byCRCByte
                            ReDim byOutBuffer(iPkgLen)
                            byOutBuffer(0) = gtPLSet.byAddress
                            byOutBuffer(1) = &H81
                            byOutBuffer(2) = &H2
                        ElseIf iDataCount > gcMAXFORCECOIL Or iDataCount < 1 Or byByteCount <> byInBuffer(6) Then
                            iPkgLen = 2 + gtPLSet.byCRCByte
                            ReDim byOutBuffer(iPkgLen)
                            byOutBuffer(0) = gtPLSet.byAddress
                            byOutBuffer(1) = &H81
                            byOutBuffer(2) = &H3
                        Else
                            For i = 0 To byByteCount - 1 Step 2
                                giPresetReg(iAddress) = byInBuffer(7 + i) * &H100 + byInBuffer(8 + i)
                                iAddress = iAddress + 1
                            Next i
                            iPkgLen = 5 + gtPLSet.byCRCByte
                            ReDim byOutBuffer(iPkgLen)
                            byOutBuffer(0) = gtPLSet.byAddress
                            For i = 1 To 5
                                byOutBuffer(i) = byInBuffer(i)
                            Next i
                        End If
                    Case Else
                        iPkgLen = 2 + gtPLSet.byCRCByte
                        ReDim byOutBuffer(iPkgLen)
                        byOutBuffer(0) = gtPLSet.byAddress
                        byOutBuffer(1) = &H81
                        byOutBuffer(2) = &H1
                End Select
            End If
            stbStatus.Panels(cPLDESPINDEX).Text = ""
            Select Case gtPLSet.byCheckMode
                Case 1, 2
                    iCrc = &HFFFF
                    For i = 0 To iPkgLen - 2
                        iCrc = gfunCal_CRC16(byOutBuffer(i), iCrc)
                    Next i
                    byOutBuffer(iPkgLen - 1) = iCrc And &HFF
                    byOutBuffer(iPkgLen) = gfunRightMove(iCrc, 8)
                    vaOutBuffer = byOutBuffer
                    MSComm1.Output = vaOutBuffer
            End Select
            If gbSpy Then
                strTemp = "←" & " " & Format$(Time, "hh:mm:ss")
                If gtPLSet.byFrameType = 0 Then
                    
                Else
                    For i = 0 To iPkgLen
                        If byOutBuffer(i) < 16 Then
                            strTemp = strTemp & " 0" & Hex$(byOutBuffer(i))
                        Else
                            strTemp = strTemp & " " & Hex$(byOutBuffer(i))
                        End If
                    Next i
                End If
                frmPortSpy.txtCOMSpy.Text = strTemp & vbCrLf & frmPortSpy.txtCOMSpy.Text
            End If
        End If
    End If
End Sub

⌨️ 快捷键说明

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