现场在工作站客户端的循环入库——呼叫货架界面,操作呼叫1个全空的1C货架类型,iwms返回报错“查找货架不足“。

(图1)循环入库呼叫货架界面

(图2)iwms接口日志返回报错
根据iwms的接口日志报文,需要注意确认呼叫类型和查找货架的条件(以及是否指定货架号),具体报文字段释义可以参考第四章常见接口文档,如该案例呼叫类型为:循环呼叫一个全空的1C货架类型 。

(图3)iwms接口日志详情
前面1.2.章节已经确认需要呼叫一个货架类型为1C的全空货架,因此我们需要排查两个货架和仓位两个方面:
· 货架方面:该货架类型的初始化状态、是否出入冻结,是否全空仓位;
· 仓位方面:初始化状态、是否出入冻结、仓位空满标识、是否启动盘点或者理货标识
目前基线的仓位管理界面,无法同时筛选以上这几个条件,需要在Data View增加“入库冻结(系统)、出库冻结(系统)、盘点标识、理货标识”四个条件,增加配置方法如下:
步骤1:
打开Data View搜索仓位列表布局文件,然后点击设计;

(图4)Data View布局文件
步骤2:
在左边表单元件栏拖拽一个“下拉框”到合适位置上,然后进入右上角的多语言,找到“入库系统(冻结)”默认的Key值为intoBlkSysFlag,填在元件标识和标签属性里面,即可该选择栏的中文名称。
(图5)Data View布局设计界面
(图6)仓位列表界面多语言列表
步骤3:
字段名查看iwms数据库仓位表wms_stg_bin表,确认“入库系统(冻结)”对应的字段名为into_blk_sys_flag,因为前端界面赋值为驼峰格式,因为字段名属性填“intoBlkSysFlag”;
(图7)仓位表“入库系统(冻结)”字段名

(图8)配置字段名
步骤4:
配置下拉框的选择项,因为入库系统(冻结)对应的值为:0未冻结、1已冻结,所以要配置两个下拉选择项,然后点击左上角“保存“,就完成配置流程。

(图9)配置下拉框选择项

(图10)配置后的仓位管理界面
先在货架管理界面,筛选货架类型为“1C”、货架初始化状态为“已初始化”、出入库冻结(用户)状态为“未冻结”、选择全空货架。
· 如果查询出来可用货架数量为0,然后单独一一去掉查询条件,即可排除导致没有空货架的具体原因;
· 如果查询出来的可用货架数量非0,则需要到仓位管理界面上进一步排查原因。

(图11)货架管理界面
在仓位管理界面,筛选出入库冻结(用户)状态为“未冻结”、出入库冻结(系统)状态为“未冻结”、仓位选择“空仓”、盘点和理货标识为“未启动”,把在货架管理界面查询的货架号,复制黏贴填入货架编号号栏进行查询。
· 如果查询出来仓位数量为0,然后单独一一去掉查询条件,即可排除导致没有仓位的具体原因;
· 如果如果查询出来的可用仓位数量非0,则是iwms系统BUG,需要联系研发进行排查。

(图12)仓位管理界面
根据iwms接口日志报错时间点下载对应的wms_debug日志,然后在iwms日志搜报错“查找货架不足”,找到对应时间点报错内容“{"code":"99","message":"查找货架不足","success":false}”。然后标定进程号,往上面的日志行找到查询结果为0的SQL语句。
(图13)日志对应报错日志行
将SQL查询结果为0 的日志两个日志行单独复制出来,第一行是SQL语句格式,第二行的6个字符串是查询条件,每个值要按照顺序替换掉,第一行的日志行里面的问号?,然后用英文单引号包起来‘’,然后把select前面的内容都删除掉就可以得到拼接后的SQL语句;
(图14)提取日志拼接SQL
连上iwms数据库,新建SQL编辑器把拼接后SQL复制进去,按Ctrl+A全选、再右键选择格式——格式化SQL。然后一段一段执行查询结果(and开头为一段),如果无查询结果的条件,就是该字段导致无法满足选到可用货架的原因。
(图15)执行SQL查询
|
接口名 |
/wms/api/client/callPod |
|||||
|
功能说明 |
工作站呼叫货架,支持空货架、非空货架、有库存货架 |
|||||
|
接口协议 |
http(s)/post |
|||||
|
提供方 |
iWMS |
|||||
|
调用方 |
客户端 |
|||||
|
请求参数 |
参数名 |
数据类型 |
最大长度 |
是否必填 |
备注 |
|
|
workAreaCode |
String |
16 |
是 |
工作区编号(包含工作站) |
||
|
taskType |
String |
4 |
是 |
任务类型 |
||
|
wbStatus |
String |
1 |
是 |
启停通知(0-停止呼叫1-循环呼叫 2-非循环呼叫) |
||
|
emptyContainerFlag |
String |
1 |
否 |
空容器出库必填 |
||
|
channelFlag |
String |
1 |
否 |
巷到空货架出库必填 |
||
|
停止呼叫下面条件不填 |
||||||
|
blkFlag |
String |
1 |
是 |
呼叫货架后是否需要冻结仓位(1-是0-否) |
||
|
podQty |
String |
2 |
是 |
货架个数 |
||
|
enablePartPod |
String |
1 |
否 |
是否挑选部分为空货架(1允许,0不允许), |
||
|
sort |
String |
4 |
否 |
仓位数量大小排序规则(只能为desc 或asc) |
||
|
查找货架的条件 |
||||||
|
podTypeCode |
String |
2 |
否 |
货架类型 |
||
|
podTypeCodes |
Array |
否 |
货架类型 |
|||
|
stgTypeCode |
String |
32 |
否 |
库区编号 |
||
|
stgTypeCodes |
Array |
否 |
库区编号 |
|||
|
stgBinTypCode |
String |
2 |
否 |
仓位类型 |
||
|
stgBinTypCodes |
Array |
否 |
仓位类型 |
|||
|
podCode |
String |
32 |
否 |
货架编号 |
||
|
podCodes |
Array |
否 |
货架编号 |
|||
|
binCode |
String |
32 |
否 |
仓位编号 |
||
|
binCodes |
Array |
否 |
仓位编号 |
|||
|
traceCode |
String |
32 |
否 |
容器编号 |
||
|
traceCodes |
Array |
否 |
容器编号 |
|||
|
ownerCode |
String |
32 |
否 |
货主 |
||
|
matCode |
String |
32 |
否 |
物料 |
||
|
batchNum |
String |
32 |
否 |
批次 |
||
|
返回结果 |
code |
Integer |
2 |
是 |
结果码(0-成功) |
|
|
message |
String |
64 |
是 |
结果描述 |
||
|
备注 |
1、呼叫货架后是否需要冻结(1-是0-否);根据场景选择,如出入库,需要冻结,防止被其他呼叫查到;如自由搬运,不需要锁定,可同时呼叫到; 2、支持指定呼叫、循环呼叫、停止呼叫; |
|||||
|
示例 |
请求参数 |
循环呼叫 { "blkFlag": "1", "enablePartPod": "0", "podQty": 1, "podTypeCode": "B2", "sort": "", "stgTypeCode": "T2", "taskType": "D1", "wbStatus": "1", "workAreaCode": "WW" } 停止呼叫 { "taskType": "G1", "wbStatus": "0", "workAreaCode": "064391CC032299" } 指定呼叫 { "blkFlag": "0", "podCodes": [ "400001" ], "taskType": "M1", "wbStatus": "2", "workAreaCode": "WW" } |
||||
|
返回结果 |
{ "code": "0x89600000", "message": "OK.", "success": true } | |||||
|
接口名 |
/applyForEmptyPod |
|||||
|
功能说明 |
呼叫空货架时,向WMS申请空货架 |
|||||
|
接口协议 |
REST |
|||||
|
提供方 |
第三方 |
|||||
|
调用方 |
TPS |
|||||
|
请求参数 |
参数名 |
数据类型 |
最大 长度 |
是否必填 |
备注 |
|
|
reqCode |
String |
32 |
是 |
请求编号,每个请求都要一个唯一编号, 同一个请求重复提交, 使用同一编号。由第三方系统提供 |
||
|
reqTime |
String |
20 |
是 |
请求时间截 格式: “yyyy-MM-dd HH:mm:ss”。由第三方系统提供 |
||
|
clientCode |
String |
16 |
否 |
客户端编号,如PDA,HCWMS等。由TPS告知第三方系统 |
||
|
tokenCode |
String |
64 |
否 |
令牌号, 由调度系统颁发。由TPS告知第三方系统 |
||
|
podTyp |
String |
32 |
是 |
货架类型 |
||
|
podNum |
String |
32 |
是 |
货架个数 |
||
|
callTyp |
String |
32 |
是 |
呼叫类型 1. 允许非空货架 2. 必须是空货架 |
||
|
应答 |
code |
String |
返回码 |
|||
|
message |
String |
返回消息 |
||||
|
reqCode |
String |
请求编号 |
||||
|
data |
String[] |
仓位编号列表返回 |
||||
|
备注 |
||||||
|
示例 |
请求 |
POST http://IP:PORT/services/agv/agvCallbackService/applyForEmptyPod {"reqCode":"", "reqTime":"", "clientCode":"", "tokenCode":"", "podTyp":"1", "username":"", "podNum":"", "callTyp":"" } |
||||
|
应答 |
{ "code": “0”, "message": "成功", "reqCode": "1541954B96B1112", "data": [ "100001AAXXXXX", "100002AAXXXXX", "100003AAXXXXX" ] } | |||||