trio问题 点击:1540 | 回复:19



马运

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:5帖 | 13回
  • 年度积分:0
  • 历史总积分:30
  • 注册:2007年7月04日
发表于:2007-07-04 17:14:00
楼主



马运

  • 精华:0帖
  • 求助:0帖
  • 帖子:5帖 | 13回
  • 年度积分:0
  • 历史总积分:30
  • 注册:2007年7月04日
发表于:2007-07-04 17:17:00
1楼
请TRIO技术支持回答! 谢谢! 1\ trio中的多线程之间可以变量通讯么? 例如: run "app1",4 run "app2",5 则app1和app2通过vr变量通讯么? 2\ 是不是所有的trio轴都支持双色标捕获? 3\ 能不能给我一个多轴 色标捕获处理的程序框架? thanx a lot!

ShowFine

  • 精华:1帖
  • 求助:1帖
  • 帖子:57帖 | 753回
  • 年度积分:0
  • 历史总积分:1671
  • 注册:2003年10月29日
发表于:2007-07-04 17:44:00
2楼
啥通讯不通讯的. VR区为全局变量.整个程序通用... ...

马运

  • 精华:0帖
  • 求助:0帖
  • 帖子:5帖 | 13回
  • 年度积分:0
  • 历史总积分:30
  • 注册:2007年7月04日
发表于:2007-07-04 17:50:00
3楼
 呵呵!
 这里是 multi-threads的概念,全局变量当然可以通用!
 但是如何防止 多个程序同时访问同一个全局变量?

 高级语言里是:使用 互斥量和事件同步对象等实现的.
 问下,trio basic是否会存在这些问题? 如何防止?

马运

  • 精华:0帖
  • 求助:0帖
  • 帖子:5帖 | 13回
  • 年度积分:0
  • 历史总积分:30
  • 注册:2007年7月04日
发表于:2007-07-04 18:19:00
4楼
  都不在啊!
  惨!

波恩

  • 精华:10帖
  • 求助:0帖
  • 帖子:203帖 | 11028回
  • 年度积分:0
  • 历史总积分:36300
  • 注册:2003年6月12日
发表于:2007-07-05 13:06:00
5楼
是个蛮高深的问题,设计多任务或多线程调度和通讯了。

Trio技术支持

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 150回
  • 年度积分:0
  • 历史总积分:201
  • 注册:2004年7月28日
发表于:2007-07-05 13:57:00
6楼
1\ trio中的多线程之间可以变量通讯么?
答:可以。控制器中的VR及Table数据区都可以在任一个进程中进行读写操作,例如在4号进程中执行VR(0)=1,则其他进程查询VR(0)时,其值也会变为1。至于“如何防止多个程序同时访问同一个全局变量?”的问题,其实很好回答你,因为只有一个CPU,任何一个进程在写或读某个数据时都会独占CPU,也就是说必须完成读写操作后才会有任务的调度。因此在控制器系统内部是不会产生冲突错误的,所以需要你自己在编写程序时明白哪个变量是读,哪个变量是写。

2\ 是不是所有的trio轴都支持双色标捕获? 
答:不是。只有安装P201子板的伺服控制板才有双色标捕获功能。普通的伺服轴,例如MC206本体上自带的各个伺服轴,只能捕捉一个色标,当然你也可以用编写程序的方法来捕获两个色标。

3\ 能不能给我一个多轴 色标捕获处理的程序框架?
答:给你列举一个标准的高速信号捕捉过程的程序
base(0)  '定义以下操作针对0号轴
regist(3)'告诉控制器系统内核,启动0轴的高速信号捕捉功能。
move(10000) '让0轴开始运动一个理想距离
wait until mark '当前程序等待,直到系统内核捕捉到这个信号
defpos(MPOS-REG_POS) '重新定义当前位置点
wait until offpos=0  '等待定义位置完成
movemodify(100) '重新动态调整0轴最终的位置

lg_006

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 390回
  • 年度积分:0
  • 历史总积分:419
  • 注册:2005年2月24日
发表于:2007-07-05 14:38:00
7楼
“但是如何防止 多个程序同时访问同一个全局变量?”的原因是,多个线程同时访问一个变量将使程序紊乱。
“因为只有一个CPU,任何一个进程在写或读某个数据时都会独占CPU,也就是说必须完成读写操作后才会有任务的调度。”是说系统的保证方式,而不是说如何保护程序不发生紊乱。
 比如我在一个线程里使
(执行1)I=1
(执行2)I=2
(执行3)I=3
那么线程结束后访问I,那么I就是3
但如果我开三个线程
(执行1)i=1 (执行2)i=2(执行3)i=3
执行之后I就不知道是多少了
  
关于“使用 互斥量和事件同步对象等实现的”可以这样来作

(执行1)i=i or 001(执行2)i=i or 010(执行3)i=i or 100
 实现互斥
或则
(执行1)i=1  j=1(执行2)while(j==1) i=1 j=2(执行3)i=i or while(j==2) i=3
 实现同步
例子简单,程序风格不好,请见谅

Trio技术支持

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 150回
  • 年度积分:0
  • 历史总积分:201
  • 注册:2004年7月28日
