这是步进电机控制程序的部分函数,求详细注解,outdata不懂,最好把这一块也详细介绍下,谢谢
Public Declare Function timeGetTime Lib "winmm.dll" () As Long
Public outdata(0 To 8) As Byte
Public yanshi_jg As Integer
Public inpdata As Variant
Public temp0 As Integer'****延时函数,单位是毫秒,支持小数****
Public Function YanShi(HaoMiao As Double)
Dim t1
t1 = timeGetTime
While (timeGetTime - t1) < HaoMiao
DoEvents '返回
Wend '循环语句
End Function'****求和函数,对通信的前面字节进行求和,生成一个校验字节****
Public Function fun1_sub()
Dim a As Byte
Dim b As Integer
a = 0
b = 0
For i = 0 To 7
b = outdata(i) + b
Next i
a = Int(b / 256)
a = b - a * 256
outdata(8) = a
End FunctionPublic Function sudu_set(a1 As Integer, a2 As Double) '设定运行最高速度和加减速频率
Dim temp0 As Byte
Dim temp1 As Byte
temp0 = 0
temp1 = 0
temp0 = Int(a2 / 256)
temp1 = a2 - temp0 * 256
'配置电机的最高速度和加减速(正常运行)
outdata(0) = &HFF
outdata(1) = &HAA
outdata(2) = a1
outdata(3) = &H5
outdata(4) = 50
outdata(5) = 0 '加速频率50HZ
outdata(6) = temp1
outdata(7) = temp0 '速度
Call fun1_sub
Monitorfrm.MSComm.Output = outdata
YanShi (yanshi_jg)
End FunctionPublic Function okset_sub(a As Integer, a0 As Integer, a1 As Integer) Dim temp0 As Byte
Dim temp1 As Byte
temp0 = 0
temp1 = 0
temp0 = Int(a0 / 256)
temp1 = a0 - temp0 * 256
'配置电机的细分、步距角
outdata(0) = &HFF
outdata(1) = &HAA
outdata(2) = a '电机号
outdata(3) = &H1
outdata(4) = temp1
outdata(5) = temp0 '4细分
outdata(6) = a1 '步距角1.8度
outdata(7) = &H0
Call fun1_sub
Monitorfrm.MSComm.Output = outdata
YanShi (yanshi_jg)
End FunctionPublic Function fangxqs_set(a1 As Integer, a2 As Integer, a3 As Integer) '设定运行方向与启动速度
Dim temp0 As Byte
Dim temp1 As Byte
temp0 = 0
temp1 = 0
temp0 = Int(a3 / 256)
temp1 = a3 - temp0 * 256
'配置电机的直走方向和速度
outdata(0) = &HFF
outdata(1) = &HAA
outdata(2) = a1
outdata(3) = &H4
outdata(4) = a2 '方向,0为正向,1为反转
outdata(5) = temp1
outdata(6) = temp0
outdata(7) = 0
Call fun1_sub
Monitorfrm.MSComm.Output = outdata
YanShi (yanshi_jg)
End FunctionPublic Function cdu_set(a1 As Integer, a2 As Double) '设定运行距离
Dim temp4 As Double
Dim temp5 As Double
Dim temp0 As Byte
Dim temp1 As Byte
Dim temp2 As Byte
temp0 = 0
temp1 = 0
temp2 = 0
temp4 = 0#
temp2 = Int(a2 / 65536)
temp4 = a2 - temp2 * 65536
temp1 = Int(temp4 / 256)
temp5 = temp1
temp0 = temp4 - temp5 * 256
'配置电机的运行长度
outdata(0) = &HFF
outdata(1) = &HAA
outdata(2) = a1
outdata(3) = &H3
outdata(4) = temp0
outdata(5) = temp1
outdata(6) = temp2 '长度
outdata(7) = 0
Call fun1_sub
Monitorfrm.MSComm.Output = outdata
YanShi (yanshi_jg)
End Function
Public Declare Function timeGetTime Lib "winmm.dll" () As Long
Public outdata(0 To 8) As Byte
Public yanshi_jg As Integer
Public inpdata As Variant
Public temp0 As Integer'****延时函数,单位是毫秒,支持小数****
Public Function YanShi(HaoMiao As Double)
Dim t1
t1 = timeGetTime
While (timeGetTime - t1) < HaoMiao
DoEvents '返回
Wend '循环语句
End Function'****求和函数,对通信的前面字节进行求和,生成一个校验字节****
Public Function fun1_sub()
Dim a As Byte
Dim b As Integer
a = 0
b = 0
For i = 0 To 7
b = outdata(i) + b
Next i
a = Int(b / 256)
a = b - a * 256
outdata(8) = a
End FunctionPublic Function sudu_set(a1 As Integer, a2 As Double) '设定运行最高速度和加减速频率
Dim temp0 As Byte
Dim temp1 As Byte
temp0 = 0
temp1 = 0
temp0 = Int(a2 / 256)
temp1 = a2 - temp0 * 256
'配置电机的最高速度和加减速(正常运行)
outdata(0) = &HFF
outdata(1) = &HAA
outdata(2) = a1
outdata(3) = &H5
outdata(4) = 50
outdata(5) = 0 '加速频率50HZ
outdata(6) = temp1
outdata(7) = temp0 '速度
Call fun1_sub
Monitorfrm.MSComm.Output = outdata
YanShi (yanshi_jg)
End FunctionPublic Function okset_sub(a As Integer, a0 As Integer, a1 As Integer) Dim temp0 As Byte
Dim temp1 As Byte
temp0 = 0
temp1 = 0
temp0 = Int(a0 / 256)
temp1 = a0 - temp0 * 256
'配置电机的细分、步距角
outdata(0) = &HFF
outdata(1) = &HAA
outdata(2) = a '电机号
outdata(3) = &H1
outdata(4) = temp1
outdata(5) = temp0 '4细分
outdata(6) = a1 '步距角1.8度
outdata(7) = &H0
Call fun1_sub
Monitorfrm.MSComm.Output = outdata
YanShi (yanshi_jg)
End FunctionPublic Function fangxqs_set(a1 As Integer, a2 As Integer, a3 As Integer) '设定运行方向与启动速度
Dim temp0 As Byte
Dim temp1 As Byte
temp0 = 0
temp1 = 0
temp0 = Int(a3 / 256)
temp1 = a3 - temp0 * 256
'配置电机的直走方向和速度
outdata(0) = &HFF
outdata(1) = &HAA
outdata(2) = a1
outdata(3) = &H4
outdata(4) = a2 '方向,0为正向,1为反转
outdata(5) = temp1
outdata(6) = temp0
outdata(7) = 0
Call fun1_sub
Monitorfrm.MSComm.Output = outdata
YanShi (yanshi_jg)
End FunctionPublic Function cdu_set(a1 As Integer, a2 As Double) '设定运行距离
Dim temp4 As Double
Dim temp5 As Double
Dim temp0 As Byte
Dim temp1 As Byte
Dim temp2 As Byte
temp0 = 0
temp1 = 0
temp2 = 0
temp4 = 0#
temp2 = Int(a2 / 65536)
temp4 = a2 - temp2 * 65536
temp1 = Int(temp4 / 256)
temp5 = temp1
temp0 = temp4 - temp5 * 256
'配置电机的运行长度
outdata(0) = &HFF
outdata(1) = &HAA
outdata(2) = a1
outdata(3) = &H3
outdata(4) = temp0
outdata(5) = temp1
outdata(6) = temp2 '长度
outdata(7) = 0
Call fun1_sub
Monitorfrm.MSComm.Output = outdata
YanShi (yanshi_jg)
End Function
而且最终控制步进电机的也是那个模块.
你的程序却妄图在VB里面实现步进控制和输出, 纯粹把外部模块当成了I/O+功放来用, 这是很有问题的做法,
不是说做不到, 或许你用的外部控制支持你这么干. 但这绝对不是什么好主意.一般来说,正确的做法是: 在单片机(或者其他什么东西)里写好最基本的步进程序, 后面接到功率输出电路再接到步进电机上去.
然后单片机上留几个通讯参数专门给电脑用于"控制", 控制什么呢?
比如步进间隔(时长由单片机提供), 这个控制步进电机的速度.
还有, 电脑直接发"单步"指令和多部指令, 就是连续走几步. 所以电脑上的指令其实是很简单的, 功能实现都是在外部模块上的.