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

📄 mdl_s7.bas

📁 一个根据s7200协议写的驱动控件
💻 BAS
字号:
Attribute VB_Name = "mdl_S7"
Private Const SrcAddr As Integer = 0
Private Const DstAddr As Integer = 2
Public Function read_Filed_Data(n_Type As String, n_Addr As Variant, n_Count As Integer) As Variant          '读单个单位
Dim m_Reader As S7RorWProtocal
Dim tmp_Byte As Byte
Dim mData() As Byte
Dim i As Integer
Dim tmp_varAddr As Variant
With m_Reader
    .SD = &H68
    .Length = &H1B
    .LengthRepeate = &H1B
    .DestinationAddr = 0
    .SourceAddress = 2
    .FunctionCode = &H4C
    .DstSrvAccPt = &H32
    .SrcSrvAccPt = &H1
     ReDim .DataUnit.DATA_UNIT_Command(9)
    .DataUnit.DATA_UNIT_Command(0) = 0
    .DataUnit.DATA_UNIT_Command(1) = 0
    .DataUnit.DATA_UNIT_Command(2) = 0
    .DataUnit.DATA_UNIT_Command(3) = 0
    .DataUnit.DATA_UNIT_Command(4) = 0
    .DataUnit.DATA_UNIT_Command(5) = &HE
    .DataUnit.DATA_UNIT_Command(6) = 0
    .DataUnit.DATA_UNIT_Command(7) = 0
    .DataUnit.DATA_UNIT_Command(8) = &H4
    .DataUnit.DATA_UNIT_Command(9) = &H1
    .DataUnit.DATA_UNIT_Command_Address.Identifier = &H12
    .DataUnit.DATA_UNIT_Command_Address.Command = &HA
    .DataUnit.DATA_UNIT_Command_Address.D_H10 = &H10
    .DataUnit.DATA_UNIT_Command_Address.Data_Size = 4
    .DataUnit.DATA_UNIT_Command_Address.D_H0 = 0
    .DataUnit.DATA_UNIT_Command_Address.Read_Count = n_Count
    .DataUnit.DATA_UNIT_Command_Address.DataBlockNum(0) = 0
    .DataUnit.DATA_UNIT_Command_Address.DataBlockNum(1) = 0
    .DataUnit.DATA_UNIT_Command_Address.Data_Type = &H84
     SHL n_Addr, 3
     tmp_varAddr = n_Addr
     SHR tmp_varAddr, 16
    .DataUnit.DATA_UNIT_Command_Address.Address(0) = tmp_varAddr And &HFF
     tmp_varAddr = n_Addr
     SHR tmp_varAddr, 8
    .DataUnit.DATA_UNIT_Command_Address.Address(1) = tmp_varAddr And &HFF
     tmp_varAddr = n_Addr
     .DataUnit.DATA_UNIT_Command_Address.Address(2) = tmp_varAddr And &HFF
     mData = ComposeRorWdata(m_Reader)
     For i = 4 To 27
         tmp_Byte = tmp_Byte + mData(i)
     Next
     tmp_Byte = tmp_Byte Mod 256
    .FCS = tmp_Byte
    .ED = &H16
     mData = ComposeRorWdata(m_Reader)
End With
read_Filed_Data = mData
End Function

Public Function write_filed_Data() As Variant     '写单个单位

End Function

Public Function read_block_Data() As Variant

End Function

Public Function write_block_Data() As Variant

End Function

Public Function ComposeRorWdata(n_S7rw As S7RorWProtocal) As Variant
Dim m_data() As Byte
Dim m_s7Data As S7RorWProtocal
Dim temp_Byte() As Byte
Dim m_size As Integer
'SD LE LER SD DA SA FC DASP SSAP DU FCS ED
m_s7Data.SD = &H68                               '1
m_s7Data.Length = n_S7rw.Length                  '1
m_s7Data.LengthRepeate = n_S7rw.LengthRepeate    '1
m_s7Data.SD = &H68                               '1
m_s7Data.DestinationAddr = n_S7rw.DestinationAddr '1
m_s7Data.SourceAddress = n_S7rw.SourceAddress     '1
m_s7Data.FunctionCode = n_S7rw.FunctionCode        '1
m_s7Data.DstSrvAccPt = n_S7rw.DstSrvAccPt         '1
m_s7Data.SrcSrvAccPt = n_S7rw.SrcSrvAccPt         '1
m_s7Data.DataUnit = n_S7rw.DataUnit
m_s7Data.FCS = n_S7rw.FCS
m_s7Data.ED = &H16
m_size = VarType(m_s7Data)
ComposeRorWdata = m_s7Data
End Function

Private Function GetAckCmd() As Variant           '获得确认命令
Dim m_ack As S7AckProtocal
Dim m_data(0 To 4) As Byte
Dim m_Fcs As Variant
    m_ack.DstAddr = DstAddr
    m_ack.SrcAddr = SrcAddr
    m_ack.ED = &H16
    m_ack.SD = &H10
    m_ack.FunctionCode = &H5C
    m_Fcs = (m_ack.DstAddr + m_ack.SrcAddr + m_ack.FunctionCode) Mod 256
    m_ack.FCS = m_Fcs
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    m_data(0) = m_ack.SD
    m_data(1) = m_ack.SrcAddr
    m_data(2) = m_ack.DstAddr
    m_data(3) = m_ack.FunctionCode
    m_data(4) = m_ack.SD
GetAckCmd = m_data
End Function






⌨️ 快捷键说明

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