--[[ 版本:Version 2.1 名称: 作者:HAN 日期:2025-3-29 WMS-Basis-Model-Version: V15.5 共用程序包 名称: wms_wcs 应用: 涉及和设备层进行交互,比如库区中堆垛机的状态,延伸到库区哪个个巷道可用 函数: -- Get_DVC_State 获取设备状态 -- Get_Area_Stacker_Dev_State 获取库区里堆垛机状态 更改记录: --]] wms_base = require ("wms_base") prj_api = require ("prj_api") local wms_wcs = {_version = "0.2.1"} --[[ 获取某个库区内设备的状态(在JX项目中特指库区内的堆垛机状态) 输入参数: area_code -- 库区编码 返回参数: nRet = 0 成功 非零 失败 stacker_dev = [{"dev_no"::xxx",aisle:1,aisle_no:"A-01",enable:0/1,cntr_num:0}] -- cntr_num 巷道入库接驳位容器数量 -- aisle_no 巷道编码 -- dev_no 堆垛机号 --]] function wms_wcs.Get_Area_Stacker_Dev_State( strLuaDEID, area_code, scanning_loc ) local nRet, strRetInfo if ( station == nil ) then station = '' end -- 获取 area_code 库区堆垛机设备工作状态,确定哪些巷道可以使用 nRet, strRetInfo = wms_base.Get_sConst2( "Area-"..area_code.."-StackerCrane" ) if ( nRet ~= 0 ) then return 1, "系统无法获取常量'Area-"..area_code.."-StackerCrane'" end if ( strRetInfo == '') then return 1, "常量'Area-"..area_code.."-StackerCrane' 不能为空! " end --[{"dev_no"::xxx",aisle:1,enable:false/true}] local stacker_dev = json.decode( strRetInfo ) local n, m local dev_codes = '' for n = 1, #stacker_dev do dev_codes = dev_codes..stacker_dev[n].dev_no.."," end if ( dev_codes == '') then return 1, "库区'"..area_code.."'没有定义设备!" end dev_codes = lua.trim_laster_char( dev_codes ) -- 调用WCS接口获取设备状态 -- [{"DVC_NO":"TC21","IS_USE":0/1,"CON_NUM":1},...] nRet, dev_state = prj_api.Get_DEV_State( strLuaDEID, dev_codes ) if ( nRet ~= 0 ) then return nRet, dev_state end local find for n = 1, #stacker_dev do find = false for m = 1, #dev_state do if ( stacker_dev[n].dev_no == dev_state[m].DVC_NO ) then find = true stacker_dev[n].enable = lua.Get_NumAttrValue( dev_state[m].IS_USE ) stacker_dev[n].cntr_num = lua.Get_NumAttrValue( dev_state[m].CON_NUM ) break end end if ( find == false ) then return 1, "WCS返回的设备状态中没有编码='"..stacker_dev[n].dev_no.."'的设备状态!" end end return 0, stacker_dev end -- 获取库区库可用的堆垛机巷道号 -- 1, 2, 4 function wms_wcs.Get_Area_Available_Aisle( strLuaDEID, area_code ) local nRet, stacker_dev nRet, stacker_dev = wms_wcs.Get_Area_Stacker_Dev_State( strLuaDEID, area_code ) if ( nRet ~= 0 ) then return nRet, stacker_dev end local n local aisle = '' for n = 1, #stacker_dev do if ( stacker_dev[n].enable == 1 ) then aisle = aisle..stacker_dev[n].aisle.."," end end aisle = lua.trim_laster_char( aisle ) return 0, lane end return wms_wcs