文章目录

  • cadence SPB17.4 - allegro - Allegro2Altium.bat 初探
  • 概述
  • 笔记
  • 查找Allegro2Altium.bat的位置
  • 查找命令文件 AllegroExportViews.txt 的位置
  • 看看Allegro2Altium.bat调用的extracta.exe 为啥写写一个命令文件, 确要导出10个文件
  • 查extracta.exe的位置
  • 查看extracta.exe实现
  • 查看这个外部DLL函数所在的DLL名称
  • 查找allegro_batch_sh64.dll位置
  • 大致猜一下为啥给1个命令参数文件, 要导出10个文件
  • 手工调用extracta.exe, 不指定这10个输出文件, 看看SPB17.4会不会让我们指定这10个文件的名称
  • 为啥参数文件是 AllegroExportViews.txt?
  • 备注
  • 最后试试AD22是否可以导入SPB17.4导出的.alg文件
  • 备注
  • END

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.brdZ:\>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.txtCOPY AllegroBoard.txt+AllegroLayer.txt+AllegroConnectivity.txt+AllegroNetRules.txt+AllegroPadStack.txt+AllegroGeometry.txt+AllegroSymbolDefinitions.txt+AllegroSymbolInstances.txt+AllegroAddlGeometry.txt+AllegroMultiStackup.txt AllegroASCII.txtDEL AllegroBoard.txt AllegroLayer.txt AllegroConnectivity.txt AllegroNetRules.txt AllegroPadStack.txt AllegroGeometry.txt AllegroSymbolDefinitions.txt AllegroSymbolInstances.txt AllegroAddlGeometry.txt AllegroMultiStackup.txtMOVE /-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.brdZ:\>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.txtZ:\>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
BOARDBOARD_NAMEBOARD_UNITSBOARD_EXTENTS_X1BOARD_EXTENTS_Y1BOARD_EXTENTS_X2BOARD_EXTENTS_Y2BOARD_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

cadence SPB17.4 - allegro - Allegro2Altium.bat 初探相关推荐

  1. cadence SPB17.4 - allegro - Artwork will be rounded down

    cadence SPB17.4 - allegro - Artwork will be rounded down 前言 出装配图时,弹出如下警告对话框 具体提示信息如下: -------------- ...

  2. cadence SPB17.4 - allegro - allegro_free_viewer

    cadence SPB17.4 - allegro - allegro_free_viewer 前言 想看下板子连通后, 每条网络走线是否合理. 当然可以在cadenceSPB17.4_PCB Edi ...

  3. cadence SPB17.4 - allegro - 尺寸标注

    cadence SPB17.4 - allegro - 尺寸标注 前言 自己手欠,动了参数,导致标注时,效果看着和默认的不同. 看着好难受, 研究一下. 官方本地文档位置 D:/cadence/spb ...

  4. cadence SPB17.4 - allegro - 手工放置过孔

    cadence SPB17.4 - allegro - 手工放置过孔 文章目录 cadence SPB17.4 - allegro - 手工放置过孔 概述 实验 手工放置一个过孔 给过孔分配网络 拷贝 ...

  5. cadence SPB17.4 - allegro - 手工放置原理图没有的封装

    cadence SPB17.4 - allegro - 手工放置原理图没有的封装 前言 假设要在拼版中,放置mark点.那原理图中不可能有的. 或者就是要在成品PCB上,单独放一个新的PCB元件封装. ...

  6. cadence SPB17.4 - allegro - 做logo封装

    cadence SPB17.4 - allegro - 做logo封装 前言 板子铺好地铜了, 准备在顶层丝印层放个logo. 因为allegro是不支持中文的, 查资料, 都是导入dxf或者plt文 ...

  7. cadence SPB17.4 - allegro添加过孔

    cadence SPB17.4 - allegro添加过孔 前言 尝试放过孔数组,居然将allegro(SPB17.4 S026)搞成无响应了(不知道是哪操作不对,等多久都没反应),只能强行关闭all ...

  8. cadence SPB17.4 - allegro - CAM350_V10.7CN 引入槽孔(.rou)文件报错问题的优雅解决思路

    cadence SPB17.4 - allegro - CAM350_V10.7CN 引入槽孔(.rou)文件报错问题的优雅解决思路 文章目录 cadence SPB17.4 - allegro - ...

  9. cadence SPB17.4 - allegro - 出装配图

    cadence SPB17.4 - allegro - 出装配图 笔记 调整丝印 自动调整丝印 allegro有自动调整丝印的功能,不过不好用. 自动调整丝印后,想回撤很难.调整的效果乱七八糟,副作用 ...

最新文章

  1. 请写出查询该表中成绩最大值的sql语句_SQL-汇总分析
  2. 某高校教授要求:博士生发表论文,必须把他列为第一作者
  3. 墨瞳漫画h5一期 vuejs总结
  4. Linux 环境下的高级隐藏技术
  5. php接口异常,api接口异常怎么办
  6. 关于一个js栈溢出的异常
  7. camunda流程定义表无数据_[Python04] 学习snakemake,三步轻松搭建生信流程!
  8. APP视觉稿该怎么切图和标注
  9. postman-常见问题解决方案记录
  10. 【Javascript】javascript学习 六 七 JavaScript 变量/运算符
  11. Spring配置文件总结
  12. 网页版bpc电波对时_BPC电波对时app下载|BPC电波对时安卓版下载 v1.04 - 跑跑车安卓网...
  13. [Linux 驱动]模块加载RTX8025驱动
  14. iOS开发UI篇—iPad和iPhone开发的比较
  15. 沪深股票接口如何获取所有股票代码?
  16. 如何评价区块链论文?区块链相关学术会议级别大科普
  17. 车牌对应城市行政区编号
  18. (迁)rsync:基本命令和用法
  19. C#合并单元格,AddMergedRegion
  20. python设置刻度间隔不等_Matplotlib绘图遇到时间刻度就犯难?现在,一次性告诉你四种方法...

热门文章

  1. Android虚拟机PC键盘模拟按键 .
  2. webstorm解决git冲突
  3. 什么是哈希冲突?怎样解决哈希冲突?
  4. 知云文献翻译阅读软件-跨页内容选中翻译操作
  5. 士兵队列训练问题(队列+超详细解析)
  6. 性能测试跑分软件,AE Benchmark(AE性能测试跑分工具) V1.0 免费版
  7. 中国国家气象局天气预报信息接口变动
  8. Catia幕墙BIM阵列优化培训视频教程
  9. Steam/Epic已经安装的游戏不在库里显示
  10. 《机器学习:实用案例解析》,读书笔记