📄 form1.vb
字号:
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(360, 453)
Me.Controls.Add(Me.btnAsyncWrite)
Me.Controls.Add(Me.btnAsyncRead)
Me.Controls.Add(Me.txtSvrName)
Me.Controls.Add(Me.btnAdvise)
Me.Controls.Add(Me.txtUpdateRate)
Me.Controls.Add(Me.btnWrite)
Me.Controls.Add(Me.btnRead)
Me.Controls.Add(Me.btnConnect)
Me.Controls.Add(Me.Label6)
Me.Controls.Add(Me.Label5)
Me.Controls.Add(Me.Label4)
Me.Controls.Add(Me.Label3)
Me.Controls.Add(Me.Label2)
Me.Controls.Add(Me.Label1)
Me.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.Name = "Form1"
Me.Text = "Form1"
Me.ResumeLayout(False)
End Sub
#End Region
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim i%
Dim ItemName As String
' create TextBox
For i = 0 To ITEMMAX - 1
txtItemName(i) = New System.Windows.Forms.TextBox
txtItemName(i).AutoSize = False
txtItemName(i).Top = VAL_CTRL_TOP + (VAL_ITEMNAME_HEIGHT + VAL_CTRL_SPACE) * i
txtItemName(i).Left = VAL_CTRL_LEFT
txtItemName(i).Height = VAL_ITEMNAME_HEIGHT
txtItemName(i).Width = VAL_ITEMNAME_WIDTH
Me.Controls.Add(txtItemName(i))
txtValue(i) = New System.Windows.Forms.TextBox
txtValue(i).AutoSize = False
txtValue(i).Top = VAL_CTRL_TOP + (VAL_VALUE_HEIGHT + VAL_CTRL_SPACE) * i
txtValue(i).Left = VAL_CTRL_LEFT + (VAL_ITEMNAME_WIDTH + VAL_CTRL_SPACE)
txtValue(i).Height = VAL_VALUE_HEIGHT
txtValue(i).Width = VAL_VALUE_WIDTH
Me.Controls.Add(txtValue(i))
txtTime(i) = New System.Windows.Forms.TextBox
txtTime(i).AutoSize = False
txtTime(i).Top = VAL_CTRL_TOP + (VAL_TIME_HEIGHT + VAL_CTRL_SPACE) * i
txtTime(i).Left = VAL_CTRL_LEFT + (VAL_ITEMNAME_WIDTH + VAL_CTRL_SPACE) + (VAL_VALUE_WIDTH + VAL_CTRL_SPACE)
txtTime(i).Height = VAL_TIME_HEIGHT
txtTime(i).Width = VAL_TIME_WIDTH
Me.Controls.Add(txtTime(i))
txtQuality(i) = New System.Windows.Forms.TextBox
txtQuality(i).AutoSize = False
txtQuality(i).Top = VAL_CTRL_TOP + (VAL_QUALITY_HEIGHT + VAL_CTRL_SPACE) * i
txtQuality(i).Left = VAL_CTRL_LEFT + (VAL_ITEMNAME_WIDTH + VAL_CTRL_SPACE) + (VAL_VALUE_WIDTH + VAL_CTRL_SPACE) + (VAL_TIME_WIDTH + VAL_CTRL_SPACE)
txtQuality(i).Height = VAL_QUALITY_HEIGHT
txtQuality(i).Width = VAL_QUALITY_WIDTH
Me.Controls.Add(txtQuality(i))
Next
Try
FileOpen(1, STR_OPC_INI, OpenMode.Input)
Input(1, txtSvrName.Text)
Input(1, txtUpdateRate.Text)
i = 0
Do While Not EOF(1) ' loop until end of file
If i > ITEMMAX Then
Exit Do
End If
Input(1, txtItemName(i).Text)
i = i + 1
Loop
FileClose(1)
Catch
txtSvrName.Text = "Takebishi.Melsec"
txtUpdateRate.Text = "1000"
For i = 1 To ITEMMAX
txtItemName(i - 1).Text = "Device1.D" + Format$(i - 0)
Next i
FileClose(1)
End Try
End Sub
Private Sub Form1_Closed(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Closed
Dim i As Short
If bConnect = True Then
btnConnect_Click(btnConnect, New System.EventArgs)
End If
FileOpen(1, STR_OPC_INI, OpenMode.Output)
PrintLine(1, txtSvrName.Text)
PrintLine(1, txtUpdateRate.Text)
For i = 1 To ITEMMAX
PrintLine(1, txtItemName(i - 1).Text)
Next i
FileClose(1)
End Sub
Protected Overrides Sub Finalize()
MyBase.Finalize()
End Sub
Private Sub btnConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConnect.Click
Dim i%
Dim ServerHandles As Array
Dim Errors As Array
Dim ret As Integer
If txtSvrName.Text = "" Then
MsgBox("Server Name is not registed.")
Exit Sub
End If
If IsNumeric(txtUpdateRate.Text) = False Then
MsgBox("Update Rate is unsuitable.")
Exit Sub
End If
If bConnect = False Then
'--- connect OPCServer
OPCMyServer = New OPCAutomation.OPCServer
OPCMyServer.Connect(txtSvrName.Text, "")
OPCMyGroups = OPCMyServer.OPCGroups
OPCMyGroup = OPCMyGroups.Add("Group1")
OPCMyGroup.UpdateRate = Val(txtUpdateRate.Text) ' UpdateRate is 1000msec
OPCMyGroup.IsActive = False
OPCMyGroup.IsSubscribed = OPCMyGroup.IsActive
OPCMyItems = OPCMyGroup.OPCItems
For i = 1 To ITEMMAX
sItemName(i) = txtItemName(i - 1).Text
cH(i) = i
Next
OPCMyItems.AddItems(ITEMMAX, sItemName, cH, ServerHandles, Errors) ''', RequestedDataTypes, AccessPaths
For i = 1 To ITEMMAX
If Errors(i) = 0 Then
sH(i) = ServerHandles(i)
Else
MsgBox("Registing Items is failed : " + sItemName(i))
End If
Next
bConnect = True
txtSvrName.Enabled = False
txtUpdateRate.Enabled = False
btnConnect.Text = "Disconnect"
btnAdvise.Enabled = True
btnAdvise.Text = "Advise"
btnRead.Enabled = True
btnWrite.Enabled = True
btnAsyncRead.Enabled = False
btnAsyncWrite.Enabled = False
For i = 1 To ITEMMAX
txtItemName(i - 1).Enabled = False
Next i
' read data
btnRead_Click(btnRead, New System.EventArgs)
Else
'--- disconnect OPCServer
OPCMyGroup.IsActive = False
OPCMyGroups.Remove(OPCMyGroup.ServerHandle)
OPCMyItems = Nothing
OPCMyItem = Nothing
OPCMyGroups = Nothing
OPCMyGroup = Nothing
OPCMyServer.Disconnect()
'ret = Marshal.ReleaseComObject(OPCMyServer)
OPCMyServer = Nothing
System.GC.Collect() 'Execute Garbage Collection compulsorily.
bConnect = False
txtSvrName.Enabled = True
txtUpdateRate.Enabled = True
btnConnect.Text = "Connect"
btnAdvise.Enabled = False
btnRead.Enabled = False
btnWrite.Enabled = False
btnAsyncRead.Enabled = False
btnAsyncWrite.Enabled = False
For i = 1 To ITEMMAX
txtItemName(i - 1).Enabled = True
Next i
End If
End Sub
Private Sub btnRead_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRead.Click
Dim anItem As OPCAutomation.OPCItem
For Each anItem In OPCMyGroup.OPCItems
anItem.Read(OPCAutomation.OPCDataSource.OPCDevice) ', value, qual, time ' If subscribed, don't do this!
oVal(anItem.ClientHandle) = anItem.Value
dTime(anItem.ClientHandle) = anItem.TimeStamp
wQuality(anItem.ClientHandle) = anItem.Quality
Next anItem
anItem = Nothing
Copy(COPY_DIR.MEM_TO_DISP)
End Sub
Private Sub btnWrite_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnWrite.Click
Dim Errors As Array
Copy(COPY_DIR.DISP_TO_MEM)
OPCMyGroup.SyncWrite(ITEMMAX, sH, oVal, Errors)
End Sub
Private Sub btnAdvise_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdvise.Click
OPCMyGroup.IsActive = Not OPCMyGroup.IsActive
OPCMyGroup.IsSubscribed = OPCMyGroup.IsActive
If OPCMyGroup.IsActive = True Then
btnAdvise.Text = "Unadvise"
btnAsyncRead.Enabled = True
btnAsyncWrite.Enabled = True
' read data
btnRead_Click(btnRead, New System.EventArgs)
Else
btnAdvise.Text = "Advise"
btnAsyncRead.Enabled = False
btnAsyncWrite.Enabled = False
End If
End Sub
Private Sub btnAsyncRead_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAsyncRead.Click
Static Dim wTransID As Integer = 1000
Dim wCancelID As Integer
Dim Errors As Array
wTransID = wTransID + 1
OPCMyGroup.AsyncRead(ITEMMAX, sH, Errors, wTransID, wCancelID)
'wTransID = wTransID + 1
'OPCMyGroup.AsyncRead(ITEMMAX, sH, Errors, wTransID, wCancelID)
'OPCMyGroup.AsyncCancel(wCancelID)
End Sub
Private Sub btnAsyncWrite_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAsyncWrite.Click
Static Dim wTransID As Integer = 2000
Dim wCancelID As Integer
Dim Errors As Array
Copy(COPY_DIR.DISP_TO_MEM)
wTransID = wTransID + 1
OPCMyGroup.AsyncWrite(ITEMMAX, sH, oVal, Errors, wTransID, wCancelID)
End Sub
Private Sub OPCMyGroup_DataChange(ByVal TransactionID As Integer, ByVal NumItems As Integer, ByRef ClientHandles As System.Array, ByRef ItemValues As System.Array, ByRef Qualities As System.Array, ByRef TimeStamps As System.Array) Handles OPCMyGroup.DataChange
Dim i%
For i = 1 To NumItems
oVal(ClientHandles(i)) = ItemValues(i)
dTime(ClientHandles(i)) = TimeStamps(i)
wQuality(ClientHandles(i)) = Qualities(i)
Next i
Copy(COPY_DIR.MEM_TO_DISP)
End Sub
Private Sub OPCMyGroup_AsyncReadComplete(ByVal TransactionID As Integer, ByVal NumItems As Integer, ByRef ClientHandles As System.Array, ByRef ItemValues As System.Array, ByRef Qualities As System.Array, ByRef TimeStamps As System.Array, ByRef Errors As System.Array) Handles OPCMyGroup.AsyncReadComplete
Dim i%
For i = 1 To NumItems
oVal(ClientHandles(i)) = ItemValues(i)
dTime(ClientHandles(i)) = TimeStamps(i)
wQuality(ClientHandles(i)) = Qualities(i)
Next i
Copy(COPY_DIR.MEM_TO_DISP)
End Sub
Private Sub OPCMyGroup_AsyncWriteComplete(ByVal TransactionID As Integer, ByVal NumItems As Integer, ByRef ClientHandles As System.Array, ByRef Errors As System.Array) Handles OPCMyGroup.AsyncWriteComplete
End Sub
Private Sub OPCMyGroup_AsyncCancelComplete(ByVal CancelID As Integer) Handles OPCMyGroup.AsyncCancelComplete
End Sub
Private Sub Copy(ByVal Direction As COPY_DIR)
Dim i%
Select Case Direction
Case COPY_DIR.DISP_TO_MEM
For i = 1 To ITEMMAX
oVal(i) = txtValue(i - 1).Text
If IsDate(txtTime(i - 1).Text) = True Then
dTime(i) = txtTime(i - 1).Text
dTime(i) = dTime(i).ToUniversalTime()
'dTime(i) = Time(i - 1).Text
End If
If IsNumeric(txtQuality(i - 1).Text) = True Then
wQuality(i) = txtQuality(i - 1).Text
End If
Next
Case COPY_DIR.MEM_TO_DISP
For i = 1 To ITEMMAX
txtValue(i - 1).Text = oVal(i)
txtTime(i - 1).Text = dTime(i).ToLocalTime().ToString
'txtTime(i - 1).Text = dTime(i).ToString
txtQuality(i - 1).Text = wQuality(i).ToString
Next
End Select
End Sub
End Class
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -