plcmod.bas
来自「利用PC基于Windows操作系统和VB编程环境读取Omron PLC程序中的数」· BAS 代码 · 共 136 行
BAS
136 行
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 + =
减小字号Ctrl + -
显示快捷键?