|
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 = -18;
|
const palletY = 2;
|
const palletZ = -46;
|
|
const goodsX = -17;
|
const goodsY = 5;
|
const goodsZ = -6;
|
|
// 堆垛机当前运行状态对象
|
function CrnTask(crnData, object) {
|
let that = this;
|
|
that.crnNo = 0;
|
that.run = false;
|
// 上一数据
|
that.preBay = 1 ;
|
that.preLev = 1 ;
|
that.preX = 0;
|
that.preY = 0;
|
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.x = 0;
|
that.y = 0;
|
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 = [];
|
|
let init = function () {
|
that.crnNo = crnData.crnNo;
|
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.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 (crnData.wrkNo != null) {
|
that.pallet = getArrVal(object.objects, "name", crnData.wrkNo + "-Pallet");
|
that.goods = getArrVal(object.objects, "name", crnData.wrkNo + "-Goods");
|
}
|
}
|
|
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.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";
|
}
|
}
|
}
|
// 下定位 ===>> 上定位 取货完成
|
} 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 () {
|
if (curves.length > 0) {
|
for (let i = 0; i < curves.length ; i++) {
|
if (curves[i].start) {
|
curves[i].progress += 0.01;
|
if (curves[i].progress > 1.0) {
|
curves[i].start = false;
|
if (i !== curves.length - 1) {
|
curves[i+1].start = true;
|
} else {
|
curves = [];
|
that.run = false;
|
}
|
} else {
|
let point = curves[i].route.getPoint(curves[i].progress);
|
if ( point && point.x ) {
|
switch (curves[i].part) {
|
case 'load':
|
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 + 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
|
}
|
}
|
}
|
}
|
}
|
}
|
}
|
|
}
|