這是步進電機控制程式的部分函式,求詳細注解,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 Function
Public 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 Function
Public 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 Function
Public 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 Function
Public 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
uj5u.com熱心網友回復:
這種毫不標準可言的個人設計的硬體,它的通訊協議鬼才知道。就好比你家養的狗,你用什么叫聲喚它來吃飯,這個只有你自己知道了。
uj5u.com熱心網友回復:
看你的代碼, 外面應該還有一塊單片機或者類似的控制模塊.而且最終控制步進電機的也是那個模塊.
你的程式卻妄圖在VB里面實作步進控制和輸出, 純粹把外部模塊當成了I/O+功放來用, 這是很有問題的做法,
不是說做不到, 或許你用的外部控制支持你這么干. 但這絕對不是什么好主意.
一般來說,正確的做法是: 在單片機(或者其他什么東西)里寫好最基本的步行程式, 后面接到功率輸出電路再接到步進電機上去.
然后單片機上留幾個通訊引數專門給電腦用于"控制", 控制什么呢?
比如步進間隔(時長由單片機提供), 這個控制步進電機的速度.
還有, 電腦直接發"單步"指令和多部指令, 就是連續走幾步.
所以電腦上的指令其實是很簡單的, 功能實作都是在外部模塊上的.
uj5u.com熱心網友回復:
找設備商要技術支持。誰設計的誰知道,問其他人也是白問。
花錢買了設備要支持是你的權利,別做騎驢找驢的傻事。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/108033.html
標籤:VB基礎類
