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

请教一个TRIO程序的问题 点击:4148 | 回复:46



ShowFine

    
  • 精华:1帖
  • 求助:1帖
  • 帖子:57帖 | 753回
  • 年度积分:0
  • 历史总积分:1671
  • 注册:2003年10月29日
发表于:2007-05-23 10:09:00
楼主
建立了两个程序,名称分别为:MAIN、JRJ_CAMBOX。    目的是想在MAIN程序里将JRJ_CAMBOX做为任务运行。  在MAIN程序内写如下程序:
loop:
IF IN(0) THEN   'e_stop
RUN "JRJ_CAMBOX",13
ELSE
STOP "JRJ_CAMBOX"
ENDIF
GOTO loop
运行MAIN程序,再模拟,将IN(0)设置为ON, 结果就提示什么MAIN运行进程号14错误,然后MAIN就不执行了,但是JRJ_CAMBOX倒是在执行了。 为什么?
是我程序有问题,还是仿真器的问题? 因为我发现这个仿真器不完善,而且我又是自学TRIO这个东西,没有实际的硬件模拟, 很头疼。  哎,为什么这个仿真器就不能完善点呢, 不然象我们这种初学者都不知道到底是程序问题还是仿真器的问题,郁闷



楼主最近还看过



Trio技术支持

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 150回
  • 年度积分:0
  • 历史总积分:201
  • 注册:2004年7月28日
发表于:2007-05-23 10:36:00
1楼
你的程序有问题,你做的main程序在不断循环执行,当in(0)被置为1时,第一次系统会正常启动“JRJ_CAMBOX”程序,而且让“JRJ_CAMBOX”程序在第13号任务内运行。但是当main程序第二次到达if判断时,IN(0)同样条件成立,此时你的程序依然是run "JRJ_CAMBOX",13 而此时第13号任务已经被上次运行的程序占据,所以系统会报错,main程序退出。如果你把run "JRJ_CAMBOX",13 改成 run "JRJ_CAMBOX"的话,你会看到会有多个JRJ_CAMBOX被运行起来后,main程序同样会报错退出。这是因为run指令后面不指定任务号时,系统会自动将程序在最大任务号下启动,此时请注意程序和任务的区别!每个控制器都有其最多执行的任务数量,当到达这个限制值时,系统已经没有更多的任务空间来执行这个程序时,同样会报错,并将报错的程序退出。根据以上说明,我觉得ShowFine应该明白怎么改程序了。

ShowFine

  • 精华:1帖
  • 求助:1帖
  • 帖子:57帖 | 753回
  • 年度积分:0
  • 历史总积分:1671
  • 注册:2003年10月29日
发表于:2007-05-23 11:01:00
2楼
谢谢 Trio技术支持,按你的说法,改成如下即可.
RUN "JRJ_CAMBOX",13
loop:
IF IN(0) THEN STOP "JRJ_CAMBOX"
GOTO loop

主要是用习惯了PLC的编程习惯,所以一时绕不过弯来,呵.  其实我想做的是: 模仿PLC编程思维, 建立一个主程序MAIN,在这里面循环执行对外部信号的监控,比如急停信号IN(0),启动信号IN(1)... ... 我开始写的程序的意思就是想在没有急停时运行任务,而有急停时则停止该任务,  [color=red]但是当急停取消后,它又会执行的. [/color]

Trio技术支持

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 150回
  • 年度积分:0
  • 历史总积分:201
  • 注册:2004年7月28日
发表于:2007-05-23 11:28:00
3楼
给你个例子程序:
' Initialisation of variables
 '-----------------------------------------------
 GOSUB init_vars

 ' Initialisation of serial ports
 '-----------------------------------------------
 GOSUB init_serial

 'Stops all movements and programs
 '-----------------------------------------------
 GOSUB stop_all

 ' Initialisation axis parameters
 '-----------------------------------------------
 RUN "STARTUP",3

 WAIT UNTIL PROC_STATUS PROC(3)=1
 ' Wait until process is stopped
 WAIT UNTIL PROC_STATUS PROC(3)=0

 While(true)
 
  'Wait the start signal
  While(in(start_0)=0)
 ' Check for motion error
  IF MOTION_ERROR or IN(emerg_stop_1) = 0 THEN
   '...
       GoSub e_stop
  ENDIF
  Wend
  'Start the application programs
  wdog=On
  wa(100)
  run "app1",4
  run "app2",5
 
  '------------------------------------------
  'Main loop
  '------------------------------------------
runflag=1
  While(runflag=1)
  ' Check for motion error
  IF MOTION_ERROR THEN
   '...
   GoSub m_error
           runflag=0
  ENDIF

 ' Check for emergency stop
 IF IN(emerg_stop_1) = 0 THEN
  '...
  GoSub e_stop
  runflag=0
 ENDIF
Wend
Wend 
 

 

m_error:
  ' Stop all movements
 GOSUB stop_all
