元件图形内外模型

来源:互联网 发布:java代码规范 编辑:程序博客网 时间:2024/04/30 06:00

1.1   元件模型

模型的重要性是不言而喻的。整个控制理论的框架,都建立在这样或那样的模型描述的基础上,比如传递函数模型或状态空间模型;J2EE的重要设计模式是基于MVC即模型-视图-控制,其中模型处理核心地位。
又如传统的电路分析方法可分为两大类:定性分析与定量分析。从模型角度出发来看这两类分析,便可很容易地发现相应的优缺点:定性分析将元件模型定性化,或简单化,只考虑几种主要情况,如对于电阻建立的是F/R模型,即假设对于电阻的阻值R,如果它大于0,则用某个正整数来代替R并不影响定性分析的结果,这样,电阻的阻值就只有三个值:0,R,∞。如此简单地定性处理元件模型,必将导致处理过程中丢失了许多有用的信息,同时处理结果中又包含了一些无意义的结论,因此采用定性分析的方法,其结果将会是虚警与漏检的概率较大。而定量分析力图使元件的模型尽可能全面地描述元件的各种属性,包括其低频特性、高频特性等,需考虑的因素很多,导致了太多的工作量及设计与实现难度,使得目前还没有较为实用的基于传统模式的定量分析方法。
针对传统分析方法的不足,可利用成熟的面向对象程序设计方法及电路理论,尽量根据元件的工作原理,从方便计算机语言描述与利用计算机数值求解的角度建立元件的模型,辅之以各元件之间的连接关系,便可自下而上地建立各电路图形的模型,从而为电路的分析仿真奠定坚实的基础。
换个角度,由图论的观点可知,一个图G由两个集合V和E组成,可记为G=(V,E)。其中V是有限的非空顶点集,E是由顶点的偶对(有序的或无序的)组成的集合。电路图也是图的一种,与上面观点相对应,则可认为电路图由两个集合U和C组成,记作G=(U,C)。其中U是图中基本对象集合,C是这些对象之间的连接关系的集合。为便于术语的统一,本文后续将称图中基本对象为元件。
因此,为进行电路系统的定量分析,首先应当建立电路系统中各元件的模型。
元件的模型可分为两大组成部分,一是图形模型,提供人机界面,为显示服务;二是仿真模型,描述诸如伏安特性、失效模式、故障模式等信息,为分析服务。
1.1.1       元件图形模型
一般地,可将元件视为电路应用中的组合图形对象,首先从其外观来看,它由一系列图形对象构成,表现为一些满足某些标准的图形符号,使用户看到这些图形符号便知道该元件的设备含义;而从电路分析的需要来看,仅将元件由各基本图元组合而成尚不足以建立原理图的模型,元件及其连接关系的集合才能成其为一个原理图。因此对元件的显示需求有两个主要方面,一是元件本身的显示,二是元件之间连接关系的体现。相应于这两种层次,元件的图形模型也具有内外两种模型。

定义1-1 元件图形内模型
元件图形内模型描述元件的用户界面所需的模型元素的集合,此处的模型元素包括:
1.    元件作为一个组合图元,其本身的图形信息
2.    组成元件的基本图元集合
3.    元件的自定义属性

其中,元件本身的图形信息是指元件类可作为图元类库中的一个派生于图元基类的子类,因此,对于一个元件对象,它将具有图形对象的基本属性,包括坐标位置、旋转状态、缩放比例及名称信息等;元件类更确切地说是派生于组合图形类的一个子类,因此,其组成元素将是构成该元件的基本图元;另外,对于各种不同的元件,用户还可以定义有针对性的自定义属性,这些属性最终也将在原理图中显示出来,根本原因在于有模型即自定义属性的支持。例如,对于电阻元件,用户可以自定义属性R,表示电阻的阻值,同样,对于不同的电阻元件,用户可以输入不同的阻值,则在图形界面上需要将不同的阻值显示出来,使用户能一目了然。
元件图形外模型主要处理元件之间的关系,包括连接关系、控制/受控关系等,控制/受控关系可通过元件内添加一个数据成员实现,而连接关系的设计,应考虑到连接关系的创建、删除及维护三个方面。
1.1.2       连接关系
²       连接关系的表示
不同的应用场合,连接关系可用不同的计算机模型来表示。如电路原理图中的连接关系,可用导线、母线来表示;而油田、水利等应用,其连接关系可用管道来表示等。从严谨的角度出发,可定义连接关系为:

定义1-2 连接关系
连接关系:连接到某种同一势能位的对象连接点的集合为一个连接关系。

图1-1 连接关系说明图
此处定义的某种势能可为电压、水压、气压等,而对象连接点是属于各对象本身的。

