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

关于trio问题,原来的帖子满一页了。 点击:5384 | 回复:67



天津

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 59回
  • 年度积分:0
  • 历史总积分:122
  • 注册:2007年8月01日
发表于:2007-08-15 09:38:00
楼主
我怕前辈看的不方便,新发一个帖子:

多谢前辈。还有
1)在模拟阶段,仿真后怎么看局部变量的具体值啊?如看a的值该怎么办啊?


2)trio是如何完成闭环控制的,用不用自己采集反馈信号搭建闭环?还是只设定PID参数即可自动完成闭环控制。它的控制应该是双闭环吧。
能不能介绍一下都有哪几种反馈信号的方式呢?


我的qq:52726231;msn:wangchongtju@hotmail.com
希望得到各位前辈的指导。多谢啦!!



天津

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 59回
  • 年度积分:0
  • 历史总积分:122
  • 注册:2007年8月01日
发表于:2007-08-15 10:41:00
1楼
还有问题,run指令的具体用法是怎么样的啊?我感觉它好像是放到主程序中的东西,但为什么还要有程序号,那是干什么的啊?直接调用程序不行么?加程序号的作用是什么啊?

天津

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 59回
  • 年度积分:0
  • 历史总积分:122
  • 注册:2007年8月01日
发表于:2007-08-15 10:59:00
2楼
MC224最多可以同时执行14个任务,是同时执行14个工程??应该是程序吧,我刚才自己试着在模拟器上建立程序,到了14个就不行了。是不是当每个程序被执行是就叫做任务啊?但任务号还是不能理解啊!
希望前辈执教。

Trio技术支持

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 150回
  • 年度积分:0
  • 历史总积分:201
  • 注册:2004年7月28日
发表于:2007-08-15 15:13:00
3楼
1)在模拟阶段,仿真后怎么看局部变量的具体值啊?如看a的值该怎么办啊?
答:在程序编辑的文本框中的工具条上有一个“眼镜”图标,首先选中你的临时局部变量,然后点击这个“眼镜”,你就可以监控了。

2)trio是如何完成闭环控制的,用不用自己采集反馈信号搭建闭环?还是只设定PID参数即可自动完成闭环控制。
答:TRIO控制器本身已经为每个轴都设置了伺服闭环控制功能,通过购买TRIO控制器的伺服激活代码即可使用,用户只需根据要求连线并调整对应轴的PID等参数即可实现闭环控制,详细调节原理请参见手册第6章6-12页的伺服原理图。当然,你也可以根据闭环控制原理,自己编写PID算法来实现,TRIO提供的TRIOBasic支持复杂数学运算。

3)能不能介绍一下都有哪几种反馈信号的方式呢?
答:TRIO接收的反馈信号大致分为三种,一种为传统意义的增量编码器形式,主要是差分形式的AB相脉冲的接收。另一种是通讯的方式,这个就比较复杂,TRIO可以接收的有Endat、SSI的一对一的绝对值编码器通讯反馈,以及SERCOS、CanOpen协议的位置反馈信号等。最后一种是接收由模拟量作为位置反馈的形式,如直接接收位移传感器输出的0到10v信号。


4)run指令的具体用法是怎么样的啊?我感觉它好像是放到主程序中的东西,但为什么还要有程序号,那是干什么的啊?直接调用程序不行么?加程序号的作用是什么啊?
答:run指令带有两个参数,第一个参数代表需要被启动运行的程序名称,第2个参数是可选参数,代表该程序启动后所要运行的任务号。请参考原贴中关于Trio程序与任务关系的说明,简单讲程序是静态的,运行起来的程序程之为任务,任务是动态的。静态的程序最多可以存放14个,每个程序被运行起来后必须占据一个任务,TRIO控制器内可以最多运行的任务数对于不同的产品是不一样的,MC302x最少只能运行3个,MC224最多可以运行14个,其他的控制器可以运行7个,怎么来区分这些任务呢,就需要给这些任务编号,从1开始到3或14或7,run指令的第2个参数就是代表了这个任务号,如果run指令不带第2个参数,则系统会自动将该程序运行在当前空闲任务号最大处。如果你指定的任务号已经被别的程序占据,系统会报错。至于什么时候用run指令,这个完全是用户自己根据需要自行决定的事情,没有特殊要求。而且TRIO控制器内没有为用户定义主程序,所谓主程序是用户根据需要自己创建实现的。
Trio控制器是个多任务处理系统,希望你能用多任务的概念去理解它。

