|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const xOffset = -1735; | 
|---|
|  |  |  | const yOffset = -289; | 
|---|
|  |  |  | const zOffset = -480; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const xOffset0 = -1735; | 
|---|
|  |  |  | const yOffset0 = -117; | 
|---|
|  |  |  | const zOffset0 = -480; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const xOffset1 = -1735; | 
|---|
|  |  |  | const yOffset1 = -116; | 
|---|
|  |  |  | const zOffset1 = -475; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const palletX = -2; | 
|---|
|  |  |  | const palletY = 0; | 
|---|
|  |  |  | const palletZ = -25; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const goodsX = -2; | 
|---|
|  |  |  | const goodsY = 22; | 
|---|
|  |  |  | const goodsZ = -25; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 堆垛机当前运行状态对象 | 
|---|
|  |  |  | function CrnTask(crnData, object) { | 
|---|
|  |  |  | let that = this; | 
|---|
|  |  |  | 
|---|
|  |  |  | that.preZ = 0; | 
|---|
|  |  |  | that.prePosition = null; | 
|---|
|  |  |  | that.preForkPos = -1;    // -1, "不在定位" 0, "货叉原位" 1, "货叉在左侧远" 2, "货叉在左侧" 3, "货叉在右侧"  4, "货叉在右侧远" | 
|---|
|  |  |  | that.preLoadPos = -1; | 
|---|
|  |  |  | // 当前数据 | 
|---|
|  |  |  | that.bay = 1 ; | 
|---|
|  |  |  | that.lev = 1 ; | 
|---|
|  |  |  | 
|---|
|  |  |  | that.z = 0; | 
|---|
|  |  |  | that.position = null; | 
|---|
|  |  |  | that.forkPos = -1; | 
|---|
|  |  |  | that.loadPos = -1; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | that.crnBody = null; | 
|---|
|  |  |  | that.crnLoad = null; | 
|---|
|  |  |  | that.crnFork = null; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | that.pallet = null; | 
|---|
|  |  |  | that.goods = null; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | that.wrkNo = null; | 
|---|
|  |  |  | that.sourceLocNo = null; | 
|---|
|  |  |  | that.locNo = null; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | let curves = []; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | that.z = crnData.position.z; | 
|---|
|  |  |  | that.position = crnData.position; | 
|---|
|  |  |  | that.forkPos = crnData.forkPos; | 
|---|
|  |  |  | that.loadPos = crnData.loadPos; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | that.crnBody = getArrVal(object.objects, "name", that.crnNo + "-body"); | 
|---|
|  |  |  | that.crnLoad = getArrVal(object.objects, "name", that.crnNo + "-load"); | 
|---|
|  |  |  | that.crnFork = getArrVal(object.objects, "name", that.crnNo + "-fork"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (that.crnBody===null || that.crnLoad===null || that.crnFork==null) { | 
|---|
|  |  |  | // console.log(that.crnNo + "号堆垛机没有初始化"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | init(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | that.modify = function (crnData) { | 
|---|
|  |  |  | if (that.run || that.crnNo === 0) { | 
|---|
|  |  |  | console.error(that.crnNo + "号堆垛机更新失败"); | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (that.crnBody===null) { | 
|---|
|  |  |  | that.crnBody = getArrVal(object.objects, "name", that.crnNo + "-body"); | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (that.crnLoad===null) { | 
|---|
|  |  |  | that.crnLoad = getArrVal(object.objects, "name", that.crnNo + "-load"); | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (that.crnFork===null) { | 
|---|
|  |  |  | that.crnFork = getArrVal(object.objects, "name", that.crnNo + "-fork"); | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 出库 / 移库 | 
|---|
|  |  |  | if (crnData.sourceLocNo != null) { | 
|---|
|  |  |  | that.pallet = getArrVal(object.objects, "name", crnData.sourceLocNo + "-Pallet"); | 
|---|
|  |  |  | that.goods = getArrVal(object.objects, "name", crnData.sourceLocNo + "-Goods"); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | if (JSON.stringify(crnData.position) === JSON.stringify(that.position)) { | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | // 入库 | 
|---|
|  |  |  | if (crnData.wrkNo != null) { | 
|---|
|  |  |  | that.pallet = getArrVal(object.objects, "name", crnData.wrkNo + "-Pallet"); | 
|---|
|  |  |  | that.goods = getArrVal(object.objects, "name", crnData.wrkNo + "-Goods"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | that.run = true; | 
|---|
|  |  |  | // 上一次 | 
|---|
|  |  |  | that.preBay = that.bay; | 
|---|
|  |  |  | that.preLev = that.lev; | 
|---|
|  |  |  | that.preX = that.x; | 
|---|
|  |  |  | that.preY = that.y; | 
|---|
|  |  |  | that.preY = that.y; | 
|---|
|  |  |  | that.prePosition = JSON.parse(JSON.stringify(that.position)); | 
|---|
|  |  |  | that.preForkPos = that.forkPos; | 
|---|
|  |  |  | // 当前 | 
|---|
|  |  |  | that.bay = crnData.bay; | 
|---|
|  |  |  | that.lev = crnData.lev; | 
|---|
|  |  |  | that.x = crnData.position.x; | 
|---|
|  |  |  | that.y = crnData.position.y; | 
|---|
|  |  |  | that.z = crnData.position.z; | 
|---|
|  |  |  | that.position = crnData.position; | 
|---|
|  |  |  | that.forkPos = crnData.forkPos; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // create Route ------------------------------------------------ | 
|---|
|  |  |  | if (JSON.stringify(crnData.position) === JSON.stringify(that.position)) { | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | that.run = true; | 
|---|
|  |  |  | // 上一次 | 
|---|
|  |  |  | that.preBay = that.bay; | 
|---|
|  |  |  | that.preLev = that.lev; | 
|---|
|  |  |  | that.preX = that.x; | 
|---|
|  |  |  | that.preY = that.y; | 
|---|
|  |  |  | that.preZ = that.z; | 
|---|
|  |  |  | that.prePosition = JSON.parse(JSON.stringify(that.position)); | 
|---|
|  |  |  | that.preForkPos = that.forkPos; | 
|---|
|  |  |  | that.preLoadPos = that.loadPos; | 
|---|
|  |  |  | // 当前 | 
|---|
|  |  |  | that.bay = crnData.bay; | 
|---|
|  |  |  | that.lev = crnData.lev; | 
|---|
|  |  |  | that.x = crnData.position.x; | 
|---|
|  |  |  | that.y = crnData.position.y; | 
|---|
|  |  |  | that.z = crnData.position.z; | 
|---|
|  |  |  | that.position = crnData.position; | 
|---|
|  |  |  | that.forkPos = crnData.forkPos; | 
|---|
|  |  |  | that.loadPos = crnData.loadPos; | 
|---|
|  |  |  | that.sourceLocNo = crnData.sourceLocNo; | 
|---|
|  |  |  | that.locNo = crnData.locNo; | 
|---|
|  |  |  | that.wrkNo = crnData.wrkNo; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 堆垛机叉牙 伸叉 | 
|---|
|  |  |  | if (that.prePosition.x !== that.position.x) { | 
|---|
|  |  |  | curves.push({ | 
|---|
|  |  |  | start: false, | 
|---|
|  |  |  | progress: 0, | 
|---|
|  |  |  | part: 'fork', | 
|---|
|  |  |  | route: new Route([ | 
|---|
|  |  |  | { | 
|---|
|  |  |  | x: that.prePosition.x, | 
|---|
|  |  |  | y: that.crnFork.position.y, | 
|---|
|  |  |  | z: that.crnFork.position.z | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | x: that.position.x, | 
|---|
|  |  |  | y: that.crnFork.position.y, | 
|---|
|  |  |  | z: that.crnFork.position.z | 
|---|
|  |  |  | } | 
|---|
|  |  |  | ]) | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | // 根据货叉上下定位 判断堆垛机取放货作业 ----------------------------------------------- | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 上定位 ===>> 下定位    放货完成 | 
|---|
|  |  |  | if (that.preLoadPos === 1 && that.loadPos === 0) { | 
|---|
|  |  |  | // 入库 / 移库 | 
|---|
|  |  |  | if (that.locNo != null) { | 
|---|
|  |  |  | if (that.pallet != null) { | 
|---|
|  |  |  | that.pallet.name = that.locNo + "-Pallet"; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (that.goods != null) { | 
|---|
|  |  |  | that.goods.name = that.locNo + "-Goods"; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | // 出库 | 
|---|
|  |  |  | if (crnData.wrkNo != null) { | 
|---|
|  |  |  | if (that.pallet != null) { | 
|---|
|  |  |  | that.pallet.name = crnData.wrkNo + "-Pallet"; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (that.goods != null) { | 
|---|
|  |  |  | that.goods.name = crnData.wrkNo + "-Goods"; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 堆垛机载货台和叉牙 移动 | 
|---|
|  |  |  | if (that.prePosition.z !== that.position.z || that.prePosition.y !== that.position.y) { | 
|---|
|  |  |  | curves.push({ | 
|---|
|  |  |  | start: false, | 
|---|
|  |  |  | progress: 0, | 
|---|
|  |  |  | part: 'load', | 
|---|
|  |  |  | route: new Route([ | 
|---|
|  |  |  | { | 
|---|
|  |  |  | x: that.crnLoad.position.x, | 
|---|
|  |  |  | y: that.prePosition.y, | 
|---|
|  |  |  | z: that.prePosition.z | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | x: that.crnLoad.position.x, | 
|---|
|  |  |  | y: that.position.y, | 
|---|
|  |  |  | z: that.position.z | 
|---|
|  |  |  | } | 
|---|
|  |  |  | ]) | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 堆垛机本体运动轨迹 | 
|---|
|  |  |  | if (that.prePosition.z !== that.position.z && false) { | 
|---|
|  |  |  | curves.push({ | 
|---|
|  |  |  | start: false, | 
|---|
|  |  |  | progress: 0, | 
|---|
|  |  |  | part: 'body', | 
|---|
|  |  |  | route: new Route([ | 
|---|
|  |  |  | { | 
|---|
|  |  |  | x: that.crnBody.position.x, | 
|---|
|  |  |  | y: that.crnBody.position.y, | 
|---|
|  |  |  | z: that.prePosition.z | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | x: that.crnBody.position.x, | 
|---|
|  |  |  | y: that.crnBody.position.y, | 
|---|
|  |  |  | z: that.position.z | 
|---|
|  |  |  | } | 
|---|
|  |  |  | ]) | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | curves.map((value, index) => { | 
|---|
|  |  |  | console.log(value.part + " --> " + JSON.stringify(value.route.points)) | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | curves[0].start = true; | 
|---|
|  |  |  | // 下定位 ===>> 上定位    取货完成 | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // create Route ------------------------------------------------ | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 堆垛机叉牙 伸叉 | 
|---|
|  |  |  | if (that.prePosition.x !== that.position.x) { | 
|---|
|  |  |  | curves.push({ | 
|---|
|  |  |  | start: false, | 
|---|
|  |  |  | progress: 0, | 
|---|
|  |  |  | part: 'fork', | 
|---|
|  |  |  | loaded: crnData.loaded, | 
|---|
|  |  |  | loadPos: crnData.loadPos, | 
|---|
|  |  |  | route: new Route([ | 
|---|
|  |  |  | { | 
|---|
|  |  |  | x: that.prePosition.x, | 
|---|
|  |  |  | y: that.crnFork.position.y, | 
|---|
|  |  |  | z: that.crnFork.position.z | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | x: that.position.x, | 
|---|
|  |  |  | y: that.crnFork.position.y, | 
|---|
|  |  |  | z: that.crnFork.position.z | 
|---|
|  |  |  | } | 
|---|
|  |  |  | ]) | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 堆垛机载货台和叉牙 移动 | 
|---|
|  |  |  | if (that.prePosition.z !== that.position.z || that.prePosition.y !== that.position.y) { | 
|---|
|  |  |  | curves.push({ | 
|---|
|  |  |  | start: false, | 
|---|
|  |  |  | progress: 0, | 
|---|
|  |  |  | part: 'load', | 
|---|
|  |  |  | loaded: crnData.loaded, | 
|---|
|  |  |  | loadPos: crnData.loadPos, | 
|---|
|  |  |  | route: new Route([ | 
|---|
|  |  |  | { | 
|---|
|  |  |  | x: that.crnLoad.position.x, | 
|---|
|  |  |  | y: that.prePosition.y, | 
|---|
|  |  |  | z: that.prePosition.z | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | x: that.crnLoad.position.x, | 
|---|
|  |  |  | y: that.position.y, | 
|---|
|  |  |  | z: that.position.z | 
|---|
|  |  |  | } | 
|---|
|  |  |  | ]) | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | curves.map((value, index) => { | 
|---|
|  |  |  | if (that.crnNo === 1) { | 
|---|
|  |  |  | // console.log(value.part + " --> " + JSON.stringify(value.route.points)) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | curves[0].start = true; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | that.move = function () { | 
|---|
|  |  |  | 
|---|
|  |  |  | let point = curves[i].route.getPoint(curves[i].progress); | 
|---|
|  |  |  | if ( point && point.x ) { | 
|---|
|  |  |  | switch (curves[i].part) { | 
|---|
|  |  |  | case 'body': | 
|---|
|  |  |  | that.crnBody.position.set(point.x, point.y, point.z); | 
|---|
|  |  |  | break | 
|---|
|  |  |  | case 'load': | 
|---|
|  |  |  | that.crnBody.position.z = point.z; | 
|---|
|  |  |  | that.crnLoad.position.set(point.x, point.y, point.z); | 
|---|
|  |  |  | that.crnFork.position.set(point.x, point.y, point.z); | 
|---|
|  |  |  | that.crnBody.position.z = point.z + zOffset - that.crnBody.userData.crnBodyWidth/2; | 
|---|
|  |  |  | that.crnLoad.position.set(point.x, point.y + yOffset0, point.z + zOffset0 - that.crnLoad.userData.crnLoadWidth/2 + 5); | 
|---|
|  |  |  | that.crnFork.position.set(point.x, point.y + yOffset1, point.z + zOffset1 - that.crnLoad.userData.crnLoadWidth/2); | 
|---|
|  |  |  | if (curves[i].loaded === 1 && that.pallet) { | 
|---|
|  |  |  | that.pallet.position.set(point.x - xOffset + palletX, point.y + palletY, point.z + palletZ); | 
|---|
|  |  |  | that.goods.position.set(point.x - xOffset + goodsX, point.y + goodsY, point.z + goodsZ); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | break | 
|---|
|  |  |  | case 'fork': | 
|---|
|  |  |  | that.crnFork.position.set(point.x, point.y, point.z); | 
|---|
|  |  |  | that.crnFork.position.set(point.x + xOffset1, point.y, point.z); | 
|---|
|  |  |  | if (curves[i].loadPos === 1 && that.pallet) { | 
|---|
|  |  |  | that.pallet.position.setX(point.x + palletX); | 
|---|
|  |  |  | that.goods.position.setX(point.x + goodsX); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | break | 
|---|
|  |  |  | default: | 
|---|
|  |  |  | break | 
|---|