This NPM module implements the ISA95 extensions for node-opcua, to ease the creation of ISA95 OPCUA server, in the industrial world.
It follows the specification in OPCUA ISA95 Specification
- install node-opcua-isa95 module along side node-opcua
npm install node-opcua --save
npm install node-opcua-isa95 --save
- use
require("node-opcua-isa95")(opcua);
to enrich node-opcua with the ISA95 add-on
var opcua = require("node-opcua");
// add server ISA95 extension to node-opcua
require("node-opcua-isa95")(opcua);
var xmlFiles = [
opcua.standard_nodeset_file,
opcua.ISA95.nodeset_file
];
var server = new opcua.OPCUAServer({
nodeset_filename: xmlFiles,
// details left out for clarity
});
function post_initialize() {
console.log("initialized");
var addressSpace = server.engine.addressSpace;
// add your ISA95 node in the addressSpace here
server.start(function() {
console.log("Server is now listening ... ( press CTRL+C to stop)");
console.log("port ", server.endpoints[0].port);
var endpointUrl = server.endpoints[0].endpointDescriptions()[0].endpointUrl;
console.log(" the primary server endpoint url is ", endpointUrl );
});
}
server.initialize(post_initialize);
ISA95 extension is ready to use with Node-RED via node-red-contrib-iiot-opcua
ISA 95 logical Equipments can be added to the addressSpace and defined using the following API.
add a new EquipmentClassType to the addressSpace
options | type | description |
---|---|---|
options.browseName | {String/QualifiedName} | the browseName of the new node equipment |
[options.equipmentLevel] | {EquipmentLevel} | the EquipmentLevel |
var weldingRobotClassType = addressSpace.addEquipmentClassType({
browseName: "WeldingRobotClassType",
equipmentLevel: opcua.ISA95.EquipmentLevel.EquipmentModule
});
add a new EquipmentType to the addressSpace
options | type | description |
---|---|---|
options.browseName | {String/QualifiedName} | the browseName of the new node equipment |
[options.equipmentLevel] | {EquipmentLevel} | the EquipmentLevel |
[options.definedByEquipmentClass | {UAObjectType/ Array } | a collection of EquipmentClassType that define this new EquipmentType |
var multiPurposeRobotType = addressSpace.addEquipmentClassType({
browseName: "MultiPurposeRobotType",
definedByEquipmentClass: [
weldingRobotClassType,
assemblingRobotClassType,
]
});
add a new equipment to the addressSpace
options | type | description |
---|---|---|
options.browseName | {String/QualifiedName} | the browseName of the new node equipment |
[options.typeDefinition] | {String/UAObjectType} | "EquipmentType" the ISA95 type of the equipment to instantiate. if not specified, EquipmentType will be used the provided typeDefinition must be a sub type of "EquipmentType". |
[options.definedByEquipmentClass] | {UAObjectType/Array} | The class that define the EquipmentType. It must be a subtype of "EquipmentClassType" |
[options.containedByEquipment] | {UAObject} | the equipment that contains the created equipment. equipment must have a typeDefinition of type "EquipmentType" |
[options.organizedBy] | {UAObject} | a folder {FolderType} that organises the created equipment |
var weldingRobot = addressSpace.addEquipment({
browseName: "WeldingRobot",
});
var robotController = addressSpace.addEquipment({
browseName: "RobotController",
containedByEquipment: weldingRobot
});
var robotArm = addressSpace.addEquipment({
browseName: "RobotArm",
containedByEquipment: weldingRobot
});
var fanuc_robotArcMate = addressSpace.addPhysicalAssetType({
browseName: "ArcMate 100iB/6S i",
modelNumber: "ArcMate 100iB/6S i",
manufacturer: {
dataType: "String",
value: { dataType: opcua.DataType.String, value: "Fanuc Inc"}
}
});
addressSpace.addISA95Attribute({
ISA95AttributeOf: fanuc_robotArcMate,
browseName: "Weight",
description: "Robot mass in kg",
dataType:"Double",
value: { dataType: opcua.DataType.Double, value: 135 },
modellingRule: "Mandatory"
});
addressSpace.addISA95Attribute({
ISA95AttributeOf: fanuc_robotArcMate,
browseName: "Payload",
description: "Payload in kg",
dataType:"Double",
value: { dataType: opcua.DataType.Double, value: 6 },
modellingRule: "Mandatory"
});
addressSpace.addISA95Attribute({
ISA95AttributeOf: fanuc_robotArcMate,
browseName: "Repeatability",
description: "+/-",
dataType:"Double",
value: { dataType: opcua.DataType.Double, value: 0.08 },
modellingRule: "Mandatory"
});
// create the physical asset set storage folder
// where all our main assets will be listed
var namespace = addressSpace.getOwnNamespace();
var physicalAssetSet = namespace.addObject({
browseName: "PhysicalAssetSet",
typeDefinition: "FolderType",
organizedBy: addressSpace.rootFolder.objects,
});
var robot_instance = addressSpace.addPhysicalAsset({
organizedBy: physicalAssetSet,
typeDefinition: fanuc_robotArcMate,
definedByPhysicalAssetClass: "PhysicalAssetClassType",
browseName: "FANUC Arc Mate 100iB/6S i - 001",
implementationOf: robotArm,
vendorId: {
dataType: "String",
value: { dataType: opcua.DataType.String, value: "RobotWox" }
}
});
options | type | description |
---|---|---|
options.browseName | {String/QualifiedName} | the browseName of the new node equipment |
options.dataType | {String/UADataType} | the Variable DataType |
options.value | {Variant} | the Variable Value |
options.ISA95AttributeOf | {UAObject/UAObjecType} | the parent node |
[options.modellingRule] | {String} | "Mandatory" or "Optional" |
[options.typeDefinition] | {UAVariableType} |
returns a ```opcua.UAVariable````
options | type | description |
---|---|---|
options.browseName | {String/QualifiedName} | the browseName of the new node equipment |
options.dataType | {String/UADataType} | the Variable DataType |
options.value | {Variant} | the Variable Value |
options.ISA95PropertyOf | {UAObject/UAObjecType} | the parent node |
[options.modellingRule] | {String} | "Mandatory" or "Optional" |
[options.typeDefinition] | {UAVariableType} |
returns a ```opcua.UAVariable````
options | type | description |
---|---|---|
options.browseName | {String/QualifiedName} | the browseName of the new node equipment |
options.dataType | {String/UADataType} | the Variable DataType |
options.value | {Variant} | the Variable Value |
options.ISA95ClassPropertyOf | {UAObject/UAObjecType} | the parent node |
[options.modellingRule] | {String} | "Mandatory" or "Optionnal" |
[options.typeDefinition] | {UAVariableType} |
returns a ```opcua.UAVariable````
(see Table 36 – ISA95EquipmentElementLevelEnum Values )
This DataType is an enumeration that defines the equipment element levels defined in ISA-95. Its values are defined in a below table.
Value | Description |
---|---|
Enterprise | An enterprise is a collection of sites and areas and represents the top level of a role based equipment hierarchy. |
Site | A site is a physical, geographical, or logical grouping determined by the enterprise. It may contain areas, production lines, process cells, and production units. |
Area | An area is a physical, geographical, or logical grouping determined by the site. It may contain work centres such as process cells, production units, production lines, and storage zones. |
ProcessCell | Process cells are the low level of equipment typically scheduled by the Level 4 and Level 3 functions for batch manufacturing processes. |
Unit | Units are low level of equipment typically scheduled by the Level 4 and Level 3 functions for batch manufacturing processes and continuous manufacturing processes. |
ProductionLine | Production lines are low levels of equipment typically scheduled by the Level 4 or Level 3 functions for discrete manufacturing processes. |
WorkCell | Work cells are low levels of equipment typically scheduled by the Level 4 or Level 3 functions for discrete manufacturing processes. |
ProductionUnit | Production units are the lowest level of equipment typically scheduled by the Level 4 or Level functions for continuous manufacturing processes. |
StorageZone | Storage zones are low level of material movement equipment typically scheduled by the Level 4 and Level 3 functions for discrete, batch and continuous manufacturing processes. |
StorageUnit | Storage units are low level of material movement equipment typically scheduled by the Level 4 and Level 3 functions for discrete, batch and continuous manufacturing processes. |
WorkCenter | Work centres are typically the grouping of equipment scheduled by the Level 4 or Level 3 functions. |
WorkUnit | A work unit is any element of the equipment hierarchy under a work centre. Work units are the lowest form of elements in an equipment hierarchy that are typically scheduled by Level 3 functions. |
EquipmentModule | An equipment module entity is an engineered subdivision of a process cell, a unit, or another equipment module. |
ControlModule | A control module entity is an engineered subdivision of a process cell, a unit, an equipment module, or another control module. |
Other | non of the above |
MIT
Copyright 2016 - Etienne Rossignon