📄 mdl_s7.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 + -