--[[
|
编码: WMS-100-01
|
名称: HostToAgv-TaskCallBack
|
作者:HAN
|
入口函数: TaskStatusCallback
|
这段代码基本不需要改,各项目都是差不多的。
|
|
功能说明:
|
这个是一个 给 外部系统调用的 可编程接口,是AGV调度把车辆的状态发给 WMS 系统的接口
|
发送过来的数据是一个Json包,格式如下:
|
{"State":"%d","No":"%s","Ext1":"%s","Ext2":"%s","Ext3":"%s","ForkliftNo":"%d","ErrCode":"%d","ExtData":"%d"}
|
State -- 车辆动作 具体见每个项目的车辆动作码定义
|
No -- Task 编码
|
ForkliftNo -- 车辆编码
|
|
处理以下这几件事情:
|
1)解析外部输入的车辆状态信息 {"State":"%d","No":"%s","Ext1":"%s","Ext2":"%s","Ext3":"%s","ForkliftNo":"%d","ErrCode":"%d","ExtData":"%d"}
|
2)根据 ForkliftNo 获取车辆所属工厂标识
|
3)判断动作码在动作里是否存在,已经存在返回
|
3)把动作码写入 MQ_EQAction 队列
|
|
变更记录:
|
V1.1
|
+ mq_eq_action.task_code = agv_action.No
|
V3.0
|
HAN 2023-6-16
|
V3.1 HAN 2023-7-2
|
WMS_CreateDataObj 改成 m3.CreateDataObj
|
V4.1 HAN 2023-8-9 wms相关接口调整
|
V6.0 HAN 2023/9/6 -- lua.Error/lua.Debug 函数变化
|
--]]
|
wms_eq = require( "wms_equipment" )
|
|
function TaskStatusCallback ( strLuaDEID )
|
local nRet, strRetInfo, strDataJson, strErr
|
|
-- step1 获取接口中的Data
|
nRet, agv_action = m3.GetSysDataJson( strLuaDEID )
|
if ( nRet ~=0 ) then lua.Error( strLuaDEID, debug.getinfo(1), "TaskStatusCallback 无法获取数据包!") end
|
|
-- 获取车辆编码
|
local strForkliftNo = agv_action.ForkliftNo
|
if ( strForkliftNo == '' ) then lua.Error( strLuaDEID, debug.getinfo(1), "ForkliftNo为空!") end
|
|
-- step2 获取车辆基本信息
|
local eq
|
nRet, eq = wms_eq.Equipment_GetInfo( strLuaDEID, strForkliftNo )
|
if ( nRet ~= 0 ) then lua.Error( strLuaDEID, debug.getinfo(1), eq ) end
|
-- 如果车辆没定义工厂标识返回错误
|
if ( eq.factory == '') then
|
strErr = "设备编号='"..strForkliftNo.."' 没定义工厂标识!"
|
lua.Error( strLuaDEID, debug.getinfo(1), strErr )
|
end
|
|
-- step3 判断当前车辆的动作码是否已经在队列中(MQ_EQAction)
|
local mq_eq_action = m3.AllocObject(strLuaDEID,"MQ_EQAction")
|
mq_eq_action.task_code = agv_action.No
|
mq_eq_action.eq_code = strForkliftNo
|
mq_eq_action.action_code = agv_action.State
|
nRet, strRetInfo = wms_eq.MQ_EQAction_Exist( strLuaDEID, mq_eq_action )
|
if ( nRet ~= 0 ) then lua.Error( strLuaDEID, debug.getinfo(1), strRetInfo ) end
|
-- 如果该车辆编码的动作已经在队列,返回,不做处理
|
if ( strRetInfo == "yes" ) then return end
|
|
-- step4 把车辆动作写入队列
|
mq_eq_action.factory = eq.factory
|
mq_eq_action.eq_type = eq.type
|
mq_eq_action.eq_type_name = eq.name
|
mq_eq_action.data = lua.table2str(agv_action)
|
nRet, strRetInfo = m3.CreateDataObj( strLuaDEID, mq_eq_action )
|
if ( nRet ~= 0 ) then lua.Error( strLuaDEID, debug.getinfo(1), strRetInfo ) end
|
end
|