AIVeRa - AI agent and voice control
InstallationSwitching onRequirements in WindowsVoice controlWhisperHow to speakUnknown commands - AI agentYour own commandsThresholds, signal and logAI assistant (MCP server)How it works and where the data goEditor APIAI Agent window (editor)Command APICheck prompts

VeRa is the AI agent of DrAmaT Robot Studio. It works in three ways: by voice (say "Vera" and a command), as an AI assistant (Claude Code, Claude Desktop or another MCP client controls the editor and the Robot Cell Simulator with the tools of VeRa) and from scripts (command APIs of the editor and the simulator). Everything runs on this computer; the APIs are local pipes that only the user who started DReS can use.

Installation

VeRa is optional and not selected in the installer. On the page Choose Components, group AI agent VeRa (optional):

Without these components the scripts of VeRa are not installed and nothing of VeRa runs: the installer notes the chosen components in AIAgent\components.ini, and the settings of a component that is not installed (Settings > Configure > AI Agent: Command API, VeRa voice control, VeRa AI agent (MCP server), the provider Claude Code of the AI Agent window; in the Robot Cell Simulator its tab AI Agent) are locked with the note Not installed - install DReS again and select the component .... The AI Agent window with an API key works without them. The installer writes the choice to AIAgent\first_run.ini; DReS takes it over at its first start (only settings that were not set before) and renames the file to first_run.applied. Later everything can be changed in Settings > Configure > AI Agent.

Switching on

Everything is off by default. Settings > Configure > AI Agent (editor): Command API of the editor (scripts, AI assistant), Voice control VeRa (microphone), the language of the commands and of the answers, the paths of the scripts, and on the tab VeRa voice control the check box Pass commands VeRa does not know to the AI Agent window (on by default, see Unknown commands). Settings > Configure... > AI Agent (Robot Cell Simulator): the command API of the simulator. The large button VeRa (microphone) at the right end of the toolbar starts and stops the listening; it is green while VeRa listens.

Settings > Configure > AI Agent, tab VeRa voice control (local paths hidden)

The page Settings > Configure > AI Agent has four tabs: AI Agent window (connection of the chat windows of the editor and of the Robot Cell Simulator to the model, knowledge files), VeRa voice control, Command API (see Editor API) and VeRa AI agent (MCP server) (see AI assistant). On the tab AI Agent window you choose the provider (Anthropic API key, OpenAI-compatible API such as VW LLMaaS, Azure OpenAI or a local Ollama, or Claude Code with your claude.ai account), the model, the limits and the anonymous mode, and you see the list of the knowledge files of the agent with their versions - described in AI Agent window (editor) > Settings.

Settings > Configure > AI Agent, tab AI Agent window: provider, model, limits and knowledge files (local paths hidden)

Requirements in Windows

  1. Microphone for desktop apps - Windows Settings > Privacy > Microphone: "Allow apps to access your microphone" and "Allow desktop apps to access your microphone" switched on (usually already on). Any microphone works: built in, headset or webcam; Windows uses the default recording device (Sound settings > Input).
  2. Speech recognition of the language of the commands - installed with the language in Windows Settings > Time & language > Language: English (United States) for English commands and/or Deutsch (Deutschland) for German commands, each with the option Speech recognition (in Language options > Speech). After adding a language let Windows finish the download (Windows Update) and restart the computer. VeRa listens in every installed language of the two at the same time.
  3. Voices for the answers (optional) - the text-to-speech voices of the same language packs (e.g. Zira for English, Hedda for German, Paulina for Polish); VeRa takes a female voice of the language, without one it answers in English.
  4. In DReS - Settings > Configure > AI Agent: Voice control VeRa switched on, then the microphone button at the right end of the toolbar.

Not needed: online speech recognition of Windows, an internet connection or any account - the recognition runs completely on the computer. For the AI assistant (MCP server) also Python 3 (python.org, no further packages) and an MCP client such as Claude Code.

When VeRa does not react: look into AIAgent\vera_voice.log - it shows what VeRa heard (with the confidence), what it did not understand and errors, e.g. no speech recognizer for English or German installed in Windows (point 2 missing). Speak the name first ("Vera, ..."), clearly and in one go; a grey microphone button means VeRa does not listen (click it). The thresholds are in vera_commands.json.

Voice control

The speech recognition of Windows works offline. English commands need nothing more; German commands need the German speech pack (Windows Settings > Time & language > Speech). Windows must allow the microphone for desktop apps (Windows Settings > Privacy > Microphone). VeRa answers by voice in Polish, German or English. The commands are in AIAgent\vera_commands.json - phrases in English and German, the command of the editor and the answer; add your own and restart the listening. What is not in the file goes to the AI Agent window (when switched on).

License: since 2026-10-21 the voice control needs the additional license 248 API / CLI (VeRa controls the editor and the simulator through their command APIs). Without it VeRa does not start; the status bar shows VeRa: not started - license 248 - API / CLI ... not found. The state of the license: Help > License info.

Whisper (speech recognition offline)

Whisper (open source, whisper.cpp, MIT license) writes the spoken command as text - it understands accents much better than the speech recognition of Windows, which only compares the sound with the fixed phrases (e.g. "activate last project" was heard as "last line"). It runs on this computer: a small server AIAgent\whisper\whisper-server.exe listens only on 127.0.0.1 (port 8178), started and stopped together with the listening of VeRa; no internet connection, no account. How it works: Windows still finds the name "Vera" and cuts out what was said; Whisper writes it (about 0.5 s on a laptop processor) and VeRa looks for the phrase of vera_commands.json that is nearest to the text - small differences ("activate the last project", "files" / "file") are allowed, commands that close, reload or restore need the exact words. Whisper is used for English commands; German commands keep the recognition of Windows.

Model: recommended is ggml-medium.bin (multilingual, about 1.5 GB) - it recognizes German words inside the commands (e.g. Folge) and numbers much better than ggml-base.en.bin (English only, about 148 MB). It is slower: about 4 s per command on 6 processor threads instead of about 0.4 s. Set it in vera_commands.json: "whisper": {"model": "whisper/models/ggml-medium.bin"}. The model file can lie in AIAgent\whisper\models; a folder link (junction) to another drive is fine. Download: file ggml-medium.bin from huggingface.co/ggerganov/whisper.cpp (a ready download package on dramat.eu is planned).

Choice: Settings > Configure > AI Agent > VeRa voice control > Speech recognition: Automatic (Whisper when installed, else Windows - default), Windows speech recognition or Whisper. Below the choice DReS shows whether Whisper is installed. The change is used when the listening is started again (button VeRa twice).

Manual installation (when DReS was installed without the component or the download failed): extract https://dramat.eu/download/whisper.zip into <installation>\AIAgent\whisper - or download from the official sources whisper-bin-x64.zip (release of github.com/ggml-org/whisper.cpp) and the model ggml-base.en.bin (huggingface.co/ggerganov/whisper.cpp, about 148 MB); copy whisper-server.exe and all *.dll of the zip and the model to <installation>\AIAgent\whisper.

Settings in vera_commands.json, part "whisper": enabled, exe and model (relative to the file or absolute - a bigger model, e.g. ggml-small.en.bin, is more exact but slower), port, threads (processor threads), audioCtx (512 = up to about 10 s of speech, faster), prompt (words that Whisper should expect), maxDistance (how different the text may be from a phrase, 0.34 = about a third of the words). In vera_voice.log every command shows what Whisper wrote and which phrase was taken (Whisper: ..., -> ...).

How to speak

Two ways: in one go - "Vera, check syntax" - or in two steps - say "Vera", the microphone button starts to blink (orange / green), then say the command without the name within 8 seconds. Without the name at the start VeRa does not react, so it does not take talks in the room as commands. VeRa listens in English and German at the same time (each language when its speech recognizer is installed in Windows) and answers in the language of the command; in the settings the commands and answers can also be fixed to one language (answers also in Polish).

EnglishGermanCommand of the editorAnswer
Vera, save, Vera, save fileVera, speichern, Vera, Datei speichern{"cmd": "save"}Saved.
Vera, save allVera, alles speichern{"cmd": "save_all"}All saved.
Vera, close, Vera, close file, Vera, close the file, Vera, close this file, Vera, close current file, Vera, close the current file, Vera, close active file, Vera, close the active fileVera, schließen, Vera, Datei schließen, Vera, diese Datei schließen, Vera, aktive Datei schließen{"cmd": "close"}Closed.
Vera, close all files, Vera, close all the files, Vera, close all windowsVera, alle Dateien schließen, Vera, alles schließen, Vera, alle schließen{"cmd": "close_all"}All closed.
Vera, restore last session, Vera, restore the last session, Vera, open last sessionVera, letzte Sitzung wiederherstellen{"cmd": "restore_session", "what": "all"}Restoring the last session.
Vera, restore robots from last session, Vera, restore robots from the last session, Vera, restore robot projects from last session, Vera, restore robot projects from the last sessionVera, Roboter aus der letzten Sitzung wiederherstellen{"cmd": "restore_session", "what": "robots"}Restoring the robots of the last session.
Vera, restore files from last session, Vera, restore files from the last session, Vera, restore the files from the last sessionVera, Dateien aus der letzten Sitzung wiederherstellen{"cmd": "restore_session", "what": "files"}Restoring the files of the last session.
Vera, reload, Vera, reload fileVera, neu laden, Vera, Datei neu laden{"cmd": "reload"}Reloaded.
Vera, check syntaxVera, Syntax prüfen{"cmd": "check_syntax"}
Vera, next window, Vera, next fileVera, nächstes Fenster, Vera, nächste Datei{"cmd": "window_next"}
Vera, previous window, Vera, previous fileVera, vorheriges Fenster, Vera, vorherige Datei{"cmd": "window_previous"}
Vera, first file, Vera, first windowVera, erste Datei, Vera, erstes Fenster{"cmd": "window_first"}
Vera, last file, Vera, last windowVera, letzte Datei, Vera, letztes Fenster{"cmd": "window_last"}
Vera, undoVera, rückgängig{"cmd": "undo"}
Vera, redoVera, wiederholen{"cmd": "redo"}
Vera, start simulator, Vera, open simulatorVera, Simulator starten, Vera, Simulator öffnen{"cmd": "run_plugin", "name": "Robot Cell Simulator"}Starting the simulator.
Vera, next robot, Vera, next robot active, Vera, activate next robot, Vera, set next robot active, Vera, next project, Vera, next robot project, Vera, set next robot project active, Vera, next robot project active, Vera, activate next robot project, Vera, activate next project, Vera, set next project active, Vera, next project active, Vera, activate the next project, Vera, activate the next robotVera, nächster Roboter, Vera, nächstes Projekt, Vera, nächsten Roboter aktivieren, Vera, nächstes Roboterprojekt, Vera, nächstes Roboterprojekt aktivieren{"cmd": "project_next"}
Vera, previous robot, Vera, previous robot active, Vera, activate previous robot, Vera, set previous robot active, Vera, previous project, Vera, previous robot project, Vera, set previous robot project active, Vera, previous robot project active, Vera, activate previous robot project, Vera, activate previous project, Vera, set previous project active, Vera, previous project active, Vera, activate the previous project, Vera, activate the previous robotVera, vorheriger Roboter, Vera, vorheriges Projekt, Vera, vorherigen Roboter aktivieren, Vera, vorheriges Roboterprojekt, Vera, vorheriges Roboterprojekt aktivieren{"cmd": "project_previous"}
Vera, close robot project, Vera, close robot, Vera, close active robot project, Vera, close the robot project, Vera, close projectVera, Roboterprojekt schließen, Vera, Roboter schließen, Vera, aktives Projekt schließen, Vera, Projekt schließen{"cmd": "close_project"}Project closed.
Vera, next line, Vera, go to next line, Vera, move to next line, Vera, go to the next line, Vera, move to the next lineVera, zur nächsten Zeile, Vera, nächste Zeile{"cmd": "goto", "target": "line", "direction": "next"}Line {0}.
Vera, previous line, Vera, go to previous line, Vera, move to previous line, Vera, go to the previous line, Vera, move to the previous lineVera, zur vorherigen Zeile, Vera, vorherige Zeile{"cmd": "goto", "target": "line", "direction": "previous"}Line {0}.
Vera, first line, Vera, go to first line, Vera, go to the first line, Vera, move to first line, Vera, move to the first lineVera, zur ersten Zeile, Vera, erste Zeile{"cmd": "goto", "target": "line", "direction": "first"}Line {0}.
Vera, last line, Vera, go to last line, Vera, go to the last line, Vera, move to last line, Vera, move to the last lineVera, zur letzten Zeile, Vera, letzte Zeile{"cmd": "goto", "target": "line", "direction": "last"}Line {0}.
Vera, next fold, Vera, go to next fold, Vera, move to next fold, Vera, go to the next fold, Vera, move to the next foldVera, zum nächsten Fold, Vera, nächster Fold{"cmd": "goto", "target": "fold", "direction": "next"}Line {0}.
Vera, previous fold, Vera, go to previous fold, Vera, move to previous fold, Vera, go to the previous fold, Vera, move to the previous foldVera, zum vorherigen Fold, Vera, vorheriger Fold{"cmd": "goto", "target": "fold", "direction": "previous"}Line {0}.
Vera, first fold, Vera, go to first fold, Vera, go to the first fold, Vera, move to first fold, Vera, move to the first foldVera, zum ersten Fold, Vera, erster Fold{"cmd": "goto", "target": "fold", "direction": "first"}Line {0}.
Vera, last fold, Vera, go to last fold, Vera, go to the last fold, Vera, move to last fold, Vera, move to the last foldVera, zum letzten Fold, Vera, letzter Fold{"cmd": "goto", "target": "fold", "direction": "last"}Line {0}.
Vera, next tech, Vera, go to next tech, Vera, move to next tech, Vera, go to the next tech, Vera, move to the next techVera, zum nächsten Tech, Vera, nächster Tech{"cmd": "goto", "target": "tech", "direction": "next"}Line {0}.
Vera, previous tech, Vera, go to previous tech, Vera, move to previous tech, Vera, go to the previous tech, Vera, move to the previous techVera, zum vorherigen Tech, Vera, vorheriger Tech{"cmd": "goto", "target": "tech", "direction": "previous"}Line {0}.
Vera, first tech, Vera, go to first tech, Vera, go to the first tech, Vera, move to first tech, Vera, move to the first techVera, zum ersten Tech, Vera, erster Tech{"cmd": "goto", "target": "tech", "direction": "first"}Line {0}.
Vera, last tech, Vera, go to last tech, Vera, go to the last tech, Vera, move to last tech, Vera, move to the last techVera, zum letzten Tech, Vera, letzter Tech{"cmd": "goto", "target": "tech", "direction": "last"}Line {0}.
Vera, next point, Vera, go to next point, Vera, move to next point, Vera, go to the next point, Vera, move to the next pointVera, zum nächsten Punkt, Vera, nächster Punkt{"cmd": "goto", "target": "point", "direction": "next"}Line {0}.
Vera, previous point, Vera, go to previous point, Vera, move to previous point, Vera, go to the previous point, Vera, move to the previous pointVera, zum vorherigen Punkt, Vera, vorheriger Punkt{"cmd": "goto", "target": "point", "direction": "previous"}Line {0}.
Vera, first point, Vera, go to first point, Vera, go to the first point, Vera, move to first point, Vera, move to the first pointVera, zum ersten Punkt, Vera, erster Punkt{"cmd": "goto", "target": "point", "direction": "first"}Line {0}.
Vera, last point, Vera, go to last point, Vera, go to the last point, Vera, move to last point, Vera, move to the last pointVera, zum letzten Punkt, Vera, letzter Punkt{"cmd": "goto", "target": "point", "direction": "last"}Line {0}.
Vera, next up call, Vera, go to next up call, Vera, move to next up call, Vera, next up, Vera, go to next up, Vera, move to next up, Vera, go to the next up call, Vera, move to the next up call, Vera, go to the next up, Vera, move to the next up, Vera, next U P call, Vera, go to next U P call, Vera, move to next U P call, Vera, go to the next U P call, Vera, move to the next U P call, Vera, next U P, Vera, go to next U P, Vera, move to next U P, Vera, go to the next U P, Vera, move to the next U P, Vera, next subprogram call, Vera, go to next subprogram call, Vera, move to next subprogram call, Vera, go to the next subprogram call, Vera, move to the next subprogram call, Vera, next subprogram, Vera, go to next subprogram, Vera, move to next subprogram, Vera, go to the next subprogram, Vera, move to the next subprogramVera, zum nächsten UP Aufruf, Vera, nächster UP Aufruf{"cmd": "goto", "target": "up", "direction": "next"}Line {0}.
Vera, previous up call, Vera, go to previous up call, Vera, move to previous up call, Vera, previous up, Vera, go to previous up, Vera, move to previous up, Vera, go to the previous up call, Vera, move to the previous up call, Vera, go to the previous up, Vera, move to the previous up, Vera, previous U P call, Vera, go to previous U P call, Vera, move to previous U P call, Vera, go to the previous U P call, Vera, move to the previous U P call, Vera, previous U P, Vera, go to previous U P, Vera, move to previous U P, Vera, go to the previous U P, Vera, move to the previous U P, Vera, previous subprogram call, Vera, go to previous subprogram call, Vera, move to previous subprogram call, Vera, go to the previous subprogram call, Vera, move to the previous subprogram call, Vera, previous subprogram, Vera, go to previous subprogram, Vera, move to previous subprogram, Vera, go to the previous subprogram, Vera, move to the previous subprogramVera, zum vorherigen UP Aufruf, Vera, vorheriger UP Aufruf{"cmd": "goto", "target": "up", "direction": "previous"}Line {0}.
Vera, first up call, Vera, go to first up call, Vera, go to the first up call, Vera, move to first up call, Vera, move to the first up call, Vera, first up, Vera, go to first up, Vera, go to the first up, Vera, move to first up, Vera, move to the first up, Vera, first U P call, Vera, go to first U P call, Vera, move to first U P call, Vera, go to the first U P call, Vera, move to the first U P call, Vera, first U P, Vera, go to first U P, Vera, move to first U P, Vera, go to the first U P, Vera, move to the first U P, Vera, first subprogram call, Vera, go to first subprogram call, Vera, move to first subprogram call, Vera, go to the first subprogram call, Vera, move to the first subprogram call, Vera, first subprogram, Vera, go to first subprogram, Vera, move to first subprogram, Vera, go to the first subprogram, Vera, move to the first subprogramVera, zum ersten UP Aufruf, Vera, erster UP Aufruf{"cmd": "goto", "target": "up", "direction": "first"}Line {0}.
Vera, last up call, Vera, go to last up call, Vera, go to the last up call, Vera, move to last up call, Vera, move to the last up call, Vera, last up, Vera, go to last up, Vera, go to the last up, Vera, move to last up, Vera, move to the last up, Vera, last U P call, Vera, go to last U P call, Vera, move to last U P call, Vera, go to the last U P call, Vera, move to the last U P call, Vera, last U P, Vera, go to last U P, Vera, move to last U P, Vera, go to the last U P, Vera, move to the last U P, Vera, last subprogram call, Vera, go to last subprogram call, Vera, move to last subprogram call, Vera, go to the last subprogram call, Vera, move to the last subprogram call, Vera, last subprogram, Vera, go to last subprogram, Vera, move to last subprogram, Vera, go to the last subprogram, Vera, move to the last subprogramVera, zum letzten UP Aufruf, Vera, letzter UP Aufruf{"cmd": "goto", "target": "up", "direction": "last"}Line {0}.
Vera, close window, Vera, close the window, Vera, close warnings window, Vera, close dialog, Vera, close the dialogVera, Fenster schließen, Vera, Dialog schließen, Vera, Meldungsfenster schließen{"cmd": "close_dialog"}Window closed.
Vera, close program, Vera, close editor, Vera, exit program, Vera, exit editor, Vera, close the program, Vera, close the editorVera, Programm beenden, Vera, Programm schließen, Vera, Editor schließen, Vera, Editor beenden{"cmd": "ui_click", "action": "File > Exit"}Goodbye.
Vera, stop listening, Vera, goodbyeVera, nicht mehr zuhören, Vera, auf WiedersehenstopGoodbye.
Vera, set active project / active project / activate robot threeVera, aktives Projekt / aktiviere Roboter drei{"cmd":"set_active_project"}Active project: {0}.
Vera, first / second ... ninth / last robot (also: activate second robot, set fifth robot active)Vera, erster / zweiter ... letzter Roboter (auch: zweiten Roboter aktivieren)robot by its position in the project treeActive project: {0}.
Vera, next robot / previous robot (also: next robot active, activate next robot)Vera, nächster / vorheriger Roboternext / previous robot projectActive project: {0}.
Vera, first / second ... ninth / last file (also: second file active, activate fifth file)Vera, erste / zweite ... letzte Datei (auch: zweite Datei aktivieren)open document by its position (Window menu)Active file: {0}.

Unknown commands → AI agent

When VeRa hears its name but the rest is not one of its voice commands, it does not give up: the text written by Whisper is sent as a message to the AI Agent window of the editor (like {"cmd":"ai_chat"}), the window opens and VeRa says "I passed it to the AI agent" (German "Ich habe es an den KI-Agenten weitergegeben", Polish "Przekazałam to agentowi AI"). The AI agent plans the steps and answers in the chat. Examples:

Setting: Settings > Configure > AI Agent, tab VeRa voice control, check box Pass commands VeRa does not know to the AI Agent window (needs the license 'API / CLI') - on by default (INI key AI_Agent_Voice_Forward; for the script: vera_voice.ps1 -ForwardUnknown on|off). When it is off, VeRa says that it does not know the command. Without the license API / CLI the AI agent cannot answer. For long, free sentences the multilingual Whisper model ggml-medium.bin gives the best text.

Your own commands

The commands are not fixed in the program: they are in AIAgent\vera_commands.json (a text file, edit it with Notepad and click the VeRa button twice to restart the listening). Each command has the phrases ("say", English and German, words only - no digits), the command of the editor ("cmd") and the spoken answer ("reply", Polish, German, English). Any command of the editor API can be used, also every menu action by its path, e.g. {"cmd":"ui_click","action":"Tools > Compare files"} or {"cmd":"ui_click","action":"File > Reload all files"} - the list of all paths: menu actions for own commands (about 620 actions of all menus; current list also from {"cmd":"ui_actions"}). Example:
{ "say": { "en": ["compare files"], "de": ["Dateien vergleichen"] }, "cmd": { "cmd": "ui_click", "action": "Tools > Compare files" }, "reply": { "pl": "Porównuję.", "de": "Ich vergleiche.", "en": "Comparing." } }

Thresholds, signal and log

In vera_commands.json: minConfidence (default 0.5) - how sure the speech recognition must be to run a command; wakeConfidence (0.4) - the same for "Vera" alone (a short word, Windows is less sure of it); lower values react more easily but also to wrong words. awakeSignal after "Vera" alone: none (only blinking, default), beep or voice ("listening"). Everything VeRa heard, did or did not understand is written to AIAgent\vera_voice.log (in %TEMP% when the installation directory is read-only).

AI assistant (MCP server)

Without an external AI assistant: the Robot Cell Simulator has its own chat with an AI agent, the AI Agent window (tab next to the messages; connection to the model in the settings of the simulator, license API / CLI). With the provider Claude Code - your claude.ai account this window uses VeRa too: the simulator starts Claude Code with this MCP server and Claude Code controls the simulator with the tools rcs and status, and outside the anonymous mode it reads the robot programs of the station in the editor with editor_read and projects (see Configuration step by step, way B).

AIAgent\vera_mcp.py (Python 3, no other packages) is an MCP server. Register it once in Claude Code: claude mcp add vera -- python "<installation>\AIAgent\vera_mcp.py" (the same command is shown in the settings with a copy button). Then tell the assistant what to do, e.g. "VeRa, open UP48 of robot R03 and check the syntax" or "VeRa, simulate variant C3 Folge 81 ten times and compare it with the original". Tools: License: the AI assistant (MCP server) and every other program or script that controls DReS or the Robot Cell Simulator through the command APIs need the additional license API / CLI (control by other programs, scripts and AI agents); without it only reading commands work (state, open documents, windows) and the settings of the command APIs are locked. The voice control needs this license too (since 2026-10-21).

Tab VeRa AI agent (MCP server): the command to register VeRa in Claude Code, the button copies it
ToolWhat it does
statusState of the editor and the simulator: APIs reachable, licenses ready, active file, open dialog, editor busy (restoring the session / opening files), RCS loading / running.
editorAny command of the editor API (DReS_API), e.g. {"cmd":"plugins"}, {"cmd":"documents"}, {"cmd":"ui_actions"}, {"cmd":"ui_click","action":"File > Save all"}, {"cmd":"ui_list"}, {"cmd":"settings_get","filter":"..."} - see Editor API.
editor_readOnly the reading commands of the editor API: status, documents, projects, search, robot_data, points, tech with action list, check_syntax, axis_limits (without save, format, remember and dialog), find_projects (without open), path_check, tool_base_usage, payload_check (without dialog), robot_world, compare, archive_diff. Other commands, tech set and csv output files are refused – for an agent that may read the robot programs but must not change anything (e.g. the AI Agent window of the simulator with Claude Code).
rcsAny command of the Robot Cell Simulator API (DReS_RCS_API): load, set, run, fast_run, stop, report, run_data, zones, check_interlocks, ui_windows, ui_list, ui_actions, ui_get, ui_set, ui_click, ui_view, ui_view_set, ui_context, ui_close, ui_key, ui_file, ui_shot, settings_get, settings_set. wait_idle = true waits until loading / simulation is finished. See rcs_api and rcs_api_reference.
open_fileOpens a robot program or any text file in the editor (optionally at a line).
saveSaves the active document, or the given open file.
save_allSaves all modified documents.
close_fileCloses the active document, or the given open file. An unmodified file closes at once. A modified file: without action the editor asks the user (Save / Discard / Cancel); the assistant asks the user first and passes action = save (save and close), discard (drop the changes and close) or cancel (keep it open).
close_allCloses all documents. Unmodified ones close at once; for modified ones the editor asks the user, unless action = save / discard / cancel (cancel keeps the modified ones open).
reloadReloads the active document (or the given file) from the disk.
documentsOpen documents of the editor (file, modified, active).
projectsRobot projects in the project tree (name, controller type, config file, active).
set_active_projectSets the active robot project (name or part of it, e.g. 'R03' or '0001R03').
close_projectCloses a robot project like 'Close robot' in the project tree: its open files (a modified file asks Save / Discard / Cancel in the editor) and the robot in the tree. Without name: the active project.
restore_sessionRestores the last session of the editor (the session saved last): what = all (robot projects and files, default), robots (only the robot projects) or files (only the open files). Files and robots already open stay open.
gotoMoves the cursor in the active document (or the given open file) and returns line and text. target: line, first_line, last_line, point (motion), fold (main fold), tech (TECH command), up (UP / subprogram call); direction: next or previous (from the cursor), first or last (in the document). Collapsed folds around the target are expanded.
check_syntaxChecks the syntax of the active document (or the given open file) and returns the result at once: valid, errors, warnings, problems (line, severity, text, message) and messages (texts of the result window, which the editor closes itself). run = false only reads the marks of the last check. See check_syntax.
menuLists the menu actions of the editor (path like 'File > Save all'), optionally filtered.
menu_clickTriggers a menu action of the editor by its path, e.g. 'File > Save all' or 'Window > Close all'. A dialog it opens is seen with editor {"cmd":"ui_windows"} and answered with ui_set / ui_click.
start_rcsSwitches on the API of the Robot Cell Simulator and opens it (waits until it answers).
rcs_studySimulation study in RCS: loads a simulation file, optional Folge 125 to HOME, runs a Folge (loops, speed, SPS) and returns the run data (station cycle, robots, waits). Optional report file.

Waiting: the tool rcs with "wait_idle": true (and timeout_s) waits until the simulator is idle: no loading, no preparation, no simulation, no open action of the window – and now also until a running robustness test is finished.

Key of the session: when DReS itself starts the process (the AI Agent window of the simulator with Claude Code, the voice control), it gives it the key of the session in the environment variable DRES_API_TOKEN. vera_mcp.py adds this key to every command it sends to the editor or the simulator.

How it works and where the data go

Voice control runs completely on this computer: the speech recognition of Windows (offline) recognizes only the phrases of vera_commands.json, the script sends the command to the editor through a local pipe. Nothing is sent to the internet and no AI account is needed. AI assistant (MCP): you write (or dictate) to the assistant, e.g. Claude Code with your account; the language model of its provider decides which tools of VeRa to use, vera_mcp.py runs them on this computer and returns the results (e.g. file names, program lines, results of a simulation) to the assistant - these results are part of the conversation and are processed by the provider under the terms of your account. The voice control and the AI assistant are independent; both only work while their APIs are switched on in the settings. The voice control is part of DReS and needs the additional license API / CLI (248); DReS starts it itself and gives it a key of the session, which no other program knows.

Editor API

Commands of \\.\pipe\DReS_API (AIAgent\dres_api.ps1) besides those in Command API. Changes that may open a dialog answer queued; a dialog is seen with ui_windows. Commands of different connections run one after another: a command from a second connection waits until the running command has finished. Commands other than reading ones need the additional license API / CLI (also the voice control).

The AI Agent window of the editor (Tools > Show / hide AI Agent chat, Alt+4) uses these commands too: a chat with an AI model that works in the editor for you (tool editor_command); its direct commands (/documents, /projects …) run these commands without the model.

Tab Command API: the command API of the editor for the AI agent and scripts, state listening
CommandParametersWhat it does
licensedetailsstate of the license check (ready) and the available licenses (reading, no license needed); with "details": true also, like Help > License info: licenses – every license with fid, name, onKey, available, expired, privilegesFile, viaExperimental, type (perpetual, expiration, trial, timeperiod, executions), start, end, daysLeft, executions; key {id, type}; knowledgePacks – the installed knowledge packs with file, year, available and error (the reason when locked). Example: {"cmd":"license","details":true}
documentsopen documents (file, modified, active)
documents_viewsortBy, robotPrefix, robotNameview of the list Open documents like its context menu (see Open documents): sortBy = name | modified | path | robot, robotPrefix = true (robot name before every file) / false (only before files with the same name), robotName = full | short (short VASS name, e.g. 5670R01); the settings are kept after a restart; without parameters it only returns the current state (sortBy, robotPrefix, robotName), e.g. {"cmd":"documents_view","sortBy":"robot","robotPrefix":true,"robotName":"short"}
activatefilemakes an open document active
savefile, as, overwrite, ignoreEmptyComment, ignoreWarnings, manualUpgrade81, manualUpgradeCommentedsaves the active document or the given one. Without the options the save is queued (queued) and a question of the save (window) is shown to the user and reported by the next commands as A dialog is open. ignoreEmptyComment: Ignore in the question "Empty comment" (a job / program with an empty comment, Yaskawa, VKRC, Fanuc). ignoreWarnings: Save in the window "Syntax warnings" with the default options, i.e. the file is saved as it is, when the check found only warnings or infos; syntax errors never pass – the file is not saved and the answer says why (Yaskawa, VKRC, Fanuc; ABB and KRC have no such window). manualUpgrade81: answer of the question "Manual upgrade" (VKRC, a file with TPVW below 8.3 and Tech commands with Run WoV manual upgrade on file save on; the WorkVisual code generator rewrites the Tech commands in the 8.3 format while the header stays 8.1): true = run the manual upgrade, false = keep the file as saved by DReS; without it the setting Settings > VKRC > Manual Upgrade > File with TPVW below 8.3 and Tech commands decides (default Ask); when the question is closed by the API, it counts as Cancel: the file is not saved (saved:false, error with the hint manualUpgrade81 / manualUpgradeCommented: true / false answers this question). manualUpgradeCommented: answer of the question "Manual upgrade" for a VKRC file with commented folds (;;FOLD ...: points, SCHRITT, Trigger, VExpert) with Run WoV manual upgrade on file save on; the WorkVisual code generator deletes the commented folds (points also with their coordinates in the .dat file): true = run the manual upgrade (the commented folds are deleted), false = save without it; without it the setting Settings > VKRC > Manual Upgrade > File with commented folds decides (default Ask); when the question is closed by the API it counts as Cancel – the file is not saved and the error names the parameter. Both questions are asked before the file is written. as: save under a new name without the file dialog (a name without folder = folder of the document; an existing file only with overwrite:true). With one of these options the command saves at once and never blocks the API: a window which the options do not switch off (Syntax warnings without ignoreWarnings, Empty comment without ignoreEmptyComment, Backup / file-name questions) is closed like Cancel and the answer is immediately saved:false, ok:false, error "dialog: title ..." with the option that would switch it off, dialogs [title]. Otherwise it answers saved (true / false), dialogs (the questions answered automatically, e.g. "Empty comment", "Syntax warnings") and, when not saved, ok:false with error. Settings equivalent: Settings > Editor > Save > Questions on save ("Do not ask about an empty comment when saving" = ignoreEmptyComment, "Save without asking when there are only syntax warnings" = ignoreWarnings, both off by default). Example: {"cmd":"save","ignoreEmptyComment":true,"ignoreWarnings":true}
save_allignoreEmptyComment, ignoreWarnings, manualUpgrade81, manualUpgradeCommentedsaves all modified documents; with the options at once, answer saved (all), dialogs and files (result per file); untitled documents are skipped (save them with save + as)
closefile, savecloses a document; a modified one only with save=true
close_allsavecloses all documents; modified ones only with save=true
reloadfile, forcereloads from the disk; a modified one only with force=true
projectsrobot projects of the project tree (name, config, type, controller, active); type 0 VKRC, 1 Fanuc, 2 ABB, 3 KRC (also VKRC 5 / KRC4 VW), 4 Yaskawa, controller = the name of the type
set_active_projectnamesets the active robot project (name or its end, e.g. R03)
export_longtextsdir, format, projectssaves the long texts of every robot project of the project tree to separate files, one per robot, like Tools > Export long texts for all robot projects to separate files... (see Export long texts): dir = folder (required), format = csv (default, lines E41;text) | native (format of the controller), projects = only robot projects whose name contains one of these texts (without it or ["*"] all); answer per project: project, type, count, file, source, error, and the number saved, e.g. {"cmd":"export_longtexts","dir":"D:/x/longtexts","format":"native","projects":["R01","R02"]}
write_filefile, content, overwrite, encoding, bom, width, height, landscapewrites a file for the user without dialogs: txt csv md json xml html svg log as text (CSV with BOM for Excel, bom), pdf printed from HTML content (landscape for wide tables; sizes in px as on the screen, default font Arial 10 pt), xlsx from CSV content (separator ;, a line #sheet Name starts a new sheet, the first row is the header), png bmp jpg rendered from SVG content (width / height in pixels), robot files src dat sub ls mod sys jbi (Windows-1252 or encoding); a name without a folder is written to the folder of the agent files (Settings > AI Agent > Command API, default Documents\DReS AI); an existing file is overwritten only with overwrite: true; answer file, bytes; license API / CLI, e.g. {"cmd":"write_file","file":"interlocks.xlsx","content":"#sheet Pairs\nRobot A;Robot B;Zones\nR1;R2;3"}
save_knowledgefile, content, mode, loadsaves knowledge that the user taught the agent as an own knowledge file (see Teaching the agent): file = name only (.md is added), content = the knowledge as Markdown, mode = new (default; error when the file exists) | append (adds a section ## Added <date>) | replace; a new file gets the line Version: 1.0 (<date>); folder = setting Your knowledge files: (Settings > AI Agent > AI Agent window; empty = <folder of the agent files>\knowledge, default Documents\DReS AI\knowledge); load = true (default) adds the file to the knowledge files of the editor AI agent and loads the knowledge at once when the agent is idle, otherwise in the next chat or after /reload; answer file, bytes, added (new in the list), inKnowledgeList, loaded (now | next chat or /reload); license API / CLI, e.g. {"cmd":"save_knowledge","file":"cell_rules","content":"# Rules of cell 10\n- ...","mode":"append"}
collision_mapprojects, programs, formats, file, titleinterlock (collision) map robot–robot of the open robot projects like Tools > Collision map of the robot projects... (see Collision map); only KUKA VKRC and Fanuc in the VW standard, mixed stations allowed, other controllers are listed in skipped; signal analysis of the program code (no geometric collision check, the programs are not changed): projects = name parts (without it or ["*"] all), programs = base names, e.g. ["folge81","up42"] (empty: every Folge with its UPs), formats = svg | png | html | pdf | csv | xlsx | json (none: only the answer), file = path without extension (name only: folder of the agent files, Settings > AI Agent > Command API, default Documents\DReS AI), title; answer: robots, pairs (a, b, zonesA, zonesB, state BOTH | ONE_SIDED), partnerChecks, findings (max. 80), findingCount, skipped, files; licenses API / CLI (248) and AI agent knowledge (247), e.g.{"cmd":"collision_map","projects":["*"],"formats":["png","html"],"file":"station_map"}
open_projectconfigopens a robot project from its configuration file like File > Open robot project (VKRC / KRC $config.dat, Fanuc system.va, ABB system.xml, Yaskawa SYSTEM.SYS); the project appears in the project tree and becomes active; answer queued
sessionaction, name, overwrite, file, tothe menu Sessions without dialogs: action = list (default; every saved session with name, files, projects, current) | current (only the current session) | save (name, without it the current session; an existing other session only with overwrite: true) | save_file (file .ini, overwrite) | new | open (name) | open_file (file) | import_file (file, onConflict) | delete (name) | rename (name, to). open, open_file and new close all documents and robot projects and are refused while a document has unsaved changes (answer ok: false with the list modified); the session is restored in the background (answer queued) – status shows its progress in session, the console the result
commandsfile, controllercatalog of the instruction entries of the command menu of the controller of the active document (or of the given open file, or of controller = vkrc | krc | fanuc | abb | yaskawa): controller, groups (submenus as in the menu), commands – per entry index, group, name (the text of the menu item, used as command of insert_command), tooltip, template (the text which is inserted) and fields, plus a note for the controller. Reading, no change. The menu and the API use the same function:
  • Yaskawa – menu Yaskawa > Commands: templates with fields {{...}}, fields [{n, default}].
  • VKRC – menu VKRC > SPS-Commands (groups Makro / UP / Zange, PLC, Warte / FB, ana / BS / Pendeln, Jump / Label, Comment): only the entries which insert text, fields = []; index = id of the menu item; the text contains default values such as A23 or i1, change them afterwards with replace / edit; Schritt, Trigger, SERVOZANGE, VEXPERT, USER and I-Bus need a dialog or a fold and are not available.
  • Fanuc – the entries of the menu VFanuc > SPS-Commands (groups = submenus: APPL, Register, I/O, If/Select, Wait, Jmp/Lbl, CALL, TC_ONLINE, Miscellaneous, Weave, Skip, Payload, Offset/Frames, Multiple Control, Program Control, Makro, Tool_Offset, Lock PReg, Collision Detect, MONITOR, Stick Detect, Path Switch, Line Tracking; !Comment in the group SPS-Commands) and of VFanuc > Templates (group Templates/<group of the template file>); fields = [], index = position in the list; the text has example values (R[1], DO[1], UP001 ...), change them afterwards with replace / edit. The group APPL holds entries of the /APPL header of the program, not lines of the program body. CALL VW_USER is not in the catalog (command tech).
  • KRC – the 6 dialogs of the menu KRC > Insert instruction (group Insert instruction): output ($OUT[n]=TRUE / FALSE), pulse (PULSE($OUT[n], TRUE, t)), wait_input (WAIT FOR [NOT] $IN[n] / $OUT[n]), wait_time (WAIT SEC t), timer ($TIMER[n] / $TIMER_STOP[n]), call (Program()); fields = the names of the fields of values (see insert_command), template = an example. KRL Commands (inline forms from .kfd / .kop) are not available through the API.
  • ABB – the entries of the menu ABB > Templates (file template\abb.template.xml, group Templates/<group>), fields = []. The installation brings standard RAPID templates in the groups Motion (MoveJ, MoveL, MoveC, MoveAbsJ), I/O (SetDO, Set, Reset, PulseDO, SetGO, WaitDI, WaitDI with time limit), Wait (WaitTime, WaitUntil), Program flow (procedure call, IF, IF ELSE, FOR, WHILE, TEST, Comment) and Messages (TPWrite, TPErase).
insert_commandcommand, values, file, line, position, strict, checkinserts an entry of the catalog commands into the active document (or the given open file) with the same function as a click in the menu – the same text, the same indentation and fold rules; no message boxes, errors come in error. Common for all controllers: command = name of the entry (exact name, otherwise a unique beginning, case does not matter) or its index from commands; line (1-based) and position (after = default, before) choose the place, without line the line of the cursor like in the menu; answer: file, command, text (inserted lines), firstLine, lastLine, modified; the document is modified, not saved (undo works as for edit); check:true runs check_syntax and adds valid, errors, warnings, problems. Per controller:
  • Yaskawa (SPYON, CALL JOB ...): only between NOP and END, indented inside IFTHEN / WHILE blocks. values = the contents of the fields {{...}} in the order of the template, as an array (["1"]), an object with the number of the field ({"1":"2"}) or one string for a template with one field. A field without a value keeps its default text (listed in defaults of the answer); with strict:true the command inserts nothing and returns the missing fields. The answer also has group, fields [{n, value, default}] and defaults.
  • VKRC and Fanuc: no values; the text with its example values is inserted, change it afterwards with replace / edit using firstLine / lastLine. Fanuc triggers the same menu action as a click; templates of VFanuc > Templates are inserted as whole lines; entries of the group APPL go to the /APPL header of the program; inside the sub fold of a point the lines get the indentation of the point.
  • KRC: values = object with the fields of the dialog: signal (number), type (IN / OUT, only wait_input, default IN), state (true / false, default true; for wait_input false = NOT), time (s, at least 0.012; default 0.5 for pulse, 1 for wait_time), timer (1..64, default 1), action (start / stop / reset / restart, default start), program (name, parameters may be typed: MyProg(1, TRUE)), comment (appended as ; comment, only for output, pulse, wait_input). Incomplete or wrong values give an error which lists the fields. The same text, indentation and fold rules as the menu (collapsed fold: after ;ENDFOLD; Protect Folds: after the enclosing fold) and the same license (KRC).
  • ABB: no values; the template is inserted as whole lines with the indentation of the line before, one level deeper after THEN / DO / ELSE / PROC / CASE ...
Examples: {"cmd":"insert_command","command":"SPYON","values":["2"],"check":true} (Yaskawa), {"cmd":"insert_command","command":"output","values":{"signal":12,"state":false},"line":20} (KRC: $OUT[12]=FALSE after line 20)
check_syntaxfile, runchecks the syntax of the active document (or the given open file) of every viewer (KUKA VKRC / KRC, Fanuc, ABB, Yaskawa) and answers directly, nothing waits for a click: valid (true / false), errors, warnings (numbers), problems [{line (from 1), severity = error | warning | info, text (the line), message}] – the marks the viewer set in the lines (at most 300) – and messages = the texts of the result window (e.g. The syntax is valid, or the window with the wrong commands); the editor reads this window and closes it itself, so it does not block the next command. run: false only reads the marks of the last check without checking again (default true). When a dialog of the editor is already open the command returns an error with its title (close it with ui_windows / ui_close). Example answer: {"ok":true,"file":"D:/x/KRC/R1/Program/folge81.src","valid":false,"errors":1,"warnings":0,"problems":[{"line":42,"severity":"error","text":"LIN P5 Vel=2 m/s CPDAT5","message":"..."}],"messages":["..."]}
window_next / window_previous / window_first / window_lastnext / previous / first / last document window
undo / redoundo / redo in the active document; KRC / KUKA iiQKA programs have no undo – there the command changes nothing (check a change with dryRun first, or reload the file with reload)
gotofile, target, directionmoves the cursor in the active document (or the given open file) and returns line and text; target = line | fold | point | tech | up, direction = next | previous | first | last; point, tech and up also work in Fanuc .ls programs whose lines have no numbers
foldaction, file, line, direction, position, maxFolds, topLevel, valuesKRC / KUKA iiQKA programs: folds (;FOLD ... ;ENDFOLD) as whole units – list, go to, select, copy, cut, delete, paste, move, collapse, expand, read and change the parameters, open the parameter dialog, comment / uncomment; the same functions and rules as the keyboard and the menu (see fold)
cursorfile, line, column, context, move, count, selectreads or sets the cursor: line / column (from 1) set the position, context = n lines before and after the cursor; move moves it like the keys: left | right | up | down | word_left | word_right (count times), line_start | line_end, page_up | page_down (count pages), page_start (first visible line) | page_end (last visible line), document_start | document_end; select: true extends the selection; answer file, line, column, text (the line), lines (number of lines), selection {fromLine, toLine, chars, text}, modified, context [{line, text}]
selectfile, what, line, from, toselects text: what = line (the current line or line), lines (from, to), all, none (clears the selection); answer like cursor
findfile, text, regex, case, word, direction, all, maxsearches the document: text (plain text, or a regular expression with regex: true), case: true = case sensitive, word: true = whole words; direction = next | previous (from the cursor) | first | last – selects the match (answer count, index and the cursor state, notFound when there is none); all: true returns the list of the matches instead (matches [{line, column, text}], count, more when there are more than max, default 200)
replacefile, find, with, regex, case, word, scope, all, dryRun, forcesearches and replaces: find → with (with regex the groups \1, \2 …), case, word as in find; scope = document (default) | selection; all: true (default) = every match, false = only the next match from the cursor; dryRun: true changes nothing and returns count, lines and preview [{line, old, new}] (at most 30 lines); the whole replacement is one undo step (not in KRC programs: they have no undo); in KRC / KUKA iiQKA programs the fold rules apply (force, default false)
editfile, action, text, count, line, position, from, to, forcechanges the text like the keyboard: action = type (text at the cursor, replaces the selection) | backspace / delete_char (count characters; with a selection: deletes the selection) | insert (text as new line(s) before or after line, position = before | after; without line at the cursor) | replace (lines from..to by text) | delete (lines from..to; without them the selection or the current line); answer like cursor (and fromLine / toLine); one undo step (not in KRC programs: they have no undo); in KRC / KUKA iiQKA programs the fold rules apply (force, default false)
techaction, file, scope, projects, maxFiles, fileMask, openFiles, command, line, where, fields, full, summaryOnly, csv, set, dryRun, useSelectedVwUserlists (action=list) or changes (action=set) the parameters of technology commands in the open programs or in all programs of the robot projects (scope=projects), list also to a CSV file: VKRC TECH folds and SERVOZANGE folds, Fanuc CALL VW_USER(...); the change stays in the editor (not saved)
searchpattern, scope, projects, files, path, fileMask, ignoreCase, where, fields, max, maxFiles, context, text, csvsearches with a regular expression in the files of the robot projects on the disk (nothing is opened); named groups are the values: hits, summary of the values with their counts, hits per project / file, optionally a CSV file
robot_dataprojects, sections, alldata of the robots from their configuration – what the tabs Robot info, Profinet and CTB data show (name, model, serial, software, VW user, IP, tools, bases, loads, Profinet, EtherCAT, calibration, axis limits), also for inactive projects
pointsfile, table, path, motions, acc, ranges, process, maxRows; scope, projects, files, fileMask, maxFiles, checks, selectpoints of a program as a table (X Y Z A B C S T, tool, base ...), length of the TCP path, motion time, lengths between points, process (glue) length; for many programs the checks samePoints and callStart computed by DReS
ai_chatshow, message, stop, newChat, learn, autoLearn, learnDir, anonymous, lastthe AI Agent window of the editor: show (true) / hide (false), send a message (also the answer yes | anon | no to the question before the first real data), stop the agent, new chat (like the button New chat: with autoLearn the agent first saves the knowledge of the chat), learn = true like the button Learn (the agent saves what it was taught as knowledge files, see Teaching the agent), autoLearn = true | false (save the knowledge automatically before each new chat), learnDir = folder of the own knowledge files (empty = default), anonymous mode, last = number of the last entries; answer visible, busy, anonymous, autoLearn, learnDir, consentPending, transcript
ui_windows, ui_list, ui_actions, ui_get, ui_set, ui_click, ui_close, ui_key, ui_view, ui_view_set, ui_context, ui_shotevery menu action (File, Edit, Window, Tools ...), dialog, context menu of the file / project tree and of the editor - as in the simulator (UI commands). ui_set with scroll instead of value scrolls a text field or a list (also a read-only one, e.g. the conversation of the AI Agent window): "top", "bottom", a number 0..1 (position) or "find:text" (the first place of the text at the top of the view), e.g. {"cmd":"ui_set","id":12,"scroll":"find:Programs that fail"} (id from ui_list); answer queued. ui_set with dockHeight / dockWidth (px) instead of value for a control inside a docked window (e.g. the AI Agent window, the console) changes the size of that dock (height for a dock at the top / bottom, width for one at the left / right); 0 only reads the current size; answer queued, height, width (the size before the change), e.g. {"cmd":"ui_set","id":12,"dockHeight":420}; an error when the control is not in a docked window

session – sessions of the editor

A session is the list of the open files and robot projects, saved under a name (menu Sessions) or in an .ini file. The command session does the same as the menu without dialogs; it needs the license API / CLI (248) and is refused while a modal dialog of the editor is open.

Examples:

{"cmd":"session","action":"list"}
  → {"ok":true,"current":"Cell A","sessions":[{"name":"Cell A","files":40,"projects":["R1","R2"],"current":true},{"name":"Cell B","files":12,"projects":["R1"]}]}
{"cmd":"session","action":"save","name":"Cell A","overwrite":true}       → {"ok":true,"saved":"Cell A"}
{"cmd":"session","action":"save_file","file":"D:/x/cell_a_session.ini"}  → {"ok":true,"file":"D:\\x\\cell_a_session.ini"}
{"cmd":"session","action":"import_file","file":"D:/x/old_install/dres.ini","onConflict":"rename"}
  → {"ok":true,"imported":["Cell C","Cell A (2)"],"skipped":[],"overwritten":[]}
{"cmd":"session","action":"open","name":"Cell B"}
  → {"ok":true,"queued":true,"action":"open","note":"documents and robot projects are closed and the session restored in the background - ..."}
  → (unsaved documents) {"ok":false,"error":"documents with unsaved changes - save or close them first (or ask the user)","modified":["D:/x/KRC/R1/Program/up42.src"]}
{"cmd":"status"}
  → {..., "busy":true, "busyReason":"restoring session 'Cell B'", "currentSession":"Cell B",
     "session":{"name":"Cell B","projects":["R1"],"projectCount":1,"fileCount":12,"filesOpened":5,"seconds":3.2}}
{"cmd":"session","action":"rename","name":"Cell B","to":"Cell B old"}     → {"ok":true,"renamed":"Cell B","to":"Cell B old"}
{"cmd":"session","action":"delete","name":"Cell B old"}                   → {"ok":true,"deleted":"Cell B old"}

cursor, select, find, replace, edit – moving and editing in the document

These commands work in the active document (or the given open file) of every viewer: KUKA VKRC / KRC (.src), Fanuc (.ls), Yaskawa (.jbi) and ABB (.mod). Lines and columns count from 1. In a VKRC program the visible text of the viewer is edited (the fold titles, e.g. PTP P1 Vel=100% PDAT1), exactly as with the keyboard: the viewer checks the changed lines, collapsed folds around the target are expanded. The file is not saved – save it with save only when the user asks for it; undo reverts a change in one step (VKRC, Fanuc, Yaskawa, ABB; KRC / KUKA iiQKA programs have no undo – preview with dryRun, and a wrong change is discarded only by reload with force:true, which loses all unsaved changes). Check the result with check_syntax. The commands need the license API / CLI (248) and are refused while a modal dialog of the editor is open.

KRC / KUKA iiQKA programs – fold rules of edit and replace. The commands follow the same rules as the keyboard (see Editing rules for folds):

Examples:

fold – folds of KRC / KUKA iiQKA programs as whole units

Works in the active document (or the given open file) when it is a KRC / KUKA iiQKA program (.src). The command uses the same functions as the keyboard and the menu, with the same protection (Protect Folds, whole point, command and inline form folds). The fold of an action is given by line: the header line of the fold, or any line inside it (then the innermost fold around this line; an ;ENDFOLD line belongs to its own fold). Use fold for whole folds and edit_dialog / set_params for the parameters of a command – not edit / replace on the lines of the fold. Message boxes of copy / cut / paste are closed like Cancel and returned in dialogs, so the command never waits for a click. Changes are refused in a read-only program; the document is modified, not saved, and KRC programs have no undo.

ParameterDefaultMeaning
actionlistlist | goto | select | copy | cut | delete | paste | move | collapse | expand | params | set_params | edit_dialog | comment (see below)
fileactive documentan open KRC / KUKA iiQKA program
lineline of the cursorline (from 1) of the fold: the header line or a line inside the fold; for goto the start line of the search
directionnext (goto); none (move, required)goto: next | previous (any fold after / before line) | next_sibling | previous_sibling (next / previous fold with the same parent) | parent | child (first fold inside) | first | last (top-level folds of the document); move: up | down
positionafterpaste: after (after the ;ENDFOLD of the fold) | before (before its header) | inside (as the last lines of the fold)
maxFolds2000list: at most so many folds in folds (1..20000); count is always the full number
topLevelfalselist: true = only folds which are not inside another fold
valuesnone (required for set_params)set_params: {key: value} – the keys of the ;Params line (see params)

ActionWhat it doesAnswer
listall folds of the program (reading)folds [{line, endLine (-1 = no ;ENDFOLD), depth (0 = top level), kind = point | command | user, title (the header line), collapsed, parentLine, provider (the form / command of point and command folds)}], count, protectFolds, balanced, structure (the first problem when not balanced)
gotomoves the cursor to a fold (collapsed folds around it are expanded)fold, line; notFound: true when there is no such fold
selectselects the whole fold (header to ;ENDFOLD)fold, fromLine, toLine
copycopies the whole fold to the clipboard (point data included, like Ctrl+C)fold, dialogs
cutcuts the whole fold (like Edit > Cut with the point data)fold and the result of a change
deletedeletes the whole fold with its data (like Delete on the selected fold, without the question)fold and the result of a change
pastepastes the clipboard (a copied / cut fold) as whole lines at position; never into a point, command or inline form foldpastedAtLine and the result of a change; ok: false when nothing was pasted
movemoves the fold over the next unit above / below (a fold of the same parent or one line) with its data – the point names stay; never over the DEF / END lines of the routine; with Protect Folds on, folds inside folds are not movedmovedToLine and the result of a change
collapse / expandcollapses / expands the foldfold, collapsed
paramsreads the ;Params key=value; ... line of a command / inline form fold (or of its direct sub-fold) (reading)params {key: value}, keys (order of the line), paramsLine, iiqka (true = a KUKA iiQKA form, set_params possible)
set_paramschanges parameters of a KUKA iiQKA command / motion fold: the ;Params line, the title and the body are rebuilt by the rules of the form; other folds: edit_dialogchanged (keys), dialogs and the result of a change
edit_dialogopens the parameter dialog of the fold like a double click (modal – answer it with the UI commands ui_windows, ui_set, ui_click)queued: true
commentcomments / uncomments the whole fold (KRC > Comment / uncomment on the header line)dialogs and the result of a change

The result of a change: balanced (true when every ;FOLD has its ;ENDFOLD), structure (the problem when not balanced), lines (number of lines), cursorLine, modified. Every answer of an action on one fold has fold {line, endLine, depth, kind, title, collapsed, parentLine, provider}. Examples:

{"cmd":"fold","action":"list","topLevel":true}
{"cmd":"fold","action":"goto","line":40,"direction":"next_sibling"}
{"cmd":"fold","action":"copy","line":52}      then   {"cmd":"fold","action":"paste","line":80,"position":"after"}
{"cmd":"fold","action":"move","line":52,"direction":"down"}
{"cmd":"fold","action":"params","line":61}    → {"ok":true,"params":{"IlfProvider":"...","Kuka.PointName":"P2","Kuka.BlendingEnabled":"True",...},"keys":[...],"paramsLine":63,"iiqka":true,...}
{"cmd":"fold","action":"set_params","line":61,"values":{"Kuka.BlendingEnabled":"False"}}

tech – parameters of technology commands

Reads and changes the parameters of technology commands in the open documents without a dialog – like the plugins VKRC Tech Updater / Fanuc Tech Updater. It works on VKRC Folge, UP and Makro programs (TECH folds %VUSER and SERVOZANGE folds %VSERVOGUN) and on Fanuc programs (CALL VW_USER(...)). Requires the license API / CLI.

ParameterMeaning
actionlist (default) – the commands and their parameters; set – change parameters
filean open document; without file all open documents
scopefile (the given file, or the active document when file is empty), open (all open documents) or projects (the programs of the robot projects, see below); default open without file, file with it
projectswith scope projects: only robot projects whose name contains one of these texts, e.g. ["R05","R06"]; without it all VKRC and Fanuc projects of the project tree
maxFileswith scope projects: at most this number of files (default 300)
csvonly with action list: writes the found commands to this CSV file, e.g. "D:/x/servozange.csv"
fileMaskonly these programs (scope projects and open), e.g. ["up*"], ["folge*"], ["makro*"] or ["folge81*"]
openFileslist with scope projects: true – reads the files through the editor (the files are opened) instead of from the disk (default false)
fieldsonly these parameters, e.g. ["Programmnummer","Punktnummer","FahrzeugTyp","Offset"]
fulltrue – the detailed answer of list (see below); default false – compact answer
summaryOnlytrue – only the summary and a count per document; false – always the list of the commands; without it: only the summary when more than 400 commands are found
commandonly this command: group.subgroup of the TECH command (e.g. TECH1.EZ/SP/KE, a comma is read as a dot), SERVOZANGE.Schweissen or SERVOZANGE (all SERVOZANGE folds)
lineonly the command in this line
whereonly commands whose current values meet these conditions: "6" (equal), ">0", ">=2", "<5", "<=5", "!=6"; e.g. {"P1":"5"}, {"FahrzeugTyp":"6"} or {"Offset":">0"}
setnew values: {"<name or P#>":"<value>"}
dryRuntrue – only shows what would change, nothing is changed
useSelectedVwUsertrue – a file outside all robot projects is changed with the VW user selected in the toolbar (default false)

Parameter names come from the VW user definitions – the same names as in the dialog of the command (e.g. Fzg-Typ, Techaufruf); P1, P2 … (or only the number) work too. Case, spaces and characters like - or _ are ignored, a unique beginning of the name is enough. SERVOZANGE parameters: Programmnummer, Punktnummer, FahrzeugTyp (also Fz-Typ), Offset, TeachIn (Auto / Manual), Ausgleich (AUS / SCHWACH / MITTEL / STARK / INDIVIDUELL), Kraft, Blechdicke, …, Bedingung; Strom, Doppelhub and Messen can be changed only in the dialog of the fold. Values from a list (enum) may be given as the number or as the text.

Answer of list (compact, default) – per document with hits: file, project, vwUser, projectVwUser, errors and commands [{line, command, params}], where params is an object of the used parameters, e.g. {"Programmnummer":"99","FahrzeugTyp":"6"} (P# for a parameter without a name; unused parameters, the text of the line and the lists of allowed values are left out; documents without hits are left out). With full: true the detailed format: params [{P, name, value, values (allowed values of a list, "n=text"), used: false for a parameter not used by this command}] and text. The answer field summary gives every used value of each parameter with its count, e.g. {"SERVOZANGE.Schweissen FahrzeugTyp": {"6": 52, "7": 46}} (at most 100 values per parameter). With more than 400 commands only the summary and a count per document are returned (summaryOnly forces it on or off). Answer of set – per document changes [{line, command, old, new, error, unchanged}], in total found, changed and a note.

scope projects: all Folge, UP and Makro files of the VKRC and Fanuc robot projects of the project tree are searched on the disk (VKRC folge*.src, up*.src, makro*.src under KRC\R1, Fanuc folge*.ls, up*.ls, makro*.ls; fileMask narrows it). list reads the files from the disk and does not open them – line is the line in the file on the disk; with openFiles: true they are read through the editor (opened). set opens the files that contain matching commands (SERVOZANGE – %VSERVOGUN, TECH – %VUSER, Fanuc – VW_USER(), because the change is made in the editor; they stay open, the answer field opened lists the files opened by the command.

CSV export (csv, only with list): one row per command, columns Project;File;Line;Command, one column per parameter name (P# for a parameter without a name) and Text; separator ;, UTF-8 with BOM (opens in Excel). Answer fields csv (path of the file) and csvRows (number of rows).

VW user: the definitions of the VKRC TECH commands come from the VW user selected in the toolbar (combobox Select vw user); it is set automatically when a robot project is activated.

The change stays in the editor: the document is modified but not saved – save / save_all on request. Undo does not work for these changes (the folds carry block data). On saving the KRL code is generated again (e.g. VW_SGB_SPOT_ADV/MAIN(...,FahrzeugTyp,...)); saving a VKRC program normalizes its format.

Examples:

{"cmd":"tech","action":"list","command":"SERVOZANGE"}
{"cmd":"tech","action":"list","file":"D:/x/KRC/R01/Program/folge81.src","command":"TECH1.EZ/SP/KE"}
{"cmd":"tech","action":"set","command":"SERVOZANGE.Schweissen","set":{"FahrzeugTyp":"2"},"dryRun":true}
{"cmd":"tech","action":"set","command":"SERVOZANGE.Schweissen","where":{"FahrzeugTyp":"6"},"set":{"FahrzeugTyp":"2"}}
{"cmd":"tech","action":"set","file":"D:/x/KRC/R01/Program/folge81.src","line":120,"set":{"P1":"5"}}
{"cmd":"tech","action":"list","scope":"projects","command":"SERVOZANGE","csv":"D:/x/servozange.csv"}
{"cmd":"tech","action":"list","scope":"projects","command":"SERVOZANGE","fields":["Programmnummer","Punktnummer","FahrzeugTyp","Offset"],"fileMask":["up*"],"where":{"Offset":">0"}}
{"cmd":"tech","action":"set","scope":"projects","projects":["R01","R02"],"command":"SERVOZANGE.Schweissen","set":{"FahrzeugTyp":"2"},"dryRun":true}

search – regular expression in the files of the robot projects

Searches line by line with a regular expression in the files of the robot projects on the disk – nothing is opened in the editor, nothing is changed. Independent from the plugin Robot Data Spy. Used by the agent RobotDataSpy. Requires the license API / CLI.

ParameterMeaning
patternregular expression per line (required); named groups (?<name>...) are the values that come back in groups and summary
scopeprojects (default) – the files of the robot projects of the project tree; files – the files or folders in files (default when files is given); open – the open documents
projectsonly robot projects whose name contains one of these texts, e.g. ["R01"]; without it all projects
fileswith scope files: paths of files or folders (folders with sub-folders)
pathsub-folder of every robot project, e.g. "KRC/R1/System"
fileMaske.g. ["folge*.src","up*.src"], ["$config.dat"]; default VKRC / KRC *.src, *.dat, *.sub, Fanuc *.ls, *.va, ABB *.mod, *.modx, *.sys, *.prg, *.cfg, Yaskawa *.jbi, *.dat, *.prm
ignoreCasedefault true
whereconditions on the groups: "6", ">0", ">=2", "<5", "<=5", "!=6", "~text" (contains), e.g. {"tool":">0"}
fieldsonly these groups in the answer
maxhits listed (default 200, at most 5000); found counts all
maxFilesat most this number of files (default 5000)
contextlines before and after a hit (0 to 5, default 0)
texttrue – the text of the line also when the pattern has groups (to check the pattern)
csvwrites all hits to this CSV file: columns Project;File;Line, one column per group and Text

Answer: filesSearched, filesWithHits, found, hits [{project, file (relative to the robot project), line, groups, text, context}], summary (every value of each group with its count, at most 100 values per group), perProject, perFile (up to 100 files), note when not all hits are listed, filesLimit, csv and csvRows.

Examples:

{"cmd":"search","pattern":"BAS\\s*\\(#TOOL,\\s*(?<tool>\\d+)","fileMask":["folge*.src","up*.src"],"where":{"tool":">0"}}
{"cmd":"search","pattern":"&PARAM TPVW_VERSION\\s*=\\s*(?<v>[\\d.]+)","projects":["R01"],"csv":"D:/x/tpvw.csv"}

robot_data – data from the robot configuration

The data of the robots from their configuration – what the tabs Robot info, Profinet and CTB data show. The active project gives the loaded configuration; another project is read from the disk without dialogs (the state of the editor stays the same). VKRC, KRC, Fanuc, ABB, Yaskawa. Requires the license API / CLI.

ParameterMeaning
projectsrobot projects whose name contains one of these texts, e.g. ["R01"]; ["*"] all; without it the active project
sectionsinfo (name, model, serial number, software, VW user, trafo, IP / netmask / gateway, WorkVisual and KUKA.Load project), tools, bases, loads, profinet (devices, camera IPs; KUKA iiQKA: PROFINET station, KLI IP / netmask, modules of the robot), ethercat (KUKA VKRC / KRC / iiQKA: EtherCAT modules of the backup, see tab Profinet), cal (calibration / mastering), softend (axis limits), all; default info, tools, bases, loads
alltrue – also tools / bases / loads without data (default false: only the defined ones)

Answer: robots [{project, config, active, type (VKRC, KRC, Fanuc, ABB, Yaskawa), info, tools, bases, loads, profinet, ethercat, cal, softEnd, iiqka, error}], note when no project matches. VKRC / KRC: tools, bases and loads with no, name, x, y, z, a, b, c; Fanuc: UT / UF (x, y, z, w, p, r), payloads per tool; ABB: tooldata / wobjdata (quaternions); Yaskawa: tools, user frames, loads. ethercat (also with all): array of {bus (e.g. ecatms_config.xml, SYS-X48), name, address, vendorId, productCode, file} – one object per EtherCAT module. iiqka: true for a project from a KUKA iiQKA backup (missing otherwise).

Examples:

{"cmd":"robot_data","projects":["*"],"sections":["info"]}
{"cmd":"robot_data","projects":["R01"],"sections":["tools","bases","loads"]}
{"cmd":"robot_data","projects":["*"],"sections":["profinet","ethercat"]}

points – point table and TCP path of a program

The points of one program as a table (as the export of the point table) and the TCP path (the Path (TCP) tools of the point tables). A file open in the editor is read from the editor (also unsaved changes), otherwise from the disk in a hidden editor (it is not opened). VKRC, KRC, Fanuc, ABB, Yaskawa. Requires the license API / CLI.

ParameterMeaning
filethe program (.src, .ls, .mod, .jbi); without it the active document
tabletrue (default) – columns and rows: Point, Motion, X, Y, Z, A, B, C, S, T, E1.., Tool, Base, VB, VE (VKRC)
maxRowsat most this number of rows (default 500)
pathtrue (default) – the TCP path in path
accacceleration for the motion time in mm/s² (default 2000)
rangeslengths between points, e.g. [["P5","P12"]]
processprocess (glue, MAG, laser) length: {"on":"<regex of the line that switches it on>","off":"<regex off>"}
motionstrue – every motion with its segment, speed, approximation and switching points (motionList)

Answer: file, open, type, columns, rows, pointCount, rowsNote, notes and path {motions, lengthMM (TCP path with approximation), lengthExactMM (geometry), timeCpS (CP motions with acceleration), timePlannedS (with PTP and axis data), ranges, process {ranges, lengthMM}, motionList, notComputed, configNote, error}.

Many programs and checks (with checks, scope projects or files): the point tables of all selected programs, the distances are computed by DReS.

ParameterMeaning
scope, projects, filesprojects – the programs of the robot projects (projects filter: a part of the project name; "*" or "all" = all robot projects – the same in tech, search and robot_data), or the list files
fileMaskdefault ["folge*","up*"]; without an extension the extension of the controller is added
maxFilesat most this number of files (default 300)
checks.samePointspairs of points whose distance is checked in every program: "1" (first), "2", "last", "-2" or a name "P5", e.g. [["1","2"],["1","last"]]
checks.callStarttrue – every call of a UP / MAKRO in the program: the point where it is called vs the first point of the called program (same robot project)
checks.tolerancein mm (default 2); different bases with the same tool are compared in world coordinates (bases from $config.dat), different tools are not comparable
checks.onlyFailedtrue (default) – only the programs that break the condition
selectthese points of every program, e.g. ["1","last"] (selected)

Answer: filesChecked, toleranceMM, samePoints {checked, failed}, callStart {checked, failed}, files [{project, file, points, checks [{check, a, b, distMM, ok, world | frames}], calls [{program, atPoint, line, firstPoint, distMM, ok, world | frames, error}], selected, error}]. About 2 s per program.

Examples:

{"cmd":"points","file":"D:/x/KRC/R01/Program/up42.src","table":true,"path":true,"ranges":[["P5","P12"]]}
{"cmd":"points","file":"D:/x/KRC/R01/Program/up12.src","table":false,"process":{"on":"A1544.*EIN","off":"A1544.*AUS"}}
{"cmd":"points","scope":"projects","projects":["R01"],"fileMask":["folge*"],"checks":{"samePoints":[["1","2"],["1","last"]],"callStart":true,"tolerance":2}}

axis_limits – axis limit usage of the points

For every point: the robot axis values (program or inverse kinematics) against the software limits; usage = |value - middle of the range| / half of the range · 100 % (100 % = limit). Sources can be combined: open (open programs), files, projects (project tree, "*" = all), folders (archives on the disk); without a source the active program. threshold (default: program setting, "remember":true stores it), showAll (default false: only points with an axis at or above the threshold - only these axes - and points without a result), masks, vendor, format (pdf / html / xlsx / csv) + save, maxRows, "dialog":true (settings window with these values, "run":true - generate there). Answer: summary, programs, points, above, belowThreshold, withoutResult, withoutWarnings, rows (worstAxis, usage, side, marginDeg, axes, note), saved. Progress in dres.log (axis_limits: n/m files ..., every 3 s); the report window also fills progress of status. Details: Axis limit usage.
{"cmd":"axis_limits","projects":["*"],"threshold":95,"format":"pdf","save":"D:/reports/axis_limits.pdf"}
{"cmd":"axis_limits","folders":["D:/archives/R03"],"vendor":"Fanuc","showAll":true,"format":"csv","save":"D:/reports/R03.csv"}
{"cmd":"axis_limits","open":true,"dialog":true}
The rows have reach: ok, outsideLimits (axis values of the program outside the limit), unreachable (inverse kinematics with this configuration outside the limits), notSupported (mounting / track not confirmed), noData.

points_transform – shift, rotate, align, mirror points

The command of the window Transform points... of the point table (VKRC and Fanuc; KRC / ABB / Yaskawa: error "not available yet"). mode: preview (default; reads an open or a stored program, writes nothing), apply and undo (the program must be open; the change stays unsaved - use save). points (names or "all"), op (move / align / mirror), frame (base / world / tool / custom), pivot (tcp / frame), dx dy dz rx ry rz, ref, plane (xz / yz / xy), offset, mirror (same / lr), config (mirrored / keep), mflip (z / y / x), srcRobot / dstRobot {x y z a b c}, custom {x y z rx ry rz} or customPoints [3 points], allowWarnings, maxRows. Answer rows: point, status (ok / limit / unreachable / not_checked / error), frame, before / after, worldBefore / worldAfter, shiftMM, configBefore / configAfter, axes. The agent tool editor_read allows only mode: preview. Details and the assumptions of the mirror: Transform points.
{"cmd":"points_transform","file":"D:/x/UP42.src","mode":"preview","points":["P12","P13"],"op":"move","dy":5}
{"cmd":"points_transform","file":"D:/x/UP42.src","mode":"undo"}

Checks of many programs and robots

The same sources as axis_limits (open, files, projects, folders, masks, includeSystem, vendor, or scope + paths); KUKA system files ($*.src, System, Mada, TP, STEU, VW_User) are skipped. Programs are read without opening them and without windows: a window of the parser is closed and reported as finding LOAD_WARNING. Every program needs the license of its robot type; programs without it are skipped (note). Progress in dres.log and in progress of status. Answer in the common format: summary {errors, warnings, infos}, findings [{check, code, severity error / warning / info, robot, controller, file, program, point, line, message, suggestion, value, limit}] (errors first, maxItems, default 500), files, programs, notes. In the project tree the same checks are in the menu of a robot: Checks of <robot> (window with the findings, double click opens the program at the line, save as CSV / HTML).
CommandWhat it does
find_projectsRobot archives in a folder: folder, recursive (true), maxDepth (6), vendor; answer projects [{robot, controller, config, root}] – config for open_project; "open":true opens them one after another. VKRC / KRC: VKRC when the archive has VW_User / Folgen / UPs / folge*.src.
check_syntaxWith a source (see above): syntax of all programs (all .src / .ls / .mod / .JBI, not only motion programs), programList (programs with errors / warnings, all with "allPrograms":true), invalidPrograms, valid; VKRC without the check of the TECH parameters unless "checkTech":true. Without a source: the single document as before.
path_checkTCP path of the motion programs: approximation (true: approximation in mm larger than half of the shorter neighbouring motion), switchPoints (true: distance longer than the motion, delay on the other side of the point or outside the motion – as menu Path (TCP) > Check switch points), arcs (true: collinear points, more than 180°, radius, auxiliary point near the end), longSegments [mm] (0 = off), duplicates [mm] (points of a program in the same place; < 0 = off), singularity [deg] (|axis 5| below it in LIN / CIRC, singularityPtp), reach (axis values outside the software limits / not reachable with the configuration of the point; points without data grouped per program and reason).
tool_base_usageproject | config | folder | file: usage of the tools and bases in the programs (as the Tool / base usage window) with defined from the robot data; findings: used but not defined (error with points, warning with assignments only), only assigned, defined but not used (one finding per group). "programs":true lists the programs per number.
payload_checkLoad data of every tool / payload schedule used in the programs and, in the VW standard (VKRC, Fanuc), their switch at the gripper macros MAKRO343 (close: load data with the part) / MAKRO342 (open: without the part) – as the window Payload check (button of Tool / base usage). Parameters below.
robot_worldproject | config | folder: is the position of the robot in the WORLD frame defined? KUKA: $ROBROOT of $machine.dat (robroot X Y Z A B C, source file:line), $EX_KIN ET1 and $ERSYSROOT for a robot on a track; ABB: base frame of MOC.cfg; Fanuc / Yaskawa: not in the backup. defined, zero, note; with defined false a hint: without a study with the robot positions a geometric collision check is not possible – the agent does not guess positions and offers the check of the programmed interlocks (collision_map, RCS check_interlocks).
compareTwo files a, b: equal, onlyInA, onlyInB, hunks (changed lines with context); ignoreWhitespace (true), ignoreCase, ignoreComments, maxHunks.
archive_diffTwo archive folders a, b: onlyInA, onlyInB, changed (changed lines per program, "details":true with the lines), same; masks, maxFiles and the options of compare.
compare_offlinePoints of the version from the robot b against the offline version a (archive, folder or program) with tolerances pos (1 mm), ori (0.5°), axes (0.5°), moved (20 mm): touched up / moved points, Status/Turn, new / removed points, speed, TOOL / BASE, commands; findings and groups. VKRC, KRC and Fanuc, license Archive Diff of the robot type. See Compare with offline version.
{"cmd":"find_projects","folder":"D:/archives/ST010"}
{"cmd":"check_syntax","folders":["D:/archives/ST010"],"maxItems":200}
{"cmd":"path_check","projects":["*"],"singularity":5,"reach":true,"longSegments":1500}
{"cmd":"tool_base_usage","project":"R01"}
{"cmd":"payload_check","project":"R01","minPartMass":8}
{"cmd":"robot_world","folder":"D:/archives/ST010/R01"}
{"cmd":"archive_diff","a":"D:/backup/R03_old","b":"D:/backup/R03_new","masks":["*.src","*.dat"]}
{"cmd":"compare_offline","a":"D:/olp/R03","b":"D:/backup/R03","pos":1,"axes":0.5}
payload_check – load data and gripper macros (license of the robot type):
AttributeDefaultMeaning
project | config | folder | file–the robot: project of the project tree, configuration file ($config.dat, system.va, system.xml, SYSTEM.SYS), folder with exactly one robot archive (with vendor) or a program of the robot
minPartMassvalue of the window (10)[kg] parts lighter than this need no own load data: a missing switch at MAKRO343 is only an info
minToolMassvalue of the window (5)[kg] load data of a gripper / welding gun / glue gun ... (by the name of the tool) lighter than this: LOAD_TOO_LIGHT; 0 = off
grippervalue of the window (true)check the gripper macros 342 / 343 (VKRC, Fanuc)
maxItems500maximum number of findings in the answer (1..20000)
dialogfalsetrue: open the window Payload check with these values (they are saved as the values of the window) and answer {"ok":true,"dialog":true}
Answer: summary, findings (common format, check payload, value = number / name of the load data), robot, controller, config, programs, loadKind (LOAD_DATA VKRC / KRC, PAYLOAD Fanuc, tooldata ABB, TOOL Yaskawa), gripperCloses, gripperOpens, loads [{key, name, defined, mass (only with defined), uses, programs}], notes (e.g. the part checks found in Makro50), minPartMass, minToolMass, gripper.
CodeSeverityMeaning
LOAD_NOT_SETerror (warning with assignments only)used tool / payload schedule without load data
LOAD_ZERO_MASSwarningload data with the mass 0 kg
LOAD_TOO_LIGHTwarningprocess tool lighter than minToolMass
PAYLOAD_NOT_SWITCHED_IN_PROGRAMSinfoFanuc: no PAYLOAD[n] in the programs
PART_LOAD_NOT_SWITCHEDwarning (info: light part, close at the first point without part check) after MAKRO343 the same load data
PART_LOAD_NOT_HEAVIERwarningafter MAKRO343 load data with the same or a lower mass
PART_LOAD_NOT_RESETwarningafter MAKRO342 still the load data of the part
PART_PRESENT_WITHOUT_PART_LOADwarningpart check "part in the gripper", but the first motion uses load data not used with a part in the other programs
VW logic: the part checks M1..M16 of Makro50 (part present with + E15, no part with negated inputs only) and WARTE BIS / WAIT on them tell whether the robot holds a part; close and open at the same point without a motion is a gripper test (ignored). Fanuc: only the programs of the folder ENGLISH. Details: Payload check. Other commands with open projects only (sources of the project tree): points with checks, tech, robot_data, collision_map – for archives on the disk first find_projects and open_project. search also takes "scope":"folders".