📄 mainfrm.frm
字号:
End
Begin VB.TextBox EDIT_ADDR
Enabled = 0 'False
Height = 375
Left = 1080
Locked = -1 'True
TabIndex = 3
Text = "Text1"
Top = 360
Width = 1215
End
Begin VB.Frame Frame1
Caption = "控制卡信息"
Height = 1335
Left = 120
TabIndex = 0
Top = 120
Width = 2295
Begin VB.TextBox EDIT_CHANNEL
Enabled = 0 'False
Height = 375
Left = 1320
Locked = -1 'True
TabIndex = 4
Text = "Text2"
Top = 720
Width = 855
End
Begin VB.Label Label2
Caption = "中断申请号:"
Height = 255
Left = 240
TabIndex = 2
Top = 840
Width = 1215
End
Begin VB.Label Label1
Caption = "基地址:"
Height = 255
Left = 240
TabIndex = 1
Top = 360
Width = 735
End
End
End
Attribute VB_Name = "MAIN_FRAME"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
' 雷赛DMC3000控制卡编程示例之一
'Print -主要演示功能:
' No.1 控制卡的基本操作
' No.2 了解匀速/S形/T形运行速度曲线
' No.3 停止控制方式(指令停止,外部输入信号停止)
' No.4 多轴联动的实现
' No.5 持续运动实现
' No.6 对称/非对称的简单调配
' No.7 了解逻辑方向对设备的物理位置与显示位置关系的影响
' No.8 邦定该轴的状态显示及位置查询实现
'!-关键函数:
' 控制卡
' d3000_board_init
' d3000_board_close
' d3000_get_base_addr
' d3000_get_irq_channel
' 速度 -匀速
' 当T形驱动函数邦定的起始速度与运行速度相等时 , 为匀速, 不相等为T形速度
' S形函数函数实现匀速效果同T形原理一致
' d3000_start_t_move
' d3000_start_s_move
' 停止控制
' d3000_decel_stop
' 外部信号输入可参见硬件折册
' 多轴联动
' 实质是同时启动多个单轴的表现 , 不管是在点动定位或持续运行的需求下
' for( int i(0); i<anyAxis; i++)
' d3000_start_t_move(i, ... )//点动定位
' d3000_start_tv_move(i,... )//持续运行
' 持续运行
' d3000_start_tv_move T形持续
' d3000_start_rv_move S形持续
' 当使用持续驱动时,可使用外部输入信号停止
' 对称或非对称
' 当T形驱动函数邦定的加速时间或减速时间不一致时 , 为非对称速度曲线, 相等则为
' 对称速度曲线
' 逻辑方向
' 此方向的变化 , 会导致显示的位置变化正常, 但物理设备的运动方向发生反向, 此种发明
' 即成本低 , 功效会很大
' d3000_set_pls_outmode
' 指定轴的状态查询及位置显示
' d3000_motion_done //输入信号读取
' d3000_get_command_pos //指令位置获取
'#-注意事项:
' No.1 为了体验控制卡编程之乐趣,最好按手册连接好物理设备(驱动器,电机),这样学起来
' 会比较有成就感.
' No.2 程序结束时,必须调用d3000_board_close释放占有的系统资源,初始化失败除外,此
' 事项,在所有DMC系列的控制卡编程当中都适用,且必须使用。
' No.3 S形函数驱动需要注意,其加加速度值不能不比总加速时间大,道理不言自明。
' Writen by LEISAI-SUPPORT
' FAX: 0755 - 26402718
' TEL: 0755 - 26434329
' EMAIL: support@ LEISAI.com
' HTTP: www.LEISAI.com
Public m_nAxisST, m_nSpeedST As Integer
Public m_nActionST As Integer
Private Sub BUTTON_CLOSE_Click()
Unload Me
End Sub
Private Sub BUTTON_DECSTOP_Click()
d3000_decel_stop m_nAxisST, Val(EDIT_DECEL.Text)
End Sub
Private Sub BUTTON_OK_Click()
If d3000_motion_done(m_nAxisST) And 2 Then '指定轴在运行中,则返回
Return
End If
'获取编辑框的数据
Dim m_nStart, m_nSpeed, m_nPulse As Long
Dim m_fAccel, m_fDecel, m_fEff As Double
m_nStart = Val(EDIT_START.Text)
m_nSpeed = Val(EDIT_SPEED.Text)
m_nPulse = Val(EDIT_PULSE.Text)
m_fAccel = Val(EDIT_ACCEL.Text)
m_fDecel = Val(EDIT_DECEL.Text)
m_fEff = Val(EDIT_FEFF.Text)
'设定脉冲模式及逻辑方向(此处脉冲模式固定为P+D方向:脉冲+方向)
If CHECK_LOGIC = True Then
d3000_set_pls_outmode m_nAxisST, 1
Else
d3000_set_pls_outmode m_nAxisST, 0
End If
If m_nActionST = 0 Then '点动
'暂使用相对运动函数,若需要绝对,替换相对函数为绝对函数即可,其它可不变
If m_nSpeedST = 2 Then '?//S形驱动
d3000_start_s_move m_nAxisST, m_nPulse, m_nStart, m_nSpeed, m_fAccel, m_fEff
Else
d3000_start_t_move m_nAxisST, m_nPulse, m_nStart, m_nSpeed, m_fAccel, m_fDecel
End If 'T形加速,当起始速度与运动速度相等时,即为匀速
Else '持续驱动
Dim dir As Integer
If m_nPulse > 0 Then
dir = 1
Else
dir = -1 '以点动长度,即得运动方向
End If
If m_nSpeedST = 2 Then 'S形驱动
d3000_start_sv_move m_nAxis, m_nStart, m_nSpeed * dir, m_fAccel, m_fEff
Else
d3000_start_tv_move m_nAxis, m_nStart, m_nSpeed * dir, m_fAccel
End If
End If
End Sub
Private Sub CHECK_LOGIC_Click()
UpdateControl
End Sub
Private Sub CHECK_SYMMETRY_Click()
Dim m_fAccel, m_fDecel As Double
m_fAccel = Val(EDIT_ACCEL.Text)
m_fDecel = Val(EDIT_DECEL.Text)
If CHECK_SYMMETRY = 1 Then
EDIT_DECEL.Text = EDIT_ACCEL.Text '令减速时间与加速时间相等,即为对称曲线
Else
m_fDecel = m_fAccel * 2
EDIT_DECEL.Text = m_fDecel
EDIT_ACCEL.Text = m_fAccel
End If
UpdateControl
End Sub
Private Sub Form_Load()
If d3000_board_init() <= 0 Then '控制卡的初始化操作
MsgBox "初始化DMC3000卡失败!", vbOKOnly, "出错"
End If
'以下显示地址及中断申请号
Dim nAddress, nChannel As Long
nAddress = d3000_get_base_addr
nChannel = d3000_get_irq_channel
EDIT_ADDR.Text = nAddress
EDIT_CHANNEL.Text = nChannel
'初始化值
CHECK_SYMMETRY = 1
CHECK_LOGIC = 0
m_nActionST = 0
m_nSpeedST = 0
UpdateControl
End Sub
Private Sub Form_Unload(Cancel As Integer)
d3000_board_close '非常之重要,释放其占用的系统资源
End Sub
Private Sub RADIO_CMOVE_Click()
m_nActionST = 1
UpdateControl
End Sub
Private Sub RADIO_MOVE_Click()
m_nActionST = 0
UpdateControl
End Sub
Private Sub RADIO_SPEEDST_Click()
'匀速
EDIT_SPEED.Text = EDIT_START.Text
m_nSpeedST = 0
UpdateControl
End Sub
Private Sub RADIO_SSPEED_Click()
'S形曲线
Dim m_nStart, m_nSpeed As Integer
m_nStart = Val(EDIT_START.Text)
m_nSpeed = Val(EDIT_SPEED.Text)
If m_nStart = m_nSpeed Then
m_nSpeed = m_nStart + m_nStart
EDIT_SPEED.Text = m_nSpeed
End If
m_nSpeedST = 2
UpdateControl
End Sub
Private Sub RADIO_TSPEED_Click()
'T形曲线
Dim m_nStart, m_nSpeed As Integer
m_nStart = Val(EDIT_START.Text)
m_nSpeed = Val(EDIT_SPEED.Text)
If m_nStart = m_nSpeed Then
m_nSpeed = m_nStart + m_nStart
EDIT_SPEED.Text = m_nSpeed
End If
m_nSpeedST = 1
UpdateControl
End Sub
Private Sub Timer1_Timer()
EDIT_POSITION.Text = d3000_get_command(m_nAxisST)
EDIT_STATUS.Text = d3000_motion_done(m_nAxisST)
End Sub
Private Sub UpdateControl()
If CHECK_LOGIC = False Then
CHECK_LOGIC.Caption = "逻辑方向:反"
Else
CHECK_LOGIC.Caption = "逻辑方向:正"
End If
If m_nSpeedST = 2 Then
EDIT_FEFF.Enabled = True
Else
EDIT_FEFF.Enabled = False
End If
If m_nActionST = 1 Then
EDIT_PULSE.Enabled = True
Else
EDIT_PULSE.Enabled = False
End If
If CHECK_SYMMETRY = 1 Then
CHECK_SYMMETRY.Caption = "对称曲线"
Else
CHECK_SYMMETRY.Caption = "非对称曲线"
End If
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -