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

📄 bas_s7_ppi.bas

📁 VB与S7200的PPI通信
💻 BAS
字号:
Attribute VB_Name = "S7_PPI"
Option Explicit

'******************************************************************
'功能:读取西门子PPI协议
'编程:麻树波
'Email:msb.sf@163.com
'QQ:105714583
'******************************************************************

Private Declare Sub Sleep Lib "kernel32" (ByVal dwseconds As Long)
Public Function Comm_OK(comDEv As Object)
    Dim str_val(0 To 5)  As Byte
    Sleep (100)
    str_val(0) = &H10
    str_val(1) = &H2
    str_val(2) = &H0
    str_val(3) = &H5C
    str_val(4) = &H5E
    str_val(5) = &H16
    comDEv.Output = str_val
End Function

Public Function s7200_VW_WRITE(comDEv As Object, VwStart As Integer, Vwcount As Integer, VW_v() As Long)
    Dim Temp_FCS         As Variant
    Dim i                As Long
    Dim AllDatanum       As Long

    If Vwcount > 111 Then                                  '数量限制

        MsgBox "输入数量大于最大允许值(111pcs)...", vbOKOnly + vbCritical, "PPI communication error..."
        Exit Function
    End If

    'S(1)=S(2)=hex(Vw数×2+31)   数据块数量 自 S(4)-S(end)
    'S(24)=vw数*2                数据字节数
    'S(16)=s(24)6+4
    'S(33)=(S(24)*8)\256
    'S(34)=(S(24)*8) mod 256
    '数组数目=S(1)+4

    AllDatanum = Vwcount * 2 + 36
    ReDim str_write(AllDatanum) As Byte
    
    str_write(1) = Vwcount * 2 + 31
    str_write(2) = str_write(1)
    str_write(24) = Vwcount * 2
    str_write(16) = str_write(24) + 4
    str_write(33) = (Vwcount * 16) \ 256
    str_write(34) = (Vwcount * 16) Mod 256

    str_write(29) = (VwStart * 8) \ 256                    '地址
    str_write(30) = (VwStart * 8) Mod 256                  '地址

    str_write(0) = &H68
    str_write(3) = &H68
    str_write(4) = &H2
    str_write(5) = &H0
    str_write(6) = &H7C
    str_write(7) = &H32
    str_write(8) = &H1
    str_write(9) = &H0
    str_write(10) = &H0
    str_write(11) = &H43
    str_write(12) = &H1
    str_write(13) = &H0
    str_write(14) = &HE
    str_write(15) = &H0
    str_write(17) = &H5
    str_write(18) = &H1
    str_write(19) = &H12
    str_write(20) = &HA
    str_write(21) = &H10
    str_write(22) = &H2
    str_write(23) = &H0
    str_write(25) = &H0
    str_write(26) = &H1
    str_write(27) = &H84
    str_write(28) = &H0
    str_write(31) = &H0
    str_write(32) = &H4

    For i = 35 To AllDatanum - 2 Step 2                    '分隔数据
        str_write(i) = VW_v((i - 35) / 2) \ 256
        str_write(i + 1) = VW_v((i - 35) / 2) Mod 256
    Next
    For i = 4 To AllDatanum - 2                            '计算数据和
        Temp_FCS = Temp_FCS + str_write(i)
    Next
    str_write(AllDatanum - 1) = Temp_FCS Mod 256           '计算检验码
    str_write(AllDatanum) = &H16
    comDEv.Output = str_write

    Comm_OK comDEv

End Function

Public Function s7200_M_set(comDEv As Object, Mx As Byte, My As Byte, Mv As Byte)
    Dim str_write(0 To 37) As Byte
    Dim Temp_FCS         As Variant
    Dim i                As Long


    If Mx > 31 Or My > 7 Then                              '数量限制
        MsgBox "输入M寄存器地址不合法...", vbOKOnly + vbCritical, "PPI communication error..."
        Exit Function
    End If

    If Mv > 1 Then                                         '数量限制
        MsgBox "输入M寄存器数值不合法(0o r 1)...", vbOKOnly + vbCritical, "PPI communication error..."
        Exit Function
    End If

    'S(30)=Mx*8+My
    'S(35)=Mv                数值

    str_write(0) = &H68
    str_write(1) = &H20
    str_write(2) = &H20
    str_write(3) = &H68
    str_write(4) = &H2
    str_write(5) = &H0
    str_write(6) = &H7C
    str_write(7) = &H32
    str_write(8) = &H1
    str_write(9) = &H0
    str_write(10) = &H0
    str_write(11) = &H43
    str_write(12) = &H1
    str_write(13) = &H0
    str_write(14) = &HE
    str_write(15) = &H0
    str_write(16) = &H5
    str_write(17) = &H5
    str_write(18) = &H1
    str_write(19) = &H12
    str_write(20) = &HA
    str_write(21) = &H10
    str_write(22) = &H1
    str_write(23) = &H0
    str_write(24) = &H1
    str_write(25) = &H0
    str_write(26) = &H0
    str_write(27) = &H83
    str_write(28) = &H0
    str_write(29) = &H0
    str_write(30) = Mx * 8 + My
    str_write(31) = &H0
    str_write(32) = &H3

    str_write(33) = &H0
    str_write(34) = &H1
    str_write(35) = Mv

    For i = 4 To 35                                        '计算数据和
        Temp_FCS = Temp_FCS + str_write(i)
    Next
    str_write(36) = Temp_FCS Mod 256                       '计算检验码
    str_write(37) = &H16
    comDEv.Output = str_write

    Comm_OK comDEv

