📄 frmmodbusplat.frm
字号:
strOutBuffer(3) = "8"
strOutBuffer(4) = "1"
strOutBuffer(5) = "0"
strOutBuffer(6) = "3"
Else
byByteCount = iDataCount * 2
iPkgLen = 8 + byByteCount * 2 + gtPLSet.byCRCByte
strOutBuffer(0) = ":"
strOutBuffer(1) = strInBuffer(1)
strOutBuffer(2) = strInBuffer(2)
strOutBuffer(3) = "0"
strOutBuffer(4) = "4"
strOutBuffer(5) = Mid$(Hex$(byByteCount), 1, 1)
strOutBuffer(6) = Mid$(Hex$(byByteCount), 2, 1)
k = 0
For i = 0 To byByteCount - 1 Step 2
byData = gfunRightMove(giInputReg(iAddress), 8)
strOutBuffer(7 + k) = Mid$(Hex$(byData), 1, 1)
strOutBuffer(8 + k) = Mid$(Hex$(byData), 2, 1)
k = k + 2
byData = giInputReg(iAddress) And &HFF
strOutBuffer(7 + k) = Mid$(Hex$(byData), 1, 1)
strOutBuffer(8 + k) = Mid$(Hex$(byData), 2, 1)
k = k + 2
iAddress = iAddress + 1
Next i
End If
Case 5 ' force single coil
iAddress = (CByte(strInBuffer(5)) * &H10 + CByte(strInBuffer(6))) _
* &H100 + CByte(strInBuffer(7)) * &H10 + CByte(strInBuffer(8))
iAddress = iAddress - gtPLSet.iForceCoilAddress
If iAddress < 0 Then
iPkgLen = 8 + gtPLSet.byCRCByte
ReDim strOutBuffer(iPkgLen)
strOutBuffer(0) = ":"
strOutBuffer(1) = strInBuffer(1)
strOutBuffer(2) = strInBuffer(2)
strOutBuffer(3) = "8"
strOutBuffer(4) = "1"
strOutBuffer(5) = "0"
strOutBuffer(6) = "2"
Else
byData = CByte(strInBuffer(11)) * &H10 + CByte(strInBuffer(12))
If byData <> 0 Then
iPkgLen = 8 + gtPLSet.byCRCByte
ReDim strOutBuffer(iPkgLen)
strOutBuffer(0) = ":"
strOutBuffer(1) = strInBuffer(1)
strOutBuffer(2) = strInBuffer(2)
strOutBuffer(3) = "8"
strOutBuffer(4) = "1"
strOutBuffer(5) = "0"
strOutBuffer(6) = "2"
Else
byData = CByte(strInBuffer(9)) * &H10 + CByte(strInBuffer(10))
If byData = &HFF Then
gbyForceCoil(iAddress) = 1
iPkgLen = 14 + gtPLSet.byCRCByte
ReDim strOutBuffer(iPkgLen)
strOutBuffer(0) = ":"
For i = 1 To 12
strOutBuffer(i) = strInBuffer(i)
Next i
ElseIf byData = &H0 Then
gbyForceCoil(iAddress) = 0
iPkgLen = 14 + gtPLSet.byCRCByte
ReDim strOutBuffer(iPkgLen)
strOutBuffer(0) = ":"
For i = 1 To 12
strOutBuffer(i) = strInBuffer(i)
Next i
Else
iPkgLen = 8 + gtPLSet.byCRCByte
ReDim strOutBuffer(iPkgLen)
strOutBuffer(0) = ":"
strOutBuffer(1) = strInBuffer(1)
strOutBuffer(2) = strInBuffer(2)
strOutBuffer(3) = "8"
strOutBuffer(4) = "1"
strOutBuffer(5) = "0"
strOutBuffer(6) = "2"
End If
End If
End If
Case 6 ' preset single register
iAddress = (CByte(strInBuffer(5)) * &H10 + CByte(strInBuffer(6))) _
* &H100 + CByte(strInBuffer(7)) * &H10 + CByte(strInBuffer(8))
iAddress = iAddress - gtPLSet.iPresetRegAddress
If iAddress < 0 Then
iPkgLen = 8 + gtPLSet.byCRCByte
ReDim strOutBuffer(iPkgLen)
strOutBuffer(0) = ":"
strOutBuffer(1) = strInBuffer(1)
strOutBuffer(2) = strInBuffer(2)
strOutBuffer(3) = "8"
strOutBuffer(4) = "1"
strOutBuffer(5) = "0"
strOutBuffer(6) = "2"
Else
giPresetReg(iAddress) = (CByte(strInBuffer(9)) * &H10 + CByte(strInBuffer(10))) _
* &H100 + (CByte(strInBuffer(11)) * &H10 + CByte(strInBuffer(12)))
iPkgLen = 14 + gtPLSet.byCRCByte
ReDim strOutBuffer(iPkgLen)
strOutBuffer(0) = ":"
For i = 1 To 12
strOutBuffer(i) = strInBuffer(i)
Next i
End If
Case 15 ' force multiple coils
iAddress = (CByte(strInBuffer(5)) * &H10 + CByte(strInBuffer(6))) _
* &H100 + CByte(strInBuffer(7)) * &H10 + CByte(strInBuffer(8))
iAddress = iAddress - gtPLSet.iForceCoilAddress
iDataCount = (CByte(strInBuffer(9)) * &H10 + CByte(strInBuffer(10))) _
* &H100 + CByte(strInBuffer(11)) * &H10 + CByte(strInBuffer(12))
If iDataCount Mod 8 = 0 Then
byByteCount = Int(iDataCount / 8)
Else
byByteCount = Int(iDataCount / 8) + 1
End If
If iAddress < 0 Then
iPkgLen = 8 + gtPLSet.byCRCByte
ReDim strOutBuffer(iPkgLen)
strOutBuffer(0) = ":"
strOutBuffer(1) = strInBuffer(1)
strOutBuffer(2) = strInBuffer(2)
strOutBuffer(3) = "8"
strOutBuffer(4) = "1"
strOutBuffer(5) = "0"
strOutBuffer(6) = "2"
ElseIf iDataCount > gcMAXFORCECOIL Or iDataCount < 1 Or _
byByteCount <> (CByte(strInBuffer(13)) * &H10 + CByte(strInBuffer(14))) Then
iPkgLen = 8 + gtPLSet.byCRCByte
ReDim strOutBuffer(iPkgLen)
strOutBuffer(0) = ":"
strOutBuffer(1) = strInBuffer(1)
strOutBuffer(2) = strInBuffer(2)
strOutBuffer(3) = "8"
strOutBuffer(4) = "1"
strOutBuffer(5) = "0"
strOutBuffer(6) = "3"
Else
k = 15
For i = 0 To byByteCount - 1
byData = CByte(strInBuffer(k)) * &H10 + CByte(strInBuffer(k + 1))
k = k + 2
For j = 0 To 7
If byData And 2 ^ j Then
gbyForceCoil(iAddress + j) = 1
Else
gbyForceCoil(iAddress + j) = 0
End If
Next j
iAddress = iAddress + 8
Next i
iPkgLen = 14 + gtPLSet.byCRCByte
ReDim strOutBuffer(iPkgLen)
strOutBuffer(0) = ":"
For i = 1 To 12
strOutBuffer(i) = strInBuffer(i)
Next i
End If
Case 16 ' preset multiple registers
iAddress = iAddress = (CByte(strInBuffer(5)) * &H10 + CByte(strInBuffer(6))) _
* &H100 + CByte(strInBuffer(7)) * &H10 + CByte(strInBuffer(8))
iAddress = iAddress - gtPLSet.iForceCoilAddress
iDataCount = (CByte(strInBuffer(9)) * &H10 + CByte(strInBuffer(10))) _
* &H100 + CByte(strInBuffer(11)) * &H10 + CByte(strInBuffer(12))
byByteCount = iDataCount * 2
If iAddress < 0 Then
iPkgLen = 8 + gtPLSet.byCRCByte
ReDim strOutBuffer(iPkgLen)
strOutBuffer(0) = ":"
strOutBuffer(1) = strInBuffer(1)
strOutBuffer(2) = strInBuffer(2)
strOutBuffer(3) = "8"
strOutBuffer(4) = "1"
strOutBuffer(5) = "0"
strOutBuffer(6) = "2"
ElseIf iDataCount > gcMAXFORCECOIL Or iDataCount < 1 Or _
byByteCount <> (CByte(strInBuffer(13)) * &H10 + CByte(strInBuffer(14))) Then
iPkgLen = 8 + gtPLSet.byCRCByte
ReDim strOutBuffer(iPkgLen)
strOutBuffer(0) = ":"
strOutBuffer(1) = strInBuffer(1)
strOutBuffer(2) = strInBuffer(2)
strOutBuffer(3) = "8"
strOutBuffer(4) = "1"
strOutBuffer(5) = "0"
strOutBuffer(6) = "3"
Else
k = 15
For i = 0 To byByteCount - 1 Step 2
giPresetReg(iAddress) = (CByte(strInBuffer(k)) * &H10 + CByte(strInBuffer(k + 1))) _
* &H100 + CByte(strInBuffer(k + 2)) * &H10 + CByte(strInBuffer(k + 3))
k = k + 4
iAddress = iAddress + 1
Next i
iPkgLen = 14 + gtPLSet.byCRCByte
ReDim strOutBuffer(iPkgLen)
strOutBuffer(0) = ":"
For i = 1 To 12
strOutBuffer(i) = strInBuffer(i)
Next i
End If
Case Else
iPkgLen = 8 + gtPLSet.byCRCByte
ReDim strOutBuffer(iPkgLen)
strOutBuffer(0) = ":"
strOutBuffer(1) = strInBuffer(1)
strOutBuffer(2) = strInBuffer(2)
strOutBuffer(3) = "8"
strOutBuffer(4) = "1"
strOutBuffer(5) = "0"
strOutBuffer(6) = "1"
End Select
Else
Select Case byInBuffer(1)
Case 1 'coil
iAddress = byInBuffer(2) * &H100 + byInBuffer(3)
iAddress = iAddress - gtPLSet.iCoilAddress
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 > gcMAXCOIL 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 = iDataCount / 8
Else
byByteCount = iDataCount / 8 + 1
End If
iPkgLen = 2 + byByteCount + gtPLSet.byCRCByte
ReDim byOutBuffer(iPkgLen)
byOutBuffer(0) = gtPLSet.byAddress
byOutBuffer(1) = &H1
byOutBuffer(2) = byByteCount
For i = 0 To byByteCount - 1
byOutBuffer(3 + i) = 0
For j = 0 To 15
byOutBuffer(3 + i) = byOutBuffer(3 + i) + gbyCoil(iAddress) * 2 ^ j
iAddress = iAddress + 1
Next j
Next i
End If
Case 2 ' input
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -