📄 function_define.bas
字号:
Attribute VB_Name = "Function_Define"
' 功能函数定义模块
' -----------------------------------------------------------
Option Explicit
' -----------------------------------------------------------
' 产生动作脉冲
' -----------------------------------------------------------
Function moveRel(distance As Long)
Dim i As Integer, j As Integer
Dim d As Long, s As Long
' 移动的步数总是正的,方向不同而已
d = Abs(distance)
If distance > 0 Then
WriteChannel DirChannel, CW
ElseIf distance < 0 Then
WriteChannel DirChannel, CCW
End If
' 先重置所有参数
realAccPC = 0
realDecPC = 0
realPatrolPC = 0
If d > 0 Then
' 有加速、匀速、减速时的情形
If d >= accPC + decPC Then
realAccPC = accPC
realDecPC = decPC
realPatrolPC = d - accPC - decPC
' 产生动作脉冲
For i = 1 To FQSubdiv
pulseGenerator accPCTable(i), accFQTable(i)
Next
pulseGenerator realPatrolPC, patrolFQ
For i = 1 To FQSubdiv
pulseGenerator decPCtable(i), decFQtable(i)
Next
' 行程较短时的情形
Else
s = 0
For i = 1 To FQSubdiv
s = s + accPCTable(i) + decPCtable(FQSubdiv - i + 1)
If s > d Then
For j = 1 To i - 1
realAccPC = realAccPC + accPCTable(j)
realDecPC = realDecPC + decPCtable(FQSubdiv - j + 1)
Next
' 产生动作脉冲
For j = 1 To i - 1
pulseGenerator accPCTable(j), accFQTable(j)
Next
pulseGenerator d - realDecPC - realAccPC, accFQTable(i)
For j = (FQSubdiv - i + 1) + 1 To FQSubdiv
pulseGenerator decPCtable(j), decFQtable(j)
Next
realAccPC = realAccPC + (d - realDecPC - realAccPC)
Exit For
End If
Next
End If
End If
End Function
' -----------------------------------------------------------
' 脉冲产生函数,n为脉冲个数,f为脉冲频率
' -----------------------------------------------------------
Function pulseGenerator(ByVal n As Long, ByVal f As Long)
Dim i As Long
Dim s As Long, c As Double
Debug.Print f, n
'错误保护
If f < 1 Or n < 1 Then Exit Function
Dim QPC As LARGE_INTEGER
Dim QPF As LARGE_INTEGER
QueryPerformanceFrequency QPF
c = (QPF.lowpart / f) / 2
For i = 1 To n
' 设置高电平
WriteChannel PulseChannel, 1
' QueryPerformanceCounter可以达到微秒级的精度
QueryPerformanceCounter QPC
s = QPC.lowpart
Do While True
QueryPerformanceCounter QPC
If (QPC.lowpart - s) >= c Then
Exit Do
End If
Loop
' 设置低电平
WriteChannel PulseChannel, 0
QueryPerformanceCounter QPC
s = QPC.lowpart
Do While True
QueryPerformanceCounter QPC
If (QPC.lowpart - s) >= c Then
Exit Do
End If
Loop
DoEvents
Next
End Function
'############################################################
'############################################################
' -----------------------------------------------------------
' 初始化系统
' -----------------------------------------------------------
Sub initSystem()
getConfigParameters
' reset hardware
WriteChannel PulseChannel, 0
WriteChannel DirChannel, 0
pulseSendCount = 0
End Sub
' -----------------------------------------------------------
' 进行频率细分,并计算各个频率的脉冲数
' -----------------------------------------------------------
Sub FQSubdivision()
Dim i As Integer, s As Long
Dim k As Double
ReDim accFQTable(1 To FQSubdiv) As Long
ReDim decFQtable(1 To FQSubdiv) As Long
ReDim accPCTable(1 To FQSubdiv) As Long
ReDim decPCtable(1 To FQSubdiv) As Long
'计算加速频率细分表
k = (patrolFQ - startFQ) / (FQSubdiv)
s = 0
For i = 1 To FQSubdiv
accFQTable(i) = Round(k * (i - 1) + startFQ)
accPCTable(i) = Round(accFQTable(i) * accDura / FQSubdiv)
s = s + accPCTable(i)
Next
accPC = s
'计算减速频率细分表
k = patrolFQ / (FQSubdiv + 1)
s = 0
For i = 1 To FQSubdiv
decFQtable(i) = Round(patrolFQ - k * i)
decPCtable(i) = Round(decFQtable(i) * decDura / FQSubdiv)
s = s + decPCtable(i)
Next
decPC = s
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -