cadence SPB17.4 - allegro - Allegro2Altium.bat 初探

cadence SPB17.4 - allegro - Allegro2Altium.bat 初探

概述

想将allegro的brd导出坐标文件给openpnp用, 在查周边的资料.
看到有个思路是将allegro 的.brd转成AD的PCB工程, 然后再导出AD格式的坐标文件, 这样就可以用openpnp导入AD软件的坐标文件了.
我的本本上正好装了AD22和SPB17.4, 有条件搞. 不过感觉这个思路有点复杂, 有未知风险(版本都降级了, 真的一点SPB17.4的数据都没丢失?). 不想这么搞. 应该不用费这么大事吧?

我就是要将allegro的坐标文件整的和AD的坐标文件格式一样就行, 不用这么绕这么远的路.
我的思路, 比较一下allegro导出的坐标文件, 看看和AD格式坐标文件有啥区别.
大概看了一眼,区别不大.
openpnp支持导入好几种格式的坐标文件, 只要写个小程序将文本格式改了(看看openpnp支持哪种最简单的坐标文件格式, 我就改哪种)就O了, 就这样简单的事.

但是看到了上面那个思路用的方法中用了AD22将allegro的板子转成.alg(ascii格式的allegro板子文件), 用到了Allegro2Altium.bat.
有点好奇, 看看Allegro2Altium.bat具体是怎么将allegro.brd导出为.alg的?

准备先花一点时间看一下, 满足一下自己的好奇心后, 再去做正经事情.

笔记

查找Allegro2Altium.bat的位置

在这里插入图片描述
可知, Allegro2Altium.bat在AD22的目录中.
将 C:\Program Files\Altium\AD22\System 加入环境变量
在这里插入图片描述
将要转换的.brd拷贝到临时目录(不拷贝也行)清爽一些, e.g. Z:
在这里插入图片描述

新开一个cmd, 尝试转换板子
尝试运行命令行 Allegro2Altium.bat test.brd

Z:\>Allegro2Altium.bat test.brd

Z:\>extracta.exe test.brd AllegroExportViews.txt AllegroBoard.txt AllegroLayer.txt AllegroConnectivity.txt AllegroNetRules.txt AllegroPadStack.txt AllegroGeometry.txt AllegroSymbolDefinitions.txt AllegroSymbolInstances.txt AllegroAddlGeometry.txt AllegroMultiStackup.txt
No match found for 'AllegroExportViews.txt' in the search path.
Extract Command File (*.txt):

到这里就走不下去了,说缺少 AllegroExportViews.txt, 根据提示, AllegroExportViews.txt是一个解压的命令文件, 如果没有这个命令文件, 这个脚本不知道怎么干活.
打开脚本看一下, 整理一下内容

extracta.exe %1 AllegroExportViews.txt AllegroBoard.txt AllegroLayer.txt AllegroConnectivity.txt AllegroNetRules.txt AllegroPadStack.txt AllegroGeometry.txt AllegroSymbolDefinitions.txt AllegroSymbolInstances.txt AllegroAddlGeometry.txt AllegroMultiStackup.txt

COPY AllegroBoard.txt+AllegroLayer.txt+AllegroConnectivity.txt+AllegroNetRules.txt+AllegroPadStack.txt+AllegroGeometry.txt+AllegroSymbolDefinitions.txt+AllegroSymbolInstances.txt+AllegroAddlGeometry.txt+AllegroMultiStackup.txt AllegroASCII.txt

DEL AllegroBoard.txt AllegroLayer.txt AllegroConnectivity.txt AllegroNetRules.txt AllegroPadStack.txt AllegroGeometry.txt AllegroSymbolDefinitions.txt AllegroSymbolInstances.txt AllegroAddlGeometry.txt AllegroMultiStackup.txt

MOVE /-Y AllegroASCII.txt %1.alg 

可知, 这个脚本一共干了4个活:

  • 先使用 extracta.exe, 指定 AllegroExportViews.txt 为命令文件, 从.brd中解压出 AllegroExportViews.txt 中规定的所有文件(共10个)
  • 再用copy命令将这10个文本文件合并为1个文本文件AllegroASCII.txt
  • 删掉导出的10个文本文件
  • 将AllegroASCII.txt改名为 .brd同名的前缀, 加上后缀为.alg

查找命令文件 AllegroExportViews.txt 的位置

在这里插入图片描述
可知, AllegroExportViews.txt的位置就和Allegro2Altium.bat一个目录, 但是工作目录变了.
那只能将AllegroExportViews.txt拷贝到Z盘来.

中止cmd的执行, 重新在Z盘中的cmd中运行 Allegro2Altium.bat

Z:\>Allegro2Altium.bat test.brd

Z:\>extracta.exe test.brd AllegroExportViews.txt AllegroBoard.txt AllegroLayer.txt AllegroConnectivity.txt AllegroNetRules.txt AllegroPadStack.txt AllegroGeometry.txt AllegroSymbolDefinitions.txt AllegroSymbolInstances.txt AllegroAddlGeometry.txt AllegroMultiStackup.txt
Extract started ... command file is 'AllegroExportViews.txt'.
Extract: processed 404 records.
Extract: processed 404 records.
Extract: processed 2254 records.
Extract: processed 6254 records.
Extract: processed 8661 records.
Extract: processed 8661 records.
Extract: processed 8661 records.
Extract: processed 1746 records.
Extract: processed 1746 records.
Extract: processed 3380 records.
Extract: processed 7380 records.
Extract: processed 11380 records.
Extract ended.

Z:\>COPY AllegroBoard.txt+AllegroLayer.txt+AllegroConnectivity.txt+AllegroNetRules.txt+AllegroPadStack.txt+AllegroGeometry.txt+AllegroSymbolDefinitions.txt+AllegroSymbolInstances.txt+AllegroAddlGeometry.txt+AllegroMultiStackup.txt AllegroASCII.txt
AllegroBoard.txt
AllegroLayer.txt
AllegroConnectivity.txt
AllegroNetRules.txt
AllegroPadStack.txt
AllegroGeometry.txt
AllegroSymbolDefinitions.txt
AllegroSymbolInstances.txt
已复制         1 个文件。

Z:\>DEL AllegroBoard.txt AllegroLayer.txt AllegroConnectivity.txt AllegroNetRules.txt AllegroPadStack.txt AllegroGeometry.txt AllegroSymbolDefinitions.txt AllegroSymbolInstances.txt AllegroAddlGeometry.txt AllegroMultiStackup.txt

Z:\>MOVE /-Y AllegroASCII.txt test.brd.alg
移动了         1 个文件。

Z:\>

这回脚本正常执行完了.
在这里插入图片描述
我就是想看看Allegro2Altium.bat怎么用, 并不想用AD导入.alg

看看Allegro2Altium.bat调用的extracta.exe 为啥写写一个命令文件, 确要导出10个文件

extracta.exe %1 AllegroExportViews.txt AllegroBoard.txt AllegroLayer.txt AllegroConnectivity.txt AllegroNetRules.txt AllegroPadStack.txt AllegroGeometry.txt AllegroSymbolDefinitions.txt AllegroSymbolInstances.txt AllegroAddlGeometry.txt AllegroMultiStackup.txt

查extracta.exe的位置

在这里插入图片描述
可知, extracta.exe是SPB17.4提供的.
大小只有17KB, 想去看看.
extracta.exe很小啊, 如果我们自己写个命令行程序, 这么小的体积, 应该也干不了大活吧?

查看extracta.exe实现

用IDA64打开extracta.exe

; int __cdecl main(int argc, const char **argv, const char **envp)
main proc near
sub     rsp, 28h
call    cs:ABatchMainDll
xor     eax, eax
add     rsp, 28h
retn
main endp

看main函数, 是调用了外部DLL一个函数实现的, 他自己并没有干啥活.

查看这个外部DLL函数所在的DLL名称

在这里插入图片描述

0000000140002088		ABatchMainDll	allegro_batch_sh64

可知 DLL名称为 allegro_batch_sh64.dll, 接口名称为ABatchMainDll

查找allegro_batch_sh64.dll位置

在这里插入图片描述
可知, allegro_batch_sh64.dll是SPB17.4提供的.
不过体积有点大…
去看看吧, 用IDA64打开allegro_batch_sh64.dll
在这里插入图片描述
可知, allegro_batch_sh64.dll确实提供了一个接口, 名称为ABatchMainDll
从接口命名看, 是一个批处理的DLL.
去看看ABatchMainDll接口的实现

public ABatchMainDll
ABatchMainDll proc near
jmp     ABatchMainDll_0
ABatchMainDll endp

在这里插入图片描述
这是个接口, 从顶层函数看不出大体的处理逻辑.
具体实现要去单步调试,没兴趣了.
具体怎么根据命令行参数去干活, 能白瓢到更好, 瓢不到亦可.
到这里, 我的好奇心差不多被满足了.

大致猜一下为啥给1个命令参数文件, 要导出10个文件

