这是步进电机控制程序的部分函数,求详细注解,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

解决方案 »

  1.   

    看你的代码, 外面应该还有一块单片机或者类似的控制模块. 
    而且最终控制步进电机的也是那个模块. 
    你的程序却妄图在VB里面实现步进控制和输出, 纯粹把外部模块当成了I/O+功放来用, 这是很有问题的做法, 
    不是说做不到, 或许你用的外部控制支持你这么干. 但这绝对不是什么好主意.一般来说,正确的做法是:  在单片机(或者其他什么东西)里写好最基本的步进程序, 后面接到功率输出电路再接到步进电机上去. 
    然后单片机上留几个通讯参数专门给电脑用于"控制", 控制什么呢? 
    比如步进间隔(时长由单片机提供), 这个控制步进电机的速度.
    还有, 电脑直接发"单步"指令和多部指令, 就是连续走几步. 所以电脑上的指令其实是很简单的, 功能实现都是在外部模块上的.