基于ARM+Linux架构智能油气水井物联网系统设计

2018-08-24 07:51,,,
计算机测量与控制 2018年8期
关键词:传输层缓冲区调用

,,,

(中国石油大学(北京) 地球物理与信息工程学院,北京 102249)

0 引言

及时、准确、直观地了解每口油井的工况,对于确保生产安全、提高生产效率、做出正确生产决策等都有重要的理论和现实意义。油田生产数字化控制与管理技术适应当前油田需求,是油田管理信息化、网络化、集成化和自动化的要求[1],是安全、节能、高效的要求,是变革生产组织方式、油田管理方式和控制投资、降低管理成本的法宝。

智能油气水井物联网系统由感知层、传输层和应用层组成。感知层主要包括安装在生产系统上的各种传感器和控制设备,用于实现对生产运行状态的全面感知和各种生产设备的自动控制;传输层由无线传感网、专网等组成,支持IPV4/IPV6双栈通信协议,可实现数据的高速可靠传输;应用层由各种用于油气水井生产分析与优化的油气田开发专业软件与专家知识库组成。

1 系统硬件结构

智能油气水井物联网系统由油井专用RTU模块、电量模块、数据采集RTM模块和一体化示功仪组成。RTU为数据采集与传输核心,是连接数据中心和油田现场设备的桥梁。通过RTU统一管理同一油井上的所有设备或相邻区域的硬件设备,可有效提高数据传输的效率,减少数据传输通道,降低通信系统的传输负担,提高数据传输效率[2]。RTU通过现场总线RS485总线,与现场采集模块一体化示功仪、电量模块、RTM模块相连,采集温度、压力、功图、电参量等信息;通过IPV4/IPV6协议,与数据中心实时数据库进行数据接口,将采集数据传输到监控中心实时数据库。

1.1 嵌入式RTU模块

RTU是前端设备与后台系统数据传输沟通的中转站,也是硬件系统的核心所在,通过RTU统一管理同一油气水井上的所有设备或相邻区域的硬件设备,可有效提高数据传输的效率,减少数据传输通道,降低通信系统的传输负担,提高数据传输效率。

兼容IPV4/ IPV6双栈协议油气生产物联网网关系统模块,可以满足油井、注水井实时数据的采集、传输与控制。

考虑到嵌入式RTU的复杂功能和对硬件平台处理速度需求,硬件平台的核心处理器选用AT91SAM9263的32位嵌入式处理器。嵌入式RTU系统根据功能进行模块划分,由核心处理器模块、传感器网络接入模块、TCP/IP网络模块、存储器模块和电源模块构成。

1)核心处理器模块负责调控整个系统资源,对RTU的上下行命令以及数据分别进行判断解析处理并对应用层协议进行解析转换[3]。采用基于ARM9的AT91SAM9263处理器,核心处理器上运行嵌入式Linux系统和基于此系统的应用服务程序,完成系统各项服务功能,包括数据接收、数据解析、命令发送、协议转换等功能。

2)传感器接入模块在设备前端与各种类型的传感器实现数据的传输与通信,兼容多种传感器设备,可接入模块类型,如ZIGBEE模块、RS485模块和CAN设备等[4]。

3)TCP/IP网络模块将RTU连入公共网络进行通信。是支持IPv4/IPv6双协议栈的关键,RTU通过网络模块将传感器子网数据通过Ethernet发送到井场中心控制室的客户端,监控人员可通过客户端及时查看各油井的运行情况以及油井周围环境。

4)存储模块主要由DATAFLASH、NANDFLASH和SDRAM存储设备组成。DATAFLASH和NANDFLASH均为非易失性设备,具有掉电不丢失信息的特性,利用此特性,分别用来存储系统开机引导程序以及Linux内核和根文件系统。SDRAM即同步动态随机存取存储器,特点是读写速率高,用来提供RTU嵌入式Linux操作系统以及RTU应用程序正常运行所需的内存空间[5]。

1.2 以太网接口电路设计

结合McWill无线模块和华为公司的LTE无线模块的设计特点,系统以太网接口为标准的RJ45接口,可以为远程无线通信模块提供100 Mbps的通信接口,实现数据的快速传输和控制的实时进行。采用低功耗工业级的DM9161BI芯片,保证网络通信的准确性,同时采用网络隔离变压器H1102芯片,为以太网通信提供隔离保护[6]。如图1所示,上方为DM9161BI芯片的原理图,下方为隔离变压器H1102芯片的原理图,通过电路的连接共同组成以太网接口电路设计原理图。

图1 以太网接口设计原理图

为保证通信的准确性,以太网通信接口的接收和发送都是由差分对组成,TD+和TD-为发送数据差分对,RD+和RD-为接收数据差分对。在数据接收时,RD+和RD-组成模式接收器,将以太网的电压转换成差分信号,发送时的特性类似。对测控终端电路板的测试表明,以太网接口电路的设计完全符合设计的要求。

2 嵌入式系统软件设计