Return

e_stop:
' Emergency Stop
  GoSub Stop_all
Return

stop_all:
 'Stops all programs
 STOP "app1"
 STOP "app2"
 'Stops all possible moves
 RAPIDSTOP
 WA(20)
 FOR i = 0 TO 2
  BASE(i)
  CANCEL(1)
  WA(1)
  CANCEL(1)
  WA(1)
  CANCEL
  WAIT IDLE
 DATUM(0) 'Reset the possible following error
  SERVO = OFF
 NEXT i
 BASE(0)
 'Disable all axis
 WDOG=OFF
RETURN
 
 
init_vars:

Return

init_serial:
setcom(38400,8,1,2,1,4)
Return

ShowFine

  • 精华:1帖
  • 求助:1帖
  • 帖子:57帖 | 753回
  • 年度积分:0
  • 历史总积分:1671
  • 注册:2003年10月29日
发表于:2007-05-23 12:10:00
4楼
非常好!有条理,模块化.  谢谢 Trio技术支持 ,有什么不懂的,我再接着请教,呵呵  :)

ShowFine

  • 精华:1帖
  • 求助:1帖
  • 帖子:57帖 | 753回
  • 年度积分:0
  • 历史总积分:1671
  • 注册:2003年10月29日
发表于:2007-05-24 16:26:00
5楼
再来一个问题:  在一个进程(任务)中,想要实现对上位机(触摸屏)上一个按扭的上升沿动作, 比如触摸屏内设置两个按扭分别为A和B,那么要求按下A(即使是不松开),那么轴0前进10个用户单位,  然后只有松开A再按下(即有一个上升沿动作)才会再前进10个用户单位.  即相当于“点动”功能了。   当然还得要求对这个进程是实时监控的,就是无论什么时候A有一个上升沿,那么前进10, B有一个上升沿,那么后退10... 这中间还可以随时响应其他的命令。   有什么好的办法吗?

Trio技术支持

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 150回
  • 年度积分:0
  • 历史总积分:201
  • 注册:2004年7月28日
发表于:2007-05-24 17:13:00
6楼
It's very easy to do, just like this:

base(0)
while true
   If in(a)=1 and a_flag=0 then
      if mtype=idle then
          move(10)
      endif
      a_flag=1
   endif
   if in(a)=0 then a_flag=0

   If in(b)=1 and b_flag=0 then
      if mtype=idle then
          move(-10)
      endif
      b_flag=1
   endif
   if in(b)=0 then b_flag=0

wend

xzy568

  • 精华:1帖
  • 求助:0帖
  • 帖子:22帖 | 480回
  • 年度积分:0
  • 历史总积分:991
  • 注册:2002年9月08日
发表于:2007-05-24 17:42:00
7楼
TRIO的指令很多解释不够详细,手册写得惜墨如金.

Trio技术支持

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 150回
  • 年度积分:0
  • 历史总积分:201
  • 注册:2004年7月28日
发表于:2007-05-24 18:31:00
8楼
手册是编写的不太好,不过正在完善中,好在有明白的人,所以不管你有什么关于Trio的技术问题,我都会尽力回答的。

ShowFine

  • 精华:1帖
  • 求助:1帖
  • 帖子:57帖 | 753回
  • 年度积分:0
  • 历史总积分:1671
  • 注册:2003年10月29日
发表于:2007-05-24 20:46:00
9楼
还是很感谢 Trio技术支持 的, TRIO手册虽然解释得不够详细,但是个人觉得还算是比较好了,而且有中文的.  主要是我们在这方面的基础太差了,所以理解起来累了一些,呵呵

波恩

  • 精华:10帖
  • 求助:0帖
  • 帖子:203帖 | 11028回
  • 年度积分:0
  • 历史总积分:36300
  • 注册:2003年6月12日
发表于:2007-05-25 09:57:00
10楼
“Trio技术支持”支持的不错!

ShowFine

  • 精华:1帖
  • 求助:1帖
  • 帖子:57帖 | 753回
  • 年度积分:0
  • 历史总积分:1671
  • 注册:2003年10月29日
发表于:2007-05-25 10:40:00
11楼
请教一下MATCH(count, table address)的功能? 
看了看上面的例子,对应REGIST(mode,{distance})的功能, 而REGIST的模式5又根本没解释...晕...

还有TRANSITIONS上面解释为"记录在一个REGIST过程中,其对应触发的输入点发生的变换次数", 怎么理解?

Trio技术支持

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 150回
  • 年度积分:0
  • 历史总积分:201
  • 注册:2004年7月28日