对应于电路分析应用,连接关系中的势能位为电势能,对象连接点为元件的管脚,如图1-1所示电路图中,共有3个连接关系,分别表示为即{VCC/1, R1/1, R3/1}、{R1/2, R3/2, R2/1, K1/1}、{R2/2, K1/2, GND/1}。
在设计电路分析中连接关系的计算机模型时,可考虑两种模型,一是连接关系的物理模型即连接点的集合;二是其图形模型,该模型的视图即为用户直观的导线连接。
仅实现模型比较简单,如物理模型只需记录下集合中的连接点元素即可;而图形模型可分为内、外两部分,外部是指各连接点,内部则包括导线、子导线段、焊点等,如上面所列第2个连接关系{R1/2, R3/2, R2/1, K1/1}的图形模型外部是指4个连接点,而其内部是为一个导线对象,它包括5条子导线段(4横1竖)和6个焊点(其中4个位于连接点处,因其连接度小于3,故未画出)所组成。
相对于连接关系的物理模型的视图可不用实现,而图形模型中的各实体类都可实现为图元基类的派生子类,故其视图实现可参照图元类库的视图实现。
真正难点在于连接关系的控制方面,尤其是在用户进行诸如对元件拖动、旋转、缩放、镜像等位置编辑操作后,模型的处理方式将较为复杂。
²       连接关系的控制设计
影响连接关系的图形化视图的操作可分为两类,即对连接关系的连接点所属元件的编辑操作与对连接关系的载体本身——导线的编辑操作。
对元件的编辑操作有拖动操作、其他位置编辑操作及删除/剪切三种情况,此处将拖动操作单独处理的原因是拖动操作是一个连续的过程,即一次拖动过程中会持续地影响连接关系的图形化视图,而其他位置编辑操作基本上都是每次操作只影响一次,故控制的方式不同。
对导线本身的编辑操作处理要直接一些,可简单分为位置编辑操作与删除/剪切两类。
为简明地说明以上几种情况的处理方式,下面以算法的形式进行说明:

算法1-1拖动元件导致更新连接关系算法
1)       置标志Last,表示本次连续拖动过程中是否为最后一次拖动;
2)       若为鼠标移动事件,置Last为false;若为鼠标弹起事件,置Last为true;
3)       确定受影响的子导线段集合S(即此次拖动将导致这些子导线段被动拖动);
4)       判断集合S是否还有子导线段,若有,转5),否则,结束;
5)       取出S中第一条子导线段L1,并将L1自S中删除;
6)       根据连接关系确定L1的起始端点与结束端点的拖动自由标志(自由表示不用考虑其它对象,而受限则需要考虑),即确定cBeginFlag与cEndFlag;
7)       获取L1所处导线W的被选中择状态SelectFlag;
8)       若SelectFlag为true,cBeginFlag与cEndFlag均为自由,则进行L1的拖动,结束;
9)       起始/结束端点分别根据cBeginFlag/cEndFlag进行拖动;
10)   画出两端点与对应连接焊点(此时尚未移动)之间的连线;
11)   如果Last为true,则进行整理工作:
1.      处理起始端点B:
a)    取出B对应模型点M与对应焊点P;
b)    根据P取出与其相连的未被选择的子导线段及管脚线集合C;
c)    若C中无元素,则结束本处理;
d)    取出C中第一个元素,即子导线段/管脚线L2,并将L2自C中删除;
e)    若L2为管脚线,或L2为子导线段且与L1同方向,则以M及P为模型点新建子导线段L3,并将L3加入W中;
f)    若L2为子导线段且与L1不同方向,则L2将位置跟随,即L2相应模型点移动到M点位置;
g)    转c)。
2.      处理结束端点E:(同起始端点处理方式,见11.1)
3.      整理导线W
12)   转4)。

在拖动元件控制算法中,第11.3步为整理导线W,其主要任务是删除长度为零的子导线段、子导线段位置唯一化处理、删除连接度小于2或仅连接两方向相同子导线段的焊点等。
元件其他位置编辑操作包括对元件进行旋转、镜像、缩放、排列等,每进行一次操作,相关元件的坐标点物理模型将更新一次,则对应的连接关系图形模型也需相应更新,其更新算法如算法1-2所示:

算法1-2元件位置编辑操作导致更新连接关系算法
1)      根据操作确定元件新的位置;
2)      取出元件连接点所连接子导线段集合U;
3)      判断集合U中是否还有子导线段,若有,转4);否则,结束;
4)      取出U中第一个子导线段L1,并将L自U中删除;
5)      取出L1中与元件相连的连接点P1及相对应的元件连接点P2;
6)      若P1与P2位置相同,转4);否则,转7);
7)      置标志Last = true,按P1与P2的距离误差拖动L1,具体过程为拖动元件导致更新连接关系算法的第6)~11)步;
8)      转4)。

对于元件的删除及剪切操作,将影响到相应连接关系的物理模型,该情况处理起来相对简单。
而直接对连接关系的载体本身即导线进行操作的情况,可参照元件的处理方式。如导线的拖动操作可直接采用算法1-1即拖动元件导致更新连接关系算法,而其他位置编辑操作可置标志Last = true后从步骤3开始调用拖动元件导致更新连接关系算法,对导线的删除/剪切操作将影响到连接关系的物理模型,也较容易实现。基于上述分析,故此将对导线的编辑操作只分为位置编辑操作与删除/剪切两类。
以上以算法的形式列出了因元件编辑操作导致连接关系更新的处理过程,通过分析可知:每次调用(拖动操作时的鼠标移动/弹起事件触发,位置编辑操作每次触发)过程中,相关的算法只执行1次,而拖动元件导致更新连接关系算法元件位置编辑操作导致更新连接关系算法均不存在递归或迭代情况,故对于这两个算法不需要证明其收敛性与稳定性,本文通过实验调试完成两算法的设计与实现,达到了预期的目的与效果。

原创粉丝点击