周先赞,张 丹
(中国电子科技集团公司第二研究所,山西 太原 030024)
随着国家对工业4.0战略的实施,智能工厂、智能生产以及智能物流成为现代制造业与物流业追求的目标[1],立体仓储以及自动货柜作为制造业中作为生产过程中必不可少的部分,现在显得尤为重要[2]。
仓储管理系统(WMS)作为连接仓储控制系统(WCS)与上位机系统(如:ERP,MES,云端等)的桥梁,其接口技术的研发需要不断改进完善以保证系统数据稳定传输。
图1 网络结构图
如图1所示为仓储管理软件网络结构图。其主要由以下几部分组成:
数据服务器:主要用于存储立体仓储以及自动货柜内的物品信息,同时用于部署软件接口。
货柜管理机:用于安装并使用WMS软件。
货柜:每台自动货柜配有一台工控机,用于安装WCS软件。
整个系统可以接入以太网,实现与ERP、MES、云端等系统进行对接。
Http-Post接口是http的一种数据发送请求的方法,其基于TCP/IP协议[3,4],可以通过请求主题进行参数的传递。相对于get接口类型,其具有以下特点:
当服务浏览器回退时,POST会再一次进行提交请求,即POST每次调用时都会重新创建新的资源。
相对于get接口的不安全性,POST请求方式在浏览器的历史记录里面不能查找到,即不会通过历史记录使得关键信息丢失。
POST接口方式支持多种数据编码方式。
图2 WMS系统功能图
结合重庆某客户现场WMS系统功能进行介绍。如图2所示为WMS功能图,其主要包括以下功能:
仓储管理:主要包括物料出入库单据制作、物料盘点功能、库存管理、自动货柜库位管理(根据固定格式进行货柜货位整理)以及物料信息的条码打印功能。
基础信息:主要包括人员管理以及物料信息管理。
查询模块:进行物料信息的出入库单据查询、库存记录查询以及自动货柜设备报警查询等。
结合重庆某客户需求,采用c#语言进行了基于Http_Post的WMS接口技术开发。将WMS系统与客户云端进行对接,需要通过接口将WMS系统内物料新增/修改信息、入库单据信息以及出库单据信息发送给客户云端,以方便客户对仓库信息的整理以及以后采购和成本核算。本文对入库单据进行接口开发。
如表1所示为WMS需要发送给云端的参数。其中访问接口密码k为WMS通过接口访问云端的验证码,只有验证通过才可进行访问,否则不能访问。K码是通过md5方式对字符串进行加密,字符串由time+inbillcode组合而成,其具体实现方式如下:
public static string GetMD5Data(string data)
{byte[] result = Encoding.Default.GetBytes(data);
MD5 md5 = new MD5CryptoServiceProvider();
byte[] output = md5.ComputeHash(result);
string md5data = BitConverter.ToString(output).Replace("-", "");
return md5data.ToString().ToLower();}
表1 请求参数信息
考虑到JSON数据格式层次结构清晰,并且能够提升网络传输效率。本文所设计的WMS与云端接口数据编码方式采用JSON格式。结合3.1中请求参数信息进行编写,其JSON格式字符串如下:
{"k":"eb718beb158c62395d6eaff0006d1402",
"timestamp":1512547939,
"inbillcode": "20180423",
"operator ": "fan",
"goodscode":
"material_code",
" location ": "01-01-01-01",
" num ": 2 }
本文将请求参数通过Http_Post方式进行参数传送,将3.2中所生成的JSON格式数据在http请求body中传输,http头加入content-type:application/json字段。其具体实现代码如下:
public static string PostMoths(string url, string param)
{ HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.ContentType = "application/json";
byte[] payload = System.Text.Encoding.UTF8.GetBytes(param);
request.ContentLength = payload.Length;
Stream writer;
try { writer = request.GetRequestStream(); }
catch { string result = "{:,:1000}"; return result; }
writer.Write(payload, 0, payload.Length);
writer.Close();
HttpWebResponse response ;
try { response = (HttpWebResponse)request.GetResponse(); }
catch (WebException ex) {response = ex.Response as HttpWebResponse; }
Stream s = response.GetResponseStream();
string strValue = "";
StreamReader Reader = new StreamReader(s, Encoding.UTF8);
strValue = Reader.ReadToEnd();
Reader.Close();
s.Close();
return strValue; }
本文结合重庆某客户需求进行了.NET环境下基于Http_Post的WMS数据接口设计。首先分别分析介绍了Http-Post接口特点说明和WMS功能介绍。然后在.NET环境下采用C#语言进行了接口设计开发,并且给出了关键部分具体实现代码。为以后智能仓储与ERP/MES等系统对接提供了有效方法。