发布于 2005-08-22 11:54:45
0楼
下面是我在卷绕机上做的一个通用的包络表的子程序. 要求事先算出最小脉冲周期,还有总脉冲个数. 当然也可以自己改成别样的适合自己程序的样子,我仅提供一个参考,不负法律责任 :)
VAR_IN如下
Tk:WORD //最小周期(对应速度最高)
Pulse:DWORD//总脉冲个数
P0:DWORD//包络表的起始地址,指针类型.
VAR_TEMP为P1到P21
LD SM0.0
MOVD #P0, #P1
MOVD #P0, #P3你
MOVD #P0, #P5
MOVD #P0, #P9
MOVD #P0, #P11
MOVD #P0, #P13
MOVD #P0, #P17
MOVD #P0, #P19
MOVD #P0, #P21
LD SM0.0
+D +1, #P1
+D +3, #P3
+D +5, #P5
+D +9, #P9
+D +11, #P11
+D +13, #P13
+D +17, #P17
+D +19, #P19
+D +21, #P21
LD SM0.0
MOVB 3, *#P0 //三段(加速,匀速,减速)
LD SM0.0
MOVW CycInc, *#P3 //第一段周期增量(加速)
MOVW +0, *#P11 //第二段周期增量(匀速)
MOVW CycInc, *#P19
*I -1, *#P19 //第三段周期增量(减速)
LD SM0.0
-I InitCyc, #Tk
/I CycInc, #Tk
ITD #Tk, *#P5 //第一段脉冲个数
ITD #Tk, *#P21 //第三段脉冲个数
MOVD #Pulse, *#P13
-D *#P5, *#P13
-D *#P21, *#P13 //第二段脉冲个数
LDD< *#P13, 0
MOVD 0, *#P13
LDD= *#P13, 0
OD< *#P21, 0
MOVD 0, *#P21
LD SM0.0
MOVW InitCyc, *#P1 //第一段初始周期
MOVW #Tk, *#P9
*I CycInc, *#P9
+I InitCyc, *#P9 //第二段初始周期
MOVW *#P9, *#P17 //第三段初始周期
调用程序可以如下格式(我定义该子程序名为PTOTable)
LD M8.0
O M9.1
CALL PTOTable, VW262, VD200, &VB300
I can do it