EDA365电子工程师网

标题: 求教各位大侠?skill如何兼容不同版本的软件 [打印本页]

作者: zhangjunxuan21    时间: 2012-11-27 10:40
标题: 求教各位大侠?skill如何兼容不同版本的软件
本帖最后由 zhangjunxuan21 于 2012-11-27 10:44 编辑

我用fpm的方法将群里面各位大侠几个好用的skill导入到15.5中可以使用,可是软件转换成16.3的时候(电脑同时安装了16.3和15.5)这时候问题来了,16.3的菜单不正常了,查找了一下原因发现E:\work\pcbenv目录下的allegro.ilinit文件里面有这么一句 load( "D:\\user15.51\\pcbenv\\DstCxi.il"),当我把这一句删掉的时候,skill导入到16.3就不会出现菜单混乱不能用的现象,不知道有没有神马办法可以让skill兼容2个版本的软件,就像我们论坛里面的这个365 skill一样可以调用,这样子发现好的skill可以弥补论坛365 skill没有的功能。诚心求教啊
作者: betamelody    时间: 2012-11-27 11:22
如果只是这一句有问题的话,把这一句改成
  1. when(axlVersion('version)<16.3 load( "D:\\user15.51\\pcbenv\\DstCxi.il"))
复制代码

作者: zhangjunxuan21    时间: 2012-11-27 13:36
betamelody 发表于 2012-11-27 11:22
如果只是这一句有问题的话,把这一句改成

谢谢大侠的回答  可能是我问题点没找对 添加完之后还是不能兼容不同版本的软件 16.3的可以的话15.5的就不行了 15.5的可以了16.3的就不行了  根本原因可能是不同版本的软件菜单不一致 所以切换的时候fpm生成的allegro.meu就可能就不认了 具体原因还没找到{:soso_e143:}
作者: betamelody    时间: 2012-11-27 14:46
那就是代码本身的问题了,15和16版的菜单加载可以有通用的机制,应该是你用的软件加载机制不同产生冲突
作者: zhangjunxuan21    时间: 2012-11-27 14:52
betamelody 发表于 2012-11-27 14:46
那就是代码本身的问题了,15和16版的菜单加载可以有通用的机制,应该是你用的软件加载机制不同产生冲突

很感谢你的热心帮助,只是我到现在还没找出根本原因,也说不清楚问题出在哪{:soso_e143:} 只知道结果是论坛里面有些不错的skill不能同时兼容15.x和16.x版本的软件,只能单独使用,不然会出现菜单混乱的现象,所以我每次用用那些skill的时候都得还原一次e\work\PCBENV里面的文件,我觉得很不方便  想说有没有办法让他们兼容
作者: zhangjunxuan21    时间: 2012-11-27 15:00
betamelody 发表于 2012-11-27 14:46
那就是代码本身的问题了,15和16版的菜单加载可以有通用的机制,应该是你用的软件加载机制不同产生冲突

或者说应该修改代码中的哪段代码可以兼容 我把附件代码传上来 请大侠有空的时候帮忙研究一下 单独的的软件版本我验证过了都可以用 往后还能往util里面添加好的skill文件
作者: zhangjunxuan21    时间: 2012-11-27 15:05
做这个验证的时候要先备份一下pcbenv里面的文件 不然还原不回来我就罪过大了
作者: betamelody    时间: 2012-11-27 17:38
本帖最后由 betamelody 于 2012-11-28 10:29 编辑

目测楼主加载这些作品的原理都是直接改变menu路径,强制转向,allegro不同版本的菜单当然也会有不一样,而这些作品好像没有判断版本来跳转不同menu指向的机制存在,就算存在这些机制也只能让最后一个跳转的作品呈现在menu中(之前的只会被加载,无法呈现到menu中)
请@deargds  讲解一下EDA365的菜单加载机制
skill本身不存在兼容性问题(排除使用新函数,和调用script的情况),开发者如果有觉悟让自己的作品不干扰到其他开发者的作品,就会天下和谐了.

有一种通用的方法,是用axlUIMenuFind先找到最右的位置,然后通过axlUIMenuInsert来加载配置好的菜单,通过trigger或者快捷键来最终加载菜单. 部署文件则用注册环境变量的方法(放在%HOME%中也不是不可以,但是可能会给使用者造成不便)
作者: qianfengsjtu    时间: 2012-11-29 09:59
一直劝说大家不要直接改menu file然后load,这样会造成很多问题
不过貌似坛子里很多人都喜欢这么做
我自己写过一段加载菜单的skill,应该能通用
思路是这样的
先用axlUIMenuDump把已经打开的APD的menu文件搞到本地
然后用infile把它打开
创建一个新的空白menu文件
用while和fprintf把老的menu文件一句一句拷到新的menu文件中
判断menu文件到达你所希望的插入点
把你希望插入的menu,用fprintf插入
关闭新的和老的menu文件
用axlUIMenuLoad装载新的menu文件
最后再删除本地的所有menu文件
如果有兴趣的还可以再做一个检查文件
检查需要装载的menu是否已经装载
如果已经装载则提示并不再装载

作者: qianfengsjtu    时间: 2012-11-29 13:30
betamelody 发表于 2012-11-27 17:38
目测楼主加载这些作品的原理都是直接改变menu路径,强制转向,allegro不同版本的菜单当然也会有不一样,而这些 ...

定义环境变量是正确的方法,也是Cadence推荐的方法

作者: wolf343105    时间: 2012-11-29 14:04
zhangjunxuan21 发表于 2012-11-27 15:00
或者说应该修改代码中的哪段代码可以兼容 我把附件代码传上来 请大侠有空的时候帮忙研究一下 单独的的软件 ...

你否把你的SKILL发给我吗?下载扣分太严重了.wolf343105@126.com. thanks.
作者: zhangjunxuan21    时间: 2012-11-29 23:29
qianfengsjtu 发表于 2012-11-29 13:30
定义环境变量是正确的方法,也是Cadence推荐的方法

就是太麻烦 每次切换软件调用skill就得整一次env,怪讨厌的,最近忙着画板子没空学习这个,大侠说的axlUIMenuDump这个是个软件吗 分享一个试试你说的方法
作者: zhangjunxuan21    时间: 2012-11-29 23:30
wolf343105 发表于 2012-11-29 14:04
你否把你的SKILL发给我吗?下载扣分太严重了. thanks.

嗯好 我明天上班的时候发给你 最近赶着一块板子没空儿研究这个也没上论坛了
作者: zhangjunxuan21    时间: 2012-11-29 23:32
wolf343105 发表于 2012-11-29 14:04
你否把你的SKILL发给我吗?下载扣分太严重了. thanks.

好 明天发给你 最近忙着画板子都没上论坛了
作者: zhangjunxuan21    时间: 2012-11-29 23:42
qianfengsjtu 发表于 2012-11-29 09:59
一直劝说大家不要直接改menu file然后load,这样会造成很多问题
不过貌似坛子里很多人都喜欢这么做
我自己 ...

我也知道不要直接改menu,可以用fpm加载skill的时候他就会生成一个menu文件,这个menu文件在切换版本的时候以后重新加载的时候不会跟着改变,这个问题很多指导skill用fpm方法加载的文档都没提出来,每次都要还原环境变量以后重新加载才能切换过去,这样子很不方便,调用个skill文件都要整半天很不方便,期待大侠们分享一个加载skill的工具,兼容不同版本,还能在软件菜单上直接调用,而不是每次都要输入调用命令。能分享一下你说的软件吗
作者: qianfengsjtu    时间: 2012-11-30 05:14
axlUIMenuDump是一个skill AXL 函数
就是Allegro Extention Language,就是Allegro提供的库函数

作者: zhangjunxuan21    时间: 2012-11-30 15:41
qianfengsjtu 发表于 2012-11-30 05:14
axlUIMenuDump是一个skill AXL 函数
就是Allegro Extention Language,就是Allegro提供的库函数

{:soso_e143:} 糗大了
作者: zhangjunxuan21    时间: 2012-12-4 16:14
qianfengsjtu 发表于 2012-11-29 09:59
一直劝说大家不要直接改menu file然后load,这样会造成很多问题
不过貌似坛子里很多人都喜欢这么做
我自己 ...

不知道大侠方便把这个加载菜单的skill分享一下吗 最近瞎折腾了好几天 愣是没搞出来又还原成最初的了 新手还不会学skill,自学了点勉强看懂了一些些
作者: qianfengsjtu    时间: 2012-12-6 13:47
zhangjunxuan21 发表于 2012-12-4 16:14
不知道大侠方便把这个加载菜单的skill分享一下吗 最近瞎折腾了好几天 愣是没搞出来又还原成最初的了 新手 ...

不好意思最近太忙了,没看到你的回复啊
作者: qianfengsjtu    时间: 2012-12-6 13:51
额。。。我花了15金币才下了你的skill附件,让我先看看是什么问题再回复你啊
作者: qianfengsjtu    时间: 2012-12-8 06:44
本帖最后由 qianfengsjtu 于 2012-12-8 06:46 编辑
  1. axlCmdRegister("menumain" 'menumain);register command

  2. procedure(menumain()
  3.         let(()
  4.                 menucheck()
  5.                 if(check_result==nil
  6.                         then
  7.                         menuload()
  8.                         else
  9.                         menudelete()
  10.                 )
  11.                 deleteFile(strcat(getWorkingDir(),"/old.men"))
  12.                 deleteFile(strcat(getWorkingDir(),"/new.men"))
  13.                 deleteFile(strcat(getWorkingDir(),"/check.men"))
  14.         )
  15. );menumain function

  16. procedure(menuload()
  17.         let((origin_menufile,inport,outport,nextline)
  18.                 origin_menufile=axlUIMenuDump(strcat(getWorkingDir(),"/old.men"))
  19.                 inport=infile(origin_menufile)
  20.                 outport=outfile(strcat(getWorkingDir(),"/new.men"))
  21.                 gets(nextline inport)
  22.                 while(nextline!="END\n"
  23.                         fprintf(outport,nextline)
  24.                         gets(nextline,inport)
  25.                         )
  26.                 fprintf(outport,"    POPUP \"%s\"\n","SKILL PDFs")
  27.                 fprintf(outport,"    BEGIN\n")
  28.                 fprintf(outport,"        MENUITEM \"%s\", \"%s\"\n","SKILL Language User Guide","skill pdf1")
  29.                 fprintf(outport,"        MENUITEM \"%s\", \"%s\"\n","SKILL Language Reference","skill pdf2")
  30.                 fprintf(outport,"        MENUITEM \"%s\", \"%s\"\n","Allegro eXtention Language","skill pdf3")
  31.                 fprintf(outport,"        MENUITEM \"%s\", \"%s\"\n","SKILL Development Help","skill pdf4")
  32.                 fprintf(outport,"    END\n")
  33.                 fprintf(outport,"END\n")
  34.                 close(outport)
  35.                 close(inport)
  36.                 axlUIMenuLoad(strcat(getWorkingDir(),"/new.men"))
  37.         )
  38. );menuload function

  39. procedure(menudelete()
  40.         let((origin_menufile,inport,outport,nextline)
  41.                 origin_menufile=axlUIMenuDump(strcat(getWorkingDir(),"/old.men"))
  42.                 inport=infile(origin_menufile)
  43.                 outport=outfile(strcat(getWorkingDir(),"/new.men"))
  44.                 gets(nextline inport)
  45.                 while(nextline!="    POPUP \"SKILL PDFs\"\n",
  46.                         fprintf(outport,nextline)
  47.                         gets(nextline,inport)
  48.                         )
  49.                 fprintf(outport,"END\n")
  50.                 close(outport)
  51.                 close(inport)
  52.                 axlUIMenuLoad(strcat(getWorkingDir(),"/new.men"))
  53.         )
  54. );menudelete function

  55. procedure(menucheck()
  56.         check_result=prog((check_menufile,inport,outport,nextline)
  57.                                         check_menufile=axlUIMenuDump(strcat(getWorkingDir(),"/check.men"))
  58.                                         inport=infile(check_menufile)
  59.                                         START
  60.                                         gets(nextline inport)
  61.                                         if(nextline=="    POPUP \"SKILL PDFs\"\n"
  62.                                                 then
  63.                                                 close(inport)
  64.                                                 return(t)
  65.                                                 else
  66.                                                         if(nextline==nil
  67.                                                         then
  68.                                                         go(END)
  69.                                                         else
  70.                                                         go(START)
  71.                                                         )
  72.                                         )
  73.                                         END
  74.                                         close(inport)
  75.                                 )
  76. );menucheck function, return t if added already or nil if not added yet.

  77. procedure(pdf1()
  78.         axlPdfView(strcat(cdsGetInstPath("doc"),"\\sklanguser\\sklanguser.pdf"))
  79. )
  80. procedure(pdf2()
  81.         axlPdfView(strcat(cdsGetInstPath("doc"),"\\sklangref\\sklangref.pdf"))
  82. )
  83. procedure(pdf3()
  84.         axlPdfView(strcat(cdsGetInstPath("doc"),"\\algroskill\\algroskill.pdf"))
  85. )
  86. procedure(pdf4()
  87.         axlPdfView(strcat(cdsGetInstPath("doc"),"\\skhelp\\skhelp.pdf"))
  88. )
复制代码

作者: qianfengsjtu    时间: 2012-12-8 06:49
这个是我想出来的办法,但没有在15.x里面试过,不知道15.x里axlmenudump和axlmenuload命令是否可以用。
作者: zhangjunxuan21    时间: 2012-12-10 08:27
谢谢大侠的热心帮助 我找到一个解决办法了 用这个帖子里面的加载器可以兼容多个版本软件skill的加载 https://www.eda365.com/forum.php? ... l%BC%D3%D4%D8%C6%F7  不过被加密了看不到代码  大侠写的这个skill我试试啊
作者: zhangjunxuan21    时间: 2012-12-10 08:28
qianfengsjtu 发表于 2012-12-8 06:44

谢谢大侠的热心帮助 我找到一个解决办法了 用这个帖子里面的加载器可以兼容多个版本软件skill的加载 https://www.eda365.com/forum.php? ... l%BC%D3%D4%D8%C6%F7  不过被加密了看不到代码  大侠写的这个skill我试试啊

作者: zhangjunxuan21    时间: 2012-12-10 08:29
https://www.eda365.com/search.php ... l%BC%D3%D4%D8%C6%F7
作者: wu55    时间: 2012-12-12 09:18
謝謝




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