📄 form1.frm
字号:
VERSION 5.00
Object = "{648A5603-2C6E-101B-82B6-000000000014}#1.1#0"; "MSCOMM32.OCX"
Begin VB.Form Form1
Caption = "Form1"
ClientHeight = 9195
ClientLeft = 60
ClientTop = 345
ClientWidth = 4680
LinkTopic = "Form1"
ScaleHeight = 9195
ScaleWidth = 4680
StartUpPosition = 3 '窗口缺省
Begin VB.CommandButton Command1
Caption = "Clear"
Height = 855
Left = 3600
TabIndex = 1
Top = 2160
Width = 975
End
Begin MSCommLib.MSComm MSComm
Left = 3720
Top = 120
_ExtentX = 1005
_ExtentY = 1005
_Version = 393216
BaudRate = 4800
InputMode = 1
End
Begin VB.ListBox List2
Height = 8880
Left = 120
TabIndex = 0
Top = 120
Width = 3255
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Dim MyServer As OPCServer
Dim MyGroups As OPCGroups
Dim MyGroup_DigitalRead As OPCGroup
Dim MyGroup_AnalogRead As OPCGroup
Dim MyItems_DigitalRead As OPCItems
Dim MyItems_AnalogRead As OPCItems
Dim ServerHandle() As Long
Dim Errors() As Long
Dim ClientHandles_DigitalRead(1 To 18) As Long
Dim ClientHandles_AnalogRead(1 To 6) As Long
Dim OPCItemsID_DigitalRead(1 To 18) As String
Dim OPCItemsID_AnalogRead(1 To 6) As String
Dim sendArray(1 To 19) As Byte
Dim DigitalRead(1 To 18) As Byte
Dim AnalogRead(1 To 6) As Integer
Dim DigitalValue() As Variant '从WinCC接收数字量
Dim AnalogValue() As Variant '从WinCC接收模拟量
Private Sub Command1_Click()
List2.Clear
End Sub
Private Sub Form_Load()
MSComm.PortOpen = True
'OPC初始化
Set MyServer = New OPCServer
MyServer.Connect "OPCServer.WinCC"
Set MyGroups = MyServer.OPCGroups
Set MyGroup_DigitalRead = MyGroups.Add("Group3")
Set MyGroup_AnalogRead = MyGroups.Add("Group4")
'从WinCC读数字变量ItemID连接
OPCItemsID_DigitalRead(1) = "WB_GSJ_Y"
OPCItemsID_DigitalRead(2) = "WB_GSJ_M"
OPCItemsID_DigitalRead(3) = "WB_GSJ_T"
OPCItemsID_DigitalRead(4) = "WB_1PWB_Y"
OPCItemsID_DigitalRead(5) = "WB_1PWB_M"
OPCItemsID_DigitalRead(6) = "WB_1PWB_T"
OPCItemsID_DigitalRead(7) = "WB_2PWB_Y"
OPCItemsID_DigitalRead(8) = "WB_2PWB_M"
OPCItemsID_DigitalRead(9) = "WB_2PWB_T"
OPCItemsID_DigitalRead(10) = "WB_3PWB_Y"
OPCItemsID_DigitalRead(11) = "WB_3PWB_M"
OPCItemsID_DigitalRead(12) = "WB_3PWB_T"
OPCItemsID_DigitalRead(13) = "WB_4PWB_Y"
OPCItemsID_DigitalRead(14) = "WB_4PWB_M"
OPCItemsID_DigitalRead(15) = "WB_4PWB_T"
OPCItemsID_DigitalRead(16) = "WB_YZJ_Y"
OPCItemsID_DigitalRead(17) = "WB_YZJ_M"
OPCItemsID_DigitalRead(18) = "WB_YZJ_T"
'从WinCC读模拟变量ItemID连接
OPCItemsID_AnalogRead(1) = "WB_DL_H"
OPCItemsID_AnalogRead(2) = "WB_DL_L"
OPCItemsID_AnalogRead(3) = "WB_YW_H"
OPCItemsID_AnalogRead(4) = "WB_1YW"
OPCItemsID_AnalogRead(5) = "WB_2YW"
OPCItemsID_AnalogRead(6) = "WB_3YW"
For i = 1 To 18
ClientHandles_DigitalRead(i) = i
Next i
For i = 1 To 6
ClientHandles_AnalogRead(i) = i + 18
Next i
Set MyItems_DigitalRead = MyGroup_DigitalRead.OPCItems
Set MyItems_AnalogRead = MyGroup_AnalogRead.OPCItems
'从WinCC读数字量
MyItems_DigitalRead.AddItems 18, OPCItemsID_DigitalRead, ClientHandles_DigitalRead, ServerHandle, Errors
MyGroup_DigitalRead.SyncRead OPCCache, 18, ServerHandle, DigitalValue, Errors
For i = 1 To 18
If DigitalValue(i) Then
DigitalRead(i) = 1
Else
DigitalRead(i) = 0
End If
Next i
'整合数字量字节,共6字节
For i = 1 To 16 Step 3
sendArray((i + 2) \ 3) = DigitalRead(i) * 16 + DigitalRead(i + 1) * 32 + DigitalRead(i + 2) * 64
Next i
'从WinCC读模拟量
MyItems_AnalogRead.AddItems 6, OPCItemsID_AnalogRead, ClientHandles_AnalogRead, ServerHandle, Errors
MyGroup_AnalogRead.SyncRead OPCCache, 6, ServerHandle, AnalogValue, Errors
For i = 1 To 6
AnalogRead(i) = AnalogValue(i)
Next i
'整合模拟量字节,共12个
j% = 1
For i = 7 To 17 Step 2
sendArray(i) = AnalogRead(j) \ 256
sendArray(i + 1) = AnalogRead(j) Mod 256
j = j + 1
Next i
'加最后校验字节
sendArray(19) = 254
'输出到列表,调试用
For i = 1 To 19
List2.AddItem sendArray(i)
Next i
'发送
MSComm.Output = sendArray
MSComm.PortOpen = False
End
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -