📄 plcmod.bas
字号:
Attribute VB_Name = "PLCmod"
Option Explicit
Public Const FCSERR = "FCS verify error"
Public Const READSUC = "read data successfully"
Public Const FORMATERR = "other format error"
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Public Type CellWeight
BeforeWeight As Double
AfterWeight As Double
NetWeight As Double
End Type
Public Type WeightRecord
SingleWeight(1 To 8) As CellWeight
ProductNo As String
OperatorNo As String
RecordTime As Date
MachineNo As String
StationNo As Integer
LineNo As String
End Type
Public Function GetFCS(str As String) As String
Dim q As Integer
Dim l As Integer
Dim i As Integer
Dim R As String
q = 0
l = Len(str)
For i = 1 To l
q = Asc(Mid(str, i, 1)) Xor q
Next i
R = Hex$(q)
If Len(R$) = 1 Then
R = "0" + R
End If
GetFCS = R
End Function
Public Function ReadDMStr(dmNo As Integer, PLCNo As Integer, WordsNo As Integer) As String
Dim str As String
str = "@"
str = str & Format(PLCNo, "00")
str = str & "RD"
str = str & Format(dmNo, "0000")
str = str & Format(WordsNo, "0000")
str = str & GetFCS(str)
str = str & "*" & vbCr
ReadDMStr = str
End Function
Public Function VerifyDMReturn(ResultStr As String, PLCNo As Integer, WordsNo As Integer, result() As Long) As String
Dim a As Integer
Dim str As String, str2 As String
ReDim result(WordsNo)
a = Len(ResultStr)
'str = "@" & Format(WordsNo, "00")
' str = Mid(ResultStr, 2, 4)
If ((Format(PLCNo, "00") & "RD") <> Mid(ResultStr, 2, 4)) Then
VerifyDMReturn = FORMATERR
Exit Function
End If
If (Mid(ResultStr, 6, 2) = "13") Then
VerifyDMReturn = FCSERR
Exit Function
End If
If (Mid(ResultStr, 6, 2) <> "00") Then
VerifyDMReturn = FORMATERR
Exit Function
End If
str = Mid(ResultStr, Len(ResultStr) - 3, 2) '取所读数据的校验码
str2 = Mid(ResultStr, 1, Len(ResultStr) - 4) '取所读数据的校验码之前部分
str2 = GetFCS(str2) '计算所读数据的校验码之前部分的检验值
If (str <> str2) Then
VerifyDMReturn = FCSERR
Exit Function
End If
str = Mid(ResultStr, 8, 4 * WordsNo)
For a = 1 To WordsNo
str2 = Mid(str, (a - 1) * 4 + 1, 4)
result(a) = RevertDM(str2)
Next a
VerifyDMReturn = READSUC
End Function
Public Function RevertDM(DMStr As String) As Long
Dim k As Integer
Dim i As Integer
Dim f As String
Dim j As Integer
k = 0
For i = 1 To 4
f = Mid(DMStr, i, 1)
If f = "A" Then
j = 10
ElseIf f = "B" Then
j = 11
ElseIf f = "C" Then
j = 12
ElseIf f = "D" Then
j = 13
ElseIf f = "E" Then
j = 14
ElseIf f = "F" Then
j = 15
Else
j = Val(f)
End If
k = k * 16 + j
Next i
'l = CSng(k) / 100
RevertDM = k
End Function
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -