Sinumerik¶
Connectware device driver for Siemens Sinumerik 840Dsl and 828D CNC systems. The driver acts as client for the Sinumerik “Access MyMachine / OPC UA” machine interface.
Important
To be able to access the Sinumerik OPC UA interface the machine requires Sinumerik Operate, a Sinumerik OPC UA license and a compatible OPC UA server version. For information on the machine prerequisites, compatibility & setup please see the SINUMERIK Access MyMachine / OPC UA Configuration Manual
Some Sinumerik vocabulary
Tool number (
toolNo
): Sinumerik internal tool number which uniquely identifies each toolTool identifier (
toolIdent
): Tool name. In the tool management each tool is explicitly defined both by its identifier and its duplo number. This means that a tool area can only contain equal tool identifiers with different duplo numbers.Duplo number (
duploNo
): Number of replacement (“sister”) toolCutting edges (
numCuttEdges
): Number of cutting edges of a tool. This is not the number of blades but the number of different cut radius along the tool. Most tools have one cutting edge (eg regular drill). Also called D-Number.
Commissioning File Specifics¶
The following describes the available device specifics for a Sinumerik device. The Cybus Sinumerik OPC UA Reference file can be found in section Reference Device File
Connection Settings¶
The device connection is configured with a resource of type Cybus::Connection. Please note that the Sinumerik driver uses the Connectware OPC UA driver implementation and therefore the same settings apply here.
1 2 3 4 5 6 7 8 9 | sinumerikConnection: type: Cybus::Connection properties: protocol: Sinumerik connection: host: '127.0.0.1' port: 854 username: admin password: admin |
- protocol
Required. Must be
Sinumerik
.- connection
- host
Required.
For a detailed overview on all available OPC UA connection
settings see the
Connectware OPC UA Client driver documentation.
Connection Properties¶
options
(object)¶
Properties of the options
object:
defaultSecureTokenLifetime
(integer)¶
Lifetime of the secure token. Specified in milliseconds.
Default: 3600000
requestedSessionTimeout
(integer)¶
OPC UA sessions may survive TCP connection breaks and are only deleted if no message from a client is received within the timeout period. Specified in milliseconds.
Default: 3600000
endpointMustExist
(boolean)¶
Specifies if the connection is strictly meant for the given endpoint. If false and the endpoint doesn’t exist, a reasonable default endpoint is automatically chosen.
Default: false
messageSecurityMode
(string, enum)¶
This element must be one of the following enum values:
None
Sign
SignAndEncrypt
Default: "None"
securityPolicy
(string, enum)¶
This element must be one of the following enum values:
Aes128_Sha256_RsaOaep
Basic128
Basic128Rsa15
Basic192
Basic192Rsa15
Basic256
Basic256Rsa15
Basic256Sha256
None
PubSub_Aes128_CTR
PubSub_Aes256_CTR
Default: "None"
watchInterval
(integer)¶
For observing connection breaks, a connection watchdog runs regularly. Short intervals guarantee short notice on break but lead to higher load. Specified in milliseconds
Default: 30000
connectionStrategy
(object)¶
If a connection attempt failes, retries will be performed with growing delays in between. The following parameter control how these delays behave.
Properties of the connectionStrategy
object:
maxRetry
(integer)
Maximum number of connection retries in case of failure.
Default: 1000000000
initialDelay
(integer)
Delay of the first retry. Consecutive retries will randomly take longer delays.
Default: 1000
maxDelay
(integer)
Maximum delay of a retry.
Default: 60000
randomisationFactor
(number)
This parameter controls added randomisation to the retry attempts. Must be a number between 0 and 1. If set to 0, retries will be performed with exponentially growing delay until maxDelay. If set to 1, a maximum noise will be added to the retry delays.
Default: 0
Additional restrictions:
Maximum:
1
Endpoint settings¶
Each connection can have several endpoints. They define the operations that are supported.
You define an endpoint by adding a resource of type Cybus::Endpoint
They have two key properties:
An operation
and a Sinumerik driver method
A Sinumerik endpoint support the following modes of operation:
Read
Write
Polling subscription (subscribe operation with type poll)
Notify subscription (subscribe operation with type notify)
Polling subscription¶
The subscribe
pattern offers the possibility to subscribe to a Sinumerik
driver method and poll the specified method in a given interval.
Example mapping:
1 2 3 4 5 6 7 8 9 10 | machineInfoSubscription: type: Cybus::Endpoint properties: protocol: Sinumerik connection: !ref sinumerikConnection topic: getMachineInfo subscribe: type: poll method: getMachineInfo # Sinumerik driver method pollInterval: 5000 |
- properties
- protocol
Required. Must be
Sinumerik
- connection
Required. Must be a reference to a
Sinumerik
connection- topic
Optional. Your MQTT topic to write the data to.
- operation
Required. Must to be
subscribe
- type
Required. Must be
poll
.- method
Required. Describes the Sinumerik driver method.
- params
Optional. Array of method parameter.
- pollInterval
Optional. Polling interval in milliseconds. Default 1000ms.
Read¶
The read
operation offers the possibility to request a machine
action and receive a response. The operation follows the JSON-RPC 2.0
Specification. To make it work you only need to specify a read
operation on the desired method
and send a message on a request-topic (req
):
Example message:
{
"id": 123,
"params": [
"param a",
"param b",
"param c"
]
}
Example mapping:
1 2 3 4 5 6 7 | getMachineInfo: type: Cybus::Endpoint properties: protocol: Sinumerik connection: !ref sinumerikConnection read: method: getMachineInfo |
- endpoint properties
- protocol
Required. Must be
Sinumerik
- connection
Required. Must be a
Sinumerik
connection.- operation
Required. Must to be
read
.- method
Required. Describes the Sinumerik method.
This configuration will subscribe to getMachineInfo/req
and publish responses to getMachineInfo/res
.
MQTT payload
The MQTT request payload requires two keys:
id
: User-defined correlation ID which can be used to identify the responseparams
: Array of parameters required for the used driver method
Following the example mapping above (method: getMachineInfo
), the request
payload, send on topic getMachineInfo/req
, needs to be as following:
{ "params": [], "id": "<any-correlation-id>" }
This invokes the Sinumerik driver method getMachineInfo
and returns the
following response on topic getMachineInfo/res
:
On success: { "result": { <machine-infos> }, "id": "<request-correlation-id>" }
On error : { "error": "<error>", "id": "<request-correlation-id>" }
See the Examples section for further information.
Write¶
Endpoints configured with the write
operation works exactly as endpoints configured with the read
operation,
allowing you to execute Sinumerik methods by sending a message to a set-topic (set
).
Currently, these endpoints don’t support the return of any result.
Please refer to the Read section for more information.
Notify subscription¶
Certain Sinumerik driver methods offer events realized through the subscribe
operation with type notify
. Notifications are fired when a certain event is triggered.
Important
This feature is highly unstable and can crash the OPC UA server.
Example mapping:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | sinumerikOnNcProgramChangedSubscription: type: Cybus::Endpoint properties: protocol: Sinumerik connection: !ref sinumerikConnection subscribe: type: notify method: onNcProgramChanged mapping: type: Cybus::Mapping properties: mappings: - subscribe: endpoint: !ref sinumerikOnNcProgramChanged publish: topic: 'notify/onNcProgramChanged' |
- endpoint properties
- protocol
Required. Must be
Sinumerik
- connection
Required. Must be a
Sinumerik
connection.- operation
Required. Must to be
subscribe
.- type
Required. Must be
notify
.- method
Required.
Endpoint Properties¶
type
(string, enum)¶
The type of subscription
This element must be one of the following enum values:
notify
poll
method
(string, required)¶
The method to use
params
(array)¶
The method parameters
pollInterval
(integer)¶
The amount of time between polls
Default: 1000
Additional restrictions:
Minimum:
1000
publishInterval
(integer)¶
Optional, sets the interval in which values are sent to their appropriate publish methods.
Default: 1000
samplingInterval
(integer)¶
Integer, that sets the interval in which values are read from the server.
Default: 1000
maxNotificationsPerPublish
(integer)¶
Sets the maximum number of monitor notifications that are in a single publish message of the OPC UA subscription. Setting this to a lower value will lead to more network traffic.
Default: 100
priority
(integer)¶
Default: 10
requestedLifetimeCount
(integer)¶
Default: 30
requestedMaxKeepAliveCount
(integer)¶
Default: 10
Sinumerik Methods¶
This section describes the available Sinumerik driver methods. Each method is a
specific RPC call which requires certain parameters and provides a defined
return. The method paramter must be provides in the request payload in the
params
section. See the Examples section for further information.
Important
Each driver method requires certain access rights on the Sinumerik. The driver
automatically sets the required OPC UA access rights for the currently
connected OPC UA user. Please make sure the user is allowed to change its
access rights. See also method getMyAccessRights
.
Sinumerik NC variables are described here as:
<variable-name>
(<type>, <sinumerik-machine-data-reference>): <description>
Note
NC variable details are found in the Siemens Sinumerik NC variables documentation, see e.g. SINUMERIK 840D sl NC variables.
Machine Information¶
Some machine information
Get Machine Information¶
Provides static Sinumerik machine information.
Method:
getMachineInfo
Operation:
subscribe
orreq/res
Parameter: none
Return
nckType
(string, -): NC typenckVersion
(string, $AN_NCK_VERSION): NC versionanLanguageOnHmi
(string, $AN_LANGUAGE_ON_HMI): Current language set on HMImaskToolManagement
(string, $MC_TOOL_MANAGEMENT_MASK): Channel-specific settings for NCK tool management functionbasicLengthUnit
(string, -): Global basic unitnumCuttEdgeParams
(string, -): Number of parameters of a cutting edge in the T/TO modulenumCuttEdgeParams_ts
(string, ): Number of monitoring parameters of a cutting edge in the T/TS modulenumToolParams_tu
(string, MD 18094: MM_CC_TDA_PARAM ): Number of OEM data of a tool in the T/TU modulenumCuttEdgeParams_tu
(string, MD 18096: MM_CC_TOA_PARAM): Number of OEM data of a cutting edge in the T/TUE module.
Get Machine State¶
Provides current Sinumerik machine state.
Method:
getMachineState
Operation:
subscribe
orreq/res
Parameter: none
Return
anPoweronState
(string, $AN_POWERON_STATE): machine power on statepoweronTime
(string, $AN_POWERON_TIME): machine runtime in minuteslicenseStatus
(string, -): Licensing statusnckMode
(string, -): Mode in which the NCK workssysTimeSinceStartup
(string, -): System run time in seconds since NCK ramp-upprogStatus
(string, DB21-30, DBX35.0 - DBX35.4): Program statusprogName
(string, -): Active program nameworkPName
(string, -): Active workpiece nameaccessLevel
(string, -): Level of the access rights currently set
Get Spindle Speed¶
Get spindle speed.
Method:
getSpindleSpeed
Operation:
subscribe
orreq/res
Parameter: none
Return
actualSpeed
(string, $AA_S[x]): Spindle speed actual valuecommandSpeed
(string, -): Spindle speed desired value
Get Spindle Feed¶
Get spindle feed.
Method:
getSpindleFeed
Operation:
subscribe
orreq/res
Parameter: none
Return
actualFeed
(string, -): Current constant cutting ratecommandFeed
(string, -): Constant cutting rate of the master spindle
On NC program change¶
The method provides an event when the execution of a NC-file changes.
Method:
onNcProgramChanged
Operation:
notify
Parameter: none
Return
progStatus
(string, DB21-30, DBX35.0 - DBX35.4): NC program stateprogName
(string, -): Name of active NC-fileworkPName
(string, -): Work piece name
Tool Interaction¶
Get Tool¶
Read tool by tool number. Method returns the essential tool configuration. See also Examples.
Method:
getTool
Method signature:
object tool = getTool (string toolNo)
Operation:
subscribe
orreq/res
Parameter:
toolNo
(string): Tool number of tool to read
Return:
toolNo
(string, ): Internal tool number of the tooladaptNo
(string, -): Number of adapter defined by system parameter $TC_ADPxduploNo
(string, $TC_TP1): Duplo number (number of replacement tool)numCuttEdges
(string, $P_TOOLND): Number of cutting edges of a tooltoolIdent
(string, $TC_TP2): Tool identifiertoolInfo
(string, $TC_TP11): Definition of the sub-group to which the tool belongstoolInMag
(string, $A_TOOLMN): Current magazine in which the tool is locatedtoolInPlace
(string, $A_TOOLMLN): Current location in which the tool is locatedtoolMon
(string, $TC_TP9): Type of tool monitoringtoolplace_spec
(string, $TC_TP7): Magazine location type of tooltoolSearch
(string, $TC_TP10): Selection of the order of the replacement toolstoolMyMag
(string, $A_MYMN): Owner magazine of the tool magazine from which the tool was loadedtoolMyPlace
(string, $A_MYMLN): Owner magazine of the tool - Magazine location from which the tool was loadedtoolsize_left
(string, $TC_TP3): Tool size to the left in half locationstoolsize_right
(string, $TC_TP4): Tool size to the right in half locationstoolsize_upper
(string, $TC_TP5): Tool size upwards in half locationstoolsize_down
(string, $TC_TP6): Tool size downwards in half locationstoolOverSize
(string, $TC_TP3 … $TC_TP6): Tool size as fixed setting (two half locations left & right, one half location top & bottom) (true
,false
,special
)toolState
(string, $TC_TP8): Tool statetoolStateLocked
(string, $TC_TP8.2): Tool state - tool is locked (true
,false
)toolMaxVelo
(string, $TC_TP_MAX_VELO): Maximum speed of the tool if the value is >0. There is no monitoring if no speed limit is defined (=0).toolMaxAcc
(string, $TC_TP_MAX_ACC): Maximum angular acceleration of the tool if the value is >0. There is no monitoring if no acceleration limit is defined (=0).lifetime
(string, $TC_MOP2): Remaining service life in minutesmaxLifetime
(string, $TC_MOP5): Desired service lifetoolType
(string, $TC_DP1): Tool typelength1
(string, $TC_DP3): Tool length 1length2
(string, $TC_DP4): Tool length 2radius
(string, $TC_DP6): Tool radiuswearLength1
(string, $TC_DP12): Tool wear length 1wearLength2
(string, $TC_DP13): Tool wear length 2wearRadius
(string, $TC_DP15): Tool wear radiuscoolant1
(string, $TC_DP25.10): Coolant 1 (on
,off
)coolant2
(string, $TC_DP25.11): Coolant 2 (on
,off
)spindleDirection
(string, $TC_DP2.8 & $TC_DP2.9): Spindle direction (left
,right
,off
)teethCount
(string, $TC_DPNT): Number of teeth of a cutting edge
Get Tool Complete¶
Read tool by tool number. Method returns the complete tool configuration. See also Examples.
Method:
getToolComplete
Method signature:
object tool = getToolComplete (string toolNo)
Operation:
subscribe
orreq/res
Parameter:
toolNo
(string): Tool number of tool to read
Return: Method returns all essential tool information (see
getTool
), plustoolCompensationEdgeData
(object, $TC_DPx): Tool edge offset data. Note:objectIndex = parameterIndex - 1
toolSupervisionData
(object, TC_MOPx): Monitoring data per tool edge. Size given bynumCuttEdgeParams_ts
. Note:objectIndex = parameterIndex - 1
toolUserData
(object, $TC_TPCx): User-defined tool parameter. Size given bynumToolParams_tu
. Keys addressed astoolUser_1
…toolUser_n
.toolUserEdgeData
(object, $TC_DPCx): User-defined cutting edge parameter. Size given bynumCuttEdgeParams_tu
. Note:objectIndex = parameterIndex - 1
Get Tools¶
Read all available tools on the Sinumerik. Method returns essential tool information for each tool.
Method:
getTools
Method signature:
object tools = getTools ()
Operation:
subscribe
orreq/res
Parameter: none
Return
object of
getTool
objects. Key is the tool number.
Get Tools Complete¶
Read all available tools on the Sinumerik. Method returns complete tool information for each tool.
Method:
getToolsComplete
Method signature:
object tools = getToolsComplete ()
Operation:
subscribe
orreq/res
Parameter: none
Return
object of
getToolComplete
objects. Key is the tool number.
Create Tool¶
Create new tool on the Sinumerik and set tool configuration.
Method:
createTool
Method signature:
createTool (toolNo, fields, toolArea)
Operation:
subscribe
orreq/res
Parameter:
toolNo
(string): Tool number to be createdfields
(object): Optional, default ={}
. Tool configuration to set (see Set Tool Configuration)toolArea
(string): Optional, default =1
. Tool area in which the tool should be created.
Return
Status code
0: success
1: Tool area does not exist
2: Tool number out of range
3: Tool number exists already
4: Maximum number of tools reached)
Set Tool Configuration¶
Set or modify the configuration of a tool.
Method:
setToolFields
Method signature:
setToolFields (toolNo, fields)
Operation:
subscribe
orreq/res
Parameter:
toolNo
(string): Tool number to be createdfields
(object): Tool configuration to set
Return: status code
Tool configuration
The tool configuration (fields
) can be any of the essential tool configuration (see
return of getTool
method). Simply add the setting key to the fields
object.
Additionally any ToolUserData ($TC_TPCx), ToolCompensationEdgeData, ToolSupervisionData and ToolUserEdgeData parameter can be
written by adding the key toolUser_x
, toolCompensationEdgeData_x
, toolSupervisionData_x
and toolUserEdgeData_x
, where x
should be replaced by the
corresponding parameter number, to the fields
object.
Example:
{
"fields": {
"toolIdent": "COOLTOOL",
"<more_fields>": "...",
"toolUser_3": "2.3"
}
}
See also Examples.
Set Tool¶
Convenient method to create a tool, set tool configurations and load the tool into a magazine. If no tool number is given the method searches for the first available tool number and uses this for tool creation. See also Examples.
Method:
setTool
Method signature:
string toolNo = setTool (toolNo, toolInMag, toolInPlace, fields)
Operation:
subscribe
orreq/res
Parameter:
toolNo
(string): Tool number to be created. Auto-assigned iftoolNo = ""
.toolInMag
(string): Magazine number the tool should be loaded to. Not loaded iftoolInMag = ""
.toolInPlace
(string): Magazine place the tool should be loaded to. Not loaded iftoolInPlace = ""
.fields
(object): Tool configuration to set. (see Set Tool Configuration)
Return
toolNo
(string): Tool number of the created tool
Delete Tool¶
Delete an existing tool.
Method:
deleteTool
Method signature:
deleteTool (toolNo, toolArea)
Operation:
subscribe
orreq/res
Parameter:
toolNo
(string): Tool number to be deletedtoolArea
(string): Optional, default = 1. Tool area in which the tool should be deleted.
Return
Status code
0: success
1: Tool area does not exist
2: Tool number out of range
3: Tool number exists already
6: Tool active
Delete Tool and Unload¶
Delete an existing tool. If the tool is loaded into a magazine, the tool is unloaded prior to deletion.
Method:
deleteToolAndUnload
Method signature:
deleteToolAndUnload (toolNo, toolArea = '1')
Operation:
subscribe
orreq/res
Parameter:
toolNo
(string): Tool number to be deletedtoolArea
(string): Optional, default = 1. Tool area in which the tool should be deleted.
Return: status code (see
deleteTool
)
Get Tools in Magazine¶
Returns which tools are loaded into the magazine locations (places) for a given magazine.
Method:
getToolsInMagazine
Method signature:
object places = getToolsInMagazine (magazineNo)
Operation:
subscribe
orreq/res
Parameter:
magazineNo
(string): Magazine number
Return
places
(object): Object with magazine places and corresponding tool numbers (0 = no tool loaded)
Get Tools in Magazines¶
Returns which tools are loaded into the magazine locations (places) for all magazines on the Sinumerik.
Method:
getToolsInMagazines
Method signature:
object magazines = getToolsInMagazines ()
Operation:
subscribe
orreq/res
Parameter: none
Return
magazines
(object): Object with magazine number and magazine places (object, seegetToolsInMagazine
)
Load Tool¶
Load tool into magazine.
Note
The tool configuration and the magazine configuration need to match in order
to successfully load a tool into a magazine, e.g. the tool place type
(toolplace_spec
) needs to match the magazine place type.
Method:
loadTool
Method signature:
loadTool (toolInMag, toolInPlace, toolNo)
Operation:
subscribe
orreq/res
Parameter:
toolInMag
(string): Magazine numbertoolInPlace
(string): Magazine place to loadtoolNo
(string): Tool to be loaded
Return: status code
Unload Tool¶
Unload tool from magazine.
Method:
unloadTool
Method signature:
unloadTool (toolInMag, toolInPlace)
Operation:
subscribe
orreq/res
Parameter:
toolInMag
(string): Magazine numbertoolInPlace
(string): Magazine place to unload
Return: status code
On Active Tool Changed¶
Method provides a notification when the active spindle tool changes.
Method:
onActiveToolChanged
Operation:
notify
Parameter: none
Return
active
(object)actTNumber
(string): Number of active toolactToolIdent
(string): Identifier of active toolactDuploNumber
(string): Duplo number of active toolactDNumber
(string): Number of active tool edge
previous
(object)actTNumber
(string): Number of previous toolactToolIdent
(string): Identifier of previous toolactDuploNumber
(string): Duplo number of previous toolactDNumber
(string): Number of previous tool edge
On Tool Changed¶
The method provides an event on any essential tool configuration change, i.e. tool is added, altered or removed.
Method:
onToolChanged
Operation:
notify
Parameter: none
Return
toolNo
(string): Tool number of changed toolfields
(object): Tool configuration (see return ofgetTool
)previousFields
(object): Previous tool configuration (see return ofgetTool
)
On Tool Complete Changed¶
The method provides an event on any complete tool configuration change, i.e. tool is added, altered or removed.
Method:
onToolCompleteChanged
Operation:
notify
Parameter: none
Return
toolNo
(string): Tool number of changed toolfields
(object): Tool configuration (see return ofgetToolComplete
)previousFields
(object): Previous tool configuration (see return ofgetToolComplete
)
On Magazine Tool Changed¶
The method provides an event on any magazine tool change, i.e. when a tool is loaded/unloaded to a magazine.
Method:
onMagazineToolChanged
Operation:
notify
Parameter: none
Return
magNo
(string, -): Magazine numbermagPlace
(string, -): Magazine locationtoolNo
(string, -): Tool number which loaded/unloaded to/from this location
Magazine Information¶
Get Magazine¶
Method returns information about a specific magazine.
Method:
getMagazine
Method signature:
object magazine = getMagazine (magNo)
Operation:
subscribe
orreq/res
Parameter:
magNo
(string): Magazine number to read
Return
magNo
(string, -): Magazine numbermagActPlace
(string, $TC_MAP8): Current magazine positionmagNrPlaces
(string, -): Number of real locations (in chain magazine) or number of slots (in box magazine)magCmdState
(string, -): Command state of the magazinemagIdent
(string, $TC_MAP1): Identifier of the magazinemagKind
(string, $TC_MAP1): Type of the magazinemagState
(string, $TC_MAP3): State of the magazine
Get Magazines¶
Method returns information about all available magazine.
Method:
getMagazines
Method signature:
object magazines = getMagazines ()
Operation:
subscribe
orreq/res
Parameter: none
Return
object of
getMagazine
objects. Key is the magazine number.
File System¶
Read File¶
Read a file from the Sinumerik file system.
Method:
readFile
Method signature:
{ path, data } = readFile (path)
Operation:
subscribe
orreq/res
Parameter:
path (string): File path including filename, addressable either as absolute or relative path (e.g. “Sinumerik/FileSystem/Sub Program/foobar.SPF” or “Sub Program/foobar.SPF”)
Return
path
(string): Absolute file pathdata
(string): Base64 encoded file content
Write File¶
Write file to Sinumerik file system. Directories are created automatically from
given file path if non existing on the Sinumerik. By default, existing files are
not overwritten. If you require files to be overwritten, specify the
overwrite
flag.
Method:
writeFile
Method signature:
writeFile (filepath, data, overwrite)
Operation:
subscribe
orreq/res
Parameter:
path
(string): File path including filename, addressable either as absolute or relative path (e.g. “Sinumerik/FileSystem/Sub Program/foobar.SPF” or “Sub Program/foobar.SPF”)data
(string): Base64 encoded file dataoverwrite
(bool): Optional, default: false. Overwrite existing file.
Return: status code
Read Directory¶
Get list of files and subdirectories from directory.
Method:
readDirectory
Method signature:
{ path, entries } = readDirectory(path)
Operation:
subscribe
orreq/res
Parameter:
path
(string): Directory path, addressable either as absolute or relative path (e.g. “Sinumerik/FileSystem/Sub Program” or “Sub Program”)
Return
path
: (string) Absolute directory pathentries
: (array) Directory entries
Delete Directory¶
Delete directory. By default, directories that have any content
(files/subdirectories) are not deleted. If you require to delete directories
including content recursively, specify the recursive
flag (use with care!).
Method:
deleteDirectory
Method signature:
deleteDirectory (directoryPath, recursive)
Operation:
subscribe
orreq/res
Parameter:
path
(string): Directory path, addressable either as absolute or relative path (e.g. “Sinumerik/FileSystem/Sub Program” or “Sub Program”)recursive
(bool): Optional, default: false. Delete directories including any content recursively.
Return: Status code
Access Rights Management¶
Get User Access Rights¶
Read OPC UA access rights of the current OPC UA user.
Method:
getMyAccessRights
Operation:
subscribe
orreq/res
Parameter: none
Return: Access rights
Give User Access¶
Set accesss rights for current OPC UA user. Please note that all driver methods automatically set their required access rights.
Method:
giveUserAccess
Operation:
subscribe
orreq/res
Parameter:
level
(string): User access level
Return: Status code
Examples¶
The examples are using the Sinumerik Reference Device File below. Thus, the MQTT topics might differ in your application but the payload needs to be the same (as long as no JSONata rules are being used).
Get Tool Complete¶
Example showing how to read the complete tool configuraton of tool number 1.
Method:
getToolComplete
Operation:
req/res
Request on MQTT topic “sinumerik-opcua/<machine-ip>/getToolComplete/req”
{
"id": 1,
"params": [
"1"
]
}
Example response on MQTT topic “sinumerik-opcua/<machine-ip>/getToolComplete/res”
{
"id": 1,
"timestamp": 1589978193302,
"result": {
"toolNo": "1",
"toolIdent": "SUPER_DRILL_7",
"duploNo": "1",
"numCuttEdges": "1",
"toolInMag": "2",
"toolInPlace": "15",
"toolState": "131",
"toolplace_spec": "1",
"toolMaxAcc": "0",
"toolMaxVelo": "0",
"adaptNo": "0",
"toolInfo": "0",
"toolMyMag": "2",
"toolMyPlace": "15",
"toolSearch": "0",
"toolMon": "0",
"toolStateLocked": "false",
"toolOverSize": "true",
"toolsize_down": 1,
"toolsize_left": 1,
"toolsize_right": 1,
"toolsize_upper": 1,
"lifetime": "0",
"maxLifetime": "0",
"toolType": "205",
"length1": "50",
"length2": "0",
"radius": "25",
"wearLength1": "0",
"wearLength2": "0",
"wearRadius": "0",
"coolant1": "on",
"coolant2": "off",
"spindleDirection": "right",
"toolCompensationEdgeData": {
"0": "205",
"1": "9",
"2": "50",
"3": "0",
"4": "0",
"5": "25",
"6": "0",
"7": "0",
"8": "0",
"9": "0",
"10": "0",
"11": "0",
"12": "0",
"13": "0",
"14": "0",
"15": "0",
"16": "0",
"17": "0",
"18": "0",
"19": "0",
"20": "0",
"21": "0",
"22": "0",
"23": "0",
"24": "256",
"25": "0",
"26": "0",
"27": "0",
"28": "0",
"29": "0",
"30": "0",
"31": "0",
"32": "0",
"33": "0",
"34": "0"
},
"toolSupervisionEdgeData": {
"0": "0",
"1": "0",
"2": "0",
"3": "0",
"4": "0",
"5": "0",
"6": "0",
"7": "0",
"8": "0"
},
"toolUserData": {
"toolUser_1": "0",
"toolUser_2": "10",
"toolUser_3": "0",
"toolUser_4": "0",
"toolUser_5": "0",
"toolUser_6": "0",
"toolUser_7": "0",
"toolUser_8": "0",
"toolUser_9": "0",
"toolUser_10": "0"
},
"toolUserEdgeData": {
"0": "0",
"1": "0",
"2": "0",
"3": "0",
"4": "0",
"5": "0",
"6": "0",
"7": "0"
}
}
}
Set Tool¶
Example showing how to create a new tool and to set its configuration. In the example we do not require to set a specific tool number but rather let the driver choose the next available tool number automatically.
Method:
setTool
Operation:
req/res
Request on MQTT topic “sinumerik-opcua/<machine-ip>/setTool/req”
{
"id": 2
"params": [
"", // No specific tool number required
"", // We do not want to load the tool into magazine number
"", // We do not want to load the tool into magazine place
{
"toolIdent": "MY_NEW_TOOL",
"toolType": "900",
"length1": "125.5",
"radius": "3.24,
"spindleDirection": "left",
"coolant1": "on",
"toolOverSize": "true",
"toolUser_2": "2.3"
}
]
}
Example response on MQTT topic “sinumerik-opcua/<machine-ip>/setTool/res”
{
"id": 2,
"timestamp": 1589978193302,
"result": "2" // Driver created tool number 2
}
Here the driver successfully created a new tool using the next available tool number 2.
Reference Device File¶
Sinumerik OPC UA Reference File.
Download: sinumerik-reference.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 | --- # ----------------------------------------------------------------------------# # Cybus Connectware Device Commissioning File # Device: Sinumerik OPC UA Reference Device # ----------------------------------------------------------------------------# # Copyright: Cybus GmbH (2020) # Contact: support@cybus.io # ----------------------------------------------------------------------------# description: > Sinumerik OPC UA Reference Device metadata: name: Sinumerik 840D icon: https://www.cybus.io/wp-content/uploads/2017/10/for-whom1.svg provider: cybus homepage: https://www.cybus.io version: 1.0.0 parameters: host: type: string default: 192.168.0.1 port: type: integer default: 4840 username: type: string default: '' password: type: string default: '' resources: sinumerikConnection: type: Cybus::Connection properties: protocol: Sinumerik connection: host: !ref host port: !ref port username: !ref username password: !ref password # Machine information # Machine info getMachineInfoSubscription: type: Cybus::Endpoint properties: protocol: Sinumerik connection: !ref sinumerikConnection subscribe: type: poll pollInterval: 5000 method: getMachineInfo getMachineInfo: type: Cybus::Endpoint properties: protocol: Sinumerik connection: !ref sinumerikConnection read: method: getMachineInfo # Machine state # { anPoweronState, # poweronTime, # licenseStatus, # nckMode, # sysTimeSinceStartup, # progStatus, # progName } = getMachineState() getMachineStateSubscription: type: Cybus::Endpoint properties: protocol: Sinumerik connection: !ref sinumerikConnection subscribe: type: poll pollInterval: 5000 method: getMachineState getMachineState: type: Cybus::Endpoint properties: protocol: Sinumerik connection: !ref sinumerikConnection read: method: getMachineState # On NC-Program change # { progStatus, progName } = onNcProgramChanged() onNcProgramChangedSubscription: type: Cybus::Endpoint properties: protocol: Sinumerik connection: !ref sinumerikConnection subscribe: type: poll method: onNcProgramChanged # Spindle Speed # { actSpeed, cmdSpeed } = getSpindleSpeed() getSpindleSpeed: type: Cybus::Endpoint properties: protocol: Sinumerik connection: !ref sinumerikConnection read: method: getSpindleSpeed # Spindle Feed # { acConstCutS, cmdConstCutSpeed } = getSpindleFeed getSpindleFeed: type: Cybus::Endpoint properties: protocol: Sinumerik connection: !ref sinumerikConnection read: method: getSpindleFeed # TOOLS # Get tool # tool = getTool(toolNo) getTool: type: Cybus::Endpoint properties: protocol: Sinumerik connection: !ref sinumerikConnection read: method: getTool # Get complete tool # tool = getToolComplete(toolNo) getToolComplete: type: Cybus::Endpoint properties: protocol: Sinumerik connection: !ref sinumerikConnection read: method: getToolComplete # Read tools # tools = getTools() getTools: type: Cybus::Endpoint properties: protocol: Sinumerik connection: !ref sinumerikConnection read: method: getTools # Read complete tools # tools = getToolsComplete() getToolsComplete: type: Cybus::Endpoint properties: protocol: Sinumerik connection: !ref sinumerikConnection read: method: getToolsComplete # Get tools in magazine # toolsInMagazine = getToolsInMagazine(toolNo) getToolsInMagazine: type: Cybus::Endpoint properties: protocol: Sinumerik connection: !ref sinumerikConnection read: method: getToolsInMagazine # Get tools in magazines # toolsInMagazine = getToolsInMagazines() getToolsInMagazines: type: Cybus::Endpoint properties: protocol: Sinumerik connection: !ref sinumerikConnection read: method: getToolsInMagazines # Create tool # createTool(toolNo, fields) createTool: type: Cybus::Endpoint properties: protocol: Sinumerik connection: !ref sinumerikConnection read: method: createTool # Set tool fields # setToolFields(toolNo, fields) setToolFields: type: Cybus::Endpoint properties: protocol: Sinumerik connection: !ref sinumerikConnection read: method: setToolFields # Set tool # toolNo = setTool(toolNo, toolInMag, toolinPlace, fields) setTool: type: Cybus::Endpoint properties: protocol: Sinumerik connection: !ref sinumerikConnection read: method: setTool # Delete tool # deleteTool(toolNo) deleteTool: type: Cybus::Endpoint properties: protocol: Sinumerik connection: !ref sinumerikConnection read: method: deleteTool # Delete Tool And Unload # deleteToolAndUnload(toolNo) deleteToolAndUnload: type: Cybus::Endpoint properties: protocol: Sinumerik connection: !ref sinumerikConnection read: method: deleteToolAndUnload # Load tool into magazine # loadTool(toolInMag, toolInPlace, toolNo) loadTool: type: Cybus::Endpoint properties: protocol: Sinumerik connection: !ref sinumerikConnection read: method: loadTool # Unload tool from magazine # unloadTool(toolInMag, toolInPlace) unloadTool: type: Cybus::Endpoint properties: protocol: Sinumerik connection: !ref sinumerikConnection read: method: unloadTool # On active tool change # { active: {...}, previous: {...} } = onActiveToolChanged() onActiveToolChangedSubscription: type: Cybus::Endpoint properties: protocol: Sinumerik connection: !ref sinumerikConnection subscribe: type: poll method: onActiveToolChanged # On tool change # { toolNo, fields, previousFields } = onToolChanged() onToolChangedSubscription: type: Cybus::Endpoint properties: protocol: Sinumerik connection: !ref sinumerikConnection subscribe: type: poll method: onToolChanged # On magazine tool change # { magNo, magPlace, toolNo } = onMagazineToolChanged() onMagazineToolChangedSubscription: type: Cybus::Endpoint properties: protocol: Sinumerik connection: !ref sinumerikConnection subscribe: type: poll method: onMagazineToolChanged # MAGAZINES # Get magazine # magazine = getMagazine(magNo) getMagazine: type: Cybus::Endpoint properties: protocol: Sinumerik connection: !ref sinumerikConnection read: method: getMagazine # Get magazines # magazines = getMagazines() getMagazines: type: Cybus::Endpoint properties: protocol: Sinumerik connection: !ref sinumerikConnection read: method: getMagazines # FILES # Read file # { path, data } = readFile(path) readFile: type: Cybus::Endpoint properties: protocol: Sinumerik connection: !ref sinumerikConnection read: method: readFile # Write file # path = writeFile(path, data, overwrite) writeFile: type: Cybus::Endpoint properties: protocol: Sinumerik connection: !ref sinumerikConnection read: method: writeFile # Read directory # { path, entries } = readDirectory(path) readDirectory: type: Cybus::Endpoint properties: protocol: Sinumerik connection: !ref sinumerikConnection read: method: readDirectory # Delete directory # path = deleteDirectory(path) deleteDirectory: type: Cybus::Endpoint properties: protocol: Sinumerik connection: !ref sinumerikConnection read: method: deleteDirectory |