yuanshi3 发表于 2009-12-28 23:05:11

输入值让精密平台运动,一个光栅尺测量,急!!!!!!

用了2个精密仪器:一个输入距离值(名为Text2里面)让精密平台动,一个光栅尺测量精密平台走了多少(在名为Axis的Text框里显示时实数据),由于各自精度不一样,这2个Text里的数据会有差别的,光栅尺的高。
现在的目的是想:
例如:输入Text2为498um,显示为480um,我怎么写VB程序让光栅尺显示的也为498um,让平台也真正的运动了498um。
这个思路可以吗(举个例子)?
1、498-480=18
2、让精密平台增加18,如果此时显示为492了
3、498-492=6
4、让精密平台增加6,如果此时显示为496了
5、498-496=2
6、让精密平台增加2,如果显示为497了



直到2个数据一样了,精密平台不运动了。
怎么用VB程序实现

我想这样不行啊!
Private Sub Command5_Click()
   Dim result&
   result& = MMC_sendCommand("M" & "N" & "," & "M" & "A" & Round(Val(Text2.Text) * 145.6355328))
   Call Sleep(2000)   '在2秒时间内让平台运动到输入值(是有误差的,由后面的测量具体是多少)
   If ((Text2.Text - Axis.Text) <> 0) Then
   result& = MMC_sendCommand("M" & "N" & "," & "M" & "A" & Round(Val(Text2.Text - Axis.Text) * 145.6355328))
   End If
End Sub

kunzhe 发表于 2009-12-29 08:31:22

使用timer控件。

yuanshi3 发表于 2009-12-29 10:13:51

Private Sub Command5_Click() '点击这个按钮平台开始运动
    Dim result&
    Dim lngDif As Long, lngTune As Long
    Dim sngPauseTime As Single, sngStart As Single
    result& = MMC_sendCommand("M" & "N" & "," & "M" & "A" & Round(Val(Text2.Text) * 145.6355328))    '发送平台绝对运动的命令,首先想让平台运动Sleep(2000)这样的时间内到达一个绝对位置,光栅尺有个测量值显示在AxiS.Text里。
    Call Sleep(2000)'让运动时间间隔2秒
   
    sngPauseTime = 0.2   '这以后都是在大的绝对位置上相对运动,所以时间短,每次只等待0.2秒钟.
   
    lngDif = Text2 - Ax'看Text2.Text的输入值与AxiS.Text显示值的差别
    While Abs(lngDif) > 1 '如果误差大于1微米(误差要求在1微米之内)
      result& = MMC_sendCommand("MN,MR(Text2 - Ax)") '给微动工作台发相对运动命令让它增加 Text2 - Ax 微米.
      sngStart = Timer   '等待微动工作台运动0.2秒
      Do While Timer < sngStart + sngPauseTime
         DoEvents
      Loop
            lngDif = Text2 - Ax'获得新的差值,如果为0了就表示相对运动没有了
    Wend
End Sub


这个思路怎么样?

yuanshi3 发表于 2009-12-30 00:50:38

这样思路怎么样?
Private Sub Command5_Click()
Dim result&
Dim chazhi As Double
result& = MMC_sendCommand("M" & "N" & "," & "M" & "A" & Round(Val(Text2.Text) * 145.6355328))
Call Sleep(2000)   '先让工作台有个大范围的逼近,如果chazhi>=1,循环判断,小范围逼近
'比较工作台与显示值,判断工作台运动到与需要显示的位置
chazhi = Val(Text2.Text) - Val(Form1.Axis(0).Text)
While (Abs(chazhi) >= 1)
                  result& = MMC_sendCommand("M" & "N" & "," & "M" & "R" & Round(chazhi) * 145.6355328)
                  Call Sleep(1000)
                  chazhi = Val(Text2.Text) - Val(Form1.Axis(0).Text)
Wend
End Sub
页: [1]
查看完整版本: 输入值让精密平台运动,一个光栅尺测量,急!!!!!!