论文部分内容阅读
摘 要 随着科技的发展,智能终端逐渐成为人们获取信息的一种重要手段,以Android为代表的智能移动终端迅速发展,为工业控制系统监控软件的革新提供了技术保障。本文介绍了基于Android平台开发的移动巡检系统以及开发注意事项,通过基于Android的移动巡检系统的开发,使站库测控系统与智能终端有机的联系在一起,为操作人员提供方便。
关键词 Android;智能终端;巡检;线程
中图分类号:TN941 文献标识码:A 文章编号:1671—7597(2013)041-049-02
油田站库应用测控系统监控现场生产技术参数,测控系统监控上位机软件一般运行于PC机端,现场监控人员需要固定在监控室中进行查看操作,但各岗位操作人员少,基本上都是单人单岗,管理面积大,有时需要在户外长时间作业,无法实时查看生产数据,不利于生产操作,给操作人员带来不便。监控软件移动化逐渐成为工业控制系统未来发展的方向,随着科技的发展,智能终端逐渐成为人们获取信息的一种重要手段,以Android为代表的智能移动终端迅速发展,为工业控制系统监控软件的革新提供了技术保障。为此,研制开发基于Android平台的移动巡检系统,应用智能终端实时监控油田站库各岗位生产参数。
1 移动巡检系统结构
移动巡检系统由数据接口软件和移动终端组成。在站库测控系统PC机客户端安装数据接口软件,利用接口软件与测控系统组态软件进行通讯,通过WIFI无线网络与移动终端连接,移动终端通过数据接口软件从组态软件数据库获取显示、报警等功能的相关数据,移动终端收到数据后,将站库生产参数以界面形式显示给操作人员,使操作人员能够方便的看到实时数据,并能对要控制的变量通过移动终端直接控制。结构如图所示。
2 移动巡检系统数据接口软件开发
在站库原有测控系统基础上开发移动巡检系統接口软件,原站库测控系统上位机监控软件应用力控组态软件开发,数据接口软件负责从力控组态软件数据库中获取数据,并对移动终端提供数据服务。
2.1 力控实时数据和报警数据的获取
力控提供了一个DbCom控件可以从力控软件中读取数据,为了和Android客户端软件通讯,我们需要把数据分成不同的数据组,以实现数据的分组发布和通讯。
DBCom控件在数据通讯之前必须初始化。初始化完成后,为了保证数据通讯的效率,采用异步方式通讯。异步方式通讯要求读数据之前,要注册数据点,以后访问数据点时可以通过序列号访问数据。
2.2 数据的网络服务
数据接口软件通过TCP网络服务器发布数据,包括实时数据和报警数据的发布,都可以从TCP网络端口发布和读取。
网络服务器通过Listen监听数据端口,在Listen中OnAccpt接收客户端的接入:
CNetServer::CNetUser * pUser = new
CNetServer::CNetUser(m_Server.GetUniqueUserKey( ), m_Server);
if(Accept(*pUser))
{
CString strIP;
UINT uPort;
pUser->GetPeerName(strIP,uPort);
CMainFrame *pMain = (CMainFrame *)::AfxGetMainWnd();
CString cs;
cs.Format("设备接入到服务器,IP地址%s,端口 %d",strIP,uPort);
pMain->AddOutputString(cs);
m_Server.AddUser(pUser);
}
else
{
delete pUser;
}
数据接口程序接收到客户端接入信号以后,要实现用户权限认证、实时数据的发布、报警数据发布、设置数据处理等功能。
Android系统内码编码是以Linux规则编码的,和Windows编码规则有很大区别,因此要进行编码转换才能保证数据的正常通讯和显示。
3 移动巡检系统移动终端软件开发
移动终端软件基于Android系统开发。Android系统主要是基于Linux内核、面向移动终端设备的开源操作系统,其架构主要分为4个层次,即应用层、应用框架层、组件库和虚拟机、Linux内核层。处于最底层的Linux内核层为系统提供诸如进程管理、内存管理、设备驱动等基本功能;组件库和虚拟机包含重要的C库文件和JAVA运行时环境,提供对应用框架层的支持;而应用框架层则是开发应用程序所关心的部分,Android应用程序都是基于应用框架层所提供的基本框架和API进行开发。Android在技术上具有以下优势:全开放智能手机平台;多硬件平台的支持;使用众多的标准化技术;核心技术完整、统一;完善的SDK和文档;完善的辅助开发工具。随着移动终端硬件的发展,基于Android系统开发工业应用已经具备了应用的基础。
3.1 界面设计和导航
一个完整的Android应用程序包括界面设计和后台设计。
Android中有个resource目录,这个目录下存放资源文件,资源文件的统一管理,也是Android系统的一大特色。资源目录中layout目录下的文件就是布局文件。文件的内容是有关用户界面布局和设计的。Android的开发工具界面设计效率比较差,因此必须通过手动编写xml方式实现数据的显示。
布局文件使用了绝对布局来实现各类图形和文字的显示。绝对布局简单直接,直观性强。里面还包括各类文本对象、背景以及各类按钮等。这是脱水岗的数据流程图显示。脱水岗流程图完成了背景显示、数据显示、按钮导航等功能。 界面显示如下图所示。
3.2 网络数据的通讯和显示
对于Android的网络通讯性能的提高,我们可以使用Java上高性能的NIO (New I/O)技术进行处理,NIO是从JDK 1.4开始引入的,NIO的N我们可以理解为Noblocking即非阻塞的意思,相对应传统的I/O,比如Socket的accpet()、read()这些方法而言都是阻塞的。
NIO主要使用了Channel和Selector来实现,Java的Selector类似Winsock的Select模式,是一种基于事件驱动的,整个处理方法使用了轮训的状态机,好处就是单线程更节省系统开销,NIO的好处可以很好的处理并发,对于Android工业应用开发来说比较关键,对于多点Socket连接而言使用NIO可以大大减少线程使用,降低了线程死锁的概率。
NIO作为一种中高负载的I/O模型,相对于传统的BIO (Blocking I/O)来说有了很大的提高,处理并发不用太多的线程,省去了创建销毁的时间,如果线程过多调度是问题,同时很多线程可能处于空闲状态,大大浪费了CPU时间,同时过多的线程可能是性能大幅下降,一般的解决方案中可能使用线程池来管理调度但这种方法治标不治本。使用NIO可以使并发的效率大大提高。
4 注意事项
在Android软件开发中,要注意解决线程、网络、socket关闭等问题。
4.1 线程问题
在接口软件的Socket编程中,实现接口软件与多个客户端的通信要尽量用多线程机制来实现,当接口软件监听到一个客户端的连接就开辟一个线程专门负责与客户端的通信,如果客户端因为某个原因断开与接口软件的连接就要及时关闭线程。应用Android客户端时,对于网络通讯、数据读取等这些比较耗时的操作要开辟一个线程单独执行,不然主线程因为执行这个耗时的操作而耽误执行其他操作,这样会导致程序响应很慢。
4.2 网络问题
Android客户端运行中,接口软件与客户端正在通信时候会出现突然网络断线情况,这时就要自动关闭socket,如果不关闭socket,会消耗贻尽系统资源,最终导致系统崩溃。由于客户端每隔一段时间(3秒左右)都要去接口软件读取数据,在客户端程序和接口软件程序内设置在一段连续时间(如1分钟)内,若一方没有接收到对方发来的任何数据,那就双方自动关闭socket,这样就解决了网络突然断开时,没有及时关闭socket的问题。
4.3 socket关闭问题
在进行socket编程中,遇到异常或者其他需要断开连接的情况时,socket要及时关闭,而在关闭socket时,要保证线程关闭。当客户端人为断开与接口软件的连接,此时接口软件就会检测到与这个客户的通道已经关闭而出现异常,此时就要及时关闭线程和socket,若不关闭这些资源,系统运行时间长了,会因为资源消耗殆尽而导致崩溃。
Android4.0以上版本的UI线程只负责数据的显示和更新,不能进行网络通讯,声音播放等功能,因此为了保证系统正常运行,还需要在网络线程和UI线程之间进行通讯。本项目中就建立了多个线程,主线程和网络线程之间通过消息进行数据传输。通过不同线程的建立和通讯,实现了和服务器的数据同步和更新。
5 结束语
基于Android的移动巡检系统在油田联合站现场应用,变固定岗位为移动岗位,可以实时查看各岗生产数据,设有多种流程图、动态显示等多种查看方式,能够对现场生产设备进行调节控制,具有声光报警功能,减轻操作人员劳动强度,保证安全生产,提高联合站管理水平。
參考文献
[1]刘晓胜,周岩.电子巡更系统及其发展现状[J].工程设计CAD与智能建筑,2002(12).
关键词 Android;智能终端;巡检;线程
中图分类号:TN941 文献标识码:A 文章编号:1671—7597(2013)041-049-02
油田站库应用测控系统监控现场生产技术参数,测控系统监控上位机软件一般运行于PC机端,现场监控人员需要固定在监控室中进行查看操作,但各岗位操作人员少,基本上都是单人单岗,管理面积大,有时需要在户外长时间作业,无法实时查看生产数据,不利于生产操作,给操作人员带来不便。监控软件移动化逐渐成为工业控制系统未来发展的方向,随着科技的发展,智能终端逐渐成为人们获取信息的一种重要手段,以Android为代表的智能移动终端迅速发展,为工业控制系统监控软件的革新提供了技术保障。为此,研制开发基于Android平台的移动巡检系统,应用智能终端实时监控油田站库各岗位生产参数。
1 移动巡检系统结构
移动巡检系统由数据接口软件和移动终端组成。在站库测控系统PC机客户端安装数据接口软件,利用接口软件与测控系统组态软件进行通讯,通过WIFI无线网络与移动终端连接,移动终端通过数据接口软件从组态软件数据库获取显示、报警等功能的相关数据,移动终端收到数据后,将站库生产参数以界面形式显示给操作人员,使操作人员能够方便的看到实时数据,并能对要控制的变量通过移动终端直接控制。结构如图所示。
2 移动巡检系统数据接口软件开发
在站库原有测控系统基础上开发移动巡检系統接口软件,原站库测控系统上位机监控软件应用力控组态软件开发,数据接口软件负责从力控组态软件数据库中获取数据,并对移动终端提供数据服务。
2.1 力控实时数据和报警数据的获取
力控提供了一个DbCom控件可以从力控软件中读取数据,为了和Android客户端软件通讯,我们需要把数据分成不同的数据组,以实现数据的分组发布和通讯。
DBCom控件在数据通讯之前必须初始化。初始化完成后,为了保证数据通讯的效率,采用异步方式通讯。异步方式通讯要求读数据之前,要注册数据点,以后访问数据点时可以通过序列号访问数据。
2.2 数据的网络服务
数据接口软件通过TCP网络服务器发布数据,包括实时数据和报警数据的发布,都可以从TCP网络端口发布和读取。
网络服务器通过Listen监听数据端口,在Listen中OnAccpt接收客户端的接入:
CNetServer::CNetUser * pUser = new
CNetServer::CNetUser(m_Server.GetUniqueUserKey( ), m_Server);
if(Accept(*pUser))
{
CString strIP;
UINT uPort;
pUser->GetPeerName(strIP,uPort);
CMainFrame *pMain = (CMainFrame *)::AfxGetMainWnd();
CString cs;
cs.Format("设备接入到服务器,IP地址%s,端口 %d",strIP,uPort);
pMain->AddOutputString(cs);
m_Server.AddUser(pUser);
}
else
{
delete pUser;
}
数据接口程序接收到客户端接入信号以后,要实现用户权限认证、实时数据的发布、报警数据发布、设置数据处理等功能。
Android系统内码编码是以Linux规则编码的,和Windows编码规则有很大区别,因此要进行编码转换才能保证数据的正常通讯和显示。
3 移动巡检系统移动终端软件开发
移动终端软件基于Android系统开发。Android系统主要是基于Linux内核、面向移动终端设备的开源操作系统,其架构主要分为4个层次,即应用层、应用框架层、组件库和虚拟机、Linux内核层。处于最底层的Linux内核层为系统提供诸如进程管理、内存管理、设备驱动等基本功能;组件库和虚拟机包含重要的C库文件和JAVA运行时环境,提供对应用框架层的支持;而应用框架层则是开发应用程序所关心的部分,Android应用程序都是基于应用框架层所提供的基本框架和API进行开发。Android在技术上具有以下优势:全开放智能手机平台;多硬件平台的支持;使用众多的标准化技术;核心技术完整、统一;完善的SDK和文档;完善的辅助开发工具。随着移动终端硬件的发展,基于Android系统开发工业应用已经具备了应用的基础。
3.1 界面设计和导航
一个完整的Android应用程序包括界面设计和后台设计。
Android中有个resource目录,这个目录下存放资源文件,资源文件的统一管理,也是Android系统的一大特色。资源目录中layout目录下的文件就是布局文件。文件的内容是有关用户界面布局和设计的。Android的开发工具界面设计效率比较差,因此必须通过手动编写xml方式实现数据的显示。
布局文件使用了绝对布局来实现各类图形和文字的显示。绝对布局简单直接,直观性强。里面还包括各类文本对象、背景以及各类按钮等。这是脱水岗的数据流程图显示。脱水岗流程图完成了背景显示、数据显示、按钮导航等功能。 界面显示如下图所示。
3.2 网络数据的通讯和显示
对于Android的网络通讯性能的提高,我们可以使用Java上高性能的NIO (New I/O)技术进行处理,NIO是从JDK 1.4开始引入的,NIO的N我们可以理解为Noblocking即非阻塞的意思,相对应传统的I/O,比如Socket的accpet()、read()这些方法而言都是阻塞的。
NIO主要使用了Channel和Selector来实现,Java的Selector类似Winsock的Select模式,是一种基于事件驱动的,整个处理方法使用了轮训的状态机,好处就是单线程更节省系统开销,NIO的好处可以很好的处理并发,对于Android工业应用开发来说比较关键,对于多点Socket连接而言使用NIO可以大大减少线程使用,降低了线程死锁的概率。
NIO作为一种中高负载的I/O模型,相对于传统的BIO (Blocking I/O)来说有了很大的提高,处理并发不用太多的线程,省去了创建销毁的时间,如果线程过多调度是问题,同时很多线程可能处于空闲状态,大大浪费了CPU时间,同时过多的线程可能是性能大幅下降,一般的解决方案中可能使用线程池来管理调度但这种方法治标不治本。使用NIO可以使并发的效率大大提高。
4 注意事项
在Android软件开发中,要注意解决线程、网络、socket关闭等问题。
4.1 线程问题
在接口软件的Socket编程中,实现接口软件与多个客户端的通信要尽量用多线程机制来实现,当接口软件监听到一个客户端的连接就开辟一个线程专门负责与客户端的通信,如果客户端因为某个原因断开与接口软件的连接就要及时关闭线程。应用Android客户端时,对于网络通讯、数据读取等这些比较耗时的操作要开辟一个线程单独执行,不然主线程因为执行这个耗时的操作而耽误执行其他操作,这样会导致程序响应很慢。
4.2 网络问题
Android客户端运行中,接口软件与客户端正在通信时候会出现突然网络断线情况,这时就要自动关闭socket,如果不关闭socket,会消耗贻尽系统资源,最终导致系统崩溃。由于客户端每隔一段时间(3秒左右)都要去接口软件读取数据,在客户端程序和接口软件程序内设置在一段连续时间(如1分钟)内,若一方没有接收到对方发来的任何数据,那就双方自动关闭socket,这样就解决了网络突然断开时,没有及时关闭socket的问题。
4.3 socket关闭问题
在进行socket编程中,遇到异常或者其他需要断开连接的情况时,socket要及时关闭,而在关闭socket时,要保证线程关闭。当客户端人为断开与接口软件的连接,此时接口软件就会检测到与这个客户的通道已经关闭而出现异常,此时就要及时关闭线程和socket,若不关闭这些资源,系统运行时间长了,会因为资源消耗殆尽而导致崩溃。
Android4.0以上版本的UI线程只负责数据的显示和更新,不能进行网络通讯,声音播放等功能,因此为了保证系统正常运行,还需要在网络线程和UI线程之间进行通讯。本项目中就建立了多个线程,主线程和网络线程之间通过消息进行数据传输。通过不同线程的建立和通讯,实现了和服务器的数据同步和更新。
5 结束语
基于Android的移动巡检系统在油田联合站现场应用,变固定岗位为移动岗位,可以实时查看各岗生产数据,设有多种流程图、动态显示等多种查看方式,能够对现场生产设备进行调节控制,具有声光报警功能,减轻操作人员劳动强度,保证安全生产,提高联合站管理水平。
參考文献
[1]刘晓胜,周岩.电子巡更系统及其发展现状[J].工程设计CAD与智能建筑,2002(12).