C#进行Visio二次开发之电气线路停电分析逻辑
对一张Visio绘制的电气线路图,我们如何进行停电分析呢?下面我们看看相关的序列逻辑先。
在上面的序列图中,主要实现了这样的思路:
停电分析是通过保存设备相关连接信息到数据库,以电源(如飞达)为起点,对设备信息进行线路的拓扑分析,把分析保存到数据库中,然后获得拓扑模型中有电的设备,对图纸的设备颜色进行更新(有电为绿色,无电为红色),如果撞电,则恢复所选开关的颜色。
由于以上的关系表,只是对一个飞达进行了线损模型分析,因此只会存在一个-1即飞达的情况,其他ID都是和该飞达相关联的下游设备ID;如果我们找到每一个的设备ID和其父ID(上游设备ID)即满足要求。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
Equipment为设备的ID,ConnectionShapes为关联的设备ID集合
1、 先在ConnectionShapes寻找有-1的Equipment
得到下列模型:
ID |
PID |
1 |
-1 |
2、 下面再找1下游设备;在关系表中寻找Equipment=1的ConnectionShapes有那些关联设备,发现有-1,2;-1是1的上游设备,不能使用,因此剩下2,得到如下表。
ID |
PID |
1 |
-1 |
2 |
1 |
3、 继续找2的下游设备;发现2有1、3、8、7、10和其关联,1是2的上游设备,不能使用,剩下的列出来。
ID |
PID |
1 |
-1 |
2 |
1 |
3 |
2 |
8 |
2 |
7 |
2 |
10 |
2 |
4、 依次对3、8、7、10进行分析,得到以下数据,下面先对3下游设备进行分析
ID |
PID |
1 |
-1 |
2 |
1 |
3 |
2 |
8 |
2 |
7 |
2 |
10 |
2 |
4 |
3 |
11 |
3 |
继续对4、11进行分析,先对11进行分析,发现11只有3相连,3为上游设备,结束;
再对4进行分析,如下。
ID |
PID |
1 |
-1 |
2 |
1 |
3 |
2 |
8 |
2 |
7 |
2 |
10 |
2 |
4 |
3 |
11 |
3 |
5 |
4 |
12 |
4 |
继续对5、和12进行分析,先对12进行分析,发现12只有4相连,4为上游设备,结束;对5进行分析,如下。
ID |
PID |
1 |
-1 |
2 |
1 |
3 |
2 |
8 |
2 |
7 |
2 |
10 |
2 |
4 |
3 |
11 |
3 |
5 |
4 |
12 |
4 |
6 |
5 |
继续对6进行分析,有13相连;继续分析13下游设备没有,结束,得到如下。
ID |
PID |
1 |
-1 |
2 |
1 |
3 |
2 |
8 |
2 |
7 |
2 |
10 |
2 |
4 |
3 |
11 |
3 |
5 |
4 |
12 |
4 |
6 |
5 |
13 |
6 |
5、 继续第上面步骤的分析,上面说到2下游设备有3、8、7、10,还有8、7、10没有分析,对8下游设备继续分析。
ID |
PID |
1 |
-1 |
2 |
1 |
3 |
2 |
8 |
2 |
7 |
2 |
10 |
2 |
4 |
3 |
11 |
3 |
5 |
4 |
12 |
4 |
6 |
5 |
13 |
6 |
9 |
8 |
对9继续分析
ID |
PID |
1 |
-1 |
2 |
1 |
3 |
2 |
8 |
2 |
7 |
2 |
10 |
2 |
4 |
3 |
11 |
3 |
5 |
4 |
12 |
4 |
6 |
5 |
13 |
6 |
9 |
8 |
15 |
9 |
16 |
9 |
17 |
9 |
18 |
9 |
继续分析15、16、17、18发现没有下游设备,结束。
根据上面的分析结果,我们就可以得到线路的拓扑树状图,即一个倒立的树,分析的存储结果为下图所示。
其中关键的ID、PID是用来在树之间漫游的,LoginIP用来区分不同用户的分析结果,BelongTo在多个电源通电的时候,区分不同的电源(即构造几颗倒立的树),其他信息用作辅助。注意:断开的开关,看成是树的分支终点。构造模型的时候不会记录该开关设备的信息,分析的时候会自动断层。
最后附上分析的结果,红的红,绿的绿,多好看,哈哈
转载于:https://www.cnblogs.com/wuhuacong/archive/2008/06/11/1217348.html
C#进行Visio二次开发之电气线路停电分析逻辑相关推荐
- C#进行Visio二次开发之判断图纸是否有设备
判断Visio图纸上是否图纸有设备(存在图元), 有两种方法,一种是通过Window对象的SelectAll方法,在判断选择的集合是否不为空即可,如下: /// <summary ...
- C#进行Visio二次开发之知识点考核试题
本人做过多年的Visio二次开发,根据个人的经验总结及项目积累,写了一些小小的随笔文章(具体可参考<伍华聪的Visio二次开发文章>,上月有幸给深圳一个团队做了两天的Visio培训,当了一 ...
- Visio二次开发(二)----Shape的添加和连接
先说一说为什么我要用到Visio的二次开发,现在做的项目设计到了一些电子地图,下面的这张图片是美工画的一张地铁里面门禁布局图,而这些图在做项目的时候是需要用Visio画的,有提前画好的直接加载到项目中 ...
- C#进行Visio二次开发之图纸打印
几种打印模式 Visio的二次开发中,我们往往需要打印文档,这也是正常不过的需求,Visio的Document对象提供了下面几种打印模式: Constant Value Description vis ...
- Visio二次开发(一)----巧用Visio宏
最近做的项目中需要用到Visio二次开发,安装了Visio的SDK,还有从网上找了一些这方面的博客,Visio的SDK是全英文的,看着有点费劲,很多的东西都不知道该如何去找,不过网上的一些博客还是有一 ...
- Discuz 二次开发 (一) 目录结构和运行逻辑
Discuz 二次开发 (一) 目录结构和运行逻辑 目录结构 DISCUZ使用自己的框架,与现在主流的web框架不同,DISCUZ没有路由表,他的路由是由入口文件来实现的. api uc.php UC ...
- visio二次开发___事件篇___事件分类
用visio进行二次开发,不免要用到事件.这里把visio对象模型的所有事件列出来,方便大家查找.第一个事件列表的是按事件名称字母排序的:第二个代码片段是根据分类来展示的.需要注意的是,控件本身有一些 ...
- UG二次开发读取尺寸值公差分析
一直在用grip做NX二次开发,自写自用.最近grip写的自动公差系统,不能进行自动标注公差,也不能进行尺寸链公差分析,如WC,RSS分析,究其原因是grip的OBTAIN命令在NX7.5之前可以获取 ...
- Visio二次开发Java-画图画线(java+com4j)
// 创建Visio对象IVApplication visio = ClassFactory.createApplication();//创建新的空白文档[创建一个不基于模板的新绘图]IVDocume ...
最新文章
- STL源码剖析之算法:lower_bound
- 解决mysqlslap执行命令报错(BEGIN failed--compilation aborted at //bin/mysqlslap line 2098)usr...
- android中设置Animation 动画效果
- 从网络IO看高性能框架
- 抓住训练集中真正有用的样本,提升模型整体性能!
- 答案 石头剪刀布 编码过程 0912
- 如何在JavaScript中使用apply(?),call(?)和bind(➰)方法
- 华南农业大学C语言程序设计(实验九)
- 【最简单】地图获取经纬度的办法
- pycharm中遇到的报错 Unexpected indent / unindent does not match any outer indentation level
- 地图编辑器开发(一)
- 使用QQ邮箱“邮我”组件,给我写信/意见反馈!方便他人快速给你发邮件
- 敏感性、特异性、假阳性、假阴性
- python列表lambda表达式排序sort(key=lambda x:x[1])
- 光年(Light Year Admin)后台管理系统模板
- win7系统怎么打开打印服务器失败,win7安装网络打印机驱动老是失败如何解决
- ubuntu下无线网络网速缓慢问题解决
- Java--面包师与消费者1(发送与接收线程)
- 《ERP原理》 期末复习——第二章 管理需求推动ERP的发展
- 数据结构——家谱管理系统