提前声明一下:Protel 99SE存在bug,接下来详细解释:
大家在使用Protel 99SE导入网表(Load Nets)时,是不是经常出现Error: Net already exist的错误
Protel层次原理图在生成报表(Create Netlist)时,Net identifier Scope一般选用Sheet Symbol / Port Connections
当出现Error: Net alreay exist时,我们要看错误提示对应的左边Action是什么
我们根据左边Action的提示分情况讨论:
一、如果是Power port
例如是:Add new net +5(或者是:Add new net GND)
这时候我们不要急于去想是不是原理图画错了,难道Protel 99SE有bug也要怪我们吗?!
把生成的网表(.NET)打开,按ctrl+f,查找+5
我们会发现有下面的情况出现:
(
+5
D505-A
)
(
+5
C602-1
C603-1
J101-1
J101-4
J103-13
)
+5有两套连接,难怪在Load Nets时Protel会报错呢
大家如果细心的话,会知道Power port的作用域(scope)是整个项目(project)。
Protel在生成报表时,却把Power port根据Sheet而分开了!这不是自己跟自己过不去吗?!
这就是bug的所在!
解决方法便是,手工修改.NET文件,将这些分开的电路整合在一起,修改后应该是:
(
+5
D505-A
C602-1
C603-1
J101-1
J101-4
J103-13
)
二、如果是自定义的Netlabel
例如是:Add net net Key1
我们依然打开网表,会发现:
(
KEY1
J101-17
U101-33
)
(
KEY1
J701-17
S700-2
)
可以看出,Protel依然是按sheet将KEY1分成了两块电路。
我认为这也是Protel的一个bug,因为采用Sheet Symbol / Port Connections生成网表时,自定义的Netlabel的作用范围应该是local的,只在本sheet内有效,所以即使再执行一次 Add new label KEY1也不应该发生Error: Net already exist的错误。
解决方法:1、如果你本身就不想让这两块电路相连(例如有些人想在一块PCB板中生成两块互不关联的电路板,这两块电路板将来采用排线相连),唯一的方法就是:修改Netlabel,在同一个项目中,自定义的Netlabel在一个sheet中出现,就不能在别的sheet中再次出现。可以在Netlabel前加上sheet的编号,例如修改后变成:
(
KEY1
J101-17
U101-33
)
(
7_KEY1
J701-17
S700-2
)
2、如果你想让这两块电路相连,即自定义的Netlabel的作用域是全局的,解决方法就简单多了
那就是在生成网表时,Net identifier scope选择Net labels and Ports global,这样所有问题都OK了
采用这种方法的缺点是:削弱了层次原理图设计的层次性
上面费了那么半天话,实际上就是一句话:
Net identifier scope选择Net labels and Ports global,自成一体的独立电路中的所有Net identifier(包括Power port,Netlabel等等)采用不同的命名即可