天津

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 59回
  • 年度积分:0
  • 历史总积分:122
  • 注册:2007年8月01日
发表于:2007-08-15 18:45:00
4楼
多谢前辈,真么麻烦你真不好意思啊!!!

自控小生

  • 精华:0帖
  • 求助:0帖
  • 帖子:54帖 | 204回
  • 年度积分:0
  • 历史总积分:349
  • 注册:2005年11月29日
发表于:2007-08-15 22:26:00
5楼
请教TRIO技术支持:
在循环程序中执行X,Y轴的FORWARD AND REVERSE有执行先后的问题,如何通过调用任务完成解决手动运行问题?

自控小生

  • 精华:0帖
  • 求助:0帖
  • 帖子:54帖 | 204回
  • 年度积分:0
  • 历史总积分:349
  • 注册:2005年11月29日
发表于:2007-08-15 23:02:00
6楼
1.测试了一下,可以用REV_JOG和FWD_JOG解决,但程序中如何解决呢,因为自动的状态手动输入不能起作用,硬件接线能够解决,但软件如何解决这个问题。
2.另外两轴同步,用手动操作REV_JOG和FWD_JOG如何解决?

自控小生

  • 精华:0帖
  • 求助:0帖
  • 帖子:54帖 | 204回
  • 年度积分:0
  • 历史总积分:349
  • 注册:2005年11月29日
发表于:2007-08-16 07:25:00
7楼
1.TRIO运动控制器,如何实现运动暂停功能,就是在按下按钮后暂停运动,松开后继续运行?
答:TRIO控制器在每个轴上都有FEED_hold功能,轴参数fh_in定义暂停输入信号的通道号,信号为常闭结点,当该通道信号为0时,对应轴会自动暂停当前的运动,当信号恢复为1时,继续没有完成的运动
--------
FEED_hold只对速度控制有用,脉冲定位控制如何解决?急!!

Trio技术支持

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 150回
  • 年度积分:0
  • 历史总积分:201
  • 注册:2004年7月28日
发表于:2007-08-16 11:15:00
8楼
To自控小生:
请仔细理解下面的说明:
[i]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非常常用,用该条指令可以触发特定运动过程开始时的其他动作,如开关操作等。[/i]

Trio技术支持

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 150回
  • 年度积分:0
  • 历史总积分:201
  • 注册:2004年7月28日
发表于:2007-08-16 11:21:00
9楼
然后再来看你的问题:“在循环程序中执行X,Y轴的FORWARD AND REVERSE有执行先后的问题,如何通过调用任务完成解决手动运行问题?”

Forward和Reverse都是运动指令,用户任务调用这些指令[b][i]一次[/i][/b]后,它们既被内核系统存储在运动缓存内,如果当前运动缓存没有其他指令,则系统对应轴开始执行Forward或Reverse指令,只有当用户用Cancel指令取消该指令后,运动才停止。[i][b]对于TRIO控制器的编程,一定要用多任务的思想去理解和设计程序,所有的运动指令不是由用户程序去执行,而是由后台内核去执行的,用户程序只是触发和监控而已。[/b][/i]

Trio技术支持

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 150回
  • 年度积分:0
  • 历史总积分:201
  • 注册:2004年7月28日
发表于:2007-08-16 11:33:00
10楼
“1.测试了一下,可以用REV_JOG和FWD_JOG解决,但程序中如何解决呢,因为自动的状态手动输入不能起作用,硬件接线能够解决,但软件如何解决这个问题。”
答:这个问题有两种方法,一是如果你的控制器不是Euro205x并且没有连接扩展IO模块的情况下,那么你可以将REV_JOG和FWD_JOG定义到16到31的输入点上,然后在软件程序中通过OP指令对这两个点操作即可实现。第二种方法是用forward和reverse自己编程实现,给你个简单例子:
fd_in=0  '定义forward命令输入点
re_in=1  '定义reverse命令输入点

while true

if in(fd_in)=1 and fd_flag=0 then
    if mtype<>idle then
    forward
    fd_flag=1
    endif
endif

if in(fd_in)=0 then
    cancel
    wait idle
endif

if in(re_in)=1 and re_flag=0 then
    if mtype<>idle then
    reverse
    re_flag=1
    endif
endif

if in(re_in)=0 then
    cancel
    wait idle
endif

wend



2.另外两轴同步,用手动操作REV_JOG和FWD_JOG如何解决?
答:两轴同步指令用connect指令就可以实现,在运动开始之前,用connect设置好两轴之间的同步速度关系,然后只用给主轴发命令,从轴会自动与主轴同步执行。


3.FEED_hold只对速度控制有用,脉冲定位控制如何解决?急!!
答:理解有误,不论你才有什么方式控制,feed_hold功能都是一样的,试验一下你就会明白。

天津

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 59回
  • 年度积分:0
  • 历史总积分:122
  • 注册:2007年8月01日
发表于:2007-08-16 12:28:00
11楼
2)DAC这个参数的作用是什么啊?ADD_DAC我也不理解手册说的是什么意思,希望前辈帮忙指点一下.多谢啦!!

自控小生

  • 精华:0帖
  • 求助:0帖
  • 帖子:54帖 | 204回
  • 年度积分:0
  • 历史总积分:349
  • 注册:2005年11月29日
发表于:2007-08-16 14:33:00
12楼
谢谢前辈的耐心指教!!!!

请教:
定义FHOLD_IN=3 
FHSPEED=0
在MOVEABS(1000) AXIS(2)状态下VPSPEED保持不变。

然后我在FHOLD_IN=3 后加AXIS(2)编译报错,如何解决?

Trio技术支持

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 150回
  • 年度积分:0
  • 历史总积分:201
  • 注册:2004年7月28日
发表于:2007-08-16 15:11:00
13楼
DAC这个参数的作用是什么啊?
答:DAC是指在开环情况下,直接将对应轴的电压进行输出的指令,比如MC206,其DA转换为16位精度,那么在Servo=0的情况下,DAC=32767就是将对应的模拟量端口输出10V电压,DAC=-32768对应输出-10V。如果你定义的轴为脉冲输出控制方式,则可以在不影响轴控制功能的情况下,直接用DAC参数输出电压去控制别的设备。如果你用的是伺服方式,也可以用DAC输出电压产生一个阶越给定,然后通过MotionPerfect软件的示波器功能去观察伺服驱动的速度响应特性,来调节伺服速度环PID参数。
ADD_DAC主要用在双反馈系统中,用来将根据两个回路的反馈偏差得到的输出信号进行叠加的指令。手册帮助有一个举例,请仔细理解。

FHOLD_IN=3 后加AXIS(2)编译报错,如何解决?
答:语法错误,正确写法: FHOLD_IN AXIS(2)=3

TRIO技术支持.

  • 精华:0帖
  • 求助:0帖
  • 帖子:8帖 | 412回
  • 年度积分:0
  • 历史总积分:876
  • 注册:2004年2月03日
发表于:2007-08-16 15:26:00
14楼
  2)DAC这个参数的作用是什么啊?ADD_DAC我也不理解手册说的是什么意思,希望前辈帮忙指点一下.多谢啦!!
DAC是开环模式速度控制。(SERVO=0时);ADD_DAC是在双闭环(电机编码器+负载编码器)模式下,发出电压叠加信号的控制方式。一般用不上。
然后我在FHOLD_IN=3 后加AXIS(2)编译报错,如何解决?
FHOLD_IN AXIS(2)=3 是正确的写法。运动指令,轴号才加到最后。例如:
MOVE(100) AXIS(2)

自控小生

  • 精华:0帖
  • 求助:0帖
  • 帖子:54帖 | 204回
  • 年度积分:0
  • 历史总积分:349
  • 注册:2005年11月29日
发表于:2007-08-16 15:55:00
15楼
请教:
采用叠加虚拟轴的方法实现2轴同步,在设置轴参数时,是不是只要设定虚拟轴的参数。比如,FWD_IN,FHOLD_IN的值等,因为正,反向限位各有一个。

天津

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 59回
  • 年度积分:0
  • 历史总积分:122
  • 注册:2007年8月01日