换个思路, 看看命令文件的内容和导出的10个文件之间的逻辑关系.
打开 AllegroExportViews.txt, 和 Allegro2Altium.bat调用extracta.exe的命令行对比一下.
经过比对可知, AllegroExportViews.txt有明显的子参数区的分隔, 一个子参数区描述, 就对应导出一个文件.
在这里插入图片描述
打开AllegroExportViews.txt, 从上到下, 统计子参数区的个数, 整好是10个, 所以会导出10个文件.

手工调用extracta.exe, 不指定这10个输出文件, 看看SPB17.4会不会让我们指定这10个文件的名称

手工调用命令行如下:

extracta.exe test.brd AllegroExportViews.txt
Z:\>extracta.exe test.brd AllegroExportViews.txt
Extract started ... command file is 'AllegroExportViews.txt'.
A!BOARD_NAME!BOARD_UNITS!BOARD_EXTENTS_X1!BOARD_EXTENTS_Y1!BOARD_EXTENTS_X2!BOARD_EXTENTS_Y2!BOARD_THICKNESS!
J!Z:/test.brd!Fri Nov 11 21:08:35 2022!-65012.47!-61830.93!9903.92!8095.21!0.01!mils!STC15_EXP_BOX4_MB!10.400000 mil!2!UP TO DATE!
S!Z:/test.brd!mils!-65012.47!-61830.93!9903.92!8095.21!10.400000 mil!
Extract ended ... see extract.log for errors.

Z:\>

没有指定那10个输出文件的名称, extracta没执行成功.
根据提示, 打开 extract.log看看具体错误是啥.

# Start of Allegro to Altium Designer Board View
BOARD
    BOARD_NAME
    BOARD_UNITS
    BOARD_EXTENTS_X1
    BOARD_EXTENTS_Y1
    BOARD_EXTENTS_X2
    BOARD_EXTENTS_Y2
    BOARD_THICKNESS
END
# End of Allegro to Altium Designer Board View

# Start of Allegro to Altium Designer Layer View
LAYER
ERROR(SPMHDX-8): Could not open output file ''.

可知, 执行了一个命令子参数区, 但是没指定输出文件名.
到此, 就知道了, 给定了参数命令文件后, 必须指定此参数区的输出文件名称.
因为 AllegroExportViews.txt 作为命令文件, 有10个参数区, 就必须在调用 extracta.exe test.brd AllegroExportViews.txt 的后面给10个对应输出参数区的输出文件名称.

为啥参数文件是 AllegroExportViews.txt?

去 AllegroExportViews.txt目录看, 有很多疑似都是extracta.exe的命令文件.
按照类型排列, 可以看到很多Allegro*.txt, 打开查看, 都是命令参数的格式.
在这里插入图片描述
为啥参数文件不是其他的命令文件?
可以看到, 这个目录中有11个命令参数文件, 其中AllegroExportViews.txt内容最多, 有10个参数区.
比对AllegroExportViews.txt和其他参数文件的内容, 可以发现,其他的参数文件, 只是AllegroExportViews.txt中的一部分.
这就可以知道, AllegroExportViews.txt是最全的参数文件. extracta.exe要将 AllegroExportViews.txt作为参数文件.

备注

为啥AD公司能知道这么调用extracta.exe?
那人家是专门做PCB软件的, 专业呗.
各种将其他家的文档转成自己家格式的.

好像每种软件都这么搞, 没有看到会很上心的提供将自家格式转成N种其他家格式的软件.
这次 Allegro2Altium.bat 初探 就到这打住了, 好奇心被满足了.

最后试试AD22是否可以导入SPB17.4导出的.alg文件

其实我不想实验的, 我根本就没有这个需求.
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
一路next, 参数可以选用默认的, 直到完成.
但是allego的板子还有规则文件啥的要导入(可选), 没有啊, 只能next
最后可以打开导入的.alg.
在这里插入图片描述
但是:

  • 铺铜没了
  • 调好的丝印都乱了
  • 在板框层加的logo文字都没有了.
    这就导致, 能生产用的板子, 经过AD22脚本转为.alg再导入AD后, 板子不能用于生产了, 这还有啥意义?
    在这里插入图片描述
    但是焊盘和走线都在, 估计出个AD格式的坐标文件, 应该还可以.

备注

AD22导出/导入.alg的功能不完善. 也有可能是我不会用(小概率).
还有种可能, 参数文件中, 应该指定更多的参数区(因为导入.alg时, 有2种在.alg之外的文件没有), 但是这个就只有专业的PCB设计软件公司才搞的懂了.

可以看出, 将一种软件文件格式导入另外一种软件中, 是有风险的. 万一是肉眼看不出来的那种风险可咋弄?

END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值