UNPKG

prisme-flow

Version:

prisme platform flow engine

136 lines (124 loc) 4.2 kB
/** * Created by prisme.io on 09/06/2017. */ 'use strict' /** * Basic functions to build ISA mappings. * @module ISABasics */ module.exports = { /** * Gives the bits from quantity of reading modbus 16Bit chunks. * @function * @param {Number} quantity - amount (1, 2, 4) of reading 16Bit chunks * @returns {Number} bitValue - how many Bits are to use (16, 32, 64) */ get_bits_from_quantity: function (quantity) { var bitValue = 0 var quantityNumber = Number(quantity) switch (quantityNumber) { case 4: bitValue = 64 break case 2: bitValue = 32 break case 1: bitValue = 16 break default: break } return bitValue }, /** * Reconnect the bits of reading modbus 16Bit chunks. * @function * @param {Number} bits - how many Bits to read - @see {@link get_bits_from_quantity} * @param {Number} start - where to start reading from register * @param {Array} register - array with minimum one value * @returns {number} value - value of reading bits (16, 32, 64) from start of register */ reconnect_values: function (bits, start, register) { var value = 0 var startNumber = Number(start) var bitsNumber = Number(bits) if (register.length < 1) { throwOptionsError('register should be an array with minimum one value') } switch (bitsNumber) { case 64: if (register.length > startNumber + 3) { value = register[startNumber + 3] << 48 | register[startNumber + 2] << 32 | register[startNumber + 1] << 16 | register[startNumber] } break case 32: if (register.length > startNumber + 1) { value = register[startNumber + 1] << 16 | register[startNumber] } break case 16: if (register.length > startNumber) { value = register[startNumber] } break default: break } return value }, /** * Generates a new machine mapping template for machine to MOM mapping. * @function * @param machineConfig * @param node * @returns {{mappingType: string, machine: (*|defaults.machine|{value, required}), interface: (*|exports.closureTags.interface|{canHaveName, mustNotHaveValue}|defaults.interface|{value, required}|exports.baseTags.interface), name, topic, mappings: (*|defaults.mappings|{value}|set|Array)}} */ newMachineMapping: function (machineConfig, node) { return { 'mappingType': 'm2mom-mapping', 'machine': machineConfig.machine, 'protocolName': machineConfig.protocolName, 'name': node.name, 'topic': node.topic, 'mappings': node.mappings } }, /** * Generates a writing template for machine mapping data from machine to MOM. * @function * @param machineConfig * @param node * @param namedValues * @returns {{mappingType: string, machine: (*|defaults.machine|{value, required}), interface: (*|exports.closureTags.interface|{canHaveName, mustNotHaveValue}|defaults.interface|{value, required}|exports.baseTags.interface), name, topic, mappings: *, payload: string}} */ writeMachineMapping: function (machineConfig, node, namedValues) { return { 'mappingType': 'm2mom-write', 'machine': machineConfig.machine, 'protocolName': machineConfig.protocolName, 'name': node.name, 'topic': node.topic, 'mappings': namedValues, 'payload': namedValues.length + ' values to write' } }, /** * Generates a template to set a value for a OPC UA node by its node-id. * @function * @param mapping * @param machineValue * @param bits * @returns {{nodeId: (string|string|*), value: *, bits: *, datatype: (string|string|*|string|string), mapping: *, payload: string}} */ mapMachineValue: function (mapping, machineValue, bits) { return { 'nodeId': mapping.valueName, 'value': machineValue, 'bits': bits, 'datatype': mapping.valueType, 'mapping': mapping, 'payload': mapping.valueName + ' write value ' + machineValue } } }