📄 ctrlcard.bas
字号:
Attribute VB_Name = "CtrlCard"
'********************** 运动控制模块 ********************
'为了简单、方便、快捷地开发出通用性好、可扩展性强、
'维护方便的应用系统,我们在控制卡函数库的基础上将
'所有库函数进行了分类封装。下面的示例使用一块运动
'控制卡
'********************************************************
Public Result As Integer '返回值
Public m_nHardwareVer As Integer '硬件版本号
Const MAXAXIS = 4 '最大轴数
'*******************初始化函数************************
'该函数中包含了控制卡初始化常用的库函数,这是调用
'其他函数的基础,所以必须在示例程序中最先调用
'返回值<=0表示初始化失败,返回值>0表示初始化成功
'*****************************************************
Public Function Init_Card() As Integer
Result = adt8940_initial '卡初始化
If Result <= 0 Then
Init_Card = Result
Exit Function
End If
m_nHardwareVer = get_hardware_ver(0)
For i = 1 To MAXAXIS
set_range 0, i, 500 / 5 '设置范围,决定倍率,设初始倍率为5
set_command_pos 0, i, 0 '逻辑位置计数器清零
set_actual_pos 0, i, 0 '实位位置计数器清零
set_startv 0, i, 100 '设置初始速度
set_speed 0, i, 200 '设置驱动速度
set_acc 0, i, 625 '设置加速度
Next i
Init_Card = Result
End Function
'********************获取版本信息************************
'
' 该函数用于获取硬件版本和函数库版本
'
' 参数: libver -库版本号, hardwarever - 硬件版本号
'
'*********************************************************
Public Function Get_Version(libver As Double, hardwarever As Integer) As Integer
Dim ver As Integer
ver = get_lib_version(0)
libver = CDbl((ver Mod 100) / 10)
hardwarever = get_hardware_ver(0)
End Function
'**********************设置速度模块***********************
' 依据参数的值,判断是匀速还是加减速
' 设置范围,是决定倍率的参数
' 在硬件版本为1时,设置范围决定倍率
' 在硬件版本为2时,已经停用
' 设置轴的初始速度、驱动速度和加速度
' 参数: axis -轴号
' StartV -初始速度
' Speed -驱动速度
' Add -加速度
' Ratio -倍率
' 返回值=0正确,返回值=1错误
'*********************************************************
Public Function Setup_Speed(ByVal axis As Integer, ByVal startv As Long, ByVal speed As Long, ByVal Add As Long, ByVal Ratio As Long) As Integer
If m_nHardwareVer = 1 Then
If (startv - speed >= 0) Then
set_range 0, axis, Ratio
Result = set_startv(0, axis, startv / Ratio)
set_speed 0, axis, startv / Ratio
Else
set_range 0, axis, Ratio
Result = set_startv(0, axis, startv / Ratio)
set_speed 0, axis, speed / Ratio
set_acc 0, axis, Add / 125 / Ratio
End If
Else
If (startv - speed >= 0) Then
Result = set_startv(0, axis, startv)
set_speed 0, axis, startv
Else
Result = set_startv(0, axis, startv)
set_speed 0, axis, speed
set_acc 0, axis, Add / 125
End If
End If
End Function
'*********************单轴驱动函数**********************
'该函数用于驱动单个运动轴运动
'参数:axis-轴号,pulse-输出的脉冲数
'返回值=0正确,返回值=1错误
'*******************************************************
Public Function Axis_Pmove(ByVal axis As Integer, ByVal pulse As Long) As Integer
Result = pmove(0, axis, pulse)
Axis_Pmove = Rresult
End Function
'*******************任意两轴插补函数********************
'该函数用于驱动任意两轴进行插补运动
'参数: axis1 , axis2 - 参与插补的轴号
' pulse1,pulse2-对应轴的输出脉冲数
'返回值=0正确,返回值=1错误
'*******************************************************
Public Function Interp_Move2(ByVal axis1 As Integer, ByVal axis2 As Integer, ByVal pulse1 As Long, ByVal pulse2 As Long) As Integer
Result = inp_move2(0, axis1, axis2, pulse1, pulse2)
Interp_Move2 = Result
End Function
'*******************任意三轴插补函数********************
'该函数用于驱动任意三轴进行插补运动
'参数: axis1 , axis2,axis3 - 参与插补的轴号
' pulse1,pulse2,pulse3-对应轴的输出脉冲数
'返回值=0正确,返回值=1错误
'*******************************************************
Public Function Interp_Move3(ByVal axis1 As Integer, ByVal axis2 As Integer, ByVal axis3 As Integer, ByVal pulse1 As Long, ByVal pulse2 As Long, ByVal pulse3 As Long) As Integer
Result = inp_move3(0, axis1, axis2, axis3, pulse1, pulse2, pulse3)
Interp_Move3 = Result
End Function
'*******************四轴插补函数********************
'该函数用于驱动XYZW四轴进行插补运动
'参数: pulse1,pulse2,pulse3,pulse4-对应轴的输出脉冲数
'返回值=0正确,返回值=1错误
'*******************************************************
Public Function Interp_Move4(ByVal pulse1 As Long, ByVal pulse2 As Long, ByVal pulse3 As Long, ByVal pulse4 As Long) As Integer
Result = inp_move4(0, pulse1, pulse2, pulse3, pulse4)
Interp_Move4 = Result
End Function
'*******************停止驱动函数********************
'该函数用于停止驱动,分为立即停止和减速停止
'参数: axis-轴号,mode: 0-立即停止,1-减速停止
'返回值=0正确,返回值=1错误
'*******************************************************
Public Function StopRun(ByVal axis As Integer, ByVal mode As Integer) As Integer
If mode = 0 Then
Result = sudden_stop(0, axis)
Else
Result = dec_stop(0, axis)
End If
End Function
'*******************设置位置函数********************
'该函数用于设置逻辑位置和实际位置
'参数: axis-轴号,pos-位置设置值
' mode 0 - 设置逻辑位置, 1 - 设置实际位置
'返回值=0正确,返回值=1错误
'*******************************************************
Public Function Setup_Pos(ByVal axis As Integer, ByVal pos As Long, ByVal mode As Integer) As Integer
If mode = 0 Then
Result = set_command_pos(0, axis, pos)
Else
Result = set_actual_pos(0, axis, pos)
End If
End Function
'*******************获取运动信息函数********************
'该函数用于获取逻辑位置、实际位置和运行速度
'参数: axis-轴号,logps-逻辑位置
' actpos-实际位置,speed-运行速度
'返回值=0正确,返回值=1错误
'*******************************************************
Public Function Get_CurrentInf(ByVal axis As Integer, LogPos As Long, actpos As Long, speed As Long) As Integer
Result = get_command_pos(0, axis, LogPos)
get_actual_pos 0, axis, actpos
get_speed 0, axis, speed
Get_CurrentInf = Result
End Function
'*******************获取运动状态函数********************
'该函数用于获取各轴的驱动状态和插补的驱动状态
'参数: axis-轴号,value-状态(0-驱动结束,非0-正在驱动)
' mode 0-获取单轴的驱动状态,非0-获取插补的驱动状态
'返回值=0正确,返回值=1错误
'*******************************************************
Public Function Get_MoveStatus(ByVal axis As Integer, value As Long, ByVal mode As Integer) As Integer
If mode = 0 Then
GetMove_Status = get_status(0, axis, value)
Else
GetMove_Status = get_inp_status(0, value)
End If
End Function
'***********************读取输入点*******************************
'
' 该函数用于读取单个输入点
'
' 参数:number-输入点(0 ~ 39)
'
' 返回值:0 - 低电平,1 - 高电平,-1 - 错误
'
'****************************************************************
Public Function Read_Input(ByVal number As Integer) As Integer
Read_Input = read_bit(0, number)
End Function
'*********************输出单点函数******************************
'
' 该函数用于输出单点信号
'
' 参数: number-输出点(0 ~ 15),value 0-低电平、1-高电平
'
' 返回值=0正确,返回值=1错误
'****************************************************************
Public Function Write_Output(ByVal number As Integer, ByVal value As Integer) As Integer
Write_Output = write_bit(0, number, value)
End Function
'********************设置脉冲输出方式**********************
'
' 该函数用于设置脉冲的工作方式
'
' 参数:axis-轴号, value-脉冲方式 0-脉冲+脉冲方式 1-脉冲+方向方式
'
' 返回值=0正确,返回值=1错误
'
' 默认脉冲方式为脉冲+方向方式
'
' 本程序采用默认的正逻辑脉冲和方向输出信号正逻辑
'
'*********************************************************
Public Function Setup_PulseMode(ByVal axis As Integer, ByVal value As Integer) As Integer
Setup_PulseMode = set_pulse_mode(0, axis, value, 0, 0)
End Function
'********************设置限位信号方式**********************
'
' 该函数用于设定正/负方向限位输入nLMT信号的模式
'
' 参数: axis -轴号
' value1 0-正限位有效 1-正限位无效
' value2 0-负限位有效 1-负限位无效
' logic 0-低电平有效 1-高电平有效
' 默认模式为: 正限位有效,负限位有效,低电平有效
'
' 返回值=0正确,返回值=1错误
' *********************************************************
Public Function Setup_LimitMode(ByVal axis As Integer, ByVal value1 As Integer, ByVal value2 As Integer, ByVal logic As Integer) As Integer
Setup_LimitMode = set_limit_mode(0, axis, value1, value2, logic)
End Function
'
'********************设置stop0信号方式**********************
'
' 该函数用于设定stop0信号的模式
'
' 参数: axis -轴号
' value 0-无效 1-有效
' logic 0-低电平有效 1-高电平有效
' 默认模式为: 无效
'
' 返回值=0正确,返回值=1错误
' *********************************************************
Public Function Setup_Stop0Mode(ByVal axis As Integer, ByVal value As Integer, ByVal logic As Integer) As Integer
Setup_Stop0Mode = set_stop0_mode(0, axis, value, logic)
End Function
'********************设置stop1信号方式**********************
'
' 该函数用于设定stop1信号的模式
'
' 参数: axis -轴号
' value 0-无效 1-有效
' logic 0-低电平有效 1-高电平有效
' 默认模式为: 无效
'
' 返回值=0正确,返回值=1错误
' *********************************************************
Public Function Setup_Stop1Mode(ByVal axis As Integer, ByVal value As Integer, ByVal logic As Integer) As Integer
Setup_Stop1Mode = set_stop1_mode(0, axis, value, logic)
End Function
'********************设置硬件停止**************************
'
' 该函数用于设定硬件停止的模式,硬件版本为1无此功能
'
' 参数: value 0-无效 1-有效
' logic 0-低电平有效 1-高电平有效
' 默认模式为: 无效
'
' 返回值=0正确,返回值=1错误
' 硬件停止信号固定使用P3端子板34引脚(IN31)
' *********************************************************
Public Function Setup_HardStop(ByVal value As Integer, ByVal logic As Integer) As Integer
Setup_HardStop = set_suddenstop_mode(0, value, logic)
End Function
'********************设置延时**************************
'
' 该函数用于设定延时,硬件版本为1无此功能
'
' 参数: time - 延时时间(单位为us)
'
' 返回值=0正确,返回值=1错误
' *********************************************************
Public Function Setup_Delay(ByVal time As Long) As Integer
Setup_Delay = set_delay_time(0, time * 8)
End Function
'**********************获取延时状态**********************
' 该函数用于获取延时的状态,硬件版本为1无此功能
' 返回值 0 - 延时结束 1 - 延时进行中
'********************************************************
Public Function Get_DelayStatus() As Integer
Get_DelayStatus = get_delay_status(0)
End Function
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -