@eflexsystems/node-open-protocol
Version:
A library to interface with Power Tools using the Atlas Copco Open Protocol
1,000 lines (822 loc) • 50.5 kB
JavaScript
//@ts-check
/*
Copyright: (c) 2018-2020, Smart-Tech Controle e Automação
GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt)
*/
/**
* @class
* @name MID0061
* @param {object} MID0061_1 REV. 1
* @param {number} MID0061_1.cellID
* @param {number} MID0061_1.channelID
* @param {string} MID0061_1.torqueControllerName
* @param {string} MID0061_1.numberVIN
* @param {number} MID0061_1.jobID
* @param {number} MID0061_1.parameterSetID
* @param {number} MID0061_1.batchSize
* @param {number} MID0061_1.batchCounter
* @param {number} MID0061_1.tighteningStatus
* @param {number} MID0061_1.torqueStatus
* @param {number} MID0061_1.angleStatus
* @param {number} MID0061_1.torqueMinLimit
* @param {number} MID0061_1.torqueMaxLimit
* @param {number} MID0061_1.torqueFinalTarget
* @param {number} MID0061_1.torque
* @param {number} MID0061_1.angleMin
* @param {number} MID0061_1.angleMax
* @param {number} MID0061_1.finalAngleTarget
* @param {number} MID0061_1.angle
* @param {string} MID0061_1.timeStamp
* @param {string} MID0061_1.timeLastChange
* @param {number} MID0061_1.batchStatus
* @param {number} MID0061_1.tighteningID
*
* @param {object} MID0061_2 REV. 2
* @param {number} MID0061_2.cellID
* @param {number} MID0061_2.channelID
* @param {string} MID0061_2.torqueControllerName
* @param {string} MID0061_2.numberVIN
* @param {number} MID0061_2.jobID
* @param {number} MID0061_2.parameterSetID
* @param {number} MID0061_2.strategy
* @param {number} MID0061_2.strategyOptions
* @param {number} MID0061_2.batchSize
* @param {number} MID0061_2.batchCounter
* @param {number} MID0061_2.tighteningStatus
* @param {number} MID0061_2.batchStatus
* @param {number} MID0061_2.torqueStatus
* @param {number} MID0061_2.angleStatus
* @param {number} MID0061_2.rundownAngleStatus
* @param {number} MID0061_2.currentMonitoringStatus
* @param {number} MID0061_2.selftapStatus
* @param {number} MID0061_2.prevailTorqueMonitoringStatus
* @param {number} MID0061_2.prevailTorqueCompensateStatus
* @param {number} MID0061_2.tighteningErrorStatus
* @param {number} MID0061_2.torqueMinLimit
* @param {number} MID0061_2.torqueMaxLimit
* @param {number} MID0061_2.torqueFinalTarget
* @param {number} MID0061_2.torque
* @param {number} MID0061_2.angleMin
* @param {number} MID0061_2.angleMax
* @param {number} MID0061_2.finalAngleTarget
* @param {number} MID0061_2.angle
* @param {number} MID0061_2.rundownAngleMin
* @param {number} MID0061_2.rundownAngleMax
* @param {number} MID0061_2.rundownAngle
* @param {number} MID0061_2.currentMonitoringMin
* @param {number} MID0061_2.currentMonitoringMax
* @param {number} MID0061_2.currentMonitoringValue
* @param {number} MID0061_2.selftapMin
* @param {number} MID0061_2.selftapMax
* @param {number} MID0061_2.selftapTorque
* @param {number} MID0061_2.prevailTorqueMonitoringMin
* @param {number} MID0061_2.prevailTorqueMonitoringMax
* @param {number} MID0061_2.prevailTorque
* @param {number} MID0061_2.tighteningID
* @param {number} MID0061_2.jobSequenceNumber
* @param {number} MID0061_2.syncTighteningID
* @param {string} MID0061_2.toolSerialNumber
* @param {string} MID0061_2.timeStamp
* @param {string} MID0061_2.timeLastChange
*
* @param {object} MID0061_3 REV. 3 [(REV. 2) +]
* @param {string} MID0061_3.parameterSetName
* @param {number} MID0061_3.torqueValuesUnit
* @param {number} MID0061_3.resultType
*
* @param {object} MID0061_4 REV. 4 [(REV. 3) +]
* @param {string} MID0061_4.identifierPart2
* @param {string} MID0061_4.identifierPart3
* @param {string} MID0061_4.identifierPart4
*
* @param {object} MID0061_5 REV. 5 [(REV. 4) +]
* @param {string} MID0061_5.customerToghteningErrorCode
*
* @param {object} MID0061_6 REV. 6 [(REV. 5) +]
* @param {number} MID0061_6.prevailTorqueCompensateValue
* @param {number} MID0061_6.toghteningErrorStatus
*
* @param {object} MID0061_7 REV. 7 [(REV. 6) +]
* @param {number} MID0061_7.compensatedAngle
* @param {number} MID0061_7.finalAngleDecimal
*
* @param {object} MID0061_998 REV. 998 [(REV. 6) +]
* @param {number} MID0061_998.numberStagesMultiStage
* @param {number} MID0061_998.numberStageResults
* @param {string} MID0061_998.stageResult
*
* @param {object} MID0061_999
* @param {string} MID0061_999.numberVIN
* @param {number} MID0061_999.jobID
* @param {number} MID0061_999.parameterSetID
* @param {number} MID0061_999.batchSize
* @param {number} MID0061_999.batchCounter
* @param {number} MID0061_999.batchStatus
* @param {number} MID0061_999.tighteningStatus
* @param {number} MID0061_999.torqueStatus
* @param {number} MID0061_999.angleStatus
* @param {number} MID0061_999.torque
* @param {number} MID0061_999.angle
* @param {string} MID0061_999.timeStamp
* @param {string} MID0061_999.timeLastChange
* @param {number} MID0061_999.tighteningID
*/
const helpers = require("../helpers.js");
const processParser = helpers.processParser;
const processKey = helpers.processKey;
const serializerField = helpers.serializerField;
const serializerKey = helpers.serializerKey;
const constantsMID = require("./MidConstants/MID0061.json");
function parser(msg, opts, cb) {
let buffer = msg.payload;
msg.payload = {};
let status = true;
let position = {
value: 0
};
let revision = msg.revision || 1;
switch (revision) {
case 998:
position = {
value: 506
};
status =
processKey(msg, buffer, "numberStagesMultiStage", 56, 2, position, cb) &&
processParser(msg, buffer, "numberStagesMultiStage", "number", 2, position, cb) &&
processKey(msg, buffer, "numberStageResults", 57, 2, position, cb) &&
processParser(msg, buffer, "numberStageResults", "number", 2, position, cb) &&
processKey(msg, buffer, "stageResult", 58, 2, position, cb) &&
processParser(msg, buffer, "stageResult", "string", (11 * msg.payload.numberStageResults), position, cb);
revision = 6;
break;
case 7:
position = {
value: 506
};
status =
processKey(msg, buffer, "compensatedAngle", 56, 2, position, cb) &&
processParser(msg, buffer, "compensatedAngle", "number", 7, position, cb) &&
processKey(msg, buffer, "finalAngleDecimal", 57, 2, position, cb) &&
processParser(msg, buffer, "finalAngleDecimal", "number", 7, position, cb);
if (status) {
msg.payload.compensatedAngle = (msg.payload.compensatedAngle / 100);
msg.payload.finalAngleDecimal = (msg.payload.finalAngleDecimal / 100);
revision = 6;
}
break;
}
switch (revision) {
case 999:
position = {
value: 0
};
status =
processParser(msg, buffer, "numberVIN", "rawString", 25, position, cb) &&
processParser(msg, buffer, "jobID", "number", 2, position, cb) &&
processParser(msg, buffer, "parameterSetID", "number", 3, position, cb) &&
processParser(msg, buffer, "batchSize", "number", 4, position, cb) &&
processParser(msg, buffer, "batchCounter", "number", 4, position, cb) &&
processParser(msg, buffer, "batchStatus", "number", 1, position, cb) &&
processParser(msg, buffer, "tighteningStatus", "number", 1, position, cb) &&
processParser(msg, buffer, "torqueStatus", "number", 1, position, cb) &&
processParser(msg, buffer, "angleStatus", "number", 1, position, cb) &&
processParser(msg, buffer, "torque", "number", 6, position, cb) &&
processParser(msg, buffer, "angle", "number", 5, position, cb) &&
processParser(msg, buffer, "timeStamp", "string", 19, position, cb) &&
processParser(msg, buffer, "timeLastChange", "string", 19, position, cb) &&
processParser(msg, buffer, "tighteningID", "number", 10, position, cb);
if (status) {
msg.payload._torqueStatus = msg.payload.torqueStatus;
msg.payload.torqueStatus = constantsMID["status"][msg.payload.torqueStatus.toString()];
msg.payload._angleStatus = msg.payload.angleStatus;
msg.payload.angleStatus = constantsMID["status"][msg.payload.angleStatus.toString()];
msg.payload.torque = (msg.payload.torque / 100);
msg.payload._tighteningStatus = msg.payload.tighteningStatus;
msg.payload.tighteningStatus = checkOK(msg.payload.tighteningStatus);
msg.payload._batchStatus = msg.payload.batchStatus;
msg.payload.batchStatus = checkOK(msg.payload.batchStatus);
cb(null, msg);
}
break;
case 6:
position = {
value: 486
};
status =
processKey(msg, buffer, "prevailTorqueCompensateValue", 54, 2, position, cb) &&
processParser(msg, buffer, "prevailTorqueCompensateValue", "number", 6, position, cb) &&
processKey(msg, buffer, "tighteningErrorStatus2", 55, 2, position, cb) &&
processParser(msg, buffer, "tighteningErrorStatus2", "number", 10, position, cb);
if (status) {
msg.payload._tighteningErrorStatus2 = msg.payload.tighteningErrorStatus2;
msg.payload.tighteningErrorStatus2 = checkBitMap("tighteningErrorStatus2", msg.payload.tighteningErrorStatus2, 32);
msg.payload.prevailTorqueCompensateValue = (msg.payload.prevailTorqueCompensateValue / 100);
}
case 5:
position = {
value: 480
};
status =
processKey(msg, buffer, "customerToghteningErrorCode", 53, 2, position, cb) &&
processParser(msg, buffer, "customerToghteningErrorCode", "string", 4, position, cb);
case 4:
position = {
value: 399
};
status =
processKey(msg, buffer, "identifierPart2", 50, 2, position, cb) &&
processParser(msg, buffer, "identifierPart2", "string", 25, position, cb) &&
processKey(msg, buffer, "identifierPart3", 51, 2, position, cb) &&
processParser(msg, buffer, "identifierPart3", "string", 25, position, cb) &&
processKey(msg, buffer, "identifierPart4", 52, 2, position, cb) &&
processParser(msg, buffer, "identifierPart4", "string", 25, position, cb);
case 3:
position = {
value: 365
};
status =
processKey(msg, buffer, "parameterSetName", 47, 2, position, cb) &&
processParser(msg, buffer, "parameterSetName", "string", 25, position, cb) &&
processKey(msg, buffer, "torqueValuesUnit", 48, 2, position, cb) &&
processParser(msg, buffer, "torqueValuesUnit", "number", 1, position, cb) &&
processKey(msg, buffer, "resultType", 49, 2, position, cb) &&
processParser(msg, buffer, "resultType", "number", 2, position, cb);
if (status) {
msg.payload._torqueValuesUnit = msg.payload.torqueValuesUnit;
msg.payload.torqueValuesUnit = constantsMID["torqueValuesUnit"][msg.payload.torqueValuesUnit.toString()];
msg.payload._resultType = msg.payload.resultType;
msg.payload.resultType = constantsMID["resultType"][msg.payload.resultType.toString()];
}
case 2:
position = {
value: 0
};
status =
processKey(msg, buffer, "cellID", 1, 2, position, cb) &&
processParser(msg, buffer, "cellID", "number", 4, position, cb) &&
processKey(msg, buffer, "channelID", 2, 2, position, cb) &&
processParser(msg, buffer, "channelID", "number", 2, position, cb) &&
processKey(msg, buffer, "torqueControllerName", 3, 2, position, cb) &&
processParser(msg, buffer, "torqueControllerName", "string", 25, position, cb) &&
processKey(msg, buffer, "numberVIN", 4, 2, position, cb) &&
processParser(msg, buffer, "numberVIN", "rawString", 25, position, cb) &&
processKey(msg, buffer, "jobID", 5, 2, position, cb) &&
processParser(msg, buffer, "jobID", "number", 4, position, cb) &&
processKey(msg, buffer, "parameterSetID", 6, 2, position, cb) &&
processParser(msg, buffer, "parameterSetID", "number", 3, position, cb) &&
processKey(msg, buffer, "strategy", 7, 2, position, cb) &&
processParser(msg, buffer, "strategy", "number", 2, position, cb) &&
processKey(msg, buffer, "strategyOptions", 8, 2, position, cb) &&
processParser(msg, buffer, "strategyOptions", "number", 5, position, cb) &&
processKey(msg, buffer, "batchSize", 9, 2, position, cb) &&
processParser(msg, buffer, "batchSize", "number", 4, position, cb) &&
processKey(msg, buffer, "batchCounter", 10, 2, position, cb) &&
processParser(msg, buffer, "batchCounter", "number", 4, position, cb) &&
processKey(msg, buffer, "tighteningStatus", 11, 2, position, cb) &&
processParser(msg, buffer, "tighteningStatus", "number", 1, position, cb) &&
processKey(msg, buffer, "batchStatus", 12, 2, position, cb) &&
processParser(msg, buffer, "batchStatus", "number", 1, position, cb) &&
processKey(msg, buffer, "torqueStatus", 13, 2, position, cb) &&
processParser(msg, buffer, "torqueStatus", "number", 1, position, cb) &&
processKey(msg, buffer, "angleStatus", 14, 2, position, cb) &&
processParser(msg, buffer, "angleStatus", "number", 1, position, cb) &&
processKey(msg, buffer, "rundownAngleStatus", 15, 2, position, cb) &&
processParser(msg, buffer, "rundownAngleStatus", "number", 1, position, cb) &&
processKey(msg, buffer, "currentMonitoringStatus", 16, 2, position, cb) &&
processParser(msg, buffer, "currentMonitoringStatus", "number", 1, position, cb) &&
processKey(msg, buffer, "selftapStatus", 17, 2, position, cb) &&
processParser(msg, buffer, "selftapStatus", "number", 1, position, cb) &&
processKey(msg, buffer, "prevailTorqueMonitoringStatus", 18, 2, position, cb) &&
processParser(msg, buffer, "prevailTorqueMonitoringStatus", "number", 1, position, cb) &&
processKey(msg, buffer, "prevailTorqueCompensateStatus", 19, 2, position, cb) &&
processParser(msg, buffer, "prevailTorqueCompensateStatus", "number", 1, position, cb) &&
processKey(msg, buffer, "tighteningErrorStatus", 20, 2, position, cb) &&
processParser(msg, buffer, "tighteningErrorStatus", "number", 10, position, cb) &&
processKey(msg, buffer, "torqueMinLimit", 21, 2, position, cb) &&
processParser(msg, buffer, "torqueMinLimit", "number", 6, position, cb) &&
processKey(msg, buffer, "torqueMaxLimit", 22, 2, position, cb) &&
processParser(msg, buffer, "torqueMaxLimit", "number", 6, position, cb) &&
processKey(msg, buffer, "torqueFinalTarget", 23, 2, position, cb) &&
processParser(msg, buffer, "torqueFinalTarget", "number", 6, position, cb) &&
processKey(msg, buffer, "torque", 24, 2, position, cb) &&
processParser(msg, buffer, "torque", "number", 6, position, cb) &&
processKey(msg, buffer, "angleMin", 25, 2, position, cb) &&
processParser(msg, buffer, "angleMin", "number", 5, position, cb) &&
processKey(msg, buffer, "angleMax", 26, 2, position, cb) &&
processParser(msg, buffer, "angleMax", "number", 5, position, cb) &&
processKey(msg, buffer, "finalAngleTarget", 27, 2, position, cb) &&
processParser(msg, buffer, "finalAngleTarget", "number", 5, position, cb) &&
processKey(msg, buffer, "angle", 28, 2, position, cb) &&
processParser(msg, buffer, "angle", "number", 5, position, cb) &&
processKey(msg, buffer, "rundownAngleMin", 29, 2, position, cb) &&
processParser(msg, buffer, "rundownAngleMin", "number", 5, position, cb) &&
processKey(msg, buffer, "rundownAngleMax", 30, 2, position, cb) &&
processParser(msg, buffer, "rundownAngleMax", "number", 5, position, cb) &&
processKey(msg, buffer, "rundownAngle", 31, 2, position, cb) &&
processParser(msg, buffer, "rundownAngle", "number", 5, position, cb) &&
processKey(msg, buffer, "currentMonitoringMin", 32, 2, position, cb) &&
processParser(msg, buffer, "currentMonitoringMin", "number", 3, position, cb) &&
processKey(msg, buffer, "currentMonitoringMax", 33, 2, position, cb) &&
processParser(msg, buffer, "currentMonitoringMax", "number", 3, position, cb) &&
processKey(msg, buffer, "currentMonitoringValue", 34, 2, position, cb) &&
processParser(msg, buffer, "currentMonitoringValue", "number", 3, position, cb) &&
processKey(msg, buffer, "selftapMin", 35, 2, position, cb) &&
processParser(msg, buffer, "selftapMin", "number", 6, position, cb) &&
processKey(msg, buffer, "selftapMax", 36, 2, position, cb) &&
processParser(msg, buffer, "selftapMax", "number", 6, position, cb) &&
processKey(msg, buffer, "selftapTorque", 37, 2, position, cb) &&
processParser(msg, buffer, "selftapTorque", "number", 6, position, cb) &&
processKey(msg, buffer, "prevailTorqueMonitoringMin", 38, 2, position, cb) &&
processParser(msg, buffer, "prevailTorqueMonitoringMin", "number", 6, position, cb) &&
processKey(msg, buffer, "prevailTorqueMonitoringMax", 39, 2, position, cb) &&
processParser(msg, buffer, "prevailTorqueMonitoringMax", "number", 6, position, cb) &&
processKey(msg, buffer, "prevailTorque", 40, 2, position, cb) &&
processParser(msg, buffer, "prevailTorque", "number", 6, position, cb) &&
processKey(msg, buffer, "tighteningID", 41, 2, position, cb) &&
processParser(msg, buffer, "tighteningID", "number", 10, position, cb) &&
processKey(msg, buffer, "jobSequenceNumber", 42, 2, position, cb) &&
processParser(msg, buffer, "jobSequenceNumber", "number", 5, position, cb) &&
processKey(msg, buffer, "syncTighteningID", 43, 2, position, cb) &&
processParser(msg, buffer, "syncTighteningID", "number", 5, position, cb) &&
processKey(msg, buffer, "toolSerialNumber", 44, 2, position, cb) &&
processParser(msg, buffer, "toolSerialNumber", "string", 14, position, cb) &&
processKey(msg, buffer, "timeStamp", 45, 2, position, cb) &&
processParser(msg, buffer, "timeStamp", "string", 19, position, cb) &&
processKey(msg, buffer, "timeLastChange", 46, 2, position, cb) &&
processParser(msg, buffer, "timeLastChange", "string", 19, position, cb);
if (status) {
msg.payload._strategy = msg.payload.strategy;
msg.payload.strategy = constantsMID["strategy"][msg.payload.strategy.toString()];
msg.payload._strategyOptions = msg.payload.strategyOptions;
msg.payload.strategyOptions = checkBitMap("strategyOptions", msg.payload.strategyOptions, 11);
msg.payload._torqueStatus = msg.payload.torqueStatus;
msg.payload.torqueStatus = constantsMID["status"][msg.payload.torqueStatus.toString()];
msg.payload._angleStatus = msg.payload.angleStatus;
msg.payload.angleStatus = constantsMID["status"][msg.payload.angleStatus.toString()];
msg.payload._rundownAngleStatus = msg.payload.rundownAngleStatus;
msg.payload.rundownAngleStatus = constantsMID["status"][msg.payload.rundownAngleStatus.toString()];
msg.payload._currentMonitoringStatus = msg.payload.currentMonitoringStatus;
msg.payload.currentMonitoringStatus = constantsMID["status"][msg.payload.currentMonitoringStatus.toString()];
msg.payload._selftapStatus = msg.payload.selftapStatus;
msg.payload.selftapStatus = constantsMID["status"][msg.payload.selftapStatus.toString()];
msg.payload._prevailTorqueMonitoringStatus = msg.payload.prevailTorqueMonitoringStatus;
msg.payload.prevailTorqueMonitoringStatus = constantsMID["status"][msg.payload.prevailTorqueMonitoringStatus.toString()];
msg.payload._prevailTorqueCompensateStatus = msg.payload.prevailTorqueCompensateStatus;
msg.payload.prevailTorqueCompensateStatus = constantsMID["status"][msg.payload.prevailTorqueCompensateStatus.toString()];
msg.payload._tighteningErrorStatus = msg.payload.tighteningErrorStatus;
msg.payload.tighteningErrorStatus = checkBitMap("tighteningErrorStatus", msg.payload.tighteningErrorStatus, 32);
msg.payload.torqueMinLimit = (msg.payload.torqueMinLimit / 100);
msg.payload.torqueMaxLimit = (msg.payload.torqueMaxLimit / 100);
msg.payload.torqueFinalTarget = (msg.payload.torqueFinalTarget / 100);
msg.payload.torque = (msg.payload.torque / 100);
msg.payload.selftapMin = (msg.payload.selftapMin / 100);
msg.payload.selftapMax = (msg.payload.selftapMax / 100);
msg.payload.selftapTorque = (msg.payload.selftapTorque / 100);
msg.payload.prevailTorqueMonitoringMin = (msg.payload.prevailTorqueMonitoringMin / 100);
msg.payload.prevailTorqueMonitoringMax = (msg.payload.prevailTorqueMonitoringMax / 100);
msg.payload.prevailTorque = (msg.payload.prevailTorque / 100);
msg.payload._tighteningStatus = msg.payload.tighteningStatus;
msg.payload.tighteningStatus = checkOK(msg.payload.tighteningStatus);
msg.payload._batchStatus = msg.payload.batchStatus;
msg.payload.batchStatus = checkOK(msg.payload.batchStatus);
cb(null, msg);
}
break;
case 1:
position = {
value: 0
};
status =
processKey(msg, buffer, "cellID", 1, 2, position, cb) &&
processParser(msg, buffer, "cellID", "number", 4, position, cb) &&
processKey(msg, buffer, "channelID", 2, 2, position, cb) &&
processParser(msg, buffer, "channelID", "number", 2, position, cb) &&
processKey(msg, buffer, "torqueControllerName", 3, 2, position, cb) &&
processParser(msg, buffer, "torqueControllerName", "string", 25, position, cb) &&
processKey(msg, buffer, "numberVIN", 4, 2, position, cb) &&
processParser(msg, buffer, "numberVIN", "rawString", 25, position, cb) &&
processKey(msg, buffer, "jobID", 5, 2, position, cb) &&
processParser(msg, buffer, "jobID", "number", 2, position, cb) &&
processKey(msg, buffer, "parameterSetID", 6, 2, position, cb) &&
processParser(msg, buffer, "parameterSetID", "number", 3, position, cb) &&
processKey(msg, buffer, "batchSize", 7, 2, position, cb) &&
processParser(msg, buffer, "batchSize", "number", 4, position, cb) &&
processKey(msg, buffer, "batchCounter", 8, 2, position, cb) &&
processParser(msg, buffer, "batchCounter", "number", 4, position, cb) &&
processKey(msg, buffer, "tighteningStatus", 9, 2, position, cb) &&
processParser(msg, buffer, "tighteningStatus", "number", 1, position, cb) &&
processKey(msg, buffer, "torqueStatus", 10, 2, position, cb) &&
processParser(msg, buffer, "torqueStatus", "number", 1, position, cb) &&
processKey(msg, buffer, "angleStatus", 11, 2, position, cb) &&
processParser(msg, buffer, "angleStatus", "number", 1, position, cb) &&
processKey(msg, buffer, "torqueMinLimit", 12, 2, position, cb) &&
processParser(msg, buffer, "torqueMinLimit", "number", 6, position, cb) &&
processKey(msg, buffer, "torqueMaxLimit", 13, 2, position, cb) &&
processParser(msg, buffer, "torqueMaxLimit", "number", 6, position, cb) &&
processKey(msg, buffer, "torqueFinalTarget", 14, 2, position, cb) &&
processParser(msg, buffer, "torqueFinalTarget", "number", 6, position, cb) &&
processKey(msg, buffer, "torque", 15, 2, position, cb) &&
processParser(msg, buffer, "torque", "number", 6, position, cb) &&
processKey(msg, buffer, "angleMin", 16, 2, position, cb) &&
processParser(msg, buffer, "angleMin", "number", 5, position, cb) &&
processKey(msg, buffer, "angleMax", 17, 2, position, cb) &&
processParser(msg, buffer, "angleMax", "number", 5, position, cb) &&
processKey(msg, buffer, "finalAngleTarget", 18, 2, position, cb) &&
processParser(msg, buffer, "finalAngleTarget", "number", 5, position, cb) &&
processKey(msg, buffer, "angle", 19, 2, position, cb) &&
processParser(msg, buffer, "angle", "number", 5, position, cb) &&
processKey(msg, buffer, "timeStamp", 20, 2, position, cb) &&
processParser(msg, buffer, "timeStamp", "string", 19, position, cb) &&
processKey(msg, buffer, "timeLastChange", 21, 2, position, cb) &&
processParser(msg, buffer, "timeLastChange", "string", 19, position, cb) &&
processKey(msg, buffer, "batchStatus", 22, 2, position, cb) &&
processParser(msg, buffer, "batchStatus", "number", 1, position, cb) &&
processKey(msg, buffer, "tighteningID", 23, 2, position, cb) &&
processParser(msg, buffer, "tighteningID", "number", 10, position, cb);
if (status) {
msg.payload._torqueStatus = msg.payload.torqueStatus;
msg.payload.torqueStatus = constantsMID["status"][msg.payload.torqueStatus.toString()];
msg.payload._angleStatus = msg.payload.angleStatus;
msg.payload.angleStatus = constantsMID["status"][msg.payload.angleStatus.toString()];
msg.payload.torqueMinLimit = (msg.payload.torqueMinLimit / 100);
msg.payload.torqueMaxLimit = (msg.payload.torqueMaxLimit / 100);
msg.payload.torqueFinalTarget = (msg.payload.torqueFinalTarget / 100);
msg.payload.torque = (msg.payload.torque / 100);
msg.payload._tighteningStatus = msg.payload.tighteningStatus;
msg.payload.tighteningStatus = checkOK(msg.payload.tighteningStatus);
msg.payload._batchStatus = msg.payload.batchStatus;
msg.payload.batchStatus = checkOK(msg.payload.batchStatus);
cb(null, msg);
}
break;
default:
cb(new Error(`[Parser MID${msg.mid}] invalid revision [${msg.revision}]`));
break;
}
}
function serializer(msg, opts, cb) {
let buf;
let statusprocess = false;
let position = {
value: 0
};
msg.revision = msg.revision || 1;
let revision = msg.revision;
switch (revision) {
case 7:
buf = Buffer.alloc(524);
position.value = 524;
msg.payload.finalAngleDecimal = Math.trunc((msg.payload.finalAngleDecimal * 100));
msg.payload.compensatedAngle = Math.trunc((msg.payload.compensatedAngle * 100));
statusprocess =
serializerField(msg, buf, "finalAngleDecimal", "number", 7, position, cb) &&
serializerKey(msg, buf, 57, 2, position, cb) &&
serializerField(msg, buf, "compensatedAngle", "number", 7, position, cb) &&
serializerKey(msg, buf, 56, 2, position, cb);
revision = 6;
break;
case 998:
buf = Buffer.alloc(527);
position.value = 527;
statusprocess =
serializerField(msg, buf, "stageResult", "string", (11 * msg.payload.numberStageResults), position, cb) &&
serializerKey(msg, buf, 58, 2, position, cb) &&
serializerField(msg, buf, "numberStageResults", "number", 2, position, cb) &&
serializerKey(msg, buf, 57, 2, position, cb) &&
serializerField(msg, buf, "numberStagesMultiStage", "number", 2, position, cb) &&
serializerKey(msg, buf, 56, 2, position, cb);
revision = 6;
break;
case 999:
buf = Buffer.alloc(101);
position.value = 101;
msg.payload.tighteningStatus = serializerStatus(msg.payload.tighteningStatus);
msg.payload.torqueStatus = serializerStatus(msg.payload.torqueStatus);
msg.payload.angleStatus = serializerStatus(msg.payload.angleStatus);
msg.payload.batchStatus = serializerStatus(msg.payload.batchStatus);
msg.payload.torque = Math.trunc((msg.payload.torque * 100));
statusprocess =
serializerField(msg, buf, "tighteningID", "number", 10, position, cb) &&
serializerField(msg, buf, "timeLastChange", "string", 19, position, cb) &&
serializerField(msg, buf, "timeStamp", "string", 19, position, cb) &&
serializerField(msg, buf, "angle", "number", 5, position, cb) &&
serializerField(msg, buf, "torque", "number", 6, position, cb) &&
serializerField(msg, buf, "angleStatus", "number", 1, position, cb) &&
serializerField(msg, buf, "torqueStatus", "number", 1, position, cb) &&
serializerField(msg, buf, "tighteningStatus", "number", 1, position, cb) &&
serializerField(msg, buf, "batchStatus", "number", 1, position, cb) &&
serializerField(msg, buf, "batchCounter", "number", 4, position, cb) &&
serializerField(msg, buf, "batchSize", "number", 4, position, cb) &&
serializerField(msg, buf, "parameterSetID", "number", 3, position, cb) &&
serializerField(msg, buf, "jobID", "number", 2, position, cb) &&
serializerField(msg, buf, "numberVIN", "rawString", 25, position, cb);
if (!statusprocess) {
return;
}
msg.payload = buf;
cb(null, msg);
break;
}
switch (revision) {
case 999:
break;
case 6:
if (buf === undefined) {
buf = Buffer.alloc(506);
position.value = 506;
statusprocess = true;
}
if (!statusprocess) {
return;
}
msg.payload.tighteningErrorStatus2 = serializerBitMap(msg.payload.tighteningErrorStatus2, 32);
msg.payload.prevailTorqueCompensateValue = Math.trunc(msg.payload.prevailTorqueCompensateValue * 100);
statusprocess =
serializerField(msg, buf, "tighteningErrorStatus2", "number", 10, position, cb) &&
serializerKey(msg, buf, 55, 2, position, cb) &&
serializerField(msg, buf, "prevailTorqueCompensateValue", "number", 6, position, cb) &&
serializerKey(msg, buf, 54, 2, position, cb);
case 5:
if (buf === undefined) {
buf = Buffer.alloc(486);
position.value = 486;
statusprocess = true;
}
if (!statusprocess) {
return;
}
statusprocess =
serializerField(msg, buf, "customerToghteningErrorCode", "string", 4, position, cb) &&
serializerKey(msg, buf, 53, 2, position, cb);
case 4:
if (buf === undefined) {
buf = Buffer.alloc(480);
position.value = 480;
statusprocess = true;
}
if (!statusprocess) {
return;
}
statusprocess =
serializerField(msg, buf, "identifierPart4", "string", 25, position, cb) &&
serializerKey(msg, buf, 52, 2, position, cb) &&
serializerField(msg, buf, "identifierPart3", "string", 25, position, cb) &&
serializerKey(msg, buf, 51, 2, position, cb) &&
serializerField(msg, buf, "identifierPart2", "string", 25, position, cb) &&
serializerKey(msg, buf, 50, 2, position, cb);
case 3:
if (buf === undefined) {
buf = Buffer.alloc(399);
position.value = 399;
statusprocess = true;
}
if (!statusprocess) {
return;
}
msg.payload.torqueValuesUnit = serializerOptions("serializer-torqueValuesUnit", msg.payload.torqueValuesUnit);
msg.payload.resultType = serializerOptions("serializer-resultType", msg.payload.resultType);
statusprocess =
serializerField(msg, buf, "resultType", "number", 2, position, cb) &&
serializerKey(msg, buf, 49, 2, position, cb) &&
serializerField(msg, buf, "torqueValuesUnit", "number", 1, position, cb) &&
serializerKey(msg, buf, 48, 2, position, cb) &&
serializerField(msg, buf, "parameterSetName", "string", 25, position, cb) &&
serializerKey(msg, buf, 47, 2, position, cb);
case 2:
if (buf === undefined) {
buf = Buffer.alloc(365);
position.value = 365;
statusprocess = true;
}
if (!statusprocess) {
return;
}
msg.payload.prevailTorque = Math.trunc(msg.payload.prevailTorque * 100);
msg.payload.prevailTorqueMonitoringMax = Math.trunc(msg.payload.prevailTorqueMonitoringMax * 100);
msg.payload.prevailTorqueMonitoringMin = Math.trunc(msg.payload.prevailTorqueMonitoringMin * 100);
msg.payload.selftapTorque = Math.trunc(msg.payload.selftapTorque * 100);
msg.payload.selftapMax = Math.trunc(msg.payload.selftapMax * 100);
msg.payload.selftapMin = Math.trunc(msg.payload.selftapMin * 100);
msg.payload.torque = Math.trunc(msg.payload.torque * 100);
msg.payload.torqueFinalTarget = Math.trunc(msg.payload.torqueFinalTarget * 100);
msg.payload.torqueMaxLimit = Math.trunc(msg.payload.torqueMaxLimit * 100);
msg.payload.torqueMinLimit = Math.trunc(msg.payload.torqueMinLimit * 100);
msg.payload.tighteningErrorStatus = serializerBitMap(msg.payload.tighteningErrorStatus, 32);
msg.payload.strategyOptions = serializerBitMap(msg.payload.strategyOptions, 10);
msg.payload.prevailTorqueCompensateStatus = serializerStatus(msg.payload.prevailTorqueCompensateStatus);
msg.payload.prevailTorqueMonitoringStatus = serializerStatus(msg.payload.prevailTorqueMonitoringStatus);
msg.payload.selftapStatus = serializerStatus(msg.payload.selftapStatus);
msg.payload.currentMonitoringStatus = serializerStatus(msg.payload.currentMonitoringStatus);
msg.payload.rundownAngleStatus = serializerStatus(msg.payload.rundownAngleStatus);
msg.payload.angleStatus = serializerStatus(msg.payload.angleStatus);
msg.payload.torqueStatus = serializerStatus(msg.payload.torqueStatus);
msg.payload.batchStatus = serializerStatus(msg.payload.batchStatus);
msg.payload.tighteningStatus = serializerStatus(msg.payload.tighteningStatus);
msg.payload.strategy = serializerOptions("serializer-strategy", msg.payload.strategy);
statusprocess =
serializerField(msg, buf, "timeLastChange", "string", 19, position, cb) &&
serializerKey(msg, buf, 46, 2, position, cb) &&
serializerField(msg, buf, "timeStamp", "string", 19, position, cb) &&
serializerKey(msg, buf, 45, 2, position, cb) &&
serializerField(msg, buf, "toolSerialNumber", "string", 14, position, cb) &&
serializerKey(msg, buf, 44, 2, position, cb) &&
serializerField(msg, buf, "syncTighteningID", "number", 5, position, cb) &&
serializerKey(msg, buf, 43, 2, position, cb) &&
serializerField(msg, buf, "jobSequenceNumber", "number", 5, position, cb) &&
serializerKey(msg, buf, 42, 2, position, cb) &&
serializerField(msg, buf, "tighteningID", "number", 10, position, cb) &&
serializerKey(msg, buf, 41, 2, position, cb) &&
serializerField(msg, buf, "prevailTorque", "number", 6, position, cb) &&
serializerKey(msg, buf, 40, 2, position, cb) &&
serializerField(msg, buf, "prevailTorqueMonitoringMax", "number", 6, position, cb) &&
serializerKey(msg, buf, 39, 2, position, cb) &&
serializerField(msg, buf, "prevailTorqueMonitoringMin", "number", 6, position, cb) &&
serializerKey(msg, buf, 38, 2, position, cb) &&
serializerField(msg, buf, "selftapTorque", "number", 6, position, cb) &&
serializerKey(msg, buf, 37, 2, position, cb) &&
serializerField(msg, buf, "selftapMax", "number", 6, position, cb) &&
serializerKey(msg, buf, 36, 2, position, cb) &&
serializerField(msg, buf, "selftapMin", "number", 6, position, cb) &&
serializerKey(msg, buf, 35, 2, position, cb) &&
serializerField(msg, buf, "currentMonitoringValue", "number", 3, position, cb) &&
serializerKey(msg, buf, 34, 2, position, cb) &&
serializerField(msg, buf, "currentMonitoringMax", "number", 3, position, cb) &&
serializerKey(msg, buf, 33, 2, position, cb) &&
serializerField(msg, buf, "currentMonitoringMin", "number", 3, position, cb) &&
serializerKey(msg, buf, 32, 2, position, cb) &&
serializerField(msg, buf, "rundownAngle", "number", 5, position, cb) &&
serializerKey(msg, buf, 31, 2, position, cb) &&
serializerField(msg, buf, "rundownAngleMax", "number", 5, position, cb) &&
serializerKey(msg, buf, 30, 2, position, cb) &&
serializerField(msg, buf, "rundownAngleMin", "number", 5, position, cb) &&
serializerKey(msg, buf, 29, 2, position, cb) &&
serializerField(msg, buf, "angle", "number", 5, position, cb) &&
serializerKey(msg, buf, 28, 2, position, cb) &&
serializerField(msg, buf, "finalAngleTarget", "number", 5, position, cb) &&
serializerKey(msg, buf, 27, 2, position, cb) &&
serializerField(msg, buf, "angleMax", "number", 5, position, cb) &&
serializerKey(msg, buf, 26, 2, position, cb) &&
serializerField(msg, buf, "angleMin", "number", 5, position, cb) &&
serializerKey(msg, buf, 25, 2, position, cb) &&
serializerField(msg, buf, "torque", "number", 6, position, cb) &&
serializerKey(msg, buf, 24, 2, position, cb) &&
serializerField(msg, buf, "torqueFinalTarget", "number", 6, position, cb) &&
serializerKey(msg, buf, 23, 2, position, cb) &&
serializerField(msg, buf, "torqueMaxLimit", "number", 6, position, cb) &&
serializerKey(msg, buf, 22, 2, position, cb) &&
serializerField(msg, buf, "torqueMinLimit", "number", 6, position, cb) &&
serializerKey(msg, buf, 21, 2, position, cb) &&
serializerField(msg, buf, "tighteningErrorStatus", "number", 10, position, cb) &&
serializerKey(msg, buf, 20, 2, position, cb) &&
serializerField(msg, buf, "prevailTorqueCompensateStatus", "number", 1, position, cb) &&
serializerKey(msg, buf, 19, 2, position, cb) &&
serializerField(msg, buf, "prevailTorqueMonitoringStatus", "number", 1, position, cb) &&
serializerKey(msg, buf, 18, 2, position, cb) &&
serializerField(msg, buf, "selftapStatus", "number", 1, position, cb) &&
serializerKey(msg, buf, 17, 2, position, cb) &&
serializerField(msg, buf, "currentMonitoringStatus", "number", 1, position, cb) &&
serializerKey(msg, buf, 16, 2, position, cb) &&
serializerField(msg, buf, "rundownAngleStatus", "number", 1, position, cb) &&
serializerKey(msg, buf, 15, 2, position, cb) &&
serializerField(msg, buf, "angleStatus", "number", 1, position, cb) &&
serializerKey(msg, buf, 14, 2, position, cb) &&
serializerField(msg, buf, "torqueStatus", "number", 1, position, cb) &&
serializerKey(msg, buf, 13, 2, position, cb) &&
serializerField(msg, buf, "batchStatus", "number", 1, position, cb) &&
serializerKey(msg, buf, 12, 2, position, cb) &&
serializerField(msg, buf, "tighteningStatus", "number", 1, position, cb) &&
serializerKey(msg, buf, 11, 2, position, cb) &&
serializerField(msg, buf, "batchCounter", "number", 4, position, cb) &&
serializerKey(msg, buf, 10, 2, position, cb) &&
serializerField(msg, buf, "batchSize", "number", 4, position, cb) &&
serializerKey(msg, buf, 9, 2, position, cb) &&
serializerField(msg, buf, "strategyOptions", "number", 5, position, cb) &&
serializerKey(msg, buf, 8, 2, position, cb) &&
serializerField(msg, buf, "strategy", "number", 2, position, cb) &&
serializerKey(msg, buf, 7, 2, position, cb) &&
serializerField(msg, buf, "parameterSetID", "number", 3, position, cb) &&
serializerKey(msg, buf, 6, 2, position, cb) &&
serializerField(msg, buf, "jobID", "number", 4, position, cb) &&
serializerKey(msg, buf, 5, 2, position, cb) &&
serializerField(msg, buf, "numberVIN", "rawString", 25, position, cb) &&
serializerKey(msg, buf, 4, 2, position, cb) &&
serializerField(msg, buf, "torqueControllerName", "string", 25, position, cb) &&
serializerKey(msg, buf, 3, 2, position, cb) &&
serializerField(msg, buf, "channelID", "number", 2, position, cb) &&
serializerKey(msg, buf, 2, 2, position, cb) &&
serializerField(msg, buf, "cellID", "number", 4, position, cb) &&
serializerKey(msg, buf, 1, 2, position, cb);
if (!statusprocess) {
return;
}
msg.payload = buf;
cb(null, msg);
break;
case 1:
buf = Buffer.alloc(211);
position.value = 211;
msg.payload.angleStatus = serializerStatus(msg.payload.angleStatus);
msg.payload.torqueStatus = serializerStatus(msg.payload.torqueStatus);
msg.payload.batchStatus = serializerStatus(msg.payload.batchStatus);
msg.payload.tighteningStatus = serializerStatus(msg.payload.tighteningStatus);
msg.payload.torque = Math.trunc(msg.payload.torque * 100);
msg.payload.torqueFinalTarget = Math.trunc(msg.payload.torqueFinalTarget * 100);
msg.payload.torqueMaxLimit = Math.trunc(msg.payload.torqueMaxLimit * 100);
msg.payload.torqueMinLimit = Math.trunc(msg.payload.torqueMinLimit * 100);
statusprocess =
serializerField(msg, buf, "tighteningID", "number", 10, position, cb) &&
serializerKey(msg, buf, 23, 2, position, cb) &&
serializerField(msg, buf, "batchStatus", "number", 1, position, cb) &&
serializerKey(msg, buf, 22, 2, position, cb) &&
serializerField(msg, buf, "timeLastChange", "string", 19, position, cb) &&
serializerKey(msg, buf, 21, 2, position, cb) &&
serializerField(msg, buf, "timeStamp", "string", 19, position, cb) &&
serializerKey(msg, buf, 20, 2, position, cb) &&
serializerField(msg, buf, "angle", "number", 5, position, cb) &&
serializerKey(msg, buf, 19, 2, position, cb) &&
serializerField(msg, buf, "finalAngleTarget", "number", 5, position, cb) &&
serializerKey(msg, buf, 18, 2, position, cb) &&
serializerField(msg, buf, "angleMax", "number", 5, position, cb) &&
serializerKey(msg, buf, 17, 2, position, cb) &&
serializerField(msg, buf, "angleMin", "number", 5, position, cb) &&
serializerKey(msg, buf, 16, 2, position, cb) &&
serializerField(msg, buf, "torque", "number", 6, position, cb) &&
serializerKey(msg, buf, 15, 2, position, cb) &&
serializerField(msg, buf, "torqueFinalTarget", "number", 6, position, cb) &&
serializerKey(msg, buf, 14, 2, position, cb) &&
serializerField(msg, buf, "torqueMaxLimit", "number", 6, position, cb) &&
serializerKey(msg, buf, 13, 2, position, cb) &&
serializerField(msg, buf, "torqueMinLimit", "number", 6, position, cb) &&
serializerKey(msg, buf, 12, 2, position, cb) &&
serializerField(msg, buf, "angleStatus", "number", 1, position, cb) &&
serializerKey(msg, buf, 11, 2, position, cb) &&
serializerField(msg, buf, "torqueStatus", "number", 1, position, cb) &&
serializerKey(msg, buf, 10, 2, position, cb) &&
serializerField(msg, buf, "tighteningStatus", "number", 1, position, cb) &&
serializerKey(msg, buf, 9, 2, position, cb) &&
serializerField(msg, buf, "batchCounter", "number", 4, position, cb) &&
serializerKey(msg, buf, 8, 2, position, cb) &&
serializerField(msg, buf, "batchSize", "number", 4, position, cb) &&
serializerKey(msg, buf, 7, 2, position, cb) &&
serializerField(msg, buf, "parameterSetID", "number", 3, position, cb) &&
serializerKey(msg, buf, 6, 2, position, cb) &&
serializerField(msg, buf, "jobID", "number", 2, position, cb) &&
serializerKey(msg, buf, 5, 2, position, cb) &&
serializerField(msg, buf, "numberVIN", "rawString", 25, position, cb) &&
serializerKey(msg, buf, 4, 2, position, cb) &&
serializerField(msg, buf, "torqueControllerName", "string", 25, position, cb) &&
serializerKey(msg, buf, 3, 2, position, cb) &&
serializerField(msg, buf, "channelID", "number", 2, position, cb) &&
serializerKey(msg, buf, 2, 2, position, cb) &&
serializerField(msg, buf, "cellID", "number", 4, position, cb) &&
serializerKey(msg, buf, 1, 2, position, cb);
if (!statusprocess) {
return;
}
msg.payload = buf;
cb(null, msg);
break;
default:
cb(new Error(`[Serializer MID${msg.mid}] invalid revision [${msg.revision}]`));
break;
}
}
function checkBitMap(type, number, length) {
let retorno = new Array(length);
for (let i = 0; i < length; i++) {
if (((1 << i) & number) > 0) {
retorno[i] = constantsMID[type][i];
} else {
retorno[i] = undefined;
}
}
return retorno;
}
function checkOK(value) {
switch (value) {
case 0:
return "NOK";
case 1:
return "OK";
default:
return "NOT USED";
}
}
function serializerStatus(value) {
if(typeof value !== "string"){
return value;
}
value = value.toUpperCase();
if ("OK" === value) {
return 1;
}
if ("LOW" === value || "NOK" === value) {
return 0;
}
if ("HIGH" === value || "NOT USED" === value) {
return 2;
}
return value;
}
function serializerBitMap(data, length){
let retorno = 0;