📄 frmservo.frm
字号:
' ** by Zhai Zhongwu **
' ** **
' *******************************************
'API函数声明:
Private Declare Function timeGetTime Lib "winmm.dll" () As Long
Private Sub CmdAll_Click()
Running = True
Dim i As Integer
Dim j As Integer
For i = 0 To steps2 - 1
For j = 0 To 15
sldServo(j).Value = posData2(i, j)
Next j
Call Delay(intTime)
Next i
CmdIns.Enabled = False
CmdInp.Enabled = False
Running = False
End Sub
'*****************************************
'将单个伺服电机置零位
'*****************************************
Private Sub cmdCenter_Click(Index As Integer)
sldServo(Index).Value = 127
End Sub
Private Sub Ext_Click()
Pause = False
Run = True
ctrMSComm.PortOpen = False
Unload Me
End Sub
Private Sub CmdExt_Click()
Pause = False
Run = True
ctrMSComm.PortOpen = False
Unload Me
End Sub
Private Sub CmdInp_Click()
Dim j As Integer
For j = 0 To 15
sldServo(j).Value = Val(Trim(txtServo(j).Text))
Next j
CmdIns.Enabled = True
CmdInp.Enabled = False
End Sub
Private Sub CmdIns_Click()
CmdAll.Enabled = True
Dim j As Integer
For j = 0 To 15
posData2(steps2, j) = Val(Trim(txtServo(j).Text))
sldServo(j).Value = posData2(steps2, j)
Next j
steps2 = steps2 + 1
CmdIns.Enabled = False
CmdInp.Enabled = False
End Sub
Private Sub Command1_Click()
ServoIni.Show
ServoIni.CmdCancel.Enabled = True
Dim i As Integer
For i = 0 To 15
ServoIni.ServoName(i).Text = SvoName(i)
ServoIni.Min(i).Text = SvoMin(i)
ServoIni.Max(i).Text = SvoMax(i)
ServoIni.Text1(i).Text = SvoPos(i)
Next i
End Sub
Private Sub Command2_Click()
Dim j As Integer
If Running = False Then
'伺服电机位置初始化
For j = 0 To 15
sldServo(j).Value = 127
Next j
Else
MsgBox ("正在运行中,不能置零位!")
End If
End Sub
'*****************************************
'窗体加载时,对各种参数进行初始化
'*****************************************
Private Sub Form_Load()
On Error Resume Next
Dim j As Integer
'初始化串行口,默认使用端口com1、"9600,n,8,1"、延时300毫秒
intPort = 1
strSet = "9600,N,8,1"
intTime = 300
'单步执行步数
steps2 = 0
'若串口已经打开,则关闭。设置串口参数时,要确保串口关闭。
If ctrMSComm.PortOpen = True Then
ctrMSComm.PortOpen = False
End If
'设置串口号和通信参数
ctrMSComm.CommPort = intPort
ctrMSComm.Settings = strSet
'打开串口资源
ctrMSComm.PortOpen = True
start.Show
Delay (1500)
Unload start
'调出伺服电机参数表,进行初始化
ServoIni.Show
Run = False '确定各种参数后,方可往下执行
While Run = False
DoEvents
Wend
For j = 0 To 15
sldServo(j).Value = Val(Trim(txtServo(j).Text))
Next j
End Sub
'*****************************************
'退出时,一定要关闭串口
'*****************************************
Private Sub Form_Unload(cancel As Integer)
On Error Resume Next
Pause = False
Run = True
ctrMSComm.PortOpen = False
End Sub
Private Sub MNU_Config_PrtSetting_Click()
PauseCopy = Pause
Pause = True
PauseCom.Visible = False
config.Show
config.Port.Text = Str(intPort)
config.setting.Text = strSet
config.time.Text = Str(intTime)
End Sub
Private Sub MNU_Config_ServosIni_Click()
Dim j As Integer
If Running = fales Then
'伺服电机位置初始化
For j = 0 To 15
sldServo(j).Value = 127
Next j
Else
MsgBox ("正在运行中,不能置零位!")
End If
End Sub
'*****************************************
'退出菜单
'*****************************************
Private Sub MNU_File_Exit_Click()
Pause = False
Run = True
ctrMSComm.PortOpen = False
Unload Me
End Sub
Private Sub MNU_Help_Click()
PauseCopy = Pause
Pause = True
PauseCom.Visible = False
frmAbout.Show 1, Me
End Sub
Private Sub OnceMore_Click()
Running = True
Pause = False
PauseCom.Caption = "暂停"
PauseCom.Enabled = True
Call GoOn
Running = False
End Sub
Private Sub open_Click()
Running = True
Pause = False
PauseCom.Caption = "暂停"
PauseCom.Enabled = True
Dim tmpStr As String
Dim i As Integer
Dim j As Integer
Dim Heads() As String
CommonDialog1.ShowOpen
strFileName = CommonDialog1.FileTitle
strFileDirectary = CommonDialog1.FileName
txtSend1.Text = strFileDirectary
If strFileDirectary <> "" Then
'将数据文件的数据读入到二维数组 posDataposData(1 To 255, 0 To 15)
Open strFileDirectary For Input As #1
Line Input #1, tmpStr
tmpStr = Trim(tmpStr)
steps = CInt(tmpStr)
'ReDim posData(1 To steps, 0 To 15)
For i = 0 To steps - 1
Line Input #1, tmpStr
tmpStr = Trim(tmpStr)
Do While InStr(tmpStr, " ") > 0
tmpStr = Replace(tmpStr, " ", " ")
Loop
Heads = Split(tmpStr)
For j = 0 To 15
posData(i, j) = CInt(Heads(j))
Next j
Next i
Close #1
End If
Call GoOn
Running = False
End Sub
Private Sub PauseCom_Click()
If PauseCom.Caption = "暂停" Then
Pause = True
PauseCom.Caption = "继续"
Else
Pause = False
PauseCom.Caption = "暂停"
End If
End Sub
Private Sub sldServo_Change(Index As Integer)
On Error Resume Next
txtServo(Index).Text = Str(sldServo(Index).Value)
Dim Buffer As Variant
Dim ByteArray() As Byte
ReDim ByteArray(0 To 2)
ByteArray(0) = 255 '发送的第一字节,同步字节(0xff)
ByteArray(1) = Index '发送的第二字节,伺服电机号(1~16),对应Index号(0~15)
ByteArray(2) = sldServo(Index).Value '发送的第三字节,位置参数(0~254)
Buffer = ByteArray
ctrMSComm.OutBufferCount = 0
ctrMSComm.Output = Buffer
ctrMSComm.InBufferCount = 0
End Sub
Private Sub sldServo_Scroll(Index As Integer)
sldServo_Change (Index)
End Sub
'延时函数
Public Sub Delay(PauseTime As Double)
Dim start As Double
start = timeGetTime '记下开始时间
While timeGetTime < start + PauseTime '循环等待
DoEvents '转让控制权,以便让操作系统处理其它的事件。
Wend
End Sub
Public Sub GoOn()
Dim i As Integer
Dim j As Integer
PauseCom.Enabled = True
Pause = False
OnceMore.Enabled = False
For j = 0 To 15
cmdCenter(j).Enabled = False
Next j
'根据文件输入的数据,实现所有伺服电机的联动
For i = 0 To steps - 1
While Pause <> False
DoEvents
Wend
For j = 0 To 15
sldServo(j).Value = posData(i, j)
Next j
Call Delay(intTime)
Next i
OnceMore.Enabled = True
PauseCom.Enabled = False
For j = 0 To 15
cmdCenter(j).Enabled = True
Next j
End Sub
Private Sub txtServo_Change(Index As Integer)
'显示屏中的数字发生改变,才允许出入操作
CmdIns.Enabled = True
CmdInp.Enabled = True
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -