基于无服务器的多个IPC控制系统数据交换的设计

2016-10-18 09:58赵明焕沈武义
制造业自动化 2016年9期
关键词:服务器端通讯客户端

赵明焕,沈武义

(1.上海方格自动化系统有限公司,上海 201209;2.华勤通讯技术有限公司,上海 201210)

基于无服务器的多个IPC控制系统数据交换的设计

赵明焕1,沈武义2

(1.上海方格自动化系统有限公司,上海 201209;2.华勤通讯技术有限公司,上海 201210)

本方案提供了工业现场由IPC控制的设备,在没有配置服务器的情况下将所有设备联网、达到数据交换与相互共享的目的,而且灵活组合流水线,监督工件的“漏装、漏检”等功能。生产证明此方案对有追溯需求、工艺要求灵活、流程控制严格的企业非常有益。

无服务器配置;信息共享;生产记录追溯;工艺灵活

0 背景

生产的信息化要求越来越高的现代工厂要求生产记录追溯、生产过程防错、灵活配置生产流程、严格按照生产流程进行,因此就要求生产要有记录。但引入MES系统是一笔不菲的支出,对于小工厂或者年产量低的单位也会是浪费。如果能将所有的设备都用网络连接,但不经过服务器,同时也把数据记录,将会减少大量工作;而且,即使服务器挂掉,也不会导致整个生产停掉。

本方案是在现场有多台IPC设备的情况下,将相互独立的设备通过局域网连接起来,在不用单独的服务器的前提下,达到生产信息共享的目的。每一台设备既可以做客户端,又可以做服务器端,通过网络查询物料的生产许可、并将所有设备生产记录都上传到同一台设备,方便将数据汇总、查询、追溯等。此方案有以下优势:不需要配置单独的服务器、每台设备在生产通讯的地位是对等的、对生产条码进行追溯、防止有问题的产品进入其他设备生产、所有生产信息可以汇总在一台设备、根据生产需求变更生产信息需要汇集的设备或者屏蔽某台设备的生产等,方便查询记录和灵活配置需要参与生产的设备。

图1 数据传输(深色箭头:数据交换;浅色箭头:数据上传)

1 制定通讯协议(FIS通讯协议)

根据现场设备的情况和通讯需求,制定相应的协议。本案例设备组由多家公司提供,按功能分为两类,数据查询和数据上传。

1.1数据查询

客户端需要向服务器端查询数据,确认好服务器端的IP后,向服务器端发送需要查询的内容,服务器端收到后,检索数据库并将结果回应给客户端。例如,如果工件在1#站做过,1#站的数据库就会有记录,客户端就可以查询到;如果工件在1#站没有做过就流到2#站,2#站查询的话就会报错,HMI就会报警,可以方便把有问题或者漏做的工件挑出来。

1.2数据上传

将本站(客户端)的生产过程数据根据生产需要上传到IP地址指定的站(服务器端,一般默认最后一站,N号设备),接收到数据的站将数据存到本地数据库中,方便后续使用。根据现场需求,设置查询条件,将查询结果转化为xml构架,并在数据头和尾添加数据校验,发送给服务器端,服务器端将接收到xml解码后存储到数据库中。从而,在出货后或者需要追溯时可以通过条码检索产品的生产记录。

2 编写客户端和服务器端代码

根据通讯协议,编写客户端和服务器端代码,本案例是用VS2013平台,C#语言编写。由于每一台设备都要用到此代码,所以建议编写成一个类库,将IP、端口号等信息作为可配置的参数,方便其他设备的共用,也方便更新,保持同步,同时也减少了开发周期。软件编写用微软的Socket库编写TCPIP通讯代码,方便快捷,数据传输延迟也小,可靠性高。

2.1客户端代码

其代码应包含初始化客户端、解析生产许可查询服务器发送的内容、将本地数据库中过程数据内容发送给服务器端等。

怎么将本地数据库中的工程数据内容发送给服务器端,可能本地数据库的过程数据有很多,以什么样的形式可以快速、准确地将数据发出,同时数据库内容的格式又可以保持不变,在服务器端解码时比较方便,这些都是需要解决的问题。

XML在支持数据交换和集成应用方面有结构性语义性强、与平台无关、处理方法灵活、具有可扩展性等优点。近年来,XML逐渐成为Internet上数据表示和数据交换的新标准,它的基本思想是用标记表示数据的意义,而不是像HTML仅仅用来规定数据的显示方式。XML将内容和形式相分离具有很大的意义,将数据以XML格式编码的Web服务和应用程序可以迅速地以一种简单有效的格式提供这些数据信息,通过这些Web服务和应用程序之间也可以很容易地进行交互;XML突破了HTML固定标记集合的约束,用户可以根据需要定义新的标记来描述文档中的数据元素。

XML文档既可以作为标准查询格式,又可以作为查询结果的载体。因此本文采用XML作为数据库之间信息交互的 “中间件 ”,来解决查询及数据的统一接口问题。一旦传送问题解决,其他就是字符串处理问题,一切都变得迎刃而解。

2.2服务器端代码

其代码应包含:初始化服务器端、监听客户端连接、根据条码查询本地数据库并将结果转化为协议需求的形式发送给客户端、接收客户端发送过来的过程数据解析后存入本地数据库等。

2.2.1初始化服务器

2.2.2监听客户端连接