发表于:2007-07-05 15:01:00
8楼
注意:
    TRIO运动控制器内,只有VR和TABLE数据区是每个任务都可以共享的。而用户自己在程序内书写的变量i,j等等,这些都只在本程序内有效,其他程序定义的i,j等变量与之是不同的,换言之:除了VR和Table外的变量都只是在程序内的局部变量。所以lg_006列举的程序有误。

lg_006

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 390回
  • 年度积分:0
  • 历史总积分:419
  • 注册:2005年2月24日
发表于:2007-07-05 15:04:00
9楼
TO:Trio技术支持,我给的不是Trio的程序,只是说明一下多线程的操作而已

lg_006

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 390回
  • 年度积分:0
  • 历史总积分:419
  • 注册:2005年2月24日
发表于:2007-07-05 15:06:00
10楼
相信您写Trio程序,必然比我厉害得多

马运

  • 精华:0帖
  • 求助:0帖
  • 帖子:5帖 | 13回
  • 年度积分:0
  • 历史总积分:30
  • 注册:2007年7月04日
发表于:2007-07-05 16:28:00
11楼
  谢谢Trio技术支持的耐心回答!
  以后有问题还要多多请教你,望多多赐教!
  thanx a lot

马运

  • 精华:0帖
  • 求助:0帖
  • 帖子:5帖 | 13回
  • 年度积分:0
  • 历史总积分:30
  • 注册:2007年7月04日
发表于:2007-07-05 16:30:00
12楼
  另外一个问题,run "app1",4
  如何在程序中定义app1这个程序?还有在trio中什么情况下使用这种多线程?  

马运

  • 精华:0帖
  • 求助:0帖
  • 帖子:5帖 | 13回
  • 年度积分:0
  • 历史总积分:30
  • 注册:2007年7月04日
发表于:2007-07-05 16:33:00
13楼
  另外 trio technical support你能否将你加为我的msn或者skype好友!
  我的MSN是 planktonli@sina.com
  Skype是   planktonli 

lg_006

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 390回
  • 年度积分:0
  • 历史总积分:419
  • 注册:2005年2月24日
发表于:2007-07-06 09:15:00
14楼
    也加我吧,虽然我不是trio的用户,可算个潜在用户还是够资格的。我的MSN是 lg_006@hotmail.com

lxilon

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 14回
  • 年度积分:0
  • 历史总积分:324
  • 注册:2002年4月16日
发表于:2007-07-18 11:27:00
15楼
    刚接触TRIO控制器,现在我用224控制器控制控制了8根轴,请问如何实现8根轴同时开始运行,但是停止是由采集色标来控制的,故停止的并不是同步的。请问是否可以用虚拟轴控制?如何实现?

caodelei

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 21回
  • 年度积分:0
  • 历史总积分:42
  • 注册:2007年7月18日
发表于:2007-07-18 15:29:00
16楼
ADDAX(7) AXIS(0)'叠加虚拟轴7的运动到0轴
ADDAX(7) AXIS(1)'叠加虚拟轴7的运动到1轴
FORWARD AXIS(7)'7轴正转
BASE(0)'定义基本轴
REGIST(3)'设置色标功能0轴
BASE(1)'定义基本轴
REGIST(3)'设置色标功能1轴
REPEAT'循环扫描
BASE(0)
IF MARK THEN'0轴色标采集到
ADDAX(-1)'停止0轴动作
WA(500)'等待半秒
ADDAX(7)'启动0轴
REGIST(3)'重设0轴色标
ENDIF
BASE(1)
IF MARK THEN'1轴色标采集到
ADDAX(-1)'停止1轴动作
WA(500)'等待半秒
ADDAX(7)'启动1轴
REGIST(3)'重设1轴色标
ENDIF
UNTIL FALSE

caodelei

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 21回
  • 年度积分:0
  • 历史总积分:42
  • 注册:2007年7月18日
发表于:2007-07-18 15:33:00
17楼
以上程序段实现的是两轴同时启动,而根据各自的色标决定停止哪一轴的例子,如果是8轴,道理一样.对于虚拟轴的问题,在这段程序中我已经用到了,轴7既为虚拟轴

z3210

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 4回
  • 年度积分:0
  • 历史总积分:3
  • 注册:2011年4月12日
发表于:2014-03-08 21:40:13
18楼

请问一下,我用TRIO控制MC464伺服驱动器,再控制电机,使用指令如下:

BASE(0)

UNITS=1000

ACCEL=30

DECEL=30

SPEED=20

P_GAIN=1

FE_LIMIT=10

SERVO=ON

ATYPE AXIS(0)=44

WDOG=ON

MOVE(100)


运行指令出现sxisstatus会出现错误8,1;这是这么回事。请指导。


z3210

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 4回
  • 年度积分:0
  • 历史总积分:3
  • 注册:2011年4月12日
发表于:2014-03-08 21:42:10
19楼

回复内容:

对: Trio技术支持 1\ trio中的多线程之间可以变量通讯么?答:可以。... 内容的回复!


请问一下,我用TRIO控制MC464伺服驱动器,再控制电机,使用指令如下:

BASE(0)

UNITS=1000

ACCEL=30

DECEL=30

SPEED=20

P_GAIN=1

FE_LIMIT=10

SERVO=ON

ATYPE AXIS(0)=44

WDOG=ON

MOVE(100)


运行指令出现sxisstatus会出现错误8,1,电机用手可以转动,这是这么回事。请指导。

QQ:925687384



热门招聘
相关主题

官方公众号

智造工程师