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

📄 plcmod.bas

📁 利用PC基于Windows操作系统和VB编程环境读取Omron PLC程序中的数据
💻 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 + -