您的位置:首页 > 其它

电力系统远程控制项目总结

2013-03-23 07:02 183 查看
很好,终于搞定了整个project,作为一个有始有终的人,咳咳,今天我来完成这个summary。

时间:2012年11月-2013年2月

人物:三个中国人+四个芬兰人+一个波兰人+巴基斯坦人

地点:Technobotnia, Vasa, Suomi

任务:输电线远程监控系统

正如上面所说,这个系统是一个输电线远程监控系统,利用ABB的microSCADA远程通过RTU控制电力系统上的VAMP Relay,从而控制电力网络。microSCADA与RTU通过IEC60870-101协议以数传电台(radio modem)通信,RTU与Relay通过Modbus-RTU协议以串口通信。另外,安全起见,项目中没有使用真实的电力系统,而是用了ABB的SIM600来模拟整个电力网络。microSCADA需要监控的项目包括,每个relay的三相电路的电流值,remote/local状态以及开关,同时,relay还需要在local端对overcurrent进行报警和切断。整个系统的示意图如下:



老师讲我们这几个人分为了几个小组,分别是microSCADA组,协议组,relay组,SIM600组,最后将大家的成果组合起来成为整个系统。我们三个中国人是协议组,负责熟悉并实现IEC101,Modbus以及之间的转化。从而实现软件版的RTU。这里就不讲IEC101以及Modbus,主要讲讲最上面提到的部分。

1. Architecture

本次的软件构架主要由我设计并实现。我设计了两个类分别分析IEC101和Modbus,同时各有一个生成对方数据帧的函数。大体构架可以,但是细节方面还很欠缺,首先是函数细分不够,尤其是生成对方数据帧的函数,长度巨大,很不符合模块化的结构。同时,由于IEC101协议在执行命令之前需要hand-shaking,需要变量来储存上次的数据帧。我愚蠢的使用了IF语句和全局变量,严重影响了整个程序的可看性。现在想想,堆栈绝对没有问题,完全可以使用。

2. Const

这里指C/C++里面的const。曾经我很迷惑为何要有const这个东西,一个变量变不变又如何呢,现在我明白了,为的是保护变量的安全,使其在执行过程中不能被改变,这个非常重要,尤其是在这样的处理数据帧的项目中。难怪之前看过一个变态const定义的面试题,太重要了。

3. C里面的malloc以及free函数

这个一定要一起使用,太重要了。这里我想吐槽一下,C语言执行速度快得原因很简单,因为一切从零开始,什么都需要自己去实现,连内存分配之后都需要自己去回收。但是Java还有其它一些高级语言就不需要担心这个问题,虚拟机会帮你回收,整个速度自然会慢些了。怪不得之前有人必须C语言是一把锋利的小刀,用的好可以创造艺术品,但是稍不注意就会划伤自己。具体选择还是看应用范围,实时性很高的环境首选C,实时性要求不高,网络应用什么的用个带有虚拟机的Java可以了,虽然慢一些,但是安全,哈哈。

就说这么多了,其它的技术性的东西都写在technical manual里面,就不再翻译过来了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: