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