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

📄 acpci.bas

📁 用vb编写的工程控制程序
💻 BAS
字号:
Attribute VB_Name = "acpci"
Declare Function timeGetTime Lib "winmm.dll" () As Long

'win98 IO DRIVER  --------------------------------------------------
Public Declare Function AC_OpenDriver Lib "acpci.dll" () As Long
Public Declare Function AC_CloseDriver Lib "acpci.dll" (ByVal HANDLE As Long) As Long
Public Declare Function AC_Version Lib "acpci.dll" (ByVal HANDLE As Long, Version As Byte) As Long

Public Declare Function AC_inp Lib "acpci.dll" (ByVal HANDLE As Long, ByVal Address As Long) As Long
Public Declare Function AC_inpw Lib "acpci.dll" (ByVal HANDLE As Long, ByVal Address As Long) As Long

Public Declare Function AC_outp Lib "acpci.dll" (ByVal HANDLE As Long, ByVal Address As Long, ByVal Data As Long) As Long
Public Declare Function AC_outpw Lib "acpci.dll" (ByVal HANDLE As Long, ByVal Address As Long, ByVal Data As Long) As Long

Public Declare Function AC_inps Lib "acpci.dll" (ByVal HANDLE As Long, ByVal Address As Long, Data As Byte, ByVal Count As Long) As Long
Public Declare Function AC_inpws Lib "acpci.dll" (ByVal HANDLE As Long, ByVal Address As Long, Data As Integer, ByVal Count As Long) As Long

Public Declare Function AC_outps Lib "acpci.dll" (ByVal HANDLE As Long, ByVal Address As Long, output_data As Byte, ByVal Count As Long) As Long
Public Declare Function AC_outpws Lib "acpci.dll" (ByVal HANDLE As Long, ByVal Address As Long, output_data As Integer, ByVal Count As Long) As Long

'-----------PCI CARD ----------------
'-----------------------AC6011-----------------------
Public Declare Function AC_6011_INIT Lib "acpci.dll" (ByVal NTportio As Long, cardid As Long) As Long
Public Declare Function AC_6011_AD Lib "acpci.dll" (ByVal NTportio As Long, ByVal cardid As Long, ByVal chn As Long, ByVal times As Long) As Long
Public Declare Function AC_6011_DI Lib "acpci.dll" (ByVal NTportio As Long, ByVal cardid As Long) As Long
Public Declare Function AC_6011_DO Lib "acpci.dll" (ByVal NTportio As Long, ByVal cardid As Long, ByVal DoData As Long) As Long

Public Declare Function AC_6011_DA Lib "acpci.dll" (ByVal NTportio As Long, ByVal cardid As Long, ByVal chn As Long, ByVal DaData As Long) As Long

'----------------------------------------------------
Global NTportio As Long
Public cardid(100) As Long
Public i As Integer
Global Kp As Single
Global Ti As Single
Global Td As Single
Global e(1 To 5) As Single
Global et As Single
Global Sr As Single
Global A As Single
Global T As Single
Global FileName As String
Global OpenFile As String
Global filepath As String
Global CT As Single
Public u As Single
Public x1 As Single
Public y1 As Single
Public GO As Boolean

Public Function lu_bo(ByVal X As Single) As Single
    Static y1 As Single
    If i <= 1 Then
        y1 = X
    Else
        y1 = (1 - A) * X + A * y1
    End If
    lu_bo = y1
End Function
Public Function pid(ByVal X As Single) As Single
    e(5) = X
    If i <= 1 Then
        su = e(5)
    Else
        su = Kp * ((e(5) - e(2) + 3 * e(4) - 3 * e(3)) / 6 + T * e(5) * CT + Td * (e(5) + 2 * e(4) - 6 * e(3) + 2 * e(2) + e(1)) / 6 / T)
    End If
    
    e(1) = e(2)
    e(2) = e(3)
    e(3) = e(4)
    e(4) = e(5)
    pid = su
End Function
Public Sub send_data(ByVal CMD As Byte, ByVal D1 As Byte, ByVal D2 As Byte)
  Dim cc(5) As Byte
  Dim CRC As Byte
  Dim sum As Integer
  Dim temp(2) As Integer
  Dim j As Integer
   temp(0) = CMD
   temp(1) = D1
   temp(2) = D2
  sum = temp(0) + temp(1) + temp(2)
    CRC = LoByte(sum)  '低8位
    cc(0) = &H84
    cc(1) = CMD
    cc(2) = D1
    cc(3) = D2
    cc(4) = CRC
    cc(5) = &HFC
    For j = 0 To 5
        Form1.MSComm1.Output = cc  'cc(j)
    Next j
    Do
     DoEvents
    Loop Until Form1.MSComm1.OutBufferCount = 0
End Sub
Public Function Main()
    Dim data_DA As Integer
    Dim Mystr As String
     Dim Mystring() As String
     
    Dim xt As Single
    Dim yt As Single
    Dim S_LU As Single
    Dim tm As Long
    '---------------------------------------------
    Open OpenFile For Input As #1
    Do
    tm = timeGetTime
    If Not EOF(1) Then
         Line Input #1, Mystr
    Else
         Close #1
         Exit Function
    End If
    If GO = False Then Exit Function
    If acpci.i < 10 Then acpci.i = acpci.i + 1
   
    'data_AD = AC_6011_AD(NTportio, cardid(0), 0, 1)  '采样
    'data_AD = 200
    
    'S_AD = data_AD * 400# / 4095#
    Mystring = Split(Mystr, Chr(9), -1, 1)
    S_AD = Mystring(1)
    S_LU = lu_bo(S_AD)
    et = acpci.Sr - S_LU
    u = u + pid(et)
    If u > 400 Then u = 400
    If u < -400 Then u = -400
    data_DA = Int(u * 1023 / 400)
    '--------------------------------------改成串口-------
    'data_da = Int(u * 2048 / 400 + 2048)
     ' AC_6011_DA NTportio, cardid(0), 0, data_DA '计算机输出
     '---------串口输出--------
      CMD = &H1   '控制命令 输出
      'If data_DA < 0 Then
        'data_DA = Abs(data_DA)
        'D1 = data_DA Mod 256
        'D2 = (data_DA \ 256) + 128
      'Else
        'D1 = data_DA Mod 256
        'D2 = data_DA \ 256
      'End If
      D1 = LoByte(data_DA)  '低8位
      D2 = HiByte(data_DA)  '高8位
     Call send_data(CMD, D1, D2)
     '-----------画图形-----------
     If acpci.i > 1 Then
        Form1.Picture1.DrawWidth = 1.5
        xt = x1 + 30
        yt = S_LU * 10
        Form1.Picture1.Line (x1, y1)-(xt, yt), vbRed
        x1 = xt
        y1 = yt
    Else
        x1 = 0
        y1 = S_LU * 10
     End If
    '--------------'保存采样数据------------------
         'Open acpci.FileName For Append As #2
         'Print #2, S_LU
         'Close #2
         
    While timeGetTime - tm < 50 '延时
        DoEvents
    Wend
   Loop
  '----------------------------------------------------------
err0:
        MsgBox "出现严重错误!", vbOKOnly + vbInformation
End Function

⌨️ 快捷键说明

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