发表于:2007-08-17 07:23:00
16楼
谢谢前辈!
问题:1)模拟器中的terminal模拟的是串口么?那弹出的I/O小窗口有事什么呢?我把一些窗口单击成绿色,为什么用in指令读不到值啊?那不是数字输入么?
2)op控制的也是数字量吧?那想输出模拟量智能用print指令么?
3)vr,table中的数据为浮点数吧,我要想保存字符串,如absd....应该怎么办啊?
4)hex指令看的也不是很明白,我写了,PRINT#0,hex(95),是应该输出95的ascII码么?但我没有看到显示啊?
5)linput指令也没有看清楚怎么用.
麻烦前辈了.真的很不好意思啊!!!

Trio技术支持

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 150回
  • 年度积分:0
  • 历史总积分:201
  • 注册:2004年7月28日
发表于:2007-08-17 11:01:00
17楼
“采用叠加虚拟轴的方法实现2轴同步,在设置轴参数时,是不是只要设定虚拟轴的参数。比如,FWD_IN,FHOLD_IN的值等,因为正,反向限位各有一个。”
答:是的,这样做没有问题,你可以让虚拟轴做为主轴,然后只对虚拟轴做操作即可。

“模拟器中的terminal模拟的是串口么?那弹出的I/O小窗口有事什么呢?我把一些窗口单击成绿色,为什么用in指令读不到值啊?那不是数字输入么?”
答:Trio的仿真系统软件目前功能有限,建议购买控制器后直接使用。Termial指的是终端调试台,共有四个调试台,分为0、5、6、7,其中0号调试台可以进行命令行操作,程序中的各种命令均可以在此执行,5、6、7调试台只能做为显示终端,在程序中用print指令可以向这些调试台中输出信息。

“op控制的也是数字量吧?那想输出模拟量智能用print指令么?”
答:OP命令是指将对应的数字输出端口进行ON/OFF操作的指令,对于模拟量输出用DAC命令输出,请仔细参看前面的回帖说明。Print指令是用来进行数据传输的输出指令,如print#5,"hello" 的意思是向5号终端台上输出“hello”字符。另外,print指令还常用在串口通信上的数据输出,如print#1,VR(0)  指的是将VR(0)的内容按照ASCII的形式通过串口1输出出去。请仔细阅读书册,里面有相关的命令举例。

“vr,table中的数据为浮点数吧,我要想保存字符串,如absd....应该怎么办啊?”
答:VR和Table的数据格式说明在本论坛的另外一个关于TRIO问题的回帖中有比较详细的说明,请查找。关于字符串的问题,目前需要你自己用Basic程序自己判断执行,比如存储“abcd”从vr(0)到vr(3)中,那么vr(0)=$61,VR(1)=$62,VR(2)=$63,VR(3)=$64. “$”标志加到数字前,表示该数字为16进制数。

“hex指令看的也不是很明白,我写了,PRINT#0,hex(95),是应该输出95的ascII码么?但我没有看到显示啊?”
答:仿真软件目前对此不支持,以下是在控制器中试验的结果
>>PRINT#0,hex(95) 
5F
“Hex”的意思是将其内部变量用16进制格式进行显示,只用在print指令中,做为显示用,其他情况下不可使用。

“linput指令也没有看清楚怎么用.”
答:linput指令用来从一个端口处接收数据串使用,其意思是当有数据串从某个端口输入时,用linput指令进行接收时,只有当遇到“CR”回车时,才结束一次输入,并将输入的结果存放在其后参数指定的VR数据内。linput指令使用起来,限制条件过多,一般用GET指令来进行接收操作。

天津

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 59回
  • 年度积分:0
  • 历史总积分:122
  • 注册:2007年8月01日
发表于:2007-08-18 01:12:00
18楼
多谢前辈!!

天津

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 59回
  • 年度积分:0
  • 历史总积分:122
  • 注册:2007年8月01日
发表于:2007-08-18 12:54:00
19楼

为什么这段程序在模拟器中运行,轴(0)没有动作啊?
BASE(0)
SPEED=100
ACCEL=10
DECEL=10
UNITS=10
MOVE(100)
WAIT IDLE

自控小生

  • 精华:0帖
  • 求助:0帖
  • 帖子:54帖 | 204回
  • 年度积分:0
  • 历史总积分:349
  • 注册:2005年11月29日
发表于:2007-08-18 14:16:00
20楼
请教trio技术支持:
在使用MOVEABS(X,Y)指令时,如何对轴进行定义?
比如X和Y如何对应各自的轴号?

热门招聘
相关主题

官方公众号

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