一种基于Linux系统的电力网关数据传输

2015-01-29 07:19李志远胡广朋王永强
电子设计工程 2015年23期
关键词:网关编程变电站

李志远,胡广朋,王永强

(江苏科技大学 江苏 镇江 212000)

在对变电站环境监控的过程中要对变电站环境进行实时的掌控。环境数据的实时采集是通过不同的探测器来实现,如温湿度采集器、风速采集器和水浸等设备。对探测器的数据采集是通过RS-485和GPIO口来完成,采集的数据通过网关根据协议对数据进行解析提取然后再根据应用协议将数据打包。为了实现远程监控的功能还要将数据通过网络传输到中心监控平台,数据的传输是通过TCP/IP网络协议来完成。将数据包传输到中心监控平台之后再通过应用协议对数据包进行解析从而得到实时的变电站环境数据。

1 TCP/IP协议介绍

TCP/IP的全称是传输控制协议/互联网协议[1],其协议族是许多不同层次的许多协议的组合。在Linux操作系统中TCP/IP协议普遍被认为是由四层协议组成的协议系统而且每一层负责不同的通信功能。这4个层分别为:应用层(Telnet、FTP、e-mail),运输层(TCP、UDP),网络层(IP、ICMP、IGMP),链路层(包括设备驱动程序以及接口卡)如表1所示。

2 Linux环境下的网络编程

2.1 Socket介绍

套接字(英文名socket)[2]作为网络传输层供应给应用程序的网络编程接口是最为通用的应用接口。在两台主机之间进行通信时,通过传输层进行数据的传输,而数据一般都是在应用层获取,将应用层的数据通过传输层传送就要用socket来实现。在Linux操作系统中是通过其内核来完成应用层数据向网络设备硬件接口的不断传输,应用层中的操作对象就是socket的文件描述符。在通信时将通信的目的IP地址、网络层协议以及端口号结合起来与对应的socket相匹配,这样就可以在应用层的数据通过网络层传输时将不同的程序应用进程区分开从而实现数据传输的准确性。

图1 Socket在数据传输中的作用Fig.1 Socket role in data transmission

Socket编程采用的是C/S模式来进行应用程序的编译,其不仅能在本地网络上进行通信也可以接入互联网实现全球范围内的网络通信。Socket是一种交互式通讯机制,如图1所示发送进程和接收进程都有各自的套接字来对自己的端口进行描述。通过交互式的通讯机制可以使数据的传输更加准确和更有目的性。

2.2 网络编程主要函数

Linux网络编程中最普遍的是Socket编程[4],而Socket的类型分为两种即面向连接的网络编程和面向无连接的网络编程。其中面向连接的编程时以TCP协议为基础的编程,面向无连接的编程时以UDP协议为基础的编程[3]。在用TCP客户与服务端进程之间产生事件时,服务器首先要启动,然后客户启动来连接服务器。客户给服务器发送请求之后服务器来处理这个请求,收到请求后给客户发回响应,这过程一直持续下去知道结束,客户关闭连接。当事件结束时服务器发送一个EOF通知,服务器紧接着关闭连接的服务端[5]。以下介绍为完成一个事件各函数的时间顺序。

1)socket()函数:在执行网络I/O时,每一个网络进程首先要做的是调用socket函数用来指定期望的通信协议类型。

2)connect()函数:面向连接的套接字客户端通过调用connect()函数在套接字数据结构中保存本地信息和远端信息,从而建立与远程服务端的一个TCP连接。

3)listen()函数:此函数的作用是让套接字处于被动的监听模式,为该套接字建立一个保存到达的服务请求的输入数据队列,队列的使用直到有程序对它进行处理。

4)accept()函数:函数作用是让服务器接收客户端的连接请求,当建立好输入队列之后服务器就调用此函数等待客户的连接请求。

5)sendto()函数:sendto()函数在 Linux 系统中的作用是将数据由指定的socket套接字传给对方的主机,在套接着上进行数据传输。

6)close()函数:数据传输操作结束之后可以通过调用close()函数释放套接字,用来停止在要停止的套接字上的所有数据的传输。

图2 连接服务编程模型Fig.2 Connected services programming model

无连接的网络编程模式主要协议是UDP协议的编程[6],UDP在数据发送时不提供可靠性。它只是将应用程序要传给IP协议层的数据发送出去,并不能保证这些数据能否到达要发送的目的地。由于这种不确定性,在协议连接时就不需要像TCP那样需要3次握手来确保数据能传输到指定目的地所以它的编程模式也相对简单。如图3所示。

