<连载>Protel二次开发从入门到精通
6. PCB机器人和消息系统
6.1 原理
在PCB编辑器中,机器人是软件代理,它们被通过特定的PCB消息时序激活和取消。机器人的工作是保持PCB编辑器环境在一个有效的状态,如果在PCB编辑器内的事件改变了PCB编辑器的环境状态,机器人通过突跳来恢复环境。
为了更好地理解机器人,我们可以设想一个未来的家庭保姆由机器人组成,有不同的机器人,如厨房机器人、车库机器人和地毯清洗机器人等等。丈夫已经把厨房搞的一团乱,厨房的传感器已经广播了有关厨房状态的一个消息,妻子已经把车库搞的一团乱,车库的传感器已经广播了有关车库状态的一个消息,机器人监听到在这环境中所发生事件,但是它们必须等候家庭中成员离开他们所在的区域,当这些家庭中成员白天外出时,厨房机器人和车库机器人被派遣一个信息,来清洁已发生变化的区域,其他机器人也已经收到消息,但是这些机器人的知道他们的职责,它们不参加清洁工作,一旦这些任务被完成, 机器人被取消激活,且等候下一个事件。
此此类推,我们能看到与环境有影响的两个实体组(用户组和机器人组),此两组从不在相同时间被激活,用户组发送消息到所有机器人。一个消息描述了一个发生在环境中的特殊的事件,每一个机器人接受此消息并且按它自己的方式起作用。举个例子,从事园艺的机器人当得到一个由花园中所产生的“MessHappened”消息时,就写下花园需要被重新排列任务,当它收到“EveryoneLeftTheHouse”(成员离开家)消息时,此机器人执行重新排列花园的任务。

图4-14 机器人在一个操作中的时序
在图4-14中,一个周期表示一个活动的主要目标或目的时间,并且一个进程描述了或俘获了这个活动的本质(这里在一个顺序的序列中可为多进程),机器人通过PCB编辑器监听到所有消息广播,在周期结束前,YieldToRobots消息是广播,在周期结束前,机器人有必须的数据来做它们的处理,整个周期是重复的。
PCB编辑器函数按相同的方式:机器人监听到消息广播并按它自己的方式响应。一般地,一个最终用户对PCB产生影响,他开始一个进程,执行少量动作并且停止进程,因而,消息发送到机器人一般有相同的式样:
·消息表示一个进程已开始。
·消息组描述用户活动(编辑,增一个图元等等)。
·消息表示要被停止的进程(意味着用户将不执行任何改变,,如果需要的话,让机器人有一些时间来执行它们的活动。)
·消息表示一个进程已结束。
我们将在明细中得到消息序列和稍后如何来利用和控制它们。
为了使第三方开发者能够使用此系统,对它的结构进行一些理解是必需的,所有的机器人被在一个分类的列表中注册,它们被分类的指令决定它们将会收到一个特定的的消息指令,这个指令通过机器人“优先级(priority)”决定,因而,当一个消息被广播的时候,它被沿着列表向前传递,而且每个机器人都有机会对它产生响应,响应按它们的“优先级(priority)进行。

图4-15 机器人和消息
6.2 PCB编辑器消息
一个PCB消息描述了在PCB编辑器中的当前事件,一个PCB消息表示发生在PCB编辑器内的内部事件,并且这些消息将携带有关当前内部事件的信息,PCB消息被沿着一个机器人会响应或会不响应的特定消息的链传递,一个PCB消息包含一个源对象、一个目标对象、一个消息标识符和一个可选项消息数据(消息数据能为一个数据结构指针),一个PCB消息标识符和它们的意义将被下表中简短地描述。
|
PCB消息标识符 |
描述 |
|
PCBM_NullMessage |
表示消息是空的。 |
|
PCBM_BeginModify |
表示一个PCB对象将要被修改。 |
|
PCBM_BoardRegisteration |
表示一个PCB对象将要被增加到数据库中或从数据库中删除。 |
|
PCBM_EndModify |
表示一个PCB对象已被修改。 |
|
PCBM_CancelModify |
表示一个PCB对象的修改被取消。 |
|
PCBM_Create |
创建,N/A |
|
PCBM_Destroy |
销毁,N/A |
|
PCBM_ProcessStart |
表示一个进程的开始。 |
|
PCBM_ProcessEnd |
表示一个进程的结束。 |
|
PCBM_ProcessCancel |
表示一个进程取消。 |
|
PCBM_YieldToRobots |
表示机器人是被激活。 |
|
PCBM_CycleEnd |
表示一个周期的结束。 |
|
PCBM_CycleStart |
表示一个周期的开始。 |
|
PCBM_SystemInvalid |
表示机器人/消息系统是无效的。 |
|
PCBM_SystemValid |
表示机器人/消息系统是有效的。 |
|
PCBM_ViewUpdate |
N/A |
|
PCBM_UnDoRegister |
表示带有Undo/Redo系统的指定对象的注册。 |
表 1: PCB 消息