wjf-hf 发表于 2010-12-2 11:29:10

主轴定位VB脚本请教

请教阿莫老大,我碰到个难题,我的雕刻机我自己做了一套伺服主轴,(直流驱动器+编码器+直流伺服驱动器),最高转速6000rpm,(不知道是不是转速低了点),准备以后是要做自动换刀的,我现在利用编码器Z相信号做主轴定位,Z信号输入到INPUT#1,现在就是VB脚本程序在脚本编辑器里可以运行,我保存为M19,但是在程序里调用M19,却不执行,还会提示脚本错误,我不知道哪里有问题,请帮忙解决一下,谢谢!还有,请教一下,如何在脚本里放一段延时程序,免得程序假死,我对VB不是很熟,请指教。VB程序大意就是:主轴以50rpm正转,检测到Z信号,停止主轴,延时N秒,以1rpm反转,再次检测到Z信号,停止主轴,定位完成。反转是应为以50rpm旋转会转过头。

VB脚本如下:

code "m05"
code "g04 p0.5"
While ismoving()
Wend
code "m03 S50"
code "g04 p0.2"
While ismoving()
Wend

labe1:
If Isactive(input1)Then
code "m05"
code "g04 p0.1"
While ismoving()
Wend
Call main
Else
GoTo labe1
If isactive(INPUT1) Then
End If
End If

Sub main
labe2:
code "g04 p0.1"
While ismoving()
Wend
code "m04 s1"
If isactive(INPUT1) Then
code "M05"
Else
GoTo LABE2
End If
End Sub

Popo 发表于 2010-12-2 12:29:14

如果延时在1秒以上,你可以使用timer控件(图符就是左边控件栏里的闹钟)

wjf-hf 发表于 2010-12-2 12:48:42

忘了说明一下了,不是VB,而是MACH3里的VB脚本编辑器。可以用timer控件,但我不会用,呵呵,而且延时时间也没有那么长,最多2-3毫秒,不然会错过检测Z信号了。

Argee 发表于 2010-12-2 13:47:40

简单延时(释放CPU)用 sleep nnnn 命令

Popo 发表于 2010-12-2 13:48:29

不应该啊,VB里的timer不可能准确定时到10ms以下,

timer里有很多属性,其中有一个叫interval的,就是定时的时间间隔,1000=1秒,

假设interval=1000   

使用方法,只要timer的在enalbe属性下,它每隔1000ms,就会运行一次

在这个子程序段中,你再编缉你所需要的程序

如果你知道“面向事件”的编程方法,就很好理解了

Argee 发表于 2010-12-2 13:53:07

另外,自定义M代码,最好是用M100~M200之间,记得在大海论坛看到过这方面的限制,不确切了,你可以试着把上面的M19改成M150来调用看看。

Argee 发表于 2010-12-2 13:56:11

to 【4楼】 Popo

Mach3的 VB 类似于 office 的 把 VBA 不支持 VB 全集的。所以也没有 timmer 控件的概念。没做更精细研究,估计有办法引用封装在 dll 里的函数;但不能很方便的引用封装好的对象。

wjf-hf 发表于 2010-12-2 17:18:14

我试试看,谢谢各位

wjf-hf 发表于 2010-12-2 17:22:22

我试了一下,在mach3程序里调用还是不行,我把M19改为了M190,还是不运行,感觉执行的时候电脑的速度都慢了下来。

Argee 发表于 2010-12-2 22:39:25

to 【8楼】 wjf-hf

那是因为你过于频繁的运用无内容的while语句,导致CPU挂死。一般的while语句延时用这样的形式
while ismoving()
    sleep 1000
wend

Argee 发表于 2010-12-2 23:23:02

还有,你这段代码基本结构太复杂,我没能看明白。一个原则是,能不用goto就别用。你混用了 goto 和 call subrotine,这个程序就没办法看了。
针对
主轴以50rpm正转,检测到Z信号,停止主轴,延时N秒,以1rpm反转,再次检测到Z信号,停止主轴,定位完成

'step 0
code "M5"                'Stop spindle

'step 1
'----------add code to configure spindle 50rpm
code "M3 S50"                'configure anticlockwise. It can change PWM but not sure for your spindle
'----------
While Not Isactive(input1)
        sleep 1000
Wend

'Step 2
'------- Add delay
sleep 1000000' I'm not sure if 1000000 is enough
'-------

'Step 3
'----------add code to configure spindle 50rpm
code "M4 S1"               'configure anticlockwise. It can change PWM but not sure for your spindle
'----------
While Not Isactive(input1)
        sleep 1000
Wend

'step 4
code "M5"                'Stop spindle

Argee 发表于 2010-12-2 23:40:48

遇到同样不能调用的问题,研究下再答复你

wjf-hf 发表于 2010-12-3 08:16:45

谢谢Argee的详细解答。正在试用研究中。。。

Argee 发表于 2010-12-3 09:14:53

发现把M1xx放在 <your mach folder>\macros\Mach3Mill\ 下时,代码可执行(用sleep可以测试)。

但这时候并不能解析全部的 VB code,例如我是用 code "G01 X1" 测试,语句没正确执行,也并不报错;使用msgox "Done",也没任何反应。

结论:M代码在G code中调用时,可能会有些特定的限制。要查更多的资料了。

wjf-hf 发表于 2010-12-3 09:30:06

Argee 用的是从这里下载的MACH3.041外加破_解授权吗?http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4322140&bbs_page_no=2&bbs_id=9999
我记得我原先用的是MACH3.042版的,外加一个USB狗,执行调用M代码的时候好像是可以执行的,我再试试看装3.042会不会好。

wjf-hf 发表于 2010-12-3 09:56:18

Argee,刚才我重新装了MACH3 3.042版本,运行调用M代码正常,估计是软件问题,现在运行可以了。而且我把代码保存为M19,执行也是正常的。

Argee 发表于 2010-12-3 10:09:41

多谢分享!
我的版本老旧了。不管它了,你好用就行了。
......

我被迫打算把DB软件都删掉了,IT 1 分钟前通知我被盯上了,哎,真凄惨。s-o-l-i-d-w-o-r-k-s搞得,劝兄弟们别装公司电脑上,nihong公司 NND 太坏了。
页: [1]
查看完整版本: 主轴定位VB脚本请教