EDA365电子工程师网

标题: 怎样在skill里调用另一个skill [打印本页]

作者: zhanyying    时间: 2013-9-10 10:53
标题: 怎样在skill里调用另一个skill
如题,各位大侠,怎样在skill里直接调用另一个skill呢,因为不想把需要调用的skill直接copy到另一个skill里,怎样才可以直接调用?
作者: 长天落彩霞    时间: 2013-9-10 12:32
axlShell
作者: zhanyying    时间: 2013-9-10 15:59
长天落彩霞 发表于 2013-9-10 12:32
axlShell

axlShell 的参数是t_command,如果这样做的话我需要把skill先做成菜单形式再进行调用,对吗?
作者: shirdon    时间: 2013-9-10 16:50
函数可以直接调用的
作者: zhanyying    时间: 2013-9-10 16:59
shirdon 发表于 2013-9-10 16:50
函数可以直接调用的

skill语言里的函数是可以直接调用的。但是我写的skill想在另一个skill里调用,要怎么做呢?
作者: betamelody    时间: 2013-9-10 17:22
zhanyying 发表于 2013-9-10 16:59
skill语言里的函数是可以直接调用的。但是我写的skill想在另一个skill里调用,要怎么做呢?

上代码
作者: zhanyying    时间: 2013-9-10 17:34
betamelody 发表于 2013-9-10 17:22
上代码

版主的意思是要把调用的skill程序贴到l另一个skill里呢?还是说让我把代码贴这里呢?
如果是第一种,我知道怎么做,我是不想贴才问有什么好方法。
如果是第二种呢,我没有具体的代码。就是想在skill里可以调用script,那在skill里可以调用另一个skill 吗?
作者: betamelody    时间: 2013-9-10 17:38
我不明白你说的一个skill调用另一个skill是什么意思,什么样叫一个skill?   一个skill文件?
先全部load进内存然后在一个skill运行过程中调用另一个的入口函数,这有什么困难吗
作者: zhanyying    时间: 2013-9-10 17:40
呵呵,可能我说的不够专业,不过我明白你的意思了,谢谢了{:soso_e100:}
作者: ifuture    时间: 2013-9-10 21:33
各文件都load进来。就可以直接用了。
作者: shirdon    时间: 2013-9-14 14:36
本帖最后由 shirdon 于 2013-9-14 14:46 编辑
ifuture 发表于 2013-9-10 21:33
各文件都load进来。就可以直接用了。


正解,在allegro.ilinit里,
load("1.il")
load("2.il")

1.il 内容:

defun( _try ( a b)    注意函数名try与 (a b)之间有空格   
      ...  ...
        )

2.il 内容:

defun( _call ( c d)
       _try(c d)      调用try函数时,try与 (c d)之间不能有空格空格
)

实现调用
作者: kevin890505    时间: 2013-12-10 16:59
procedure( quick_open(t_open)
    if(!boundp('EVER_LAUNCHED) then
     axlShell("qview")
          axlShell("grids")
      EVER_LAUNCHED = t
    )
)
if(axlVersion('version)>15.7 then
  axlTriggerSet('open 'quick_open)

啥都不说,这就是用法
作者: 王开鑫55    时间: 2017-5-25 16:13
kevin890505 发表于 2013-12-10 16:59
procedure( quick_open(t_open)
    if(!boundp('EVER_LAUNCHED) then
     axlShell("qview")

A.skill调用B.skill,怎,直接拿过来不行,未定义么把B.SKILL得到的满足条件的个数在A.skill里处理

作者: 王开鑫55    时间: 2017-5-25 16:13
kevin890505 发表于 2013-12-10 16:59
procedure( quick_open(t_open)
    if(!boundp('EVER_LAUNCHED) then
     axlShell("qview")

A.skill调用B.skill,怎么把B.SKILL得到的满足条件的个数在A.skill里处理

作者: kevin890505    时间: 2017-5-25 22:12
王开鑫55 发表于 2017-5-25 16:13
A.skill调用B.skill,怎么把B.SKILL得到的满足条件的个数在A.skill里处理

skill里面的功能函数定义可以是全局的,所以skill调用skill和你skill里面调用一个功能是一样的,比如funca(a b c),你可以在另一个skill里面调用funca(d e f),返回你想要的参数d/e/f直接用就可以了   

作者: 王开鑫55    时间: 2017-5-26 15:24
kevin890505 发表于 2017-5-25 22:12
skill里面的功能函数定义可以是全局的,所以skill调用skill和你skill里面调用一个功能是一样的,比如func ...

1_square_pad.i defun(square_pad (count)
                            。。。。。)
统计个数
2.check.il
load("1_square_pad.il");加载il文件                                                                                     
a = square_pad(y)                                                                             
               println(a)

发现打印出来的是t并不是数字4


作者: kevin890505    时间: 2017-5-26 16:19
王开鑫55 发表于 2017-5-26 15:24
1_square_pad.i defun(square_pad (count)
                            。。。。。)
统计个数

defun(Cont_smy1 ()          
        prog( (all e)
        all = length(axlDBGetDesign()->symdefs) ;53

        return(all)
        e = t
        ))
       
defun(Cont_smy2 ()               
        let( (all e)
        all = length(axlDBGetDesign()->symdefs) ;53
        e = t
        ))

defun(Cont_smy3 ()          
        prog( (all e)
        all = length(axlDBGetDesign()->symdefs) ;53
        e = t
        ))       
调用结果:
Skill > a = Cont_smy1()
53
Skill > b = Cont_smy2()
t
Skill > c = Cont_smy3()
nil

对比下你会发现点什么,同样的  你把最后的e=t删了  看又会返回什么


作者: 王开鑫55    时间: 2017-5-27 16:29
defun(Cont_smy1 ()         
        prog( (all e)
        all = length(axlDBGetDesign()->symdefs) ;53
        return(all)
        e = t
        ))
发现 return后的语句不会执行,return必需与prog 一起用才行。
后面两个我用打印println(e)发现都是t
2.我是在写成.il里
axlCmdRegister("return1" 'Cont_smy1)      
axlSetAlias("~a" "return1")                                 
defun(Cont_smy1 ()                                                         
                       prog( (all e)                                       
                       all = length(axlDBGetDesign()->symdefs) ;53         
                       e = t                                                
                       println(e)                                          
                       ))                                                   

这样在allegro按快捷键运行的。
3.怎样在allegro command下输入set telskill里运行,能把你的运行截图给我?(就是你上次的运行结果的界面+代码,一行一行输入试了,也不对)
我直接把上面的代码复制到set telskill里的skill窗口里,运行时nil









欢迎光临 EDA365电子工程师网 (http://bbs.elecnest.cn/) Powered by Discuz! X3.2