首页 上一页 1 2 3 4 下一页 尾页

关于Motion Perfect 问题 点击:11534 | 回复:69



frank0509

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:5帖 | 5回
  • 年度积分:0
  • 历史总积分:22
  • 注册:2007年5月13日
发表于:2007-05-18 10:56:00
楼主
现在在Motion perfect 里面进行一个PID的编程,要接受反馈信号和向外面发送指令,要设置里面的一个采样周期T,不知道是多少,有谁了解这方面的呀



Trio技术支持

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 150回
  • 年度积分:0
  • 历史总积分:201
  • 注册:2004年7月28日
发表于:2007-05-18 14:38:00
1楼
你说的问题是不是如何设置或使用定时器?
在你编写的程序中,可以设置使用Ticks参数,ticks参数在该程序运行时会自动每隔1ms减1,这样你就可以用来做定时处理了,例如当输入0被置为1时后的100ms将输出8置为On,则程序可以编写如下所示:
timer=0
while true   
   if in(0)=1 and timer=0 then
      ticks=100
      timer=1
   endif
   if ticks<=0 then
      op(8,on)
      timer=0
   endif
wend

注意:每个运行的任务都有其独立的ticks参数,这样可以每个任务的定时处理都是互相独立的,而且十分灵活。

波恩

  • 精华:10帖
  • 求助:0帖
  • 帖子:203帖 | 11028回
  • 年度积分:0
  • 历史总积分:36300
  • 注册:2003年6月12日
发表于:2007-05-18 15:26:00
2楼
“采样周期T”原则上就是进行一次PID调节运算的时间间隔。在一个间隔周期内,做一次反馈信号采样,一次指令采样,一次PID运算,一次输出指令的刷新。

自控小生

  • 精华:0帖
  • 求助:0帖
  • 帖子:54帖 | 204回
  • 年度积分:0
  • 历史总积分:349
  • 注册:2005年11月29日
发表于:2007-05-18 16:20:00
3楼
初次接触Motion perfect, 使用时一定要连接trio控制器吗?

Trio技术支持

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 150回
  • 年度积分:0
  • 历史总积分:201
  • 注册:2004年7月28日
发表于:2007-05-18 17:00:00
4楼
"初次接触Motion perfect, 使用时一定要连接trio控制器吗?"

不用,Motion Perfect有离线仿真功能,按着Shift键启动motion perfect后,在菜单“option/communiction”下添加simulation,并将其设置为第一连接选项后,再点击连接,系统会自动启动仿真后台,此时就可以编写程序并且调试了。请到www.triomotion.com处下载最新Motion Perfect软件。

蓝橡树

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 12回
  • 年度积分:0
  • 历史总积分:57
  • 注册:2004年4月23日
发表于:2007-05-18 17:05:00
5楼
仿真模式运行一会就会自动断掉,为什么呀?

蓝橡树

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 12回
  • 年度积分:0
  • 历史总积分:57
  • 注册:2004年4月23日
发表于:2007-05-18 17:07:00
6楼
能介绍一下trio的程序构成吗?在motion prefect历史怎么组织各部分的呀?

蓝橡树

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 12回
  • 年度积分:0
  • 历史总积分:57
  • 注册:2004年4月23日
发表于:2007-05-18 17:09:00
7楼
能介绍一下trio的程序构成吗?在motion prefect[color=#FF0000]里是[/color]怎么组织各部分的呀?

Trio技术支持

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 150回
  • 年度积分:0
  • 历史总积分:201
  • 注册:2004年7月28日
发表于:2007-05-18 17:18:00
8楼
“仿真模式运行一会就会自动断掉,为什么呀?”
请从www.triomotion.com处下载最新Motion Perfect及相关软件

Trio技术支持

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 150回
  • 年度积分:0
  • 历史总积分:201
  • 注册:2004年7月28日
发表于:2007-05-18 18:47:00
9楼
“能介绍一下trio的程序构成吗?在motion prefect里是怎么组织各部分的呀?”
1. Trio控制器实际上是一套完整的类计算机系统(或者说是一套完美的嵌入式系统),在控制器内不但有操作系统还有文件系统及编译系统,MotionPerfect只是用来对Trio控制器进行编程监控的接口软件,所有的操作都还需要在控制器内来实现。

2. 用MotionPerfect进行程序编写时,你所写的任何文本代码都会实时传送到控制器中,由控制器内部处理记录。并且在运行前,控制器会自动将程序进行编译检查等工作,所以用MotionPerfect编写程序时,就没有程序下装这个环节,这点与PLC有本质区别。

3. 每种类型的控制器都有程序个数及总容量的限制,这个是由控制器内存大小所决定的,比如MC206x可以最多编写13个程序,程序总的容量不能超过512k,因为MC206x的内存最大为512k。所谓仿真平台只不过是一个模拟控制器的后台执行软件而已,在程序个数和大小上一样有一个限制。

4. 用MotionPerfect编程的第一步是新建一个程序,该程序名称根据需要你可以自由命名,程序内容按照Basic语法结构要求进行编写。编写完程序后,可以点击运行,[color=#FF0000]那么运行的程序此时我们把它称之为任务[/color],因为Trio控制器有多任务运行机制,每种控制器所能同时执行的任务个数也不尽相同,MC302x最少只能执行3个,MC224最多可以同时执行14个任务,MC206则可以执行7个。每个任务都有其独一无二的标示号,其中排在头两位标号的任务其优先级最高,其余则为低优先级任务。请注意:程序和任务的区别,当程序被执行时才可以称为任务;同一个程序可以在不同任务号下同时执行。

5. 由用户编写的这些程序我们称之为应用程序,这些程序的执行过程为从第一行开始执行直到最后一句话为止。不同于PLC的编程,PLC的程序为从第一句开始到end结束符为止不断循环。要构成循环必须在程序内部进行编写,如前面给出的定时器举例。

6. 变量问题:
   Trio控制器提供三种变量区域,IO变量区,VR变量区和Table变量区。IO变量从0到272,与实际IO一一对应,没有用到的区域可以做为临时中间IO使用。VR变量总共1024个,从VR(0)到VR(1023),每个VR都是一个float格式数据。Table数据区根据控制器的不同,其区域大小也不同,MC302x最少可以有16000个,MC224最多可以达到250000个,而且Table数据同样为浮点数。无论IO,VR还是Table数据区对于所有的程序任务都是可以访问的。每个程序内,也可以自由申请变量,这些变量则只在本程序内有效。

7. 运动指令问题:
   在TrioBaisc在线帮助的目录下专门有一项:Motion and Axis commands,这其中的指令是特指的运动指令。请注意这些运动指令的运行,用户程序调用这些运动指令时,并不代表由调用该指令的应用程序运行相对应的运动,此时的调用只是将该运动指令传送到系统后台,而由系统内核来在对应轴上执行相应的运动,而应用程序在完成该传送指令的过程后,会继续向下执行。

8. 程序调试:
Trio控制器支持单步、断点调试功能,同时提供终端调试台0、5、6、7。其中0号调试台不但可以接收程序信息输出,还可以直接输入各种指令。输出信息可以用print指令,此外,还提供示波器功能,用于检测系统状态和分析。

9. 轴参数的调整:
   点击菜单“Tool/Axis Parameter”或点击第四个图标,可以打开轴参数列表框,点击该对话框下的“Axis”按钮可以选择监控的轴。在这些参数种分为两大类,一类为设置性参数,如PID,speed,accel,decel等,这些参数为对应轴的运行参数可以实时修改,而且修改后立刻起作用。另一类参数为轴状态参数,如Mtype,Ntype,Mpos,Dpos以及FE,这几个参数代表当前轴的状态,其中Mtype代表该轴当前由系统内核正在执行的运动指令,Ntype代表下一个即将要执行的运动指令。Mpos代表当前位置,dpos代表目标位置,FE为该轴的随动误差。状态参数只可读,不可写,如在程序中写vr(0)=mpos axis(0)是对的,但反过来则不可以。当调试完所有轴的参数后,点击菜单“project/Modify Startup Program”,系统会自动新建或修改程序名为startup的程序,将对应轴的各个参数存入该程序,再将startup程序设置为上电运行,这样控制器以后一上电,轴参数会自动初始化为所设置好的状态。

ShowFine

  • 精华:1帖
  • 求助:1帖
  • 帖子:57帖 | 753回
  • 年度积分:0
  • 历史总积分:1671
  • 注册:2003年10月29日
发表于:2007-05-18 20:11:00
10楼
讲得非常好呀!TRIO技术支持, 偶最近正在自学TRIO控制器呢. 有机会请教请教你啊! 谢了先,嘿嘿

ShowFine

  • 精华:1帖
  • 求助:1帖
  • 帖子:57帖 | 753回
  • 年度积分:0
  • 历史总积分:1671
  • 注册:2003年10月29日
发表于:2007-05-18 20:16:00
11楼
特别对于第七点. 比如
MOVE(1000) AXIS(0)
VR(0)=1
那么不管轴0是否执行完了,程序扫描到MOVE指令后将它传给后台,就马上执行VR(0)=1了, 而如果我需要等轴0执行完MOVE(1000)后才执行VR(0)=1的话,则必须要在MOVE指令后加 WAIT IDEL了!?  这和我今天请教的一位TRIO代理商的说法不同,呵呵. 看来还是要多交流才好哇. 最苦闷的是没有实际的硬件模拟,头疼...

自控小生

  • 精华:0帖
  • 求助:0帖
  • 帖子:54帖 | 204回
  • 年度积分:0
  • 历史总积分:349
  • 注册:2005年11月29日
发表于:2007-05-18 20:18:00
12楼
不错,刚好准备使用TRIO,希望能够提供支持,谢谢了!

Trio技术支持

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 150回
  • 年度积分:0
  • 历史总积分:201
  • 注册:2004年7月28日
发表于:2007-05-18 21:22:00
13楼
To-〉ShowFine 对第7点的进一步说明: Trio控制器内核程序为每个轴都分配了接收运动指令的缓存,在早期版本中(1.65之前的版本),每个轴的运动缓存为两个,即在轴参数列表中所能看到的mtype和ntype,同时为每个用户所执行的任务也分配了一个接收由该任务触发执行的运动缓存。应用程序执行一个运动指令时,首先检测本任务下的运动缓存是否为空,如果为空则将该运动指令放入本任务的运动缓存中,如果不为空,则应用程序会等待直到该缓存为空为止,此时的应用程序处于等待悬挂状态,不会往下执行。那么应用程序中的运动缓存如何清空呢?该步工作是由Trio控制器内核来完成的,控制器内核实时扫描每个正在运行任务的运动缓存,当运动缓存有指令时,内核程序会将其移到对应轴的最后一个运动缓存内,如果该对应轴运动缓存已满,则内核程序对该应用程序不做处理。每个轴的运动缓存实际上就是一个先入先出的队列(计算机软件工程称之为FIFO),排在最前面的也就代表了正在执行的指令,我们称该缓存为mtype,紧接着的一个缓存为ntype,有些Trio代理会告诉你,当停止轴运动时,最好要cancel三次,实际上就是取消mtype、ntype以及对于应用程序运动缓存中的运动指令。目前最新的系统软件版本支持每个轴有16个运动指令的缓存,所以只cancel三次是不够的! 了解了运动指令执行的过程后,那么我们来分析一下你写的这个简单例子: move(100) axis(0) wait idle vr(0)=1 你的目的是让轴0移动100后,再将Vr(0)=1,这种程序有以下几个问题(隐患)。 move(100) axis(0)没有问题,但接下来的wait idle会有问题: 1. 如果该程序在move(100) axis(0)前指定的base轴不是0轴时,则Wait Idle就等的不是0轴的Idle了,而是另外由base指令指定的轴。 2. 如前面分析,move(100) axis(0)指令首先由应用程序放入本任务的运动缓存内,然后应用程序会继续下面的语句,由于系统是多任务方式,控制器系统内核也许还没有来得及将该指令放到对应轴的mtype中去时,应用程序就去查询该轴的mtype是不是idle,这样的结果就是轴0还未开始执行运动,vr(0)就已经等于1了。这里Trio给大家提供了一种保险而且非常好用的指令wait loaded,该指令的意思是让程序等待直到应用程序执行的指令被执行后,再向下执行,所以正确的做法如下: base(0) '指定以下的运动指令及对应参数都是针对0轴 move(100) '运动100个单位 wait loaded '等待move(100)指令开始执行(本移到mtype中去时) wait idle '等待mtype为Idle vr(0)=1 '设置vr(0)等于1 注意:wait loaded非常常用,用该条指令可以触发特定运动过程开始时的其他动作,如开关操作等。

Trio技术支持

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 150回
  • 年度积分:0
  • 历史总积分:201
  • 注册:2004年7月28日
发表于:2007-05-18 21:24:00
14楼

ShowFine

  • 精华:1帖
  • 求助:1帖
  • 帖子:57帖 | 753回
  • 年度积分:0
  • 历史总积分:1671
  • 注册:2003年10月29日
发表于:2007-05-19 09:18:00
15楼
这么晚了还在解答问题了,辛苦了!真的非常感谢了!  

波恩

  • 精华:10帖
  • 求助:0帖
  • 帖子:203帖 | 11028回
  • 年度积分:0
  • 历史总积分:36300
  • 注册:2003年6月12日
发表于:2007-05-19 10:56:00
16楼
“用MotionPerfect进行程序编写时,你所写的任何文本代码都会实时传送到控制器中”“用MotionPerfect编写程序时,就没有程序下装这个环节,这点与PLC有本质区别”

原来如此,见识了!

Trio技术支持

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 150回
  • 年度积分:0
  • 历史总积分:201
  • 注册:2004年7月28日
发表于:2007-05-19 11:26:00
17楼
当然你也可以离线编辑完程序后,将程序再装载到控制器中去。编辑程序可以用MotionPerfect软件做,也可以用其他一切文本编辑软件进行编辑。装载编辑好的程序有两种方法,一种方法是借助MotionPerfect,另外一种方式是利用Trio提供Autoloader应用软件,可以直接装载程序。

ShowFine

  • 精华:1帖
  • 求助:1帖
  • 帖子:57帖 | 753回
  • 年度积分:0
  • 历史总积分:1671
  • 注册:2003年10月29日
发表于:2007-05-19 11:30:00
18楼
那个仿真器是不是不大完善? 怎么我做了一个很基本的程序,然后用示波器观察0轴的DPOS,结果全是零....观察VR(0)也是零. 程序如下,有点郁闷.   :)

BASE(0)
 ATYPE=1
 UNITS=100.0
 SPEED=10.0

DEFPOS(0)
VR(0)=0
WHILE IN(7)=OFF
        MOVE(10)
        WAIT IDLE
        OP(10,ON)
        MOVE(-10)
        WAIT IDLE
        OP(10,OFF)
        VR(0)=VR(0)+1
WEND
OP(10,OFF)

执行机构.

  • 精华:0帖
  • 求助:0帖
  • 帖子:12帖 | 537回
  • 年度积分:0
  • 历史总积分:1576
  • 注册:2003年9月17日
发表于:2007-05-19 16:56:00
19楼
仿真器主要是用来离线编程用的.你买个控制器就会很爽的.
毕竟你没有真正的DPOS和VR(0)等等.

ShowFine

  • 精华:1帖
  • 求助:1帖
  • 帖子:57帖 | 753回
  • 年度积分:0
  • 历史总积分:1671
  • 注册:2003年10月29日
发表于:2007-05-20 10:06:00
20楼
这个... ...楼上的,不上吧? 模拟器也是有VR区的呀.比如我只建立一个程序,如下:
WHILE TRUE

    IF IN(0) THEN
        VR(0)=1
    ELSEIF IN(1) THEN
        VR(0)=2
    ELSEIF IN(2) THEN
        VR(0)=3
    ENDIF

WEND
在模拟器上使能IN(0)、IN(1)、IN(2),再监控VR(0),刷新就可以看到数据变化了。

热门招聘
相关主题

官方公众号

智造工程师
    首页 上一页 1 2 3 4 下一页 尾页