上面代码是处理连接请求的程序,建议开线程处理,实时监控处理有所有的连接请求;连接后,可以再开线程处理数据通讯。如果1号设备正在与N号设备已经建立好连接、正在通讯,同时2号设备也要连接N号设备,此时,就必须要用到多线程处理通讯;否则,如果1号设备通讯没有结束的话,2号设备是不能连接的或者数据通讯发生异常。多线程的好处就是可以同时建立多个连接,各个连接的通讯相互独立,不受影响。

2.2.3接收客户端发送的过程数据并存入本地数据库

从上段程序可以看出,客户端接收的数据先写入了Stream中,DataTable读取Stream的内容,再将DataTable存入到本地数据库。为什么要这样做?我们可以从最终目标往前推论,要将内存数据存入数据库,最简单方便的方法是把所有数据转化为跟数据库的表构架一致的DataTable,然后将数据一行行的插入到表中,所以我们的最终目的就是将接收的数据存入到DataTable中。在客户端发送数据时我们用到了DataTable. WriteXml(Stream stream, System.Data.XmlWriteMode. WriteSchema),将数据存入了stream中,因而解析接收的数据时,我们仍可以用DataTable. ReadXmlSchema(Stream stream)逆向将stream的数据放入到DataTable中,接着问题来了,我们怎么把接收的byte数据转化为stream呢?

下面就讲一讲C#关于stream的操作:

stream分为文件流(FileStream),内存流(MemoryStream),压缩流(GZipStream),加密流(CrypToStream),网络流(NetworkStream);这里我们用的是内存流即(MemoryStream),其主要用于操作内存中的数据,比如说网络中传输数据时可以用流的形式,当我们收到这些流数据时就可以声明MemoryStream类来存储并且处理它们。通过流的写操作,我们方便的将数据存入了流中,接下来就是将流读到DataTable中,然后存入数据库里。

3 调试程序

上面的工作都结束后,就要配置局域网的信息和每台设备的IP地址。将所有的工控机都连接在同一个交换机上,为每一个工控机分配一个同网段的IP地址,通过“Ping IP”操作确认网络是否连接成功。

由于通讯错误不易察觉,添加监控界面、或者记录Log,有助于帮助分析出错的原因、解决问题,当程序很复杂时,非常推荐使用Log记录的方式。

在测试程序时发现,多线程的调试比较复杂、不易发现问题,程序可能会因为出错突然关闭,此时,很难抓到是什么原因导致的,所以记录Log就显得异常重要,在Try…Catch里面记录Log,通过观察Log就可以发现是在什么地方、什么原因导致崩溃的。

这里简单介绍一个.net平台的类库Log4Net,它提供一个记录日志的框架和向多种目标写入的方法,比如利用log4net可以方便地将日志信息记录到文件、控制台、Windows事件日志和数据库(包括MS SQL Server,Access, Oracle9i,Oracle8i,DB2,SQLite)中,一般来说我们只需要提供一个描述性的字符串,然后log4net就会自动提供有关运行时的一些信息(记录的时间、信息等级等),而且此类库还提供了信息记录等级,可以方便地开启或者关闭Log的记录,它是一款非常实用、易于操作的、可靠性高的类库。

4 结束语

本方案对于有IPC控制、但没有单独服务器、又需要信息共享和交互的设备群组,有非常重要的意义,同时也有很大的灵活性和可配置性,通过更改IP就可以将默认的“服务器端”更改、或者排除某台设备但不影响生产,非常适用于小型、流程要求严格、需要条码追溯查询的工厂。

[1] 谢华芳,任午令,唐任仲.基于XML的异构数据交换集成技术及

【】【】其实现[J].制造业自动化,2004,26(4),1-4.

[2] 贾小珠,宋立智,赵玮.深入浅出XML[M].北京:人民邮电出版社,2001.

[3] 侯莹.基于XML异构数据交换的研究与应用[D].大连:大连理工大学,2009.

[4] 陈灏.[C#]Log4net创建日志及简单扩展(转)[CP/OL].[2012-08-21]. http://blog.sina.com.cn/s/blog_66be2f320101a02r.html.

[5] 史晔翎,黎建辉.关系数据库模式到XML Schema的通用映射模型[J].计算机工程,2009,35(7):35-51.

[6] 郑丽丽.基于的异构数据交换模型的研究[D].济南:山东师范大学,2008.

[7] 周月.基于XML的异构数据交换在校园网中的应用[D].北京:首都师范大学,2008.

[8] 翟学敏.基于XML的信息管理系统的数据集成技术研究[D].无锡:江南大学,2008.

[9] GoodShot.Socket 编程,一个服务器,多个客户端,互相通信(转)[CP/OL].[2012-06-04]. http://blog.csdn.net/goodshot/article/ details/7629401.

[10] 杨元. C#利用委托跨线程更新UI数据[CP/OL].[2012-06-18]. http://blog.csdn.net/yangyuankp/article/details/7672370.

Design of data exchange of multiple IPC control system based on no sever

ZHAO Ming-huan1,SHEN Wu-yi2

TP29

A

1009-0134(2016)09-0109-03

2016-06-02

赵明焕(1988 -),女,河南人,工程师,本科,主要从事工厂自动化集成软件编写工作。

猜你喜欢
服务器端通讯客户端
《茶叶通讯》简介
《茶叶通讯》简介
通讯报道
Linux环境下基于Socket的数据传输软件设计
如何看待传统媒体新闻客户端的“断舍离”?
县级台在突发事件报道中如何应用手机客户端
孵化垂直频道:新闻客户端新策略
大枢纽 云平台 客户端——中央人民广播电台的探索之路
基于Qt的安全即时通讯软件服务器端设计
基于Qt的网络聊天软件服务器端设计