发表于:2007-05-25 13:12:00
12楼
Match以及TRANSITIONS功能解释起来比较复杂,99%的应用是用不到这个指令的,所以建议ShowFine还是先别关它了。不过Regist是比较常用的,所谓Regist指的是用户应用程序向内核程序登记一种特定的高速脉冲捕捉功能,比如Regist(1)指的是让内核程序去捕捉对应轴在Z相脉冲上升沿时刻的位置,Regist(3)指的是让内核程序去捕捉对应轴在对应高速输入口的脉冲上升沿时刻的位置,捕捉到的位置信息由内核程序存放到对应轴的REG_POS寄存器中,然后内核程序在完成Regist指令后会将对应轴特定的一个标志MARK参数置1,从而让应用程序及时去根据捕捉到的位置去做进一步的处理。当再一次进行Regist时,内核软件会自动将MARK复位,所以Regist是一个一次性指令,如果需要重复处理,则需要不断触发Regist指令。由上述分析说明可知,高速脉冲状态的捕捉过程全部都是由系统内核软硬件配合完成,所以其实时性会非常高,可以达到微秒级,从而保证系统的控制精度。在包装、印刷及定长裁剪的机械中,Regist是必不可少的工具指令。

ShowFine

  • 精华:1帖
  • 求助:1帖
  • 帖子:57帖 | 753回
  • 年度积分:0
  • 历史总积分:1671
  • 注册:2003年10月29日
发表于:2007-05-25 16:41:00
13楼
谢谢TRIO技术支持.  问个题外话:您是属于TRIO公司还是代理商?呵呵.  可惜深圳好没找到象你这样专业的支持,不然可以当面请教就好了. 因为有些东西涉及到具体的工艺,很难靠一些文字和图形表达出来.

Trio技术支持

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 150回
  • 年度积分:0
  • 历史总积分:201
  • 注册:2004年7月28日
发表于:2007-05-25 17:09:00
14楼
这个ID名称实际上已经说明了身份.有问题可以给Trio公司办事处直接打电话,Trio会尽力帮助你来解决.

波恩

  • 精华:10帖
  • 求助:0帖
  • 帖子:203帖 | 11028回
  • 年度积分:0
  • 历史总积分:36300
  • 注册:2003年6月12日
发表于:2007-05-25 17:45:00
15楼
“在包装、印刷及定长裁剪的机械中,Regist是必不可少的工具指令”
不错!

ShowFine

  • 精华:1帖
  • 求助:1帖
  • 帖子:57帖 | 753回
  • 年度积分:0
  • 历史总积分:1671
  • 注册:2003年10月29日
发表于:2007-05-25 18:27:00
16楼
是的,我们的设备也涉及到定长的,而且在定长过程中还包括一些复杂点逻辑的应用,原来我是用PLC实现的,以后机器升级的话,我想改用运动控制器来做定长这一块了,其他的逻辑和外围的控制(比如温度,张力,纠偏)等用PLC来控制. 但是对这个控制器不熟悉,而且我又不可能先买一个硬件来做实验,因为这是我自己在做预备的方案. 不知道深圳有TRIO公司的办事处吗? 这边有没有象你这样的支持?要是有的话就好了.

ShowFine

  • 精华:1帖
  • 求助:1帖
  • 帖子:57帖 | 753回
  • 年度积分:0
  • 历史总积分:1671
  • 注册:2003年10月29日
发表于:2007-05-26 16:02:00
17楼
能详细的讲讲ADD_DAC指令吗? 手册上讲得我不太明白.
另外,见TRIO技术支持在某一个帖子上讲过该指令可以配合模拟量输入板做张力控制,具体是个什么样的概念? 谢谢!

xzy568

  • 精华:1帖
  • 求助:0帖
  • 帖子:22帖 | 480回
  • 年度积分:0
  • 历史总积分:991
  • 注册:2002年9月08日
发表于:2007-05-26 17:23:00
18楼
感觉TRIO的手册比较适合己经会用的人用来做备忘比较合适.
我绝不相信一个熟悉运动控制和C语言硬件编程基础的人可以依靠TRIO的手册就可以进行应用编程.

ShowFine

  • 精华:1帖
  • 求助:1帖
  • 帖子:57帖 | 753回
  • 年度积分:0
  • 历史总积分:1671
  • 注册:2003年10月29日
发表于:2007-05-26 17:37:00
19楼
那倒不至于吧?呵呵,我觉得还算好啊,至少这些天我已经有个感性的认识了,而且我对运动控制原本可以说是一无所知.  不知道是否我过于自信了,呵呵. 

波恩

  • 精华:10帖
  • 求助:0帖
  • 帖子:203帖 | 11028回
  • 年度积分:0
  • 历史总积分:36300
  • 注册:2003年6月12日
发表于:2007-05-27 09:52:00
20楼
“手册是编写的不太好,不过正在完善中”,“我绝不相信一个熟悉运动控制和C语言硬件编程基础的人可以依靠TRIO的手册就可以进行应用编程”

看来Trio和用户都意识到手册编写有不足之处,手册编写质量直接影响用户使用和体验,好了可以增加卖点,不好足以影响销售。Trio还是应该加油啊!

热门招聘
相关主题

官方公众号

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