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):
- AI agent: command APIs and MCP server - the scripts in
AIAgent; the command APIs of the editor and of the Robot Cell Simulator are switched on at the first start. - Voice control VeRa with Whisper (offline) - the voice control with the local speech recognition Whisper (
AIAgent\whisper), downloaded during the installation from dramat.eu (whisper.zip, about 140 MB) and checked with its MD5 checksum - when the download fails, VeRa uses the speech recognition of Windows; the voice control is switched on at the first start (the microphone button in the toolbar starts the listening). - Multilingual speech model Whisper medium (large download) - the model
ggml-medium.bin(whisper_medium.zip, about 1.5 GB, downloaded from dramat.eu and checked with its MD5 checksum, extracted intoAIAgent\whisper\models): much better with German words like Folge and with free sentences for the AI agent, about 4 s per command; it needs the voice control VeRa. Without it VeRa uses the English model ofwhisper.zip.
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.
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.

Requirements in Windows
- 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).
- 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.
- 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.
- 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).
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).
| English | German | Command of the editor | Answer |
|---|---|---|---|
| Vera, save, Vera, save file | Vera, speichern, Vera, Datei speichern | {"cmd": "save"} | Saved. |
| Vera, save all | Vera, 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 file | Vera, 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 windows | Vera, 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 session | Vera, 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 session | Vera, 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 session | Vera, Dateien aus der letzten Sitzung wiederherstellen | {"cmd": "restore_session", "what": "files"} | Restoring the files of the last session. |
| Vera, reload, Vera, reload file | Vera, neu laden, Vera, Datei neu laden | {"cmd": "reload"} | Reloaded. |
| Vera, check syntax | Vera, Syntax prüfen | {"cmd": "check_syntax"} | |
| Vera, next window, Vera, next file | Vera, nächstes Fenster, Vera, nächste Datei | {"cmd": "window_next"} | |
| Vera, previous window, Vera, previous file | Vera, vorheriges Fenster, Vera, vorherige Datei | {"cmd": "window_previous"} | |
| Vera, first file, Vera, first window | Vera, erste Datei, Vera, erstes Fenster | {"cmd": "window_first"} | |
| Vera, last file, Vera, last window | Vera, letzte Datei, Vera, letztes Fenster | {"cmd": "window_last"} | |
| Vera, undo | Vera, rückgängig | {"cmd": "undo"} | |
| Vera, redo | Vera, wiederholen | {"cmd": "redo"} | |
| Vera, start simulator, Vera, open simulator | Vera, 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 robot | Vera, 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 robot | Vera, 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 project | Vera, 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 line | Vera, 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 line | Vera, 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 line | Vera, 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 line | Vera, 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 fold | Vera, 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 fold | Vera, 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 fold | Vera, 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 fold | Vera, 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 tech | Vera, 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 tech | Vera, 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 tech | Vera, 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 tech | Vera, 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 point | Vera, 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 point | Vera, 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 point | Vera, 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 point | Vera, 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 subprogram | Vera, 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 subprogram | Vera, 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 subprogram | Vera, 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 subprogram | Vera, 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 dialog | Vera, 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 editor | Vera, Programm beenden, Vera, Programm schließen, Vera, Editor schließen, Vera, Editor beenden | {"cmd": "ui_click", "action": "File > Exit"} | Goodbye. |
| Vera, stop listening, Vera, goodbye | Vera, nicht mehr zuhören, Vera, auf Wiedersehen | stop | Goodbye. |
| Vera, set active project / active project / activate robot three | Vera, 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 tree | Active project: {0}. |
| Vera, next robot / previous robot (also: next robot active, activate next robot) | Vera, nächster / vorheriger Roboter | next / previous robot project | Active 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:
- "Vera, open Folge 125 for all robots"
- "Vera, how many robot projects are open?"
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).
| Tool | What it does |
|---|---|
| status | State of the editor and the simulator: APIs reachable, licenses ready, active file, open dialog, editor busy (restoring the session / opening files), RCS loading / running. |
| editor | Any 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_read | Only 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). |
| rcs | Any 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_file | Opens a robot program or any text file in the editor (optionally at a line). |
| save | Saves the active document, or the given open file. |
| save_all | Saves all modified documents. |
| close_file | Closes 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_all | Closes 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). |
| reload | Reloads the active document (or the given file) from the disk. |
| documents | Open documents of the editor (file, modified, active). |
| projects | Robot projects in the project tree (name, controller type, config file, active). |
| set_active_project | Sets the active robot project (name or part of it, e.g. 'R03' or '0001R03'). |
| close_project | Closes 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_session | Restores 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. |
| goto | Moves 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_syntax | Checks 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. |
| menu | Lists the menu actions of the editor (path like 'File > Save all'), optionally filtered. |
| menu_click | Triggers 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_rcs | Switches on the API of the Robot Cell Simulator and opens it (waits until it answers). |
| rcs_study | Simulation 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.
| Command | Parameters | What it does |
|---|---|---|
| license | details | state 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} |
| documents | open documents (file, modified, active) | |
| documents_view | sortBy, robotPrefix, robotName | view 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"} |
| activate | file | makes an open document active |
| save | file, as, overwrite, ignoreEmptyComment, ignoreWarnings, manualUpgrade81, manualUpgradeCommented | saves 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_all | ignoreEmptyComment, ignoreWarnings, manualUpgrade81, manualUpgradeCommented | saves 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) |
| close | file, save | closes a document; a modified one only with save=true |
| close_all | save | closes all documents; modified ones only with save=true |
| reload | file, force | reloads from the disk; a modified one only with force=true |
| projects | robot 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_project | name | sets the active robot project (name or its end, e.g. R03) |
| export_longtexts | dir, format, projects | saves 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_file | file, content, overwrite, encoding, bom, width, height, landscape | writes 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_knowledge | file, content, mode, load | saves 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_map | projects, programs, formats, file, title | interlock (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_project | config | opens 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 |
| session | action, name, overwrite, file, to | the 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 |
| commands | file, controller | catalog 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:
|
| insert_command | command, values, file, line, position, strict, check | inserts 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:
{"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_syntax | file, run | checks 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_last | next / previous / first / last document window | |
| undo / redo | undo / 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) | |
| goto | file, target, direction | moves 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 |
| fold | action, file, line, direction, position, maxFolds, topLevel, values | KRC / 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) |
| cursor | file, line, column, context, move, count, select | reads 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}] |
| select | file, what, line, from, to | selects text: what = line (the current line or line), lines (from, to), all, none (clears the selection); answer like cursor |
| find | file, text, regex, case, word, direction, all, max | searches 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) |
| replace | file, find, with, regex, case, word, scope, all, dryRun, force | searches 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) |
| edit | file, action, text, count, line, position, from, to, force | changes 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) |
| tech | action, file, scope, projects, maxFiles, fileMask, openFiles, command, line, where, fields, full, summaryOnly, csv, set, dryRun, useSelectedVwUser | lists (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) |
| search | pattern, scope, projects, files, path, fileMask, ignoreCase, where, fields, max, maxFiles, context, text, csv | searches 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_data | projects, sections, all | data 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 |
| points | file, table, path, motions, acc, ranges, process, maxRows; scope, projects, files, fileMask, maxFiles, checks, select | points 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_chat | show, message, stop, newChat, learn, autoLearn, learnDir, anonymous, last | the 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_shot | every 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.
- Before open / open_file / new: these actions close all documents and all robot projects. When a document has unsaved changes the command is refused – the answer lists the files in modified. An AI agent asks the user first whether to save or discard them; it never opens a session over unsaved documents on its own.
- Restoring in the background: the answer is queued at once. While the session is restored status has busy: true, busyReason (e.g. restoring session 'Cell A') and session {name, projects (names of the robot projects), projectCount, fileCount, filesOpened, seconds}. Wait until session is gone and busy is false before the next command. status always has currentSession (the name of the current session, empty after new without a name).
- new {name}: a new empty session – without name it has no name (the editor asks for one when it is saved or the editor is closed), with name it gets that name; an existing session is never overwritten, the new one is then called Name (2), Name (3) ... (see currentSession).
- Starting the editor with a new empty session:
AIAgent\dres_api.ps1 -StartNewSession [-SessionName "Name"]starts the editor of the installation with the command line option--new-session[=Name](the last session is not restored), switches its command API on and waits until status reports startupDone: true; the printed status shows currentSession. When the editor runs already, the script sends session new instead. The option can also be used directly:dres_6.7.5.exe -i --new-session="Station 010". - Command line option
--wait-pid=<process id>: the new editor first waits until the process with this id has ended, then it starts. The editor uses it itself for the restart from the settings (Apply & restart): the old editor ends quickly and its last license session is released together with the process, the new one starts as soon as the old one is gone. Example:dres_6.7.5.exe -i --wait-pid=12345. - import_file (like Sessions > Import all sessions from file): copies all sessions (files and robot projects) from a session file or from the settings file of another DReS installation (.ini) into the session list; the current session and the open documents stay unchanged. onConflict for sessions with the same name: rename (default, keep both – the imported session gets a number, e.g. Cell A (2)) | overwrite | skip; answer imported (names in the list), skipped, overwritten.
- Console: when the restoring is finished (also after Cancel) the console of the editor writes Session 'Cell A' restored in 12.4 s: 6 robot project(s), 38 of 40 file(s) opened.
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):
- Protect Folds on (menu KRC > Protect Folds): every change of a line inside a fold and every new line inside a fold is refused; no parameter overrides it. Whole folds are copied, moved and deleted with fold.
- Always (switched off only with force: true, default false): no range of lines which cuts a fold (a ;FOLD without its ;ENDFOLD or the other way round); no lines into a point, command or inline form fold and no change of their lines (use fold with edit_dialog / set_params); a fold header line is not changed by type / backspace / delete_char; no line is joined with a ;FOLD / ;ENDFOLD line; the ;ENDFOLD line cannot be changed; inserted text must have balanced ;FOLD / ;ENDFOLD; replace must not add or remove the words ;FOLD / ;ENDFOLD.
- A refused change answers ok: false with error (the line and the reason). After a change the line types follow the text; when the folds of the program are not balanced, the answer has foldsBalanced: false and foldStructure (the first problem).
- force: true is for repairing a broken fold structure only – check the result with
{"cmd":"fold","action":"list"}(balanced).
Examples:
{"cmd":"cursor","line":120,"context":3}– cursor to line 120, answer with the lines 117..123{"cmd":"replace","find":"Vel=(\\d+)%","with":"Vel=\\1% ;checked","regex":true,"dryRun":true}– only the preview (count, lines, old / new), nothing is changed{"cmd":"edit","action":"insert","line":42,"position":"after","text":"; comment"}– a new line after line 42
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.
| Parameter | Default | Meaning |
|---|---|---|
| action | list | list | goto | select | copy | cut | delete | paste | move | collapse | expand | params | set_params | edit_dialog | comment (see below) |
| file | active document | an open KRC / KUKA iiQKA program |
| line | line of the cursor | line (from 1) of the fold: the header line or a line inside the fold; for goto the start line of the search |
| direction | next (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 |
| position | after | paste: after (after the ;ENDFOLD of the fold) | before (before its header) | inside (as the last lines of the fold) |
| maxFolds | 2000 | list: at most so many folds in folds (1..20000); count is always the full number |
| topLevel | false | list: true = only folds which are not inside another fold |
| values | none (required for set_params) | set_params: {key: value} – the keys of the ;Params line (see params) |
| Action | What it does | Answer |
|---|---|---|
| list | all 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) |
| goto | moves the cursor to a fold (collapsed folds around it are expanded) | fold, line; notFound: true when there is no such fold |
| select | selects the whole fold (header to ;ENDFOLD) | fold, fromLine, toLine |
| copy | copies the whole fold to the clipboard (point data included, like Ctrl+C) | fold, dialogs |
| cut | cuts the whole fold (like Edit > Cut with the point data) | fold and the result of a change |
| delete | deletes the whole fold with its data (like Delete on the selected fold, without the question) | fold and the result of a change |
| paste | pastes the clipboard (a copied / cut fold) as whole lines at position; never into a point, command or inline form fold | pastedAtLine and the result of a change; ok: false when nothing was pasted |
| move | moves 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 moved | movedToLine and the result of a change |
| collapse / expand | collapses / expands the fold | fold, collapsed |
| params | reads 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_params | changes 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_dialog | changed (keys), dialogs and the result of a change |
| edit_dialog | opens 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 |
| comment | comments / 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.
| Parameter | Meaning |
|---|---|
| action | list (default) – the commands and their parameters; set – change parameters |
| file | an open document; without file all open documents |
| scope | file (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 |
| projects | with 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 |
| maxFiles | with scope projects: at most this number of files (default 300) |
| csv | only with action list: writes the found commands to this CSV file, e.g. "D:/x/servozange.csv" |
| fileMask | only these programs (scope projects and open), e.g. ["up*"], ["folge*"], ["makro*"] or ["folge81*"] |
| openFiles | list with scope projects: true – reads the files through the editor (the files are opened) instead of from the disk (default false) |
| fields | only these parameters, e.g. ["Programmnummer","Punktnummer","FahrzeugTyp","Offset"] |
| full | true – the detailed answer of list (see below); default false – compact answer |
| summaryOnly | true – 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 |
| command | only 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) |
| line | only the command in this line |
| where | only commands whose current values meet these conditions: "6" (equal), ">0", ">=2", "<5", "<=5", "!=6"; e.g. {"P1":"5"}, {"FahrzeugTyp":"6"} or {"Offset":">0"} |
| set | new values: {"<name or P#>":"<value>"} |
| dryRun | true – only shows what would change, nothing is changed |
| useSelectedVwUser | true – 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.
- a file of the active robot project: changed;
- a file of another (inactive) project: the VW user of its project is read from the disk (KRC\R1\VW_User\vw_usr_s.src); the same one as in the toolbar – changed without switching the project, another one – refused (first set_active_project);
- a file outside all robot projects: only with useSelectedVwUser: true;
- Fanuc: only files of the active robot project (VW_USER file of the active project);
- SERVOZANGE folds do not need a VW user.
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.
| Parameter | Meaning |
|---|---|
| pattern | regular expression per line (required); named groups (?<name>...) are the values that come back in groups and summary |
| scope | projects (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 |
| projects | only robot projects whose name contains one of these texts, e.g. ["R01"]; without it all projects |
| files | with scope files: paths of files or folders (folders with sub-folders) |
| path | sub-folder of every robot project, e.g. "KRC/R1/System" |
| fileMask | e.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 |
| ignoreCase | default true |
| where | conditions on the groups: "6", ">0", ">=2", "<5", "<=5", "!=6", "~text" (contains), e.g. {"tool":">0"} |
| fields | only these groups in the answer |
| max | hits listed (default 200, at most 5000); found counts all |
| maxFiles | at most this number of files (default 5000) |
| context | lines before and after a hit (0 to 5, default 0) |
| text | true – the text of the line also when the pattern has groups (to check the pattern) |
| csv | writes 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.
| Parameter | Meaning |
|---|---|
| projects | robot projects whose name contains one of these texts, e.g. ["R01"]; ["*"] all; without it the active project |
| sections | info (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 |
| all | true – 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.
| Parameter | Meaning |
|---|---|
| file | the program (.src, .ls, .mod, .jbi); without it the active document |
| table | true (default) – columns and rows: Point, Motion, X, Y, Z, A, B, C, S, T, E1.., Tool, Base, VB, VE (VKRC) |
| maxRows | at most this number of rows (default 500) |
| path | true (default) – the TCP path in path |
| acc | acceleration for the motion time in mm/s² (default 2000) |
| ranges | lengths between points, e.g. [["P5","P12"]] |
| process | process (glue, MAG, laser) length: {"on":"<regex of the line that switches it on>","off":"<regex off>"} |
| motions | true – 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.
| Parameter | Meaning |
|---|---|
| scope, projects, files | projects – 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 |
| fileMask | default ["folge*","up*"]; without an extension the extension of the controller is added |
| maxFiles | at most this number of files (default 300) |
| checks.samePoints | pairs 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.callStart | true – 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.tolerance | in mm (default 2); different bases with the same tool are compared in world coordinates (bases from $config.dat), different tools are not comparable |
| checks.onlyFailed | true (default) – only the programs that break the condition |
| select | these 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 asaxis_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).
| Command | What it does |
| find_projects | Robot 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_syntax | With 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_check | TCP 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_usage | project | 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_check | Load 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_world | project | 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). |
| compare | Two files a, b: equal, onlyInA,
onlyInB, hunks (changed lines with context); ignoreWhitespace
(true), ignoreCase, ignoreComments, maxHunks. |
| archive_diff | Two 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_offline | Points 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):
| Attribute | Default | Meaning |
| 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 |
| minPartMass | value of the window (10) | [kg] parts lighter than this need no own load data: a
missing switch at MAKRO343 is only an info |
| minToolMass | value 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 |
| gripper | value of the window (true) | check the gripper macros 342 / 343 (VKRC, Fanuc) |
| maxItems | 500 | maximum number of findings in the answer (1..20000) |
| dialog | false | true: open the window Payload check with these values (they are saved as the values
of the window) and answer {"ok":true,"dialog":true} |
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.
| Code | Severity | Meaning |
| LOAD_NOT_SET | error (warning with assignments only) | used tool / payload schedule without load data |
| LOAD_ZERO_MASS | warning | load data with the mass 0 kg |
| LOAD_TOO_LIGHT | warning | process tool lighter than minToolMass |
| PAYLOAD_NOT_SWITCHED_IN_PROGRAMS | info | Fanuc: no PAYLOAD[n] in the programs |
| PART_LOAD_NOT_SWITCHED | warning (info: light part, close at the first point without part check) | after MAKRO343 the same load data |
| PART_LOAD_NOT_HEAVIER | warning | after MAKRO343 load data with the same or a lower mass |
| PART_LOAD_NOT_RESET | warning | after MAKRO342 still the load data of the part |
| PART_PRESENT_WITHOUT_PART_LOAD | warning | part check "part in the gripper", but the first motion uses load data not used with a part in the other programs |
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".
VeRa - AI agent and voice control