图3 无连接服务编程模型Fig.3 Connectionless service progtamming model

3 数据传输协议分析

电力网关是数据在不同应用设备协议之间传输的枢纽,从应用上将分为对上和对下两个部分。对下是对各变电站监控设备采集到的数据的提取,对上是将这些数据发送到远程监控中心的监控平台上。这些数据是通过不同的协议来打包封装的,经网关封装好的数据根据网络传输协议(TCP/IP协议)通过互联网发送至监控中心,监控中心根据具体应用协议将数据解析之后发送至监控平台,然后将数据显示在友好界面上从而方便监控人员对变电站环境状态的实时监控。网关与监控平台的数据传输方式如图4所示。

图4 数据传输方式Fig.4 Data transmission

网关发送数据至平台的传输协议的格式中要用1byte来标明协议的版本,之所以标明协议版本是因为在整个的电力网关中存在着很多的传输协议为了避免之间不必要的冲突影响导致数据无法正确传输。长度是网络字节序用来在TCP/IP传输数据时所传数据能够被正确解释。子协议的类型指的是不同设备的协议,包括保留位、告警数据、普通数据、命令应答等协议类型。如表2所示。

表2 网关发送至平台传输协议Tab.2 Send to a transport protocol gateway platform

子协议类型:

各设备在网关向平台发送信息的子协议定义如表3所示。

表3 GPIO口协议Tab.3 GPIO port protocol

数据位的不定长度是由于不同设备的的功能不同传输的数据长度不同而定的。

在RS-232与RS-485端口下的数据采集是电力网关的主要采集通道,如表4所示。

表4 RS-485、RS-232通信协议及数据格式Tab.4 RS-485RS-232 communication protocols and data formats

在电力网关中主要的环境监测和控制系统包括空调、风速采集以及温湿度。它们的子协议在0106协议类型的下,通过它们的状态数据来掌控变电站的具体环境情况。不同的设备的功能不同导致其数据的传输的格式也有所不同所以它们的状态定义的格式也不同,以下是几种不同设备的不同状态定义。如表5、表6所示。

表5 0100600空调状态协议Tab.5 0100600 conditioning status protocol

表6 0100601风速状态协议及温湿度数据协议Tab.6 0100601 wind speed and temperature and humidity data state protocal agreement

01006的状态定义:

将设备采集到的环境状态数据通过网关提取之后用以上协议打包,然后发送到监控平台。监控平台在根据协议将数据解析,从而提取出环境状态数据,完成监控系统的功能。如表7、表 8所示。

表7 010602灯光控制器状态协议Tab.7 010602 lighting controller status agreement

表8 010603tm主机数据协议Tab.8 010603 tm host data protocol

之所以将SF6/O2分成两个组成部分是为了能更好的检测出SF6/O2气体,探测器采用的是一主机多探头的设备。探头检测出到SF6/O2气体的浓度之后将数据发送给主机经过主机收集到气体的浓度之后再做相应的分析处理,将数据归类打包后在发送给平台。主机协议中包括探头的数量、探头的设备NO号以及从探头中采集到的数据。

4 结 论

电力网关主要运用在无人变电站。通过实验室和真实无人变电站环境下的不断试验和数据的分析来看,所选用的ARM9处理器和Linux操作系统环境下的程序运行可靠,软硬件结合良好,数据的传输效率高,其中RS485数据失真率在2%以内,GPIO口传输失真率在1%以内。产品达到了预期的设计效果。

[1]孙琼.嵌入式Linux应用程序开发详解[M].北京:人民邮电出版社,2006.

[2]W.Richard Stevens.TCP/IP详解[M].范建华,等译.北京:机械工业出版社,2000.

[3]王雷,王子淘.基于Linux的Socket网络编程的性能优化[J].电子设计工程,2010 17(9):101-103.

[4]张斌,高波.Linux网络编程[M].北京:清华大学出版社,2006.

[5]宋宝华.Linux设备驱动开发详解[M].2版.人民邮电出版社2010.

[6]王枫,罗家融.Linux下多线程socket通讯的研究与应用[J].计算机工程与应用,2004,40(16): 106-109.

猜你喜欢
网关编程变电站
编程,是一种态度
元征X-431实测:奔驰发动机编程
编程小能手
纺织机上诞生的编程
信号系统网关设备的优化
关于变电站五防闭锁装置的探讨
超高压变电站运行管理模式探讨
220kV户外变电站接地网的实用设计
LTE Small Cell网关及虚拟网关技术研究
变电站,城市中“无害”的邻居