Introduction
NUM Flexium Control Driver is part of the HumanOS® Runtime. It allows to integrate NUM Controls into the smart industrial machining platform.
This document explicitly describes the NUM driver. For common description on HumanOS® Runtime, Software Design and device information files, see the "Operation Manual".
NUM Control Driver
The NUM Flexium Control Driver is a ubiquitous hardware abstraction (UHAL) plugin of HumanOS® Runtime. It allows to integrate NUM Controls into the world of Smart Industrial Machining. The plugin is an event-based plugin for high performance.
This manual helps system engineers to configure and maintain the NUM Flexium Control Driver and HumanOS® Runtime setups.
NUM Gateway
The NUM Flexium Control Driver uses the NUM FX Server and optional the Flexium Gateway.
The driver uses the Gateway-Gateway (GW-GW) connection.
Contact NUM AG to get the latest version of mentioned packages. These components are included in the NUM HMI package, as well as the Toolkit (license needed). For easy setup just install the HMI package and check following settings when installing:
Click yes if the Gateway isn't installed yet:
After installation, the FXServer needs to be connected to the NUM Control. The FXserver can be found here if installed with standard settings: C:\Program Files\NUM\Flexium HMI\FXServer\Bin
- Click on the Symbol in the windows task list:
Image | Description |
---|---|
FXServer has no connection | |
FXServer connected to target (careful, if connection gets interrupted symbol doesn't refresh) |
Make sure the firewall accepts the outgoing port 1217!
- Scan the devices, set your NUM control active, check "Connect by Name" and click "connect".
- Input the address of the gateway in the device information file (address tag). If running HumanOS® directly on the NUM IPC, use "localhost:FxServer" as connection address.
NUM Device Configuration
The NUM Flexium Control Driver needs the FXServer to establish a connection to the NUM Control IPC.
Several connections can be managed by the FXServer, but only one connection can be active. This limits the cardinality of connecting NUM devices to HumanOS® IoT platform:
ONE HumanOS® IoT Gateway instance can access only ONE NUM Device.
If the HumanOS® IoT Gateway is registered as a service in the system context, the FX server cannot be started via gateway.
You can run the service in the user context or make sure the FX Server is started in some other way.
Device Information File
The NUM Device information file contains
- Data Access Points
- Alarm Source
Detailed reference for device information files, see the HumanOS® Operational Manual chapter "Device Information File".
Connection Address
The Addresses for NUM Controls are their serial numbers.
You can find the serial number in Flexium HMI under "Diag; NCCfg".
CAUTION: The Address in HumanOS® must be written without a point.
Example: "295754.00" must be "29575400"
Example:
{
"Id": "13E03A96-717E-4672-989C-7BFAF8476B0A",
"Name": "Device",
"DriverId": "EFFD2B2F-89B0-4D38-BAC5-E6BFC3EA7498",
"Address": "29575400",
...
}
Driver Configuration
The driver configuration file is named "settings.json" located in: $(InstallDirectory)\Config\HumanOS.UHAL.NumControl.Flexium\
that contains all settings of the NUM control driver.
NumRoto Configuration
The element "NumRoto" contains all settings that belong to NumRoto. Currently only the data point MachineActivity can be specified here.
Machine Activity Configuration
The MachineActivity element contains the following settings:
Attribute | Description | Data Type |
---|---|---|
EParameterRegistryKey | Registry Key of Machine Activity EParameter | System.String |
EParameterRegistryPath | Registry Path of Machine Activity EParameter | System.String |
Configuration Example
Following Example shows a NUM Control Driver Configuration:
{
"Disabled": false,
"NumRoto": {
"MachineActivity": {
"EParameterRegistryKey": "EparamMachineActivity",
"EParameterRegistryPath": "HKEY_CURRENT_USER\\SOFTWARE\\NUMROTO\\NUMROTOplus"
}
},
"Devices": [
{
"MainTaskProcessor": {
"Name": "MainTaskProcessor",
"ProcessingPriority": "Normal",
"MaxSchedulingTimeSlice": 200,
"MinSchedulingTimeSlice": 10
}
}
]
}
Device Commands
NUM Flexium Control Driver offers several commands to control and manage the CNC devices.
These commands can cause unwanted behavior on the CNC machine. The target device is overwritten when sending these commands! Caution when doing so.
Overview
Command | Description |
---|---|
Cnc{c}.Nc{n}.activateProgram | Activates a program for an independent axis channel |
Cnc{c}.Common.activateProgram | Activates a program for common axis channels |
Cnc{c}.Common.resetCnc | Resets the Cnc for common axis channels |
Cnc{c}.Nc{n}.startCnc | Starts the Cnc for an independent axis channel |
Cnc{c}.Nc{n}.resetCnc | Resets the Cnc for an independent axis channel |
Cnc{c}.Common.startCnc | Starts the Cnc for common axis channels |
Cnc{c}.Nc{n}.stopCnc | Stops the Cnc for an independent axis channel |
Cnc{c}.Common.stopCnc | Stops the Cnc for common axis channels |
Cnc{c}.Nc{n}.writeCncMode | Writes the Cnc mode for an independent axis channel |
Cnc{c}.Common.writeCncMode | Writes the Cnc mode for common axis channels |
Cnc{c}.Cnc.writeParameter | Writes an Parameter (E Parameter, ...) |
ActivateProgram
Activates a program. There are two possibilities to activate a program:
- Activate a Program for an independent axis channel, then the NC channel is required.
- Activate a Program for common axis channels.
You must choose the option with the command address.
Argument | Description | Data Type |
---|---|---|
ProgramName | Program name to activate. Example: NUM File %123.0 equals program name "123.0". | System.String |
Example:
{
"Id": "<generate your own id>",
"Name": "Activate Program",
"Type": "CommandNode",
"Address": "Cnc0.Common.activateProgram",
"Arguments": [
{
"Name": "ProgramName",
"DataType": "System.String",
"Type": "Input"
}
]
}
resetCnc
Resets the Cnc. There are two possibilities to reset the Cnc:
- Reset Cnc for an independent axis channel, then the NC channel is required.
- Reset Cnc for common axis channels.
You must choose the option with the command address.
This function does not require any arguments.
Example:
{
"Id": "<generate your own id>",
"Name": "Reset Cnc ",
"Type": "CommandNode",
"Address": "Cnc0.Common.resetCnc",
"Arguments": []
}
startCnc
Starts the Cnc. There are two possibilities to start the Cnc:
- Start Cnc for an independent axis channel, then the NC channel is required.
- Start Cnc for common axis channels.
You must choose the option with the command address.
This function does not require any arguments.
Example:
{
"Id": "<generate your own id>",
"Name": "Start Cnc ",
"Type": "CommandNode",
"Address": "Cnc0.Common.startCnc",
"Arguments": []
}
stopCnc
Stops the Cnc. There are two possibilities to stop the Cnc:
- Stop Cnc for an independent axis channel, then the NC channel is required.
- Stop Cnc for common axis channels.
You must choose the option with the command address.
This function does not require any arguments.
Example:
{
"Id": "<generate your own id>",
"Name": "Stop Cnc ",
"Type": "CommandNode",
"Address": "Cnc0.Common.stopCnc",
"Arguments": []
}
writeCncMode
Writes the Cnc mode. There are two possibilities to write the Cnc mode:
- Write Cnc mode for an independent axis channel, then the NC channel is required.
- Write Cnc mode for common axis channels.
You must choose the option with the command address.
Argument | Description | Data Type |
---|---|---|
CncMode | Cnc mode to activate (See "Dynamic information" in chapter Memory Address) | System.Int32 |
Example:
{
"Id": "<generate your own id>",
"Name": "Select Cnc mode",
"Type": "CommandNode",
"Address": "Cnc0.Common.writeCncMode",
"Arguments": [
{
"Name": "CncMode",
"DataType": "System.Int32",
"Type": "Input"
}
]
}
writeParameter
Writes a Parameter.
Be careful when writing E-Parameters. These values can contain relevant machine configurations.
Argument | Description | Data Type |
---|---|---|
Address | Parameter address in Format "Yxxxxx" | System.String |
Value | Value for this parameter. Caution: Only the Flexium+ CNC Series accept floating point values. | System.Double, System.Int32 |
Example:
{
"Id": "<generaze your own id>",
"Name": "Write E Parameter",
"Type": "CommandNode",
"Address": "Cnc0.Cnc.writeParameter",
"Arguments": [
{
"Name": "Address",
"DataType": "System.String",
"Type": "Input"
},
{
"Name": "Value",
"DataType": "System.Double",
"Type": "Input"
}
]
}
Alarm and Events
To get the alarms the FxLog COM Server is used.
Addresses
The NUM Flexium Control Driver supports CNC Alarms. The Address for the alarms is following:
Address | Description | Data Type |
---|---|---|
Cnc{c}.Nc{n}.NcAlarmEvent:0 | System Alarm and operator message reader. | TAlarmEvent[] |
Alarm Messages
Messages are not acknowledged by the HumanOS® IoT Platform. Typically, this is done by the NUM system using the RESET button.
The message standard fields are
Field Name | Description | DataType |
---|---|---|
ConditionName | Contains the alarm number given by the NUM control. Is built of $(error-nr)[$(extension)] e. g. 54[0] | System.String |
Message | Message content | System.String |
SourceName | Name of the alarm or message source, e.g. Cnc0/Nc0/RTSMessage | System.String |
Active | Flag if the alarm is still pending on the NUM side | System.Boolean |
A more detailed description of Alarm Messages can be found in the operation manual, chapter [AlarmEventPools].
Additional Message Properties
Alarm messages are enriched with additional properties coming from the NUM interface:
Property Name | Description | DataType |
---|---|---|
Message:ErrorNumber | Native alarm number from NUM control | System.String |
Message:Extension | Native extension number from NUM control | System.String |
Message:ErrorType | Error type, e. g. RTSMessage | System.String |
Message:ErrorIndex | Error index, that is NcChannel for CNCMessage types or drive address for driver errors | System.String |
Message:CncBlock | Number of the cnc block (valid for CNC messages) | System.String |
Message:CncLine | Line number (valid for CNC messages, only Flexium+) | System.String |
Message:Additional | Additional error information from NUM control | System.String |
Customer specific Message Properties
Custom specific messages can be added directly at the task of the device info model. They all must start with "Message:" and are automatically passed to all messages coming from the alarm task.
Example:
"AlarmEventPool": {
"Id": "{6F9BC0F1-0CF1-4537-AFBA-D411277BCAA4}",
"Name": "AlarmEventPool",
"Tasks": [
{
"Id": "{29D076CA-2123-4156-90C2-8D72AB480985}",
"Name": "Standard Messages",
"Address": "Cnc0.Nc0.NcAlarmEvent:0",
"Properties": [
{
"Name": "Message:mqtt:Topic",
"Value": "MachineState/ActAlarms"
}
]
}
]
},
Memory Addresses
This chapter outlines all possible native addresses. These addresses must be configured within the device configuration.
Format
A native NUM address has following format:
{memory base}.{memory channel}.{memory type}.{data type}:{address}(°{axis letter})
{axis letter}
is optional and only allowed in Axis
Memory Base
The CNC control provides different bases for memory:
Memory Base | Description |
---|---|
Global | Global memory base. |
Cnc{c} | Cnc memory base. For the Num Flexium Control Driver are maximal 16 cnc's available. This number equals the configured cnc Address of the cnc control. (0...15) |
Memory Channel
The CNC control provides different channels for memory:
Memory Base | Memory Channel | Description |
---|---|---|
Global | System | Global memory base. |
Cnc{c} | Nc{n} | Nc memory base. For the Num Flexium Control Driver are maximal 8 Nc channels available. This number equals the configured nc Address of the cnc control. (0...7) |
Cnc{c} | Common | Common memory base, it means all NC channels together |
Cnc{c} | Cnc | All Cnc Data |
Cnc{c} | Plc | All Plc Data |
Memory Type
Each memory base can have one or several memory types.
Memory Base | Memory Type | Description |
---|---|---|
System | Control | Global CNC Information |
Nc{n} | Program | Program Information |
Nc{n} | Axis | Axis positions and Speeds (absolute pos, machine pos, ...) |
Nc{n} | Dynamic | Operation Mode, Feedrate, ... |
Cnc | Parameter | CNC E Parameters |
Plc | Variables | Plc Variables and E Parameters (e.g. Running state, ...) |
Data Types
Data Type | Description | System Data Type |
---|---|---|
Bool | Bit information. 0 = not set; 1 = set | System.Boolean |
Uint8 | Byte information (unsigned 8bit integer) | System.Byte |
Uint16 | Word information (unsigned 16bit integer) | System.UInt16 |
Uint32 | DWord information (unsigned 32bit integer) | System.UInt32 |
Uint64 | Long information (unsigned 64bit integer) | System.UInt64 |
Int32 | Signed integer (32bit) | System.Int32 |
Int64 | Signed integer (64bit) | System.Int64 |
Float64 | Floating point number (64bit) | System.Double |
String | String information | System.String |
Axis Letters
String Data | Int Data | Description |
---|---|---|
X | 0 | Axis name of X Axis |
Y | 1 | Axis name of Y Axis |
Z | 2 | Axis name of Z Axis |
U | 3 | Axis name of U Axis |
V | 4 | Axis name of V Axis |
W | 5 | Axis name of W Axis |
A | 6 | Axis name of A Axis |
B | 7 | Axis name of B Axis |
C | 8 | Axis name of C Axis |
Examples
Cnc0.Nc0.Program.Int32:1
address of the current program number
Global System Configuration
The global system configuration can only be read or monitored. Writing is not possible.
Address | Description | Data Type |
---|---|---|
Global.System.Control.Int32:0 | Connection status of the control (0 = Disconnected, 1 = Connected) | System.Int32 |
Global.System.Control.String:1 | Control Name | System.String |
Global.System.Control.String:2 | Control Identifier | System.String |
Global.System.Control.Int32:3 | Get the number of configured CNC axis channel | System.Int32 |
Global.System.Control.Int32:4 | Get the number of NCKs | System.Int32 |
Global.System.Control.Int32:5 | Sign of life toggle bit (in 1 Hz if connected) | System.Int32 |
Global.System.Control.Int32:6 | Get the number of PLC and NC channels | System.Int32 |
Nc Program Configuration
The Nc Program configuration can only be read or monitored. Writing is not possible.
Address | Description | Data Type |
---|---|---|
Cnc{c}.Nc{n}.Program.Int32:0 | Available G-Function ** | System.Int32 |
Cnc{c}.Nc{n}.Program.Int32:1 | Current program | System.Int32 |
Cnc{c}.Nc{n}.Program.Int32:2 | Current block number | System.Int32* |
Cnc{c}.Nc{n}.Program.Int32:3 | Program error | System.Int32* |
Cnc{c}.Nc{n}.Program.Int32:4 | Block error number | System.Int32* |
Cnc{c}.Nc{n}.Program.Int32:5 | Current tool | System.Int32* |
Cnc{c}.Nc{n}.Program.Int32:6 | Tool direction ** | System.Int32 |
Cnc{c}.Nc{n}.Program.Int32:7 | Corrector number | System.Int32* |
Cnc{c}.Nc{n}.Program.Int32:8 | Left function ** (remaining treatment) | System.Int32 |
Cnc{c}.Nc{n}.Program.Int32:9 | Current line number (only Flexium+) | System.Int32 |
Cnc{c}.Nc{n}.Program.Int32:11 | G92F (axes list) ** (only Flexium+) | System.Int32 |
Cnc{c}.Nc{n}.Program.Int32:10 | Line number in error (only Flexium+) | System.Int32 |
Cnc{c}.Nc{n}.Program.Int32:12 | Loaded tool number (only Flexium+ and FX server version minimal 4.1.0.0) | System.Int32 |
Cnc{c}.Nc{n}.Program.String:100 | Get the changing of the the part program number with their call stack | System.String |
Cnc{c}.Nc{n}.Program.String:101 | Main program name | System.String |
Cnc{c}.Nc{n}.Program.String:102 | Comment line of the current main program | System.String |
Cnc{c}.Nc{n}.Program.String:103 | File name of the current program | System.String |
Cnc{c}.Nc{n}.Program.String:104 | Current Operator Message | System.String |
- The value from control is an Int16 value. But it has been converted to an Int32 value by HumanOS®.
Available G-Function **
Bit Nr | GFunction | Bit Nr | GFunction |
---|---|---|---|
0 | G00 | 15 | G22 |
1 | G01 | 16 | G40 |
2 | G02 | 17 | G41 |
3 | G03 | 18 | G42 |
4 | G04 | 19 | G53 |
6 | G38 | 20 | G54 |
7 | G09 | 21 | G29 |
8 | G17 | 23 | G93 |
9 | G19 | 24 | G94 |
10 | G18 | 25 | G95 |
11 | G90 | 27 | G96 |
12 | G91 | 28 | G97 |
13 | G70 | 30 | G20 |
14 | G52 | 31 | G21 |
Tool Direction **
Bit Nr | Value |
---|---|
0 | G16 P+ |
1 | G16 Q+ |
2 | G16 R+ |
8 | G16 P- |
9 | G16 Q- |
10 | G16 R- |
Left Function **
Bit Nr | Value |
---|---|
0 | G78 P.. |
1 | End of external movement (FMEXT) |
2 | Decoded M function |
3 | Encoded M function |
4 | G04 |
5 | G09 |
6 | Circle execution |
7 | Linear execution |
8 | JOG |
11 | ARUS |
13 | Encoded M function without ack. (before) |
15 | T function |
G92F **
Bit Nr | Axis |
---|---|
0 | X Axis available |
1 | Y Axis available |
2 | Z Axis available |
3 | U Axis available |
4 | V Axis available |
5 | W Axis available |
6 | A Axis available |
7 | B Axis available |
8 | C Axis available |
Dynamic Information
The Dynamic configuration can only be read or monitored. Writing is not possible.
Address | Description | Data Type |
---|---|---|
Cnc{c}.Nc{n}.Dynamic.Int32:0 | Operation Mode ** | System.Int32 |
Cnc{c}.Nc{n}.Dynamic.String:0 | Operation Mode as String | System.String |
Cnc{c}.Nc{n}.Dynamic.Int32:1 | Preselected operation mode as int | System.Int32 |
Cnc{c}.Nc{n}.Dynamic.Int32:2 | Feedrate in percent | System.Int32 |
Cnc{c}.Nc{n}.Dynamic.String:1 | Preselected operation mode as string | System.String |
Cnc{c}.Nc{n}.Dynamic.Float64:3 | Interpolation feed of the NC | System.Double |
Cnc{c}.Nc{n}.Dynamic.Float64:4 | Programmed feed | System.Double |
Operation Mode **
Value | Operation Mode |
---|---|
0 | MDI |
1 | Auto |
2 | Single |
3 | Edit |
4 | Manual |
5 | Rapid |
6 | Test |
7 | Search |
8 | Home |
9 | Shifts |
11 | No Mode |
13 | Load |
Nc Axis Configuration
Reading the axis positions.
Address | Description | Data Type |
---|---|---|
Cnc{c}.Nc{n}.Axis.Float64:0 | Machine positions | System.Double[] |
Cnc{c}.Nc{n}.Axis.Float64:1 | Offset positions (absolute positions) | System.Double[] |
Cnc{c}.Nc{n}.Axis.Float64:2 | End positions | System.Double[] |
Cnc{c}.Nc{n}.Axis.Float64:3 | Delta (Distance to go) | System.Double[] |
Each of these memories can be also read by axis number:
Address | Description | Data Type |
---|---|---|
Cnc{c}.Nc{n}.Axis.Float64:0°{y} | Machine position of axis {y} | System.Double |
Cnc{c}.Nc{n}.Axis.Float64:1°{y} | Absolute position of axis {y} | System.Double |
Cnc{c}.Nc{n}.Axis.Float64:3°{y} | Distance to go of axis {y} | System.Double |
Cnc{c}.Nc{n}.Axis.Float64:2°{y} | Relative position of axis {y} | System.Double |
Spindle Data
Reads the spindle information. The spindle number {y}
is in rage 0 to 31.
Address | Description | Data Type |
---|---|---|
Cnc{c}.Nc{n}.Spindle.Uint8:0°{y} | Assigned axis group | System.Byte |
Cnc{c}.Nc{n}.Spindle.Uint8:1°{y} | Mode (Bit0=1 → M3; Bit1=1 → M5; Bit2=1 → M4; Bit3=1 → M19) | System.Byte |
Cnc{c}.Nc{n}.Spindle.Int32:2°{y} | Feedrate override in % | System.Int32 |
Cnc{c}.Nc{n}.Spindle.Float64:3°{y} | Programmed spindle speed | System.Double |
Cnc{c}.Nc{n}.Spindle.Float64:4°{y} | Real spindle speed | System.Double |
Cnc{c}.Nc{n}.Spindle.Uint8:5°{y} | Speed type (Bit0=0 → S5.0; Bit0=1 → S6.0; Bit1=1 → S3.2) | System.Byte |
Cnc{c}.Nc{n}.Spindle.Uint8:6°{y} | Spindle is valid | System.Byte |
Cnc{c}.Nc{n}.Spindle.Uint8:7°{y} | Logical index in the system | System.Byte |
Cnc{c}.Nc{n}.Spindle.Uint8:8°{y} | Physical address | System.Byte |
Plc Variables and E Parameters
For reading the plc variables, they must be allowed to read in PLC Project.
With following address, you can read a PLC variable:
Cnc{c}.Plc.Variables.{DataType}:{PLC Address}
For checking a PLC address, you can use the Flexium HMI, go to Variables and write your PLC variable:
Examples:
Cnc0.Plc.Variables.Bool:Application.IoConfig_Globals.Flexium_NCK.RCNC.General.CncError
Cnc0.Plc.Variables.Bool:Application.IoConfig_Globals.Flexium_NCK.RCNC.General.CncReady
Cnc0.Plc.Variables.Bool:Application.IoConfig_Globals.Flexium_NCK.RCNC.General.ProgramActive
Cnc0.Plc.Variables.Bool:Application.IoConfig_Globals.Flexium_NCK.RCNC.General.ProgramStop
Cnc0.Plc.Variables.Bool:Application.IoConfig_Globals.Flexium_NCK.RCNC.General.Stop
Cnc0.Plc.Variables.Bool:Application.IoConfig_Globals.Flexium_NCK.RCNC.General.Start
Cnc0.Plc.Variables.Bool:Application.IoConfig_Globals.Flexium_NCK.RCNC.General.Reset (only ca. 100ms)
E-Parameters on the PLC can vary, in general there are following parameter arrays with different data types: E10000, E30000, E33000, E36000, E37000
Cnc0.Plc.Variables.Bool:Application.IoConfig_Globals.Flexium_NCK.RCNC.E10000[1]
{
"Id": "<generate your own id>",
"Name": "Read 1 bit from E10000",
"DataType": "System.Boolean",
"DataClass": "Event",
"Address": "Cnc0.Plc.Variables.Bool:Application.IoConfig_Globals.Flexium_NCK.RCNC.General.E10000[1]",
"Access": {
"Read": true,
"Receive": true
}
}
Check the E addresses for their data type. Reading the whole array is not supported by the controller.
NumRoto Parameter MachineActivity
The data point MachineActivity is NUM Roto specific and somewhat special. In the windows registry, it must be specified which EParameter contains the values from the data point MachineActivity. This is described in the driver configuration (see chapter 3).
HumanOS.UHAL.NumControlDriver implements the MachineActivity data point at the following address:
Cnc{c}.Plc.Variables.{DataType}:MachineActivity
Example:
In the windows registry, the following setting is specified:
HKEY_CURRENT_USER\SOFTWARE\NUMROTOplus\ParamMachineActivity
contains the value 81000.
In this case, the NumControl driver will replace the address Cnc0.Plc.Variables.String:MachineActivity
based on the registry setting with Cnc0.Plc.Variables.String:E81000
.
CNC Parameters
For reading an E-Parameter, the parameter must be defined. For further information see the NUM documentation chapter "external parameters".
With following address, you can read an E-Parameter (Address range from 11000-..-..-98431; range not fully continuous):
Cnc{c}.Cnc.Parameter.{DataType}:E{xxxxx}
Ranges and read/write access depend on the used controller and the version, as well as customization through the machine supplier.
For checking an E-Parameter address, you can use the Flexium HMI, go to Variables and write your E-Parameter: