<连载>Protel二次开发从入门到精通
6.3 内部的PCB机器人
在PCB编辑器内,有十一个内部的机器人,虽然所有的机器人将通过PCB编辑器监听到相同的在内部发送的PCB消息,但它们不响应所有的PCB消息。PCB编辑器提供了可创建自定义机器人的能力,自定义的机器人将被增加到机器人系统,自定义的机器人不仅能响应PCB消息,也能响应用户定义的消息,每一个内部的PCB编辑器机器人将被与它们能反应的特定PCB消息相关,描述如下:
·Component Pattern Robot元件式样机器人
元件式样机器人是负责当一个封装形式(Footprints)被改变时,执行适当的步骤,当下列消息被收到时,从印制板中删除旧的封装形式,增加新的封装形式,分配适当的网络到新的封装形式焊盘。
|
PCB消息 |
描述 |
|
ProcessStart |
此消息发信号到机器人,来在内部的元件列表中删除所有的元件。 |
|
EndModify |
此消息包含当前元件、图案信息,它监视元件式样的改变,并且如果它已改变,此机器人存储在封装形式已被更新的元件内部列表中。 |
|
YieldToRobots |
此消息发信号到机器人,来从库中更新元件,封装形式被更新,如果需要重新分配,网络分配被选中。 |
元件式样机器人优先级设置是2130。
·Net Connectivity Robot网络连接机器人
当下列消息被收到时,网络连接机器人监视印制板连接/连线表的完整性。
|
PCB消息 |
描述 |
|
ProcessStart |
一个无效网络的内部列表被清除。 |
|
EndModify |
无效的网络增加到内部无效的网络列表中。 |
|
BoardRegisteration |
刷新并且增加更新的网络到印制板数据库系统中。 |
|
YieldToRobots |
如果任何无效的网络被发现,无效的网络被选中,这样它们被修正和更新。 |
网络连接机器人优先级设置是1120。
·Board data structure robot印制板数据结构机器人
当下列消息被收到时,印制板数据结构机器人维护数据库的内部操作。
|
PCB消息 |
描述 |
|
EndModify |
如果空间数据结构有一个修改,检查并且如果必要话,纠正空间数据结构的有效性。 |
|
BoardRegisteration |
通知PCB编辑器,PCB文档已修改。 |
印制板数据结构机器人优先级设置是3000。
·Engineering Change Order robot工程更改指令机器人
当下列消息被收到时,当PCB印制板的网络列表被修改后,工程更改指令机器人将写一个ECO文件。
|
PCB消息 |
描述 |
|
ProcessStart |
机器人内部列表被初始化。 |
|
BeginModify |
源对象被准备好,来被ECO机器人使用。 |
|
EndModify |
修改的对象被分析,ECO文件开始从此被写出。 |
|
BoardRegisteration |
对象被增加到被存放在机器人内部列表的印制板中,或从被存放在机器人内部列表的印制板中删除。 |
|
YieldToRobots |
处理机器人内部列表,并且写出此ECO文件的剩余。 |
工程更改指令机器人优先级设置是1140。
·Design Rule Checking robot设计规则检测机器人
当下列消息被收到时,设计规则检测机器人检测PCB印制板规则是否是有效的。
|
PCB消息 |
描述 |
|
ProcessStart |
一个机器人内部列表被初始化。 |
|
EndModify |
相应的对象被存储在机器人内部列表中。 |
|
BoardRegisteration |
相应的对象被存储在机器人内部列表中。 |
|
YieldToRobots |
DRC被在包含在一个机器从内部列表的对象上执行。 |
设计规则检测机器人优先级设置是1105。
·UndoRedo robot UndoRedo机器人
当下列消息被收到时,当PCB印制板被修改后,UndoRedo机器人更新UndoRedo设施。
|
PCB消息 |
描述 |
|
CycleStart |
一个机器人被初始化。 |
|
BeginModify |
在机器人内部列表中存储可能的修改对象。 |
|
EndModify |
增加修改对象到PCB UndoRedo结构。 |
|
CancelModify |
从更新的PCB UndoRedo结构中停止受影响的对象。 |
|
UnDoRegister |
增加最新的注册到PCB UndoRedo结构中或从PCB UndoRedo结构中删除对象。 |
|
ProcessEnd |
在PCB UndoRedo结构末端区域包含最后的修改。 |
|
YieldToRobots |
在PCB UndoRedo结构末端区域包含最后的修改。 |
UndoRedo机器人优先级设置是1110。
·Polygon robot平面多边形机器人
当下列消息被收到时,平面多边形机器人在PCB印制板上更新平面多边形,这些平面多边形设置已被修改。
|
PCB消息 |
描述 |
|
ProcessStart |
机器人内部列表初始化。 |
|
EndModify |
修改的平面多边形对象被放入到机器人内部列表中。 |
|
BoardRegisteration |
新的平面多边形被增加到机器人内部列表中。 |
|
YieldToRobots |
重灌相关的平面多边形对象。 |
平面多边形机器人优先级设置是2110。
·Updating robot更新机器人
当下列消息被收到时,更新机器人维护名称引用的完整性,很多实体通过它们的名称引用到其它实体(例如一个FromTo参考到一个网络,和到2个焊盘,一个焊盘名称引用到一个元件和一个焊盘号码),如果引用的对象名称改变,引用到它的同样地必须改变。
|
PCB消息 |
描述 |
|
ProcessStart |
一个机器人内部列表被初始化。 |
|
BeginModify |
可能地修改对象被准备好。 |
|
EndModify |
所有必须的修改被计算出来。 |
|
YieldToRobots |
所有与修改对象有关的对象被通过它的名称更新。 |
规则更新机器人优先级设置是2120。
·Internal Plane Robot内部平板机器人
当下列消息被收到时,内部平板机器人更新内部电源层连接。
|
PCB消息 |
描述 |
|
ProcessStart |
一个机器人内部列表被更新。 |
|
EndModify |
内部的平面连接焊盘风格必须修改来存储在一个机器人内部列表中。 |
|
BoardRegisteration |
内部的平面连接焊盘风格必须修改来存储在一个机器人内部列表中。 |
|
YieldToRobots |
为相关的焊盘更新电源平面连接内部平面。 |
内部平板机器人优先级设置是2100。
·Panel Robot平面机器人
当下列消息被收到时,当PCB对象和PCB印制板被改变后,平面机器人更新PCB平面内容。
|
PCB消息 |
描述 |
|
ProcessStart |
初始化一个机器人。 |
|
EndModify |
平面要求的所有的修改被计算出来,并且存储在一个机器人内部列表中。 |
|
BoardRegisteration |
平面要求的所有的修改被计算出来,并且存储在一个机器人内部列表中。 |
|
YieldToRobots |
存储在机器人内部列表中的修改被应用到平面。 |
平面机器人优先级设置是1100。
6.4 如何扩展机器人/扩展为外部使用的消息系统?
PCB消息和机器人是独立的实体但它们对PCB编辑器环境有影响。机器人当收到消息时响应,然而,为开发者来定义新的外部的机器人识别而内部的机器人将不识别的PCB消息是可能的。
6.4.1如何从外部发送消息到PCB编辑器内
在外部的服务器可许改变了PCB编辑器的环境状态,并且需要通知内部的机器人来恢复环境情况下,从外部服务器发送消息到PCB编辑器是特别有用的,用户定义PCB消息的目的是为外部服务器发送消息到PCB编辑器提供能力,这样为外部服务器设计的外部机器人就能响应。
发送消息到PCB编辑器,来通知机器人,PCB编辑器环境已经发生了改变,发送信息,您需要调用带有四个参数的PcbApi_EventRouter_SendMessage函数。
PcbApi_EventRouter_SendMessage
|
参数 |
描述 |
|
SourceObjectHandle |
表示一个源对象的句柄。 |
|
DestinationObjectHandle |
表示一个目标对象的句柄。 |
|
MessageID |
表示消息的ID号。 |
|
MessageData |
表示消息数据,能为一个指向到一个数据结构的指针或仅维持一些值的变量。 |
注意,DestinationObjecthandle参数总是一个c_BroadCast常量,此参数被随PCBApi_EventRouter_SendMessage函数调用一起传递,函数PCBApi_EventRouter_SendMessage在下表中描述。
|
描述 |
源 |
目标 |
消息ID号 |
消息数据 |
|
NullMessage |
Nil |
Nil |
PCBM_NullMessage |
Any |
|
BeginModify |
Object handle |
c_Broadcast |
PCBM_BeginModify |
c_NoEventData |
|
BoardRegisteration |
Board handle |
c_Broadcast |
PCBM_BoardRegisteration |
Object handle |
|
EndModify |
Object handle |
c_Broadcast |
PCBM_EndModify |
c_NoEventData |
|
CancelModify |
Object handle |
c_Broadcast |
PCBM_CancelModify |
c_NoEventData |
|
Create |
N/A |
N/A |
PCBM_Create |
N/A |
|
Destroy |
N/A |
N/A |
PCBM_Destroy |
N/A |
|
ProcessStart |
Object handle |
c_Broadcast |
PCBM_ProcessStart |
c_NoEventData |
|
ProcessEnd |
c_FromSystem |
c_Broadcast |
PCBM_ProcessEnd |
c_NoEventData |
|
ProcessCancel |
c_FromSystem |
c_Broadcast |
PCBM_ProcessCancel |
c_NoEventData |
|
YieldToRobots |
c_FromSystem |
c_Broadcast |
PCBM_YieldToRobots |
c_NoEventData |
|
CycleEnd |
c_FromSystem |
c_Broadcast |
PCBM_CycleEnd |
c_NoEventData |
|
CycleStart |
c_FromSystem |
c_Broadcast |
PCBM_CycleStart |
Board object |
|
SystemInvalid |
c_FromSystem |
c_Broadcast |
PCBM_SystemInvalid |
c_NoEventData |
|
SystemValid |
c_FromSystem |
c_Broadcast |
PCBM_SystemValid |
c_NoEventData |
|
ViewUpdate |
N/A |
N/A |
PCBM_ViewUpdate |
N/A |
|
UnDoRegister |
Objecthandle |
c_Broadcast |
PCBM_UnDoRegister |
UndoRegisterData structure |
表 2: PCBApi_EventRouter_SendMessage过程参数