0 引言
目前,绝大多数混凝土搅拌机控制系统为单机版软件。该软件由机楼操作工使用和维护,且功能单一,数据封闭,不能与外部ERP等管理系统实现信息交换。工程部、实验室和调度中心的工作人员分别将生产任务单(浇筑令)、实验配比单和车辆排单输入到ERP系统中,机楼操作员再将这些单据转录到机楼控制系统中,这样不但增加了机楼人员的工作量,而且容易出错,给生产带来不必要的麻烦。此外,站场管理人员很难及时掌握进料、库存和实际耗量等信息。
为了实现机楼控制系统和外部ERP系统之间数据的无缝对接,一些搅拌机控制软件公司和第三方开发商针对特定客户的需求定制了简单的对接程序,因此,没有充分地考虑程序本身的通用性和开放性。通过分析了大量现有混凝土搅拌站实际需求,本文提出了一套较为完整的搅拌机控制系统与外部ERP之间数据对接的解决方案。不同系统之间通过Windows Socket通信方式进行数据交换,每个搅拌机控制系统作为一个独立的客户端,Socket的服务端程序部署在ERP管理系统中,采用多线程机制,所设计的接口与运行平台、开发语言以及软件厂商无关,便于扩展和实现。
1 数据对接方式
常见的系统之间数据通讯方式有Socket、WebService、基于网络协议的直接数据库访问以及其它通讯方式,下文分别介绍这几种通讯方式的特点。
(1)Socket通讯
Socket套接字通讯实质上就是建立在应用程序端与远程服务器端之间的双向数据通道。按照通信方式的不同,Socket通讯可分为同步方式和异步方式两种。其中同步方式的操作直到其执行完成才将控制交给到主调程序,而异步方式则在执行操作调用后立即返回。以同步通讯为例,首先服务端ServerSocket绑定监听端口,等待客户端请求连接;当客户端ClientSocket发出请求申请后,ServerSocket响应该请求,并创建新的Socket线程,这样通信双方就可以进行数据交换;而后,ServerSocket继续处于监听状态,等待下一个客户端的连接请求。具体通信过程如图1所示。
图1 Socket通信模型
(2)Web Service访问
Web Service是一种自包含、自描述和模块化的Web应用分支。由于它与平台和实现语言无关和易于开发部署的优点而备受关注。Web Service整个使用流程包括描述、发布、查找和调用四个环节。面向服务(SOA)的应用系统中,其用的主要技术包括XML、HTYP、SOAP、WSDL和UDDI等。实质上,Web服务的交互是在HTTP协议上传递由SOAP封装了的XML结构化的数据。
(3)直接数据库访问
直接数据库访问的方法是将管理软件的数据库表结构暴露给外部接口程序,通过远程数据库访问组件技术进行数据交换,这种方式不需要设计特殊的数据通信协议,但是它对数据库进行直接读写操作存在潜在的安全威胁。
此外,通过RS-232或RS-485等串口通讯方式实现数据交换。
以上几种方式各有优缺点,在本次接口设计中,本文选择了Socket通信方式进行各种数据交互。
2 协议格式设计
在双方正式通讯之前,必须协商好消息的格式。按功能类型的不同,协议帧可分为数据帧、控制帧和空闲帧三种格式,各种帧的尺寸不尽相同。
数据帧包括ERP向搅拌机控制系统发送的生产任务、实验配比和车辆排单消息,以及控制系统反馈到ERP的生产记录消息帧。表1—4分别给出不同数据帧格式,括号中的数字表示每个字段域的尺寸。
表1生产任务消息帧格式
表2 实验配比消息帧格式
表3 车间调度消息帧格式
表4生产记录消息帧格式
控制帧包括各种发送控制命令字和验证确认信息帧等。其中控制命令字包括向搅拌机发送的启停指令、删除生产任务等消息以及其他反馈信息指令。表5—6分别是验证确认消息和删除指令帧格式。
表5验证帧协议格式
表6删除指令帧协议格式
值得注意的是,表6中类别和ID可以唯一确定所要删除的记录,如类别=3,ID=201021表示要删除编号为201021的实验配比单;状态值=0,表示删除成功,而状态值=1,表示删除失败。
空闲帧主要用于通信双方无数据传输时维持连接。表7为空闲帧格式,空闲帧的类别为0,计数器的作用是周期性的记录空闲时间的大小,一旦遇到正式数据传输或计数溢出,计数器立即清空。
表7 空闲帧协议格式
3 接口实现
接口程序是由一个服务器端ServerSockethnpl和多个客户端ClientSocketImpl组成。ClientSocketImpl为桌面软件,安装在搅拌机控制系统的机器上。ServerSocketImpl可以集成到ERP中,服务于B/S或C/S架构的应用系统。下文分别描述了服务器端和客户端接口程序的实现流程。
(1)服务器端接口程序ServerSocketImpl实现步骤
①初始化服务器端Socket配置。
②主线程等待连接。
③一旦捕获到连接请求,创建新的客户端套接字newSocket,主线程返回到等待状态。
④如果newSoeket验证通过,并将此加入到全局Socket队列,否则丢弃。
⑤启动newSocket连接的网络状态监控子线程,定期(比如每隔10s)检查连接是否正常。
⑥如果断开连接,则将newSocket从当前存活的Socket队列中踢出。
⑦如果当前的newSocket存活,则执行以下步骤。
⑧启动newSocket所关联的生产记录监听子线程,当该端口接收到新的生产记录时,立即保存到ERP系统的数据库中,并将保存成功与否的状态通知相应的客户端。
⑨ERP系统按照前面设计的协议格式封装数据,调用相应的函数,向搅拌机控制系统的数据库中写人生产任务单、实验配比单、车辆排单和迸料单等信息。
⑩结束。
(2)客户端接口程序ClientSocketImpl实现步骤
①初始化客户端Socket配置。
②主线程请求连接。
③如果请求连接失败,则不断向服务器端发出连接请求,否则执行以下步骤。
④如果验证通过,则建立Socket套接字。
⑤启动网络状态监控子线程,定期检查网络连接是否正常。
⑥如果连接断开,延时后继续请求连接。
⑦如果连接正常,定时检查是否有新的生产记录需要发送到ServerSocket中或者ServerSocket端是否有数据到来。
⑧结束。
服务器端接口程序一旦启动就阻塞等待客户端的请求连接,当双方连接确认后,就可以进行数据交换。为了能够支持多个客户端并发连接,本方案采用了多线程机制。在每个客户端与服务器端成功建立连接后,它们之间建立了独立的子线程,从而隔离了不同Socket之间的相互干扰,即使其中一个Socket连接崩溃也不会影响到其他Socket和服务器之间的数据交互。客户端接口程序在数据对接中起着重要作用,它拥有对搅拌机控制系统中相关数据库表的读写操作权限。客户端定时检查连接状态,并且主动维护与服务器端之间的连接。
4 结束语
本文提出了一种基于多线程Socket通讯方式实现搅拌机控制系统与外部ERP之间的数据交互。ClientSocket接口程序与搅拌机控制系统同时启动或终止,ServerSocket接口由服务器端实现,可支持B/S或C/S架构的应用系统。目前,采用此设计思想实现的接口程序已经成功地应用到某商品混凝土ERP管理系统中,并得到了预期的目标。
转载请注明出处:拓步ERP资讯网http://www.toberp.com/
本文标题:混凝土搅拌机控制系统与ERP数据接口设计
本文网址:http://www.toberp.com/html/consultation/10820212590.html