Module1.bas
上传用户:fuyouda
上传日期:2015-08-19
资源大小:6876k
文件大小:3k
源码类别:

家庭/个人应用

开发平台:

Visual C++

  1. Attribute VB_Name = "Module1"
  2. Option Explicit
  3. 'Time convert functions
  4. Private Const rDayZeroBias As Double = 109205#
  5. Private Const rMillisecondPerDay As Double = 10000000# * 60# * 60# * 24# / 10000#
  6. Public Type FILETIME
  7.     dwLowDateTime As Long
  8.     dwHighDateTime As Long
  9. End Type
  10. Declare Function FileTimeToLocalFileTime Lib "kernel32" (lpFileTime As FILETIME, lpLocalFileTime As FILETIME) As Long
  11. Declare Function LocalFileTimeToFileTime Lib "kernel32" (lpLocalFileTime As Any, lpFileTime As Any) As Long
  12. Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)
  13. Public ServerHandle, GroupHandle As Long
  14. Public GroupName  As String
  15. Public Type ServerItem
  16.     ServerName As String
  17.     ServerClassID As String
  18. End Type
  19. Public ServerItems(99) As ServerItem
  20. Public Type OPCItem
  21.     Handle As Long
  22.     Name As String
  23.     Value As Variant
  24.     Quality As Integer
  25.     Ft As FILETIME
  26.     Index As Long
  27. End Type
  28. Public ItemArr(1024) As OPCItem
  29. Public ItemIndex As Integer
  30. Public Function DoubleToFileTime(ByVal Value As Double) As FILETIME
  31.     Dim ftdt As FILETIME
  32.     CopyMemory ftdt, Value, Len(Value)
  33.     DoubleToFileTime = ftdt
  34. End Function
  35. Public Function FileTimeToDate(hFileTime As FILETIME) As Date
  36.     Dim ftl As Currency, Ft As FILETIME
  37.     FileTimeToLocalFileTime hFileTime, Ft
  38.     CopyMemory ftl, Ft, Len(Ft)
  39.     FileTimeToDate = CDate((ftl / rMillisecondPerDay) - rDayZeroBias)
  40. End Function
  41. Public Function Finditem(ItemHandle As Long) As Integer
  42.     Dim I As Integer
  43.     For I = 1 To ItemIndex
  44.         If ItemArr(I).Handle = ItemHandle Then
  45.             Finditem = ItemArr(I).Index
  46.             Exit For
  47.         End If
  48.     Next
  49. End Function
  50. Public Function AddItem(ItemName As String) As Integer
  51.     Dim h As Long
  52.     If ItemIndex > 1023 Then Exit Function
  53.     h = ASDAC_AddItem(ServerHandle, GroupHandle, ItemName)
  54.     If h > 0 Then
  55.         ItemIndex = ItemIndex + 1
  56.         ItemArr(ItemIndex).Handle = h
  57.         ItemArr(ItemIndex).Name = ItemName
  58.         ItemArr(ItemIndex).Index = ItemIndex
  59.         AddItem = ItemIndex
  60.     End If
  61. End Function
  62. Public Function RemoveItem(Index As Long) As Boolean
  63.     If Index > 0 And Index < 1025 Then
  64.         If ASDAC_RemoveItem(ServerHandle, GroupHandle, ItemArr(Index).Handle) Then
  65.             ItemArr(Index).Handle = 0
  66.             RemoveItem = True
  67.         End If
  68.     End If
  69. End Function
  70. Sub ServerDataChangeProc(ByVal ServerHandle As Long, ByVal GroupHandle As Long, ByVal ItemHandle As Long, ByVal Value As Variant, ByVal Ft As Double, ByVal Quality As Integer)
  71.     Dim Index As Integer
  72.     Index = Finditem(ItemHandle)
  73.     If Index > 0 Then
  74.         ItemArr(Index).Ft = DoubleToFileTime(Ft)
  75.         ItemArr(Index).Value = Value
  76.         ItemArr(Index).Quality = Quality
  77.         frmMain.RefreshItem (Index)
  78.     End If
  79. End Sub
  80. Sub ServerShutdownProc(ByVal ServerHandle As Long)
  81.     frmMain.Disconnect
  82. End Sub