电力系统远程控制项目总结
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里面,就不再翻译过来了。
时间: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里面,就不再翻译过来了。
相关文章推荐
- (项目外包)本地监控、远程管理软硬件(支持255节点、GSM短信远程控制)
- 远程监控系统项目总结
- 源代码学习总结之PC远程控制程序
- 关于移动端触屏输入控制的API的使用汇总(二)_Unity 单指与双指Touch事件捕获(网友项目使用总结)
- 嵌入式项目远程控制-服务器端
- 项目经理职场情绪控制与压力管理沙龙活动总结
- B/S项目远程控制硬件设备!(asp.net)
- WebService技术总结(三):项目实战——使用XML,dom4j,Xpath实现远程调用
- 项目总结(三)----------Python实现SSH远程登陆,并执行命令!
- 感受项目的磨难,渴望快乐的项目—H项目总结5,项目质量控制
- 项目开发版本控制工具之常用git命令总结
- 高级项目管理师个人总结--项目控制
- 高级项目管理师个人总结--项目控制
- 总结一下linux远程控制方法
- zigbee项目之上位机app远程控制终端
- git本地项目代码上传至码云远程仓库总结【转】
- 总结一下linux远程控制方法
- 基于Z301P摄像头 H.264OK6410的远程视频web监控 项目笔记5(小车驱动)GPIO控制
- 远程控制项目
- 近期一个小项目的总结[公共上网机的管理控制]