Duplicate Net Names Multiple Top Level Documents

本文讨论了在使用Altium Designer进行电路设计时,网络标识符作用域设置对编译的影响。重点介绍了四种不同的作用域设置方式及其优缺点,并解释了编译错误“DuplicateNetNamesWireXXX”的原因及解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 本人的第一感觉是多张原理图的标识符作用域的设置问题,随后在Project-》Project options中的Options选项下设置了一下Net Identifier Scope(网络标识符作用范围),由原来的Automatic改为Global,随后编译了一下,几十个error全部消失,可见,是网络标识符的作用域的问题,这个问题发生在多张原理图设置中。  
这四种方式的用法为: 
(1)设置为Flat方式,不同页之间只有Port(端口)具有全局属性,即在不同的sheet之间进行同名端口的连接。缺点是难于追踪 
(2)设置为Global方式,不同页之间Port和netlabel都具有全局属性,缺点也是难于追踪。 
(3)设置为Hierarchical方式,这种适合于分等级的原理图设计中,必须有顶层和底层(每一页),顶层和底层之间是只通过SheetEntry(页入口)和各页的Ports建立对应关系,这种方式适合多页分等级的设计,各页之间的关系比较明晰,也容易追踪。 
(4)设置为Automatic方式,根据判据自动判断选择上述三种方式中的一种进行设置,具体是这样:当检查到原理图中具有页符号采用Sheet Entry和/或Ports连接子图,则自动选择HIerarchical方式;若没有Sheet Entry则判断有没有Ports,如果有Ports,则采用Flat方式进行设置作用域范围;如果没有Ports,则自动设置为Global方式。也就是说,若采用Automatic方式,当电路图中有SheetEntry时采用Hierarchical方式;当电路图中有Ports(不管不同页之间有没有同名的netlabel)时采用Flat方式;当电路图中仅有Netlabel时才采用Global方式。 

   出现编译错误的原因也就在于Automatic方式时软件采用的判据,如果电路中没有SheetEntry,既有natlabel又有Ports,当设置为Automatic时会按照(4)所述的判据自动设置为Flat方式,由(1)可知是微微Flat方式只有Port在不同页之间具有全局属性,所以软件不认为不同页之间的同名netlabel是连接在一起的,进而出现了“Duplicate Net Names Wire XXX”的错误提示,这里边字面意思是网络名重名,个人认为出现这种错误时,是设计Altium Designer的人人为设定的,不然的话设计软件的难度太大,需要检测有没有netlabel和port,一共有四种情况,况且每一种情况具有包含与被包含的关系。 

解决办法: 

(1)将作用域设置为Global方式,这是最简单但比较懒惰的方式,是不同页之间的netlabel和Ports都具有全局属性,然后就可以在不同页之间的同名的Ports之间、同名的Netlabels之间建立连接关系。 
(2)采用层次原理图设计,顶层的SheetEntry仅仅和子页的Port之间建立连接关系。 
(3)将不同页之间同名netlabel修改为port,然后通过port建立连接关系,作用域设置为Flat或者Global或Hierarchical。   
备注:当将出现上述错误信息的原理图工程作用域设置为Hierarchical时,尽管很多错误都消失了,但是会有一个“Multiple Top Level Documents”的错误,即多个顶层文档。
### 使用 `ON DUPLICATE KEY UPDATE` 的前提条件 在MySQL中,为了使 `ON DUPLICATE KEY UPDATE` 正常工作,表结构必须定义至少一个主键或唯一索引[^1]。这是因为该语法依赖于这些约束来识别哪些记录是重复的。 如果试图在一个既无主键也无唯一索引字段上的表执行此操作,则即使遇到实际意义上的“重复”,数据库也无法自动检测到并触发更新行为;相反只会简单地插入新纪录而不会抛出错误提示[^2]。 因此,在缺乏适当约束的情况下尝试使用 `ON DUPLICATE KEY UPDATE` 是不可行的。建议先为相关列添加合适的唯一性约束再考虑应用此类逻辑处理方式。 对于确实无法设置主键或唯一键的情况,可以通过其他方法实现类似功能: - 手动编写SQL查询以检查是否存在潜在冲突的数据项; - 利用临时表存储待导入的数据集,并通过JOIN等方式对比现有数据完成相应操作; - 或者借助编程语言层面控制整个流程,分批次读取源文件内容逐条验证后决定采取何种动作。 ```sql -- 假设有一个名为 users 表但没有任何唯一性的限制 INSERT INTO users (id, name) VALUES (1,'Alice'),(2,'Bob') AS new_users(id,name) -- 这里会因为缺少唯一标识符而导致 ON DUPLICATE KEY UPDATE 失效 ON DUPLICATE KEY UPDATE name=VALUES(name); ``` 上述代码片段展示了当目标表不具备必要的唯一性保障时,即便指定了 `ON DUPLICATE KEY UPDATE` 子句也不会按预期生效的情形。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值