End Function
Public Function s7200_M_writebyte(comDEv As Object, Mx As Byte, Mv As Byte)
    Dim str_write(0 To 37) As Byte
    Dim Temp_FCS         As Variant
    Dim i                As Long
    
    If Mx > 31 Then                                        '数量限制
        MsgBox "输入M寄存器地址不合法(M<=31)...", vbOKOnly + vbCritical, "PPI communication error..."
        Exit Function
    End If

    If Mv > 255 Then
        MsgBox "输入M寄存器数值超过最大值(255)...", vbOKOnly + vbCritical, "PPI communication error..."
        Exit Function
    End If

    'S(30)=Mx*8+My
    'S(35)=Mv                数值

    str_write(0) = &H68
    str_write(1) = &H20
    str_write(2) = &H20
    str_write(3) = &H68
    str_write(4) = &H2
    str_write(5) = &H0
    str_write(6) = &H7C
    str_write(7) = &H32
    str_write(8) = &H1
    str_write(9) = &H0
    str_write(10) = &H0
    str_write(11) = &H43
    str_write(12) = &H1
    str_write(13) = &H0
    str_write(14) = &HE
    str_write(15) = &H0
    str_write(16) = &H5
    str_write(17) = &H5
    str_write(18) = &H1
    str_write(19) = &H12
    str_write(20) = &HA
    str_write(21) = &H10
    str_write(22) = &H2
    str_write(23) = &H0
    str_write(24) = &H1
    str_write(25) = &H0
    str_write(26) = &H0
    str_write(27) = &H83
    str_write(28) = &H0
    str_write(29) = &H0
    str_write(30) = Mx * 8
    str_write(31) = &H0
    str_write(32) = &H4

    str_write(33) = &H0
    str_write(34) = &H8
    str_write(35) = Mv

    For i = 4 To 35                                        '计算数据和
        Temp_FCS = Temp_FCS + str_write(i)
    Next
    str_write(36) = Temp_FCS Mod 256                       '计算检验码
    str_write(37) = &H16
    comDEv.Output = str_write

    Comm_OK comDEv

End Function

Public Function S7200_Vw_read(comDEv As Object, VwStart As Integer, Vwcount As Integer)
    If Vwcount > 111 Then                                  '数量限制

        MsgBox "输入数量大于最大允许值(111pcs)...", vbOKOnly + vbCritical, "PPI communication error..."
        Exit Function
    End If

    Dim str_read(0 To 32) As Byte
    Dim i                As Integer
    Dim Temp_FCS         As Variant

    str_read(0) = &H68
    str_read(1) = &H1B
    str_read(2) = &H1B
    str_read(3) = &H68
    str_read(4) = &H2
    str_read(5) = &H0
    str_read(6) = &H6C
    str_read(7) = &H32
    str_read(8) = &H1
    str_read(9) = &H0
    str_read(10) = &H0
    str_read(11) = &H0
    str_read(12) = &H0
    str_read(13) = &H0
    str_read(14) = &HE
    str_read(15) = &H0
    str_read(16) = &H0
    str_read(17) = &H4
    str_read(18) = &H1
    str_read(19) = &H12
    str_read(20) = &HA
    str_read(21) = &H10
    str_read(22) = &H4
    str_read(23) = &H0
    str_read(24) = Vwcount
    str_read(25) = &H0
    str_read(26) = &H1
    str_read(27) = &H84
    str_read(28) = &H0
    str_read(29) = (VwStart * 8) \ 256
    str_read(30) = (VwStart * 8) Mod 256

    For i = 4 To 30
        Temp_FCS = Temp_FCS + str_read(i)
    Next i
    str_read(31) = Temp_FCS Mod 256
    str_read(32) = &H16
    comDEv.Output = str_read

    Comm_OK comDEv

End Function

⌨️ 快捷键说明

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