由于整个智能物联网系统需要较快的处理速度以满足实时性同时要求具有较高可靠性,嵌入式操作系统因其自身具有强大的多任务处理能力和丰富的网络协议支持而被广泛地使用。嵌入式RTU系统中,应用程序通过系统调用接口(包括C库)对Linux内核发出设备操作请求,Linux内核根据请求调用相应的驱动程序,并完成对地层硬件的操作。基于Linux 2.6.30内核的操作系统可以完全满足RTU系统对处理速度的要求[7],另外,结合Linux系统本身的可裁剪性、源码开放性、良好的移植性等诸多优点[8],本设计最终采用嵌入式Linux 2.6.30操作系统作为嵌入式RTU软件平台。系统软件平台搭好后,在嵌入式Linux操作系统上,根据嵌入式RTU系统实际功能需求开发特定的应用服务程序,实现对ZIGBEE模块、RS485模块、CAN模块和网络模块接入,完成RTU具体功能需求。

嵌入式操作系统内核主要包括任务调度、响应中断服务程序、内存管理及进程间通信等。驱动移植包括内存、网卡(支持IPv6)、串口的驱动程序移植。数据采集模块包括各类智能传感设备数据传输协议驱动(支持IPv6协议栈)、IO设备的驱动程序;设备管理模块包括对RTU本身及其他从属设备的诊断、管理、配置等。数据传输模块,主要是基于嵌入式操作系统平台上进行IPv6协议应用的开发工作,包括数据封包、解包、校验、重传等。

2.1 IPv4与IPv6协议的实现

在网络中通讯的两个终端都要对网络协议栈提供支持,设计的RTU设备最大特点就是支持IPv4和IPv6双栈协议,依照模块化设计,为了功能模块化,linux内核的网络协议栈也遵循了此思想。应用层函数会调用传输层的函数来实现传输层的协议,在本设计中用到的是TCP协议,之后传输层通过网络层提供的接口函数来完成网络层的IP协议。

2.1.1 IPv4协议的实现数据发送的流程

当发送网络数据的时候,应用层协议会利用传输层的服务,传输层协议层模块最终会调用网络层的ip_queue_xmit()函数,此函数原型为int ip_queue_xmit(struct sk_buff *skb,int ipfragok),此函数中的参数会由传输层传递到此函数中。sk_buff接口参数skb是构造此连接用于存储数据,参数ipfragok用于判断是否是分片了。

首先此函数会检测skb中是否已经含有了路由表,一般传输层的STCP协议会设置这个路由表,本设计用到的传输层协议为TCP,所以会调用__sk_dst_check()函数,此函数用来检查路由表,如果没有建立路由表。之后会调用ip_route_output_flow()函数,此函数用于得到路由信息,继续向下会调用skb_push(),skb_reset_network_header(),ip_hdr()函数,也正是构造IPv4协议的关键之处,在此过程中会初始化IPv4数据报报头,决定是否设置分片域,设置TTL,协议类型,IPv4源地址,数据地址字段。

完成以上步骤后调用ip_local_out()函数,此函数又会调用dst_output()函数,这个函数会将打包成IPv4协议的数据传给下一层,最后下一层协议会把我们的构造的IPv4协议的数据包发送到网络中去。

2.1.2 IPv6协议的实现数据发送的流程

传输层会调用网络层的ip6_xmit()函数,此函数参数传输层会提供给它,此函数原型为int ip6_xmit(struct sock *sk,struct sk_buff *skb,struct flowi *fl,struct ipv6_txoptions *opt,int ipfragok),之后回调用函数skb_headroom(),此函数用于检查报头头空间,如果空间不够会调用skb_realloc_headroom()函数开辟空间。继续向下会调用skb_push(),skb_reset_network_header(),ip6_hdr(),ipv6_addr_copy()函数,也正是构造IPv6协议的关键之处,完成舒适化IPv6协议报头,决定是否分片,设置跳数,源和目的地址的任务,代码片段如下:

hdr = ipv6_hdr(skb);

/* Allow local fragmentation.*/

if (ipfragok)

skb->local_df = 1;

hlimit =-1; //填充IPv6报文头

if (np)

hlimit = np->hop_limit;

if (hlimit < 0)

hlimit = ip6_dst_hoplimit(dst);

tclass =-1;

if (np)

tclass = np->tclass;

if (tclass < 0)

tclass = 0;

*(__be32 *)hdr = htonl(0x60000000 | (tclass << 20)) | fl->fl6_flowlabel;

hdr->payload_len = htons(seg_len);

hdr->nexthdr = proto; //设置下一头部协议

hdr->hop_limit = hlimit; //设置跳数

ipv6_addr_copy(&hdr->saddr,&fl->fl6_src); //设置IPv6地址

ipv6_addr_copy(&hdr->daddr,first_hop);

最后调用dst_output()函数,这个函数会将我们的构造的IPv6协议的数据包发送出去。

2.2 ModBus协议的软件实现

RTU处于传输层,一方面要控制底层采集模块,另一方面要和上位机进行通信[9],所以本系统采用多线程同时执行多个任务。线程1实现了MODBUS-RTU协议,其中包含了发送命令任务和数据接收处理任务,而线程2实现了MODBUS-TCP协议,它包含了TCP连接管理任务和MODBUS-TCP数据通信任务。

ModBus协议是一种应用层协议,设计的RTU等待客户端的连接,当客户端连接到RTU后,RTU会进入循环程序等待客户端以Modbus-TCP方式下发的命令,并解析命令,并将Modbus-TCP命令转化成ModBus-RTU格式后通过RS485发送给传感器从而控制传感器的数据采集,之后接收来自传感器的Modbus-RTU格式数据,并完成ModBus-RTU协议到Modbus-TCP协议的转换工作,最后通过网口发送给客户端。

PC客户端是通过网口与RTU进行通讯的,用到的应用层协议是Modbus-TCP协议,通过SOCKET编程接口来完成Modbus-TCP的数据发送和接收工作的。

RTU是通过RS485串口与物理层进行通讯的,用到的应用层协议是Modbus-RTU协议,通过对RS485设备的控制来完成Modbus-RTU的数据发送和接收工作。

在程序中,我们还设置定时器以防RTM或电量模块等传感器因为上传问题而引起RTU程序阻塞。在每次RTU接收传感器数据到来前记录当前时间并设置一个超时时间,在每次while循环中来判断是否超时,比如传感器突然由于某种原因不工作了就会发生超时,程序就会跳出while循环并向客户端发送超时错误码。

2.3 环形缓冲区设计

系统设计中环形缓冲区,可理解为内存中的一段圆环形的数据存储空间,能够持续在此空间进行数据的读写操作。在使用过程中,首先会将外部输送的数据保存到缓冲区,再按照MODBUS协议将数据从其中读出,并对数据进行相应的计算操作。

由于系统底层有较多的传感器,所以在读取传感器数据的程序设计中有效地利用了环形缓冲区的优势,从而减短了对传感器数据读取的时间,提高了软件系统整体的运行效率。

图2 环形缓冲区读操作和写操作示意图

如图2所示为环形缓冲区读操作和写操作的流程示意图。在对环形缓冲区进行读写操作之前(初始状态),读、写指针同时处在申请的缓冲区的起始位置,也就是在图2(a)所示“位置1”处;当有数据写操作时,写指针也就是图中的input顺时针到了 “位置2”,而读指针仍然在“位置1”保持不变,如图2(b)所示;如果读和写同时发生时,则环形缓冲区的读和写指针分别顺时针移动,如图2(c)所示。在环形缓冲区中,对数据的读和写就是按照这样的规律持续进行,互不干扰,节省了读写时间,极大地提高了系统的运行效率。

3 现场应用

设计的智能油气水井物联网系统,油田现场通过RS485总线,与现场采集模块一体化示功仪、电量模块、RTM模块相连,采集温度、压力、功图、电参量信息;通过IPV4/IPV6协议,与数据中心实时数据库进行数据接口,将采集数据传输到监控中心实时数据库。

在华北、大港、青海等油田应用测试,现场系统工作正常,运行稳定,采集油井的温度、压力、功图、电量参数准确,数据可成功上传至监控中心实时数据库,完全满足油田需求。

监控中心数据分析发布平台调用实时数据库,能够及时有效地查询全部油井或指定油井数据信息,并通过数据进行实时诊断分析,计算产量[10],同时可选择查询产量的历史信息,分析油井的产量波动情况。客户端实时分析诊断界面如图3所示。

图3 图形查询功图

提供功图的图形模式查询,直观形象的同时查看诊断多井功图信息。应用于结合功图算产数据,为油田工况分析诊断提供了依据[11]。客户端图形查询功图界面如图4所示。

图4 实时分析诊断

4 结束语

结合物联网技术理念与最新成果研发的智能油气水井生产物联网系统,采用ARM+Linux系统架构设计,系统支持IPV4/IPV6双栈协议,系统集成了Zigbee、WiFi、RS485、CAN等感知层信息采集接口,支持与不同生产厂家、多种不同的通讯方式的各类井口传感器实现数据交互。系统在华北、大港、青海等油田应用,实现了油气水井生产工况的实时采集、实时诊断、实时优化、实时控制、智能预测功能,油井的系统效率得到提高,同时对于提升油田整体开发水平具有积极的意义。

猜你喜欢
传输层缓冲区调用
基于Python语言的网络传输层UDP协议攻击性行为研究
核电项目物项调用管理的应用研究
系统虚拟化环境下客户机系统调用信息捕获与分析①
串行连续生产线的可用度与缓冲库存控制研究*
基于物联网GIS的消防智能巡检系统设计与实现
NAPT技术对数据包分片的处理实验
初涉缓冲区
物联网无线通信传输层动态通道保障机制
利用RFC技术实现SAP系统接口通信
本期导读