TiaCommander
Servidor MCP para Siemens TIA Portal — programação de CLP assistida por IA, configuração de hardware, referências cruzadas, implantação via API Openness. 16 ferramentas, 166 ações.
Documentação
TiaCommander — Servidor MCP para o TIA Portal da Siemens
| Versão | 3.42.0 |
| Protocolo | MCP 2024-11-05 (stdio) |
| Runtime | .NET Framework 4.8 |
| TIA Portal | V17 – V20 (API Openness, testado no V19) |
| Licença | Proprietária (beta gratuito) |
Novidades nesta versão: uma nova ferramenta technology_objects — 15 ações para listar e ler objetos de tecnologia, alterar parâmetros, edições estruturais, exportar/importar e conectar um objeto ao seu hardware; credenciais de PLC por projeto com uma nova aba Credenciais no Gerenciador — a senha do próprio projeto é tentada primeiro, e uma senha global é o fallback; sobrescritas transacionais de blocos — o bloco é exportado antes da importação e restaurado se a importação falhar, e as sobrescritas não perdem mais atributos, números de bloco ou posicionamento em pastas; e resultados do compilador que listam apenas diagnósticos reais, para que os totais sempre correspondam à contagem do próprio compilador. Dezenas de outras correções e melhorias desde a v3.15.2 — veja CHANGELOG.md para a lista completa.
*V17 a V20 são suportados para trabalho em projetos. V16 e versões anteriores são detectados e recusados com uma mensagem clara. Apenas o V19 é totalmente testado; espera-se que os demais funcionem, pois o TIA Portal mantém APIs Openness compatíveis com versões anteriores.
Visão Geral
O TiaCommander é um servidor MCP que conecta assistentes de IA ao TIA Portal da Siemens por meio da API Openness. Ele permite programação de PLC assistida por IA, gerenciamento de projetos, operações de bibliotecas, configuração de hardware, análise de referências cruzadas e implantação — tudo por meio de linguagem natural.
Clientes de IA testados: Claude Desktop, Claude Code, VS Code (Copilot), Cursor, Windsurf, Codex CLI, Gemini CLI.
19 ferramentas, 230 ações cobrindo todo o ciclo de vida de projetos no TIA Portal.
| Ferramenta | O que faz |
|---|---|
admin | Administração do servidor, estatísticas de uso, armazenamento de exportações |
alarm_text | Textos de alarme e listas de texto, importação / exportação XLSX |
blocks_read | Ler, inspecionar e exportar blocos FB / FC / OB / DB (XML, SCL) |
blocks_write | Criar e importar blocos (SCL, LAD, FBD, STL) |
db | Membros e valores de blocos de dados globais e de instância |
diagnostics | Configuração de conexão, comparação online / offline, estado do PLC |
download_upload | Download para / upload do PLC com verificação de compilação |
folders | Navegar e organizar os grupos da árvore do projeto |
get_info | Capacidades e versão do servidor |
hardware | Configuração de dispositivos, racks / slots, rede e I/O |
library | Cópias mestras, tipos de biblioteca, instanciação versionada |
live_data | Valores ao vivo e diagnósticos da CPU do controlador em execução |
open_manager | Abrir a janela do Gerenciador do TiaCommander |
session | Abrir, salvar, arquivar e alternar projetos; ciclo de vida da conexão |
tag | Tabelas de tags do PLC: criar, editar, pesquisar, atribuição de endereços |
technology_objects | Eixos e outros objetos de tecnologia: ler, ajustar, conectar ao hardware |
udt | Tipos definidos pelo usuário: criar, editar membros, importar / exportar |
watch | Tabelas de observação e forçamento |
xref | Referências cruzadas: chamadores, blocos não utilizados, DBs de instância órfãos |
O que está incluído no download?
TiaCommander-v3.42.0-portable/
├── bridge/ ← Live PLC data helper (S7CommPlus / TLS)
│ ├── libcrypto-3-x64.dll
│ ├── libssl-3-x64.dll
│ ├── S7CommPlusDriver.dll
│ ├── TiaCommander.S7Bridge.exe
│ ├── TiaCommander.S7Classic.dll
│ └── zlib.net.dll
├── data/
│ └── exports/ ← Export output folders
│ ├── alarm_text/
│ ├── hardware/
│ ├── tag/
│ └── watch/
├── docs/
│ ├── configs/
│ │ ├── claude_code.txt
│ │ ├── claude_desktop_config.json
│ │ ├── codex_cli_config.toml
│ │ ├── cursor_mcp.json
│ │ ├── gemini_cli_settings.json
│ │ ├── generic_stdio.json
│ │ ├── vscode_copilot_mcp.json
│ │ └── windsurf_mcp_config.json
│ ├── 1-QUICKSTART.md
│ ├── KNOWN_LIMITATIONS.md
│ ├── LICENSE.txt
│ ├── README.md
│ └── THIRD-PARTY.md
├── help/
│ ├── github-offline.html
│ └── readme-offline.html
├── licenses/ ← Full third-party licence texts
│ ├── Apache-2.0.txt
│ ├── BSD-3-Clause.txt
│ ├── GPL-3.0.txt
│ ├── LGPL-3.0.txt
│ ├── Microsoft-WebView2-SDK.txt
│ ├── MIT.txt
│ └── Polyform-Noncommercial-1.0.0.txt
├── Resources/
│ ├── logoBlack.png
│ └── tiacommander.png
├── runtimes/ ← WebView2 native loaders
│ ├── win-x64/native/WebView2Loader.dll
│ ├── win-x86/native/WebView2Loader.dll
│ └── win-arm64/native/WebView2Loader.dll
├── Templates/ ← Block XML, alarm & diagnostics templates
│ ├── diagnostics/
│ │ ├── TC_Diag_1200.xml
│ │ └── TC_DiagOB.xml
│ ├── Fb.xml
│ ├── Fc.xml
│ ├── GlobalDb.xml
│ ├── Ob.xml
│ ├── Ob_FBD.xml
│ ├── Ob_LAD.xml
│ ├── Ob_SCL.xml
│ └── TextListTemplate.xlsx
├── x64/ ← SQLite native library (64-bit)
│ └── SQLite.Interop.dll
├── x86/ ← SQLite native library (32-bit)
│ └── SQLite.Interop.dll
├── CHANGELOG.md
├── EPPlus.dll
├── EPPlus.Interfaces.dll
├── icon.png
├── manifest.json
├── Microsoft.Bcl.AsyncInterfaces.dll
├── Microsoft.IO.RecyclableMemoryStream.dll
├── Microsoft.Web.WebView2.Core.dll
├── Microsoft.Web.WebView2.WinForms.dll
├── System.Buffers.dll
├── System.ComponentModel.Annotations.dll
├── System.Data.SQLite.dll
├── System.IO.Pipelines.dll
├── System.Memory.dll
├── System.Numerics.Vectors.dll
├── System.Runtime.CompilerServices.Unsafe.dll
├── System.Security.Cryptography.Xml.dll
├── System.Text.Encodings.Web.dll
├── System.Text.Json.dll
├── System.Threading.Tasks.Extensions.dll
├── THIRD-PARTY-NOTICES.md
├── TiaCommander.exe ← MCP server + Manager GUI
└── TiaCommander.exe.config
Sem instalador, sem alterações no registro, sem modificações no sistema. Extraia, configure e execute. Baixe a versão mais recente do .zip em GitHub Releases.
Usuários do Claude Desktop: Baixe o pacote .mcpb em Releases e instale via Configurações → Extensões → Configurações Avançadas → Instalar Extensão. Não é necessário editar arquivos de configuração. Consulte o Guia de Início Rápido para detalhes.
Pré-requisito: O Siemens TIA Portal V17 ou posterior deve estar instalado na sua máquina com o componente Openness habilitado. O TiaCommander carrega as bibliotecas Openness da Siemens diretamente da sua instalação do TIA Portal em tempo de execução. Sem o TIA Portal, o servidor inicia em modo degradado com funcionalidade limitada e orienta você na configuração.
Por que esta ferramenta existe?
Primeiro as coisas mais importantes — somos desenvolvedores de software e engenheiros de automação que usam produtos Siemens diariamente — em nossas próprias instalações, em sites de clientes e em todos os projetos que precisam de automação industrial. Nós amamos isso. Com a Siemens, é simples — simplesmente funciona. Sempre. O tempo todo.
Durante anos de programação prática, cabeamento, testes, depuração e realização de coisas com PLCs Siemens, construímos o TiaCommander apenas para nossas próprias necessidades internas. Essa é a razão honesta pela qual ele existe — nós o construímos para nós mesmos e o achamos incrível. Ele acelera as coisas dez vezes, às vezes vinte vezes, e às vezes mais — até você se perguntar: como diabos fazíamos as coisas antes?!
Você pode obter o contexto completo do projeto por meio do seu assistente de IA em menos de um minuto. Crie qualquer bloco em segundos — SCL, LAD, FBD, DB — obtenha estruturas de interface, construa DBs de múltiplas instâncias, execute referências cruzadas, compile, depure, recupere erros e muito mais.
Cada ferramenta que você vê no mapa de ferramentas abaixo é construída a partir do que realmente precisamos ou usamos em nossas operações diárias com PLCs Siemens. Se você trabalha com as séries S7-1200 ou S7-1500 — não importa. Se o TIA Portal da Siemens suporta, você pode usar o TiaCommander para gerenciar.
Agora que estamos tornando esta ferramenta pública — estamos genuinamente interessados em quais recursos você sente falta no seu fluxo de trabalho de desenvolvimento. Não seja tímido — envie uma solicitação de recurso, registre um relatório de bug ou apenas nos diga o que você pensa. Como Engenheiro para Engenheiro — lemos cada linha de feedback.
Aproveite o TiaCommander.
Arquitetura
AI Clients
Claude Desktop / Code · Cursor · VS Code / Copilot · Windsurf · Codex CLI · Gemini CLI
│
│ JSON-RPC 2.0 · stdio
▼
TiaCommander MCP Server
19 tools · 230 actions · standalone I/O · .NET Framework 4.8
│
│ Siemens Openness API
▼
TIA Portal (V17 – V20*, tested on V19)
│
▼
S7-1200 · S7-1500 · S7-300 · S7-400 · ET 200
Mapa de Ferramentas
| Ferramenta / Ação | # | Descrição |
|---|---|---|
admin | 13 | Administração do servidor |
clear_exports | (opcional olderThanHours=24) Excluir exportações expiradas. | |
delete_export | (exportId) Excluir uma única exportação. | |
get_device_profiles | Todos os dispositivos únicos vistos pelo servidor. | |
get_export | (exportId; opcional offset, length, raw=false) Recuperar conteúdo de exportação com paginação. raw=true retorna apenas o conteúdo, sem cabeçalho de metadados. | |
get_recent_errors | (opcional count=10) Últimas N chamadas de ferramenta com falha, com contexto de dispositivo/firmware. | |
get_system_info | SO, versão do .NET, versão do TIA Portal, tempo de atividade do processo. | |
get_stats | (opcional top_n=20) Estatísticas de chamadas por ferramenta+ação, ordenadas por total de chamadas. | |
get_version | Versão do servidor, caminho do banco de dados, tamanho do banco de dados. | |
list_exports | (opcional tool, limit=20) Resultados recentes de exportação armazenados no banco de dados de exportação. | |
open_file | (filePath) Abrir um arquivo usando o aplicativo padrão do Windows (Excel para .xlsx, navegador para .html, etc.). Use após qualquer ação de exportação para permitir que o usuário inspecione os resultados imediatamente. | |
reset_device_catalog | Limpar o catálogo local de dispositivos e recarregar do TIA Portal, se conectado. | |
save_export | (exportId, outputPath) Salvar o conteúdo da exportação em um arquivo. Decodifica automaticamente base64 para formatos binários (XLSX). Após salvar, pergunte ao usuário se deseja abrir o arquivo (use admin action=open_file). | |
search_device_catalog | (opcional filter, limit=50) Pesquisar o catálogo de hardware TIA instalado no banco de dados local. Não é necessário o TIA Portal. Use para consultas de referência de hardware (números de pedido, modelos de CPU, módulos compatíveis). | |
alarm_text | 15 | Textos de alarme e listas de texto |
add_entries | (deviceName, textlistName, entries[]) Adicionar entradas a uma lista de texto. Cada entrada: {from, to, text}. | |
create_textlist | (deviceName, textlistName; opcional listRange=Decimal, comment, entries[]) Criar nova lista de texto. Funciona em dispositivos vazios (auto-preenchida via modelo). Opcionalmente, preencher com entradas em uma única chamada. | |
delete_entries | (deviceName, textlistName, fromValues[]) Excluir entradas pelo valor From. | |
delete_textlist | (deviceName, textlistName) Excluir uma lista de texto do usuário. Listas de texto do sistema são rejeitadas. | |
export_alarm_classes | (deviceName, outputPath) Exportar definições de classes de alarme. Após exportar, pergunte ao usuário se deseja abrir o arquivo (use admin action=open_file). | |
export_alarm_data | (deviceName, format:csv|xlsx; opcional scope:alarm_texts|textlists|alarm_classes, outputPath, includeInfoText) Exportar dados de alarme para CSV ou XLSX para documentação. Padrão para exports_root\alarm_text. Após exportar, pergunte ao usuário se deseja abrir o arquivo (use admin action=open_file). | |
export_alarm_texts | (deviceName, outputPath; opcional includeInfoText) Exportar textos de instância de alarme para XLSX. Após exportar, pergunte ao usuário se deseja abrir o arquivo (use admin action=open_file). | |
export_textlists | (deviceName, outputPath; opcional textListNames[]) Exportar listas de texto para XLSX. Todas se nenhum filtro for fornecido. Após exportar, pergunte ao usuário se deseja abrir o arquivo (use admin action=open_file). | |
get_entries | (deviceName, textlistName) Ler todas as entradas de uma lista de texto. | |
import_alarm_classes | (deviceName, filePath) Importar definições de classes de alarme. | |
import_alarm_texts | (deviceName, filePath) Importar textos de instância de alarme de XLSX. | |
import_textlists | (deviceName, filePath; opcional overwrite) Importar listas de texto de XLSX. | |
list_textlists | (deviceName) Listar listas de texto do sistema e do usuário com nome, ID, intervalo. | |
update_entries | (deviceName, textlistName, entries[]) Atualizar entradas pelo valor From. Cada entrada: {from, to?, text?}. | |
update_textlist_comment | (deviceName, textlistName, newComment) Atualizar o comentário da lista de texto diretamente. | |
blocks_read | 17 | Ler e exportar blocos |
check_consistency | (deviceName) M10: O sinalizador IsConsistent pode ficar desatualizado em relação à compilação — use a saída de compile_all em vez disso. | |
compile_all | (deviceName) Compilar tudo. Execute cedo para resolver F6. Primeira execução lenta (~30-60s). | |
compile_block | (deviceName, blockName) Compilar um bloco. | |
export_all_xml | (deviceName, outputDirectory) Todos os blocos como arquivos .xml. M5: o argumento é 'outputDirectory', não 'outputPath'. Após exportar, pergunte ao usuário se deseja abrir o diretório de saída (use admin action=open_file). | |
export_source | (deviceName, blockName; opcional outputPath, returnInline, outputDirectory) Fonte SCL/STL. Com outputPath, vai para o disco (M3: deve ser um DIRETÓRIO); omita-o e returnInline se aplica. LAD/FBD retornam vazio. Após exportar, pergunte ao usuário se deseja abrir o arquivo (use admin action=open_file). | |
export_xml_file | (deviceName, blockName; opcional outputPath, returnInline, outputDirectory) XML do bloco. Com outputPath, vai para o disco; omita-o e returnInline se aplica. Após exportar, pergunte ao usuário se deseja abrir o arquivo (use admin action=open_file). | |
export_xml_inline | (deviceName, blockName) Resumo XML analisado. F6 se aplica. | |
get_all_interfaces_summary | (deviceName) Contagens de membros por seção para todos os blocos. | |
get_compiler_errors | (deviceName) Filtro somente de erros. Mesma peculiaridade de recompilação do M8. | |
get_compiler_messages | (deviceName) M8: aciona uma nova compilação. Prefira a saída de compile_all se acabou de compilar. | |
get_details | (deviceName, blockName) Tipo, número, linguagem, tamanho da interface, consistência. | |
get_edit_capabilities | (deviceName, blockName; opcional networkIndex) #232 P0: A CHAMADA DE DESCOBERTA. Por rede: sua PRÓPRIA linguagem de unidade de compilação (a de nível de bloco é enganosa em blocos de linguagem mista), se o modelo de rung faz round-trip, quais ações de escrita se aplicam e a rota de fallback quando nenhuma se aplica. Uma chamada em vez de uma dúzia de dicas dispersas. Custa UMA exportação - medido: não há re... de modelo de objeto por rede. | |
get_element_pins | (deviceName, blockName, networkIndex; opcional elementUId ou elementIndex) O cartão 'olhe antes de conectar': para uma Parte de Call ou instrução, cada pino com seção, tipo de dados ESPERADO (lido ao vivo da interface do chamado / estrutura de instância) e fiação atual (operando + seu tipo resolvido, ou OpenCon SEM FIO). Sem seletor: lista os elementos da rede com UIds. Use ANTES de blocks_write u... | |
get_interface | (deviceName, blockName) Seções completas da interface. F6: falha em blocos inconsistentes — compile_all primeiro. | |
get_network | (deviceName, blockName, networkIndex; opcional includeUIds) #171 lado LEITURA do editor de rung: reconstrói o grafo plano de Parts+Wires da rede em um modelo JSON de rung - EXATAMENTE o vocabulário que create_block networks[].rungs aceita (contacts/parallelBranches/box/output/call, além de enFrom para cadeias de chamadas em cascata ENO). Saída: {title, comment, editable, rungs[], unmodelled[]}. editable=true significa que o mod... | |
get_xml_raw | (deviceName, blockName) String XML bruta. F6 se aplica. | |
list | (deviceName; opcional typeFilter:all|code|OB|FB|FC|DB|GlobalDB|InstanceDB, includeInstanceDbs) Tabela compacta de blocos. | |
blocks_write | 26 | Criar e importar blocos |
add_interface_member | (deviceName, blockName, section, memberName, dataType; opcional startValue, comment, confirm) #171 editor de interface: adicionar um membro a uma seção de interface de FB/FC/OB (Input, Output, InOut, Static, Temp, Constant). O RAIO DE IMPACTO é calculado PRIMEIRO (xref chamadores cujos locais de chamada ficam desatualizados + os DBs de instância do FB + o aviso #183 reinitializeDataBlocks: o download redefine valores reais dos afetados... | |
add_multi_instance_member | (deviceName, parentFB, memberName, innerType; opcional onCollision=fail|replace) Adicionar membro estático tipado ao FB. innerType deve existir no dispositivo ou em project.ProjectLibrary. | |
add_network | (deviceName, blockName; opcional position, title, comment) Inserir rede vazia na posição (padrão: final). Somente LAD/FBD — blocos SCL têm uma única unidade de compilação e não suportam múltiplas redes. Use populate_network / insert_rung para adicionar lógica depois. | |
copy_block | (deviceName, blockName, newName; opcional targetFolder, createParents=false) Duplicar um bloco com um novo nome (nomes de bloco são ÚNICOS em todo o PLC, então newName é obrigatório e verificado recursivamente). targetFolder omitido = a cópia fica ao lado do bloco de origem. A cópia recebe o próximo número livre do seu tipo. O bloco de origem nunca é modificado. OFFLINE obrigatório. | |
create_block | (deviceName, blockName, blockType:FB|FC|OB, language; opcional blockNumber, interface, sclCode, networks, blockTitle, blockComment, author, version, memoryLayout, secondaryType, overwrite, targetFolder, createParents) Criação completa de bloco com interface e lógica personalizadas. blockNumber atribuído automaticamente se omitido — SOMENTE para blocos genuinamente novos. Ao usar overwrite=true para atualizar um bloco existente (e... | |
create_fb | (deviceName, fbName; opcional fbNumber, language:LAD|SCL|FBD (STL não suportado - limitação do Openness), author, version, autoCompile=true, targetFolder, createParents=false) Novo FB. Número atribuído automaticamente se omitido. Auto-compila e retorna erros. targetFolder (sintaxe 'Motors/Drives') cria o bloco diretamente dentro dessa pasta; pastas ausentes são um ERRO a menos que createParents=true. | |
create_fc | (deviceName, fcName; opcional fcNumber, language, returnType=Void, author, version, autoCompile=true, targetFolder, createParents=false) Novo FC. Número atribuído automaticamente se omitido. Auto-compila e retorna erros. targetFolder como em create_fb. | |
create_ob | (deviceName, obName; opcional obNumber, language, author, version, autoCompile=true, targetFolder, createParents=false) Novo OB. Número atribuído automaticamente se omitido (começa em 123). obNumber=1 permitido; 2-122 reservados. Auto-compila e retorna erros. targetFolder como em create_fb. | |
delete_block | (deviceName, blockName; opcional force=false) Excluir qualquer bloco. DBs de instância são rejeitados a menos que force=true (útil para DBs de instância órfãos). | |
delete_interface_member | (deviceName, blockName, memberName; opcional section, confirm) Remover um membro da interface. Mesmo portão de confirmação de raio de impacto. A lógica que ainda referencia o membro falhará na compilação - verifique primeiro com xref get_references. | |
delete_network | (deviceName, blockName, networkIndex) Remover rede pelo índice baseado em 0. Recusa se for a última rede. Somente LAD/FBD. | |
delete_rung | (deviceName, blockName, networkIndex, rungIndex; opcional expectTitle) Remover rung rungIndex. Recusa quando o PRÓXIMO rung encadeia (enFrom) do removido - redirecione ou exclua a cauda primeiro. | |
delete_scl_statement | (deviceName, blockName, networkIndex, statementIndex, matchText) #232 P0: remove UMA declaração de uma rede SCL, em uma única chamada. Leia as declarações primeiro com blocks_read action=get_network, que as lista com base 0 e texto normalizado por espaços em branco. matchText é OBRIGATÓRIO e é comparado com a declaração EM statementIndex antes de qualquer modificação — os índices mudam a cada edição, então um ... | |
import_xml_file | (deviceName, filePath; opcional overwrite, autoCompile=true, targetFolder, createParents=false) Importar de arquivo XML. Compila automaticamente e retorna erros. Preferido para cargas grandes. targetFolder como em import_xml_inline. SOBRESCRITA É UMA SUBSTITUIÇÃO DE OBJETO INTEIRO, NÃO UMA MESCLAGEM: com overwrite=true, qualquer elemento AUSENTE do seu documento é REDEFINIDO para o padrão em vez de preservado (ImportOptions.Overrid... | |
import_xml_inline | (deviceName, xmlContent; opcional overwrite, autoCompile=true, targetFolder, createParents=false) Importar bloco de string XML. Compila automaticamente e retorna erros. Cargas grandes (12KB+) verificadas. targetFolder importa para essa pasta; sem ele, overwrite=true direciona automaticamente para a pasta onde o bloco existente já reside (importação do grupo proprietário). SOBRESCRITA É UMA SUBSTITUIÇÃO DE OBJETO INTEIRO, NÃO UMA MESCLAGEM: co... | |
insert_rung | (deviceName, blockName, networkIndex, rung; opcional position, expectTitle) #171 editor de rung: inserir UMA rung (vocabulário create_block rung: contacts/parallelBranches/box/output OU call{blockName,blockType,instanceDB,scope,pins}, opcional enFrom para encadeamento eno) em uma rede LAD EXISTENTE na position (padrão: anexar). A rede deve estar totalmente modelada (get_network editable=true) — recusado ... | |
move_block | (deviceName, blockName, targetFolder; opcional createParents=false) Mover um bloco para outra pasta ('' ou '/' = raiz do contêiner). Openness V19 NÃO tem movimento nativo — isto é exportar -> excluir -> importar para o grupo de destino, com restauração automática para a pasta original se a importação falhar. Verificado por re-resolução e recompilado depois. OFFLINE obrigatório. | |
populate_network | (deviceName, blockName, networkIndex, rungs; opcional overwriteExisting, expectTitle) Preencher uma rede com um array rungs[] (vocabulário create_block networks[].rungs incl. cadeias enFrom). Redes vazias (add_network recém-criada) populam diretamente; redes não vazias exigem overwriteExisting=true E modelagem completa (get_network primeiro para preservar o conteúdo). Validação pré-importação estilo #164 com JSON-path... | |
remove_multi_instance_member | (deviceName, parentFB, memberName) Remover membro estático de multi-instância. | |
rename_block | (deviceName, blockName; opcional newName, newNumber) Renomear/renumerar. NÃO propaga automaticamente para chamadores. | |
replace_network | (deviceName, blockName, networkIndex; opcional title, comment) Substituir título/comentário da rede. Somente LAD/FBD — sclCode não suportado (XML SCL é tokenizado; use create_block com overwrite=true para reconstruir blocos SCL). | |
split_network | (deviceName, blockName, networkIndex, splitBefore[], titles[]) #232 P0: dividir UMA rede SCL em várias nos limites de declaração, cada uma com seu próprio título. splitBefore lista os índices de declaração nos quais uma nova rede COMEÇA: [2,4] em uma rede de 6 declarações gera três redes de 0-1, 2-3, 4-5. titles[] deve ter exatamente UMA entrada A MAIS que splitBefore e nunca é padronizado. Uma PARTIÇÃO, não um... | |
update_interface_member | (deviceName, blockName, memberName; opcional section, newName, newDataType, newStartValue, newComment, confirm) Atualizar ou RENOMEAR (newName) um membro da interface. Section omitida = pesquisada em todas as seções; erro lista membros por seção. Mesma porta de confirmação de raio de impacto. newStartValue/newComment com string vazia remove. | |
update_network | (deviceName, blockName, networkIndex; opcional title, comment) Atualizar título/comentário da rede (índice com base 0). | |
update_network_element | (deviceName, blockName, networkIndex, elementUId ou elementIndex; opcional newInstance, newTarget, pinWires) Edição cirúrgica de elementos Call em LAD/FBD. newInstance: trocar DB de instância. newTarget: redirecionar para um FB/FC diferente (regenera parâmetros, preserva fios correspondentes). pinWires: objeto JSON mapeando nomes de pinos para novos operandos — VERIFICADO POR TIPO antes de qualquer mutação contra o tipo declarado do pino... | |
update_rung | (deviceName, blockName, networkIndex, rungIndex, rung; opcional expectTitle) Substituir a rung rungIndex pelo objeto rung fornecido. Mesmo requisito de rede modelada e ressalva de renumeração que insert_rung. | |
db | 11 | Gerenciamento de blocos de dados |
add_member | (deviceName, dbName, memberName, dataType; opcional comment, initialValue) Adicionar membro a DB global. Suporta todos os tipos, incluindo arrays (ex.: Array[0..9] of Int) e referências UDT. Somente DBs globais — DBs de instância rejeitados. | |
create | (deviceName, dbName; opcional dbNumber, author, version, memoryLayout, targetFolder, createParents) Novo DB global. Número atribuído automaticamente se omitido. targetFolder (sintaxe 'Motors/Drives') cria o DB diretamente dentro dessa pasta; pastas ausentes são um ERRO a menos que createParents=true. Para DBs de instância, use create_instance_db. | |
create_instance_db | (deviceName, dbName, instanceOfName; opcional dbNumber) Criar DB de instância para um FB. TIA popula automaticamente a interface a partir do FB. instanceOfName deve ser um FB existente. Número atribuído automaticamente se omitido. | |
delete | (deviceName, dbName) Excluir DB. Rejeita DBs de instância (exclua o FB proprietário em vez disso). | |
delete_member | (deviceName, dbName, memberName) Remover membro de DB global. Recusa o último membro. | |
get_member | (deviceName, dbName, path; opcional depth=2) #171 LEITURA de dados de instância em QUALQUER profundidade: caminho de membro pontilhado em cadeias aninhadas de multi-instância, instâncias de instrução, membros UDT/struct (ex.: 'modbus.BWTT-RR8_Instance.mb_addr'). O cartão mostra tipo, valor(es) inicial(is) incl. por elemento de array, comentário, filhos até depth. Funciona em DBs GLOBAIS e DE INSTÂNCIA (exceção: iDBs de blocos de sistema não podem ser exportados). Membro... | |
get_structure | (deviceName, dbName) Lista completa de membros com tipos, valores iniciais, atributos via exportação XML. Lista plana (sem hierarquia de aninhamento). | |
list | (deviceName) Todos os DBs globais e de instância. Nomes são caminhos qualificados 'Folder/Sub/Name' (#185). | |
set_start_value | (deviceName, dbName, path, value | values{path:value,...}) #171 ESCRITA de dados de instância em QUALQUER profundidade, em DBs globais E de instância (somente valores iniciais, nunca estrutura — a superfície de configuração de multi-instância, ex.: o padrão mb_addr de uma chamada de estação dentro do DB de polling). Elementos de array via [index] no ÚLTIMO segmento ('Cfg_HwId[3]'). Valores são literais TIA como strings ('33', 'TRUE', 'T#2S', '16#00FF'). TODOS os pa... | |
update_member | (deviceName, dbName, memberName; opcional newDataType, newStartValue, newComment) Atualizar propriedades do membro. Pelo menos um campo obrigatório. Valores iniciais preservados na mudança de tipo, a menos que newStartValue seja fornecido explicitamente. Se TIA rejeitar devido a incompatibilidade de tipo/valor, forneça um newStartValue compatível. Edições consecutivas de membros podem deixar o DB inconsistente para exportação — a ferramenta compila automaticamente e tenta NOVAMENTE... | |
update_member_comment | (deviceName, dbName, memberName, newComment) Atalho para atualização somente de comentário. CRÍTICO: o argumento é 'newComment', NÃO 'comment'. | |
diagnostics | 7 | Diagnóstico do PLC e conexão |
compare_online_offline | (deviceName) Comparar todos os objetos de software (blocos, tags, UDTs, objetos de tecnologia) entre o projeto offline e o PLC online. Conecta automaticamente se offline. Somente leitura. Retorna status por item: Idêntico/Diferente/Somente no PLC/Somente no projeto. | |
configure_connection | (deviceName, pcInterfaceName, confirm; opcional targetIp, skipConfirm=false) Configura a conexão de download programaticamente. targetIp assume o IP configurado no projeto do dispositivo a partir da configuração de hardware — omita no caso normal; passe apenas para direcionar um endereço diferente (ex.: de scan_devices). Cria um ConfigurationAddress dentro da TargetInterface e aplica a configuração.... | |
get_device_ip | (deviceName) Somente leitura. Relata o IP configurado no projeto do dispositivo (o destino padrão para configure_connection e download_to_device) além de cada interface de rede com IP/máscara/sub-rede. Chame isto para responder 'qual IP este PLC usa' a partir do projeto — sem necessidade de varredura de rede. | |
get_plc_status | (deviceName) Estado de CONEXÃO (Online/Offline/NotReachable/Protected/...), se a conexão de download está configurada, E o estado OPERACIONAL REAL da CPU, LIDO AO VIVO. RUN/STOP está ausente da API de engenharia inteiramente, então o estado é obtido via live_data: esta ação resolve o IP do dispositivo que você NOMEOU, abre uma sessão de dados ao vivo se uma estiver livre, confirma a identidade da CPU contra o... | |
go_offline | (deviceName) Desconectar do PLC. | |
go_online | (deviceName) Conectar ao PLC via OnlineProvider. Execute download_check primeiro (silenciosamente) para verificar se a interface está configurada. | |
scan_devices | (opcional deviceName) Varredura de rede somente leitura. Descobre PLCs acessíveis via GetAccessibleDevices(). Retorna IP, DeviceSeries, MAC, Name por PcInterface, cada um ANOTADO [IN PROJECT: ] ou [NOT IN THIS PROJECT]. Com deviceName: varre via DownloadProvider. Sem: varre via StationUploadProvider (escopo do projeto). Nenhuma confirmação necessária. ESCOPO: isto é uma transmissão PROFINET DCP de camada 2 — ... | |
download_upload | 4 | Download / upload para PLC |
download_check | (deviceName) Pré-verificação silenciosa. Chame isto ANTES de qualquer download ou go_online. Não produza texto antes de chamar. Vereditos: READY (todas as portas verificadas incl. compilação), NOT READY (uma porta FALHOU — repasse o problema), COMPILE UNVERIFIED (a porta de compilação não pôde ser executada, ex.: dispositivo online — NÃO é aprovação; download_to_device ainda compila offline por conta própria, mas a verificação não confirmou). | |
download_to_device | (deviceName, confirm; opcional mode=software_changes, stopModules=false, startAfterDownload=true, reinitializeDataBlocks=false, pcInterfaceName) DESTRUTIVO. Pré-verificação de compilação obrigatória. confirm='I understand this will modify the PLC'. mode: software_changes|software|hardware_software|hardware. pcInterfaceName seleciona qual adaptador de rede rotear (dos resultados de scan_devices). hardware/... | |
upload_check | Pré-verificação silenciosa. Chame isto ANTES de qualquer upload. Não produza texto antes de chamar. Se o resultado mostrar READY, prossiga para upload_station. Se NOT READY, repasse o problema ao usuário. | |
upload_station | (modeName, pcInterfaceName, confirm; opcional addressIndex=0, readPassword, writePassword) DESTRUTIVO PARA O PROJETO (adiciona dispositivo). confirm='I understand this will add a device to the project'. | |
folders | 5 | Pastas da árvore do projeto (grupos) |
create_folder | (deviceName, container, path; opcional createParents=false) Cria a pasta no caminho especificado. Caminhos aninhados usam '/' (ex.: 'Motors/Drives'). Pastas intermediárias ausentes são um ERRO, a menos que createParents=true — nunca criadas silenciosamente. | |
delete_folder | (deviceName, container, path; opcional deleteContents=false, confirm) DESTRUTIVO. Pasta vazia é excluída imediatamente. Pasta não vazia exige TANTO deleteContents=true QUANTO confirm contendo 'I understand' — a exclusão remove permanentemente TODOS os itens contidos e subpastas. | |
find | (deviceName, container, query; opcional path, typeFilter, caseSensitive=false) Pesquisa glob em TODO o contêiner: * corresponde a qualquer sequência, ? a um caractere (ex.: 'mb_*', 'HMI'). Retorna Nome [key=value, ...] (mesmo envelope e chaves por contêiner do get_tree) + localização da pasta por correspondência; limitado a 200 com truncamento explícito. get_tree responde FORMA, find responde IDENTIDADE — use find quando y... | |
get_tree | (deviceName, container; opcional path, nested=true, includeItems=false, depth=0 ilimitado (1 = filhos imediatos), typeFilter, limit) Visualização de árvore em UMA chamada: pastas com contagens de itens/subpastas, além de itens contidos quando includeItems=true. Linhas de itens usam envelope ÚNICO em cada contêiner: Nome [key=value, key=value] com chaves em minúsculas, separadas por vírgula e espaço, chaves não aplicáveis omitidas. Chaves por cont... | |
rename_folder | (deviceName, container, path, newName) Funciona apenas em technology_objects. Nos outros cinco contêineres (program_blocks, tag_tables, udts, watch_tables, external_sources) o Nome da pasta é somente leitura no Openness V19 e isto retorna Erro: RenameFailed com o AccessMode — renomeie-os na interface do TIA Portal. Não há API de movimentação em nenhum deles. (#231 correção 14: o texto anterior chamava isto de... | |
get_info | - | Informações do servidor |
hardware | 14 | Configuração de hardware |
compile_all | Compilar todo o HW. M4: 'Not compilable' = nada precisa ser recompilado (não é um erro). | |
compile_device | (deviceName) F1: NullReferenceException — use compile_all em vez disso. | |
dump_catalog | Despejar catálogo completo de hardware do TIA Portal (~11 mil entradas) para banco de dados local. Executa automaticamente na primeira conexão TIA ou mudança de versão TIA. Disparo manual para atualizações HSP. | |
export_csv | (outputPath) Lista de dispositivos para CSV. Após a exportação, pergunte ao usuário se deseja abrir o arquivo (use ação admin action=open_file). | |
export_hardware_map | (formato:csv|xlsx; opcional deviceName, outputPath) Exporta dados brutos de hardware CAx/AML de um dispositivo como tabela plana. Mostra tudo que a Siemens exporta: rack, CPU, subitens, módulos de sinal, canais, endereços, tags. Planilha única. Padrão para exports_root/hardware/. Nome do arquivo: {ProjectName}_{PLCName}hardware_map{timestamp}.{ext}. Após a exportação, pergunte ao usuário se deseja abrir o arquivo (use ação admin ac... | |
export_io_map | (formato:csv|xlsx; opcional deviceName, outputPath) Exporta mapa completo de I/O do dispositivo combinando topologia rack/slot com atribuições de tags. XLSX: uma planilha por slot + resumo. CSV: plano combinado. Omita deviceName para exportar todos os dispositivos (um arquivo cada). Padrão para exports_root/hardware/. Nome do arquivo: {ProjectName}_{PLCName}io_map{timestamp}.{ext}. Após a exportação, pergunte ao usuário se deseja abrir o arquivo... | |
export_xlsx | (outputPath) Lista de dispositivos para Excel. Após a exportação, pergunte ao usuário se deseja abrir o arquivo (use ação admin action=open_file). | |
get_device | (deviceName) Configuração detalhada de um dispositivo. | |
get_full_config | Configuração completa de hardware para todos os dispositivos. | |
get_io_map | Mapa completo de endereços de I/O em todos os dispositivos/módulos. | |
get_network | Sub-redes, nós, sistemas de I/O em todo o projeto. | |
get_rack_slot_details | (deviceName) Topologia rack/slot com atribuições de endereços de I/O. | |
search_catalog | (filtro) Pesquisa em tempo real ao vivo do catálogo de hardware do TIA Portal. Requer TIA Portal em execução. Limitado a 50 resultados. | |
set_network_config | (deviceName, confirm; opcional ipAddress, subnetMask, useRouter, routerAddress, ipProtocolSelection, useIsoProtocol, pnDeviceNameAutoGeneration, stationName, pnDeviceName) Define configuração de rede na interface PROFINET de um dispositivo. pnDeviceName define o nome do dispositivo PROFINET diretamente (desativa automaticamente a geração automática). stationName renomeia o dispositivo. Modifica apenas a configuração do projeto — download para o PLC necessário... | |
library | 29 | Gerenciamento de bibliotecas |
add_to_multi_instance_fb | (deviceName, parentFB, memberName, path; opcional library='project', version, onCollision=fail|replace) Resolve o tipo de biblioteca + delega para blocks_write add_multi_instance_member. O tipo deve ser inicializado via instantiate_library_type primeiro. | |
archive_global_library | (libraryName; opcional targetDirectory, targetName, mode=Compressed) Cria arquivo .zal19. targetDirectory padrão para a raiz de arquivos configurada — NÃO passe targetDirectory a menos que o usuário especifique explicitamente um caminho diferente. Se a raiz de arquivos não estiver configurada, direcione o usuário para open_manager → aba Paths para defini-la. | |
close_global_library | (libraryName) Fecha biblioteca global carregada. | |
compare_to_target | (targetLibrary; opcional library='project', includeIdentical=false) Compara bibliotecas: only_in_source, only_in_target, differs, identical. Somente leitura. | |
create_global_library | (nome; opcional targetDirectory) Cria novo .al19 vazio. targetDirectory padrão para a raiz de bibliotecas configurada — NÃO passe targetDirectory a menos que o usuário especifique explicitamente um caminho diferente. Se a raiz de bibliotecas não estiver configurada, direcione o usuário para open_manager → aba Paths para defini-la. Abre em ReadWrite. Chame save_global_library para persistir. | |
create_library_folder | (folderPath; opcional library='project', typeFilter=master_copies|types) Cria subpasta (idempotente, cria automaticamente intermediárias). typeFilter seleciona a seção: master_copies (padrão) ou types. Uma biblioteca global somente leitura é recusada com esse motivo. | |
delete_library_folder | (folderPath; opcional library='project', recursive=false, typeFilter=master_copies|types) Exclui subpasta da seção nomeada. Não vazia é recusada a menos que recursive=true. | |
delete_master_copy | (path; opcional library='project') Exclui por caminho completo com barras. | |
delete_unused_types | (opcional library='project', path, mode=preserve_default|delete_all, dryRun=true, confirm) Remove tipos com zero instâncias. dryRun=true padrão; defina false + confirm para executar. | |
export_type_xml | (library, path, outputPath; opcional version, overwrite=false) Exporta versão de tipo para arquivo XML. Após a exportação, pergunte ao usuário se deseja abrir o arquivo (use ação admin action=open_file). | |
find | (library, query; opcional path, typeFilter:all|types|master_copies, caseSensitive=false, limit) Pesquisa glob (* e ?). Caminhada recursiva, limite de 500 correspondências com NOTICE alto em truncamento; correspondências carregam o mesmo envelope do get_tree. Escopo com path em bibliotecas grandes. section foi REMOVIDO (use typeFilter). | |
get_info | (library) Metadados: modo de edição, versão, autor, contagens de itens, pastas raiz. | |
get_master_copy | (library, path) Metadados da cópia mestre mais um MANIFESTO DE CONTEÚDO: Contents (N) com uma linha por objeto encapsulado e um tipo amigável. Uma cópia mestre não carrega dependências — publique blocos referenciados e UDTs separadamente. Nenhum corpo XML está disponível: MasterCopy não tem método Export no Openness V19 (#231 H11). | |
get_type | (library, path; opcional version='latest_committed', includeXml=false) Metadados do tipo + lista de versões. includeXml=true incorpora corpo XML (limite ~30KB). | |
get_tree | (library; opcional path (padrão raiz), depth=0 ilimitado (1 = filhos imediatos), nested=true, includeItems=false, typeFilter:all|types|master_copies, limit) Visualização recursiva de subárvore — args, padrões e regra de depth agora IDÊNTICOS ao get_tree de pastas (v3.0.0). nested=false = lista plana de caminhos (o contrato da máquina). Limite de 1000 itens, NOTICE alto em truncamento. Linhas de tipo carregam o envelope uniforme [ve... | |
instantiate_library_type | (deviceName, path; opcional library='project', version='latest_committed') Instancia versão de tipo nos blocos do dispositivo. Apenas versões Committed. Efeito colateral: inicializa project.ProjectLibrary. | |
instantiate_master_copy | (deviceName, path; opcional library='project') Materializa cópia mestre nos blocos do dispositivo. | |
list_libraries | Todas as bibliotecas (projeto + globais carregadas). Retorna nomes para o argumento 'library'. Nome reservado 'project' = biblioteca do projeto. | |
open_global_library | (opcional path; opcional openMode=ReadOnly|ReadWrite) Carrega arquivo .al19. Sem path, lista bibliotecas disponíveis da raiz de bibliotecas configurada. | |
promote_to_global | (targetLibraryName; opcional sourceLibrary='project', path, forceUpdateMode, structureConflictMode, deleteUnusedVersions) Copia tipos para biblioteca global gravável. | |
publish_block_as_master_copy | (deviceName, blockName; opcional library='project', folderPath='', onCollision=autoRename|replace|fail) Publica FB/FC/OB/GlobalDB como cópia mestre. Funciona em blocos inconsistentes. | |
publish_plc_type_as_master_copy | (deviceName, udtName; opcional library, folderPath, onCollision) Igual ao acima para UDTs. | |
reload_global_library | (libraryName; opcional discardChanges=false) Relê uma biblioteca global do disco após ser alterada fora desta sessão. Openness não tem atualização, então isto é um fechar+abrir supervisionado: RECUSA quando a biblioteca tem alterações não salvas (IsModified) a menos que discardChanges=true. Todo caminho ou identificador de antes do recarregamento está obsoleto. | |
rename_library_folder | (folderPath, newName; opcional library='project', typeFilter=master_copies|types) Renomeia uma pasta de usuário em qualquer seção. A raiz do sistema da seção não é renomeável. (#231 H15) | |
rename_master_copy | (path, newName; opcional library='project') Renomeia uma cópia mestre. O objeto ENCAPSULADO mantém seu próprio nome — ContentName é somente leitura — e o resultado diz isso. (#231 H13) | |
rename_type | (path, newName; opcional library='project') Renomeia um tipo de biblioteca. Versões e blocos já instanciados não são tocados. (#231 H15) | |
save_global_library | (libraryName) Persiste biblioteca global aberta em .al19. | |
update_check | (opcional library='project', path, mode=ReportOutOfDateOnly) Pré-visualiza o que update_project mudaria. Somente leitura. | |
update_project | (opcional library='project', path, deleteUnusedVersions=false) DESTRUTIVO: aplica atualizações de tipos de biblioteca a todos os blocos correspondentes. Execute update_check primeiro. | |
live_data | 11 | Valores PLC ao vivo + diagnósticos |
connect | (host; senha opcional) Conecta a um CLP por uma conexão criptografada (porta TCP 102). host = IP do CLP. senha somente se o nível de acesso da CPU exigir (nunca registrada em log/eco). Se a senha for omitida e uma tiver sido armazenada via set_credential para este host, ela será usada automaticamente. | |
delete_credential | (host; passwordClass opcional, escopo) Remove credencial(is) armazenada(s) para um host. scope='project' remove a credencial do projeto aberto; scope='global' remove a compartilhada por qualquer projeto. A resposta informa qual camada foi removida. | |
disconnect | Libera a sessão de dados ao vivo. | |
get_status | Prontidão de dados ao vivo, estado da conexão, identidade do CLP. Seguro a qualquer momento. | |
list_credentials | Lista credenciais armazenadas (host, ESCOPO, classe, rótulo, carimbos de data/hora). NUNCA mostra o segredo. Cada linha informa scope=project ou scope=global usando o mesmo vocabulário que o argumento de escopo aceita, para que uma linha lida aqui possa ser passada diretamente de volta para delete_credential; uma linha de projeto também nomeia seu caminho de projeto e é marcada como [ABERTO no TIA] quando é aquela em que scope=project atuaria. | |
list_readable | (root opcional, limite) O que o CLP realmente expõe para leitura, por root. Sem argumento = uma linha por root com contagens de folhas; root=MArea (ou um nome de DB) lista as folhas desse root. Use isto quando uma tag retornar não resolvida — isso separa 'não declarado' de 'área inteira vazia'. | |
read_db | (dbName; members[] opcional) Valores ao vivo de um bloco de dados (otimizado ou padrão), simbólicos, com códigos de qualidade. members[] limita a membros específicos. | |
read_diagnostics | (kind=all|identity|protection|alarms|buffer opcional, maxEntries) Número de pedido da CPU + firmware (online — Openness NÃO consegue ler isto), nível de proteção, alarmes ativos + configurados, e o buffer de diagnóstico da CPU (kind=buffer ou all): o mesmo log de eventos que o TIA Portal mostra em Online e Diagnostics, mais recentes primeiro, com carimbo de data/hora do relógio da CPU em UTC. O texto do evento é resolvido localmente a partir de um catálogo, s... | |
read_tag_table | (deviceName, tagTableName; tags[] opcional) Valores ao vivo para uma tabela de tags de CLP. As tags podem ser nomeadas simbolicamente ou por endereço absoluto (%M1.0, %MB1, %MW20, %MD4, e os equivalentes %I/%Q). Bloqueia se o número de pedido do dispositivo nomeado diferir do da CPU conectada. | |
read_watch_table | OU (symbols[]) para símbolos totalmente qualificados, OU (deviceName, watchTableName) para resolver uma tabela de observação do projeto e ler suas entradas ao vivo. Passar ambos é um erro. | |
set_credential | (host, senha; passwordClass opcional, rótulo, escopo) Armazena uma senha de CPU CRIPTOGRAFADA em repouso (vinculada à máquina), para que connect possa usá-la sem passar a senha toda vez. O segredo nunca é ecoado ou registrado em log. scope='project' a vincula ao projeto aberto; scope='global' se aplica a qualquer projeto. connect prefere a credencial do projeto e recorre à global. | |
open_manager | - | Abrir janela do Gerenciador |
session | 16 | Gerenciamento de sessão |
archive | (outputDirectory opcional; archiveName opcional, timestamp, archivationMode, saveChanges) Cria arquivo .zapXX. outputDirectory assume como padrão a raiz de arquivos configurada — NÃO passe outputDirectory a menos que o usuário especifique explicitamente um caminho diferente. Se a raiz de arquivos não estiver configurada, direcione o usuário para open_manager → aba Paths. timestamp=true padrão. archivationMode: None|Compressed|DiscardRestorabl... | |
close_project | (saveChanges opcional) Fecha projeto. saveChanges: prompt|save|discard|auto. | |
configure | (projectsRoot opcional, archivesRoot, exportsRoot, librariesRoot, httpEnabled) Define caminhos de pasta padrão para criar/abrir/arquivar/exportar/bibliotecas. Valida se o diretório existe (exportsRoot cria automaticamente se ausente). Use a GUI open_manager como alternativa. TAMBÉM (#168): preferredTiaBinding= é o SELETOR do TIA Portal — em um PC com vários TIA Portals instalados, escolha qual bin do TiaCommander... | |
connect | (withUI=true opcional) Conecta ao TIA Portal em execução, carrega automaticamente o primeiro projeto. Libera qualquer handle obsoleto primeiro. | |
create | (nome; parentDirectory opcional, withUI=true) Cria novo projeto. Autocontido: inicia automaticamente o TIA Portal ou conecta a uma instância em execução, limpa handles obsoletos. Somente nomes ASCII (M12). parentDirectory assume como padrão a raiz de projetos configurada — NÃO passe parentDirectory a menos que o usuário especifique explicitamente um caminho diferente. Se a raiz de projetos não estiver configurada, direcione o usuário para open_manager → Paths... | |
disconnect | (saveChanges opcional, closeTia) Libera o handle do Openness. closeTia=true também encerra o processo do TIA. | |
get_project | Nome, caminho, versão, contagem de dispositivos do projeto aberto. | |
get_state | Verificação proativa de estado. Retorna nível de estado (0-4), status do TIA/projeto/dispositivo, informações de licença e sinalizador de reinicialização. Chame no início da sessão. Funciona em qualquer estado. | |
info | Versão do servidor, contagem de ferramentas, dica de fluxo de trabalho. | |
is_dirty | Retorna verdadeiro/falso para alterações não salvas. | |
launch | (withUI=true opcional) Inicia novo TIA Portal (sem projeto). Libera qualquer handle obsoleto primeiro. Prefira create/open que iniciam automaticamente. | |
list_archives | (archivesRoot opcional) Lista todos os arquivos .zap* da raiz de arquivos configurada ou explícita. Mostra nome do arquivo, tamanho, data, versão do TIA. | |
list_devices | Todos os dispositivos no projeto. Fornece deviceName para outras ferramentas. | |
open | (projectPath opcional; withUI=true opcional) Abre projeto, inicia TIA automaticamente se necessário. Idempotente. Sem projectPath, lista projetos disponíveis da raiz de projetos configurada. | |
save | Salva projeto. OFFLINE OBRIGATÓRIO: recusa com OnlineModeRestriction enquanto qualquer dispositivo estiver online — execute diagnostics go_offline primeiro. | |
save_as | (newName; newParentDirectory opcional) Salva cópia no novo local. newParentDirectory assume como padrão a raiz de projetos configurada, se definida. | |
tag | 16 | Gerenciamento de tags de CLP |
add_tag | (deviceName, tagTableName, tagName, dataType; logicalAddress opcional, comentário) Adiciona tag. dataType: Bool, Int, Real, etc. logicalAddress: %%M0.0, %%MW100. | |
create_table | (deviceName, tagTableName; targetFolder opcional, createParents=false) Nova tabela vazia. targetFolder (sintaxe 'Motors/Drives') a cria diretamente dentro dessa pasta na árvore de tags do CLP; pastas ausentes são um ERRO a menos que createParents=true. Colisão de nome é verificada recursivamente em todas as pastas. | |
delete_table | (deviceName, tagTableName) Exclui tabela e todas as tags. | |
delete_tag | (deviceName, tagTableName, tagName; tagNames opcional, confirm) Exclui tag única. RECUSA quando a tag carrega um comentário ou sinalizadores de acesso não padrão, porque add_tag não pode restaurá-los — passe confirm='I understand this destroys the comment and access flags' para substituir, ou use action=move para realocá-la sem perdas. Observe que excluir+adicionar NÃO é uma renomeação: cria um NOVO objeto e toda referência t... | |
export_tag_table_data | (deviceName, tagTableName, format:csv|xlsx|xml; outputPath opcional, returnInline=false) Exporta tabela de tags para CSV ou XLSX para documentação/análise, ou para XML TIA bruto (format=xml) para ida e volta via import_table. Colunas: Name, DataType, Address, Comment, ExternalAccessible, ExternalVisible, ExternalWritable. Assume como padrão exports_root\tag\ se nenhum outputPath, e o nome gerado automaticamente é de-dupl... | |
find_next_free | (deviceName; area:M|I|Q opcional, startByte:int, dataType:Bool|Byte|Word|DWord|Int|Real|etc., mode:declared|used) Encontra próximo endereço livre. mode=declared (padrão, mais seguro): pula todos os endereços de tags declarados. mode=used: pula apenas endereços referenciados no código. Alinhamento: Bool=qualquer bit, Byte=byte, Word=byte par, DWord=4 bytes. | |
get_assignment_list | (deviceName; area:M|I|Q|all opcional, mode:declared|used|conflicts) Ocupação de endereços para áreas M/I/Q + E/S de hardware. mode=declared (padrão): todos os endereços de tags. mode=used: apenas endereços referenciados no código de blocos (espelha a Lista de Atribuições do TIA). mode=conflicts: endereços usados em 2+ blocos com detalhe de Leitura/Escrita — detecta atribuições duplas. | |
get_table_details | (deviceName, tagTableName) Todas as tags com tipos, endereços e comentários. | |
import_table | (deviceName, filePath OU xmlContent OU exportId; overwrite=false opcional, targetFolder, createParents=false) OFFLINE OBRIGATÓRIO. Importa uma tabela de tags de XML TIA bruto — o formato que o documento export_tag_table_data format=xml produz. overwrite=false CRIA e recusa se esse nome de tabela já existir. overwrite=true substitui a tabela existente; é uma importação de tabela inteira, não uma mesclagem em nível de campo, então tags... | |
list_tables | (deviceName) Todas as tabelas de tags, uma linha cada com caminho qualificado 'Folder/Sub/Name' e o envelope uniforme [type=PlcTagTable, tags=N]. Totais reconciliam com folders get_tree (container=tag_tables). | |
move | (deviceName, tagTableName, tagName, targetTable) Move UMA tag para outra tabela, preservando seu comentário E todos os três sinalizadores de acesso (ExternalAccessible/Visible/Writable). Use isto em vez de delete_tag + add_tag: add_tag não pode carregar os sinalizadores de acesso, então a rota manual os redefine silenciosamente. Verificado por leitura de retorno; falha ruidosamente se qualquer propriedade não sobreviver. | |
move_table | (deviceName, tagTableName, targetFolder; createParents=false opcional) OFFLINE OBRIGATÓRIO. Move uma tabela de tags entre pastas ('' = raiz do contêiner). Emulado como exportar -> excluir -> importar para a pasta de destino (fidelidade total comprovada por spike); restauração em caso de falha para o local original. OBSERVAÇÃO: tabelas de tags não podem ser COPIADAS — nomes de tags de CLP são globais em todas as tabelas. | |
rename | (deviceName, tagTableName, tagName, newName) RECUSA POR PROJETO, sempre. Openness V19 não expõe renomeação de tags: PlcTag.Name é somente leitura e SetAttribute('Name') é recusado com AccessMode: Read. Não emulado via exportar/reimportar também — nomes de tags são GLOBAIS ao CLP e Openness não propaga nada, então uma tag reconstruída deixa cada operando LAD/FBD/STL/SCL nomeando o símbolo antigo, e SCL não tem programático... | |
search | (deviceName, tagName) Correspondência de substring em todas as tabelas. | |
set_access | (deviceName, tagTableName, tagName, accessible, visible, writable) CRÍTICO: argumentos são accessible/visible/writable, NÃO externalAccessible etc. | |
update_comment | (deviceName, tagTableName, tagName, newComment) CRÍTICO: argumento é 'newComment', NÃO 'comment'. | |
technology_objects | 15 | **** |
capabilities | (family opcional) A matriz documentada de família/versão/firmware. NÃO PRECISA DE CONEXÃO COM TIA. | |
compile | (deviceName, nome; scope=group opcional) Executa imediatamente; sem execução simulada. Relata cada versão de objeto antes e depois. | |
connect_hardware | (deviceName, name, interface, target; confirm opcional) Reconfigura um canal. Os índices de sensores são baseados em 1. | |
create | (deviceName, name, family, version; path, confirm opcionais) family e version são FIXOS na criação e não podem ser alterados posteriormente. | |
create_from_master_copy | (deviceName, masterCopy; path, confirm opcionais) A cópia mestre deve ser criada na interface do TIA; nenhuma chamada Openness pode gerar uma. | |
delete | (deviceName, name; confirm opcional) NÃO reversível: um objeto recriado começa com os padrões. | |
export | import — (deviceName, name | file; confirm opcional) SimaticML. Limitado por versão conforme a family; uma recusa indica a versão necessária e sua seção no manual. | |
find_parameter | (deviceName, name, parameter) Um parâmetro: valor, tipo, acesso. A PRIMEIRA leitura dos parâmetros de um objeto é lenta (~5,5-7,5 s medidos — o custo está dentro do Openness); leituras subsequentes levam ~150 ms, e o link esfria novamente após inatividade. | |
get_hardware_connection | (deviceName, name) Relatório de fiação somente leitura. Um provedor que não se aplica à family é reportado como tal, não como erro. | |
get_parameters | (deviceName, name; prefix, summary, limit opcionais) Os dados de comissionamento, tipados. prefix filtra uma área; summary=true mostra apenas áreas e contagens. Cada linha indica seu acesso; um par bare/underscore é dobrado em uma linha que nomeia qual metade aceita escrita. | |
import | ||
list | (deviceName; limit opcional) Todos os objetos: Name [type=, version=<Vx.y>, parent=]. Objetos de subnível (cames de saída, trilhas de cames, entradas de medição) dependem de um eixo pai e são incluídos. | |
rename | (deviceName, name, newName; confirm opcional) Blocos de programa referenciam o objeto PELO NOME e NÃO são atualizados. | |
set_parameter | (deviceName, name, parameter, value, expectedCurrentValue) ESCREVE um parâmetro. expectedCurrentValue é OBRIGATÓRIO e deve corresponder ao valor atual, caso contrário a escrita é recusada. Parâmetros somente leitura são recusados de antemão. Ecoa old -> new com um undo copiável. | |
show_in_editor | (deviceName, name) Abre na interface do TIA. | |
udt | 11 | Gerenciamento de tipos definidos pelo usuário |
add_member | (deviceName, udtName, memberName, dataType; comment, initialValue opcionais) Adiciona membro via round-trip XML. | |
create | (deviceName, udtName) Novo UDT vazio. É criado com um membro placeholder _placeholder (Bool) porque o TIA rejeita um STRUCT vazio — remova-o com delete_member, ou passe members[] (mesma forma do modo bulk de add_member) e nenhum placeholder é criado. targetFolder opcional (sintaxe 'Motors/Drives') + createParents criam-no diretamente nessa pasta. (usa workaround SCL ExternalSources internament... | |
delete | (deviceName, udtName) Exclui UDT. Recusa se ainda estiver referenciado. | |
delete_member | (deviceName, udtName, memberName) Remove membro via round-trip XML. | |
export_xml | (deviceName, udtName; outputPath, returnInline, outputDirectory opcionais) Exporta UDT para XML. Com outputPath, vai para o disco; omita-o e returnInline se aplica. | |
get_structure | (deviceName, udtName) Lista completa de membros com tipos, comentários, flags de acesso via XML. | |
import_xml | (deviceName, filePath OU xmlContent; overwrite opcional) Importa UDT de XML. filePath lê do disco; xmlContent aceita string XML inline (sem necessidade de ferramenta de arquivo). Confiável para round-trips; pode falhar em XML sintetizado (use create+add_member em vez disso). OVERWRITE É UMA SUBSTITUIÇÃO DE OBJETO INTEIRO, NÃO UMA MESCLAGEM: com overwrite=true, qualquer elemento AUSENTE do seu documento é REDEFINIDO para o padrão em vez de p... | |
list | (deviceName) Todos os UDTs, uma linha cada com caminho qualificado 'Folder/Sub/Name', o envelope uniforme [type=PlcStruct, num=N] e a data de modificação. | |
move | (deviceName, udtName, targetFolder; createParents=false opcional) OFFLINE OBRIGATÓRIO. Move um UDT entre pastas ('' = raiz do contêiner). Emulado como export -> delete -> import na pasta de destino (comprovado por spike); restauração em caso de falha para o local original. | |
update_member | (deviceName, udtName, memberName; newDataType, newInitialValue, newComment opcionais) Atualiza propriedades do membro. Pelo menos um campo é obrigatório. Usa round-trip SCL. | |
update_member_comment | (deviceName, udtName, memberName, newComment) CRÍTICO: o argumento é 'newComment', NÃO 'comment'. | |
watch | 14 | Tabelas de observação e forçamento |
add_entry | (deviceName, target, tableName, address; displayFormat, modifyValue[watch], forceValue[force], modifyTrigger[watch], monitorTrigger, comment opcionais). IMPORTANTE: sempre defina displayFormat para corresponder ao tipo de dados da variável de origem — Bool→Bool, Int/Word→DEC_signed, DInt/DWord→DEC_signed, Real→Float, Time→Time, String→String. Nunca deixe como Hex padrão. Consulte o tipo de dados no bloco de origem... | |
clear_table | (deviceName, watchTableName) Remove todas as entradas, mantém a tabela. | |
create_table | (deviceName, watchTableName; targetFolder, createParents=false opcionais) Nova tabela de observação vazia. targetFolder cria-a diretamente dentro dessa pasta na árvore de tabelas de observação/forçamento; pastas ausentes são um ERRO a menos que createParents=true. Colisão de nome verificada recursivamente (tabelas de observação E forçamento). | |
delete_entry | (deviceName, target, watchTableName|forceTableName, address) Remove entrada. FORMA DE ENDEREÇO: passe o endereço absoluto puro (%%M60.0) OU o nome simbólico exato. O TIA armazena um endereço de propriedade de tag SIMBOLICAMENTE, então a forma pura é resolvida via tabelas de tags quando nenhuma entrada corresponde literalmente, e o resultado diz 'correspondido simbolicamente como ""TagName""'. Se o endereço puro for propriedade de mais de uma tag t... | |
delete_table | (deviceName, watchTableName) Exclui tabela de observação. | |
export_force_data | (deviceName, forceTableName, format:csv|xlsx; outputPath opcional) Exporta tabela de forçamento para CSV ou XLSX para documentação. Padrão: exports_root\watch. Após a exportação, pergunte ao usuário se deseja abrir o arquivo (use admin action=open_file). | |
export_table | (deviceName, target, tableName, outputPath) Exporta para XML. Após a exportação, pergunte ao usuário se deseja abrir o arquivo (use admin action=open_file). | |
export_watch_data | (deviceName, watchTableName, format:csv|xlsx; outputPath opcional) Exporta tabela de observação para CSV ou XLSX para documentação. Padrão: exports_root\watch. Após a exportação, pergunte ao usuário se deseja abrir o arquivo (use admin action=open_file). | |
get_entries | (deviceName, target, watchTableName|forceTableName) Lista entradas. | |
import_table | (deviceName, filePath OU xmlContent; overwrite opcional) Importa de XML. filePath lê do disco; xmlContent aceita string XML inline (sem necessidade de ferramenta de arquivo). OVERWRITE É UMA SUBSTITUIÇÃO DE OBJETO INTEIRO, NÃO UMA MESCLAGEM: com overwrite=true, qualquer elemento AUSENTE do seu documento é REDEFINIDO para o padrão em vez de preservado (ImportOptions.Override; medido #231 P1). Forneça um documento COMPLETO - export fi... | |
list_tables | (deviceName) Todas as tabelas de observação e forçamento, uma linha cada com caminho qualificado 'Folder/Sub/Name' e o envelope uniforme [type=PlcWatchTable|PlcForceTable, entries=N, force=true|false]. Os totais reconciliam com folders get_tree (container=watch_tables). | |
move_table | (deviceName, watchTableName, targetFolder; createParents=false opcional) OFFLINE OBRIGATÓRIO. Move uma tabela de observação/forçamento entre pastas ('' = raiz do contêiner). Emulado como export -> delete -> import na pasta de destino; restauração em caso de falha para o local original. | |
rename_table | (deviceName, watchTableName, newName) Renomeia (round-trip XML internamente). | |
update_entry | Mesmos parâmetros de add_entry. Não pode limpar campos (exclua e re-adicione em vez disso). Aceita qualquer forma de endereço — veja delete_entry. | |
xref | 6 | Análise de referências cruzadas |
find_call_paths | (deviceName, blockName; maxDepth=10 opcional) Todos os caminhos de chamada das raízes OB até o bloco de destino sobre arestas CALL, ex.: Main [OB1] -> ModbusPoll [FB2] -> mb_query [FB8]. Complementa find_callers (find_callers = chamadores diretos apenas; este = caminhos qualificados completos dos OBs). blockName aceita um nome puro (resolvido recursivamente em todas as pastas) ou um caminho qualificado por pasta. | |
find_callers | (deviceName, blockName) Consulta reversa: quais blocos referenciam o alvo nomeado. O alvo pode ser um BLOCO (locais de chamada) ou uma TAG PLC — para uma tag, você obtém os blocos de leitura e escrita com Access=Read/Write e a rede, então nenhuma ação de tag separada é necessária. Itera cada bloco. Um nome que não corresponde a bloco nem tag diz isso, em vez de reportar zero referências. | |
find_orphaned_instance_dbs | (deviceName) DBs de instância cujo FB proprietário está ausente ou não tem referência TypeInstance/InstanceType. | |
find_unused | (deviceName) Todos os blocos não chamados de nenhuma cadeia OB. Itera cada bloco (~5-10ms cada). | |
get_call_tree | (deviceName; blockName, maxDepth=10 opcionais) Árvore de chamadas direta: o que uma raiz chama, recursivamente a qualquer profundidade (raízes padrão: todos os OBs; blockName aceita nome puro ou qualificado por pasta). Cada nó mostra nome qualificado por pasta, número do bloco, rede do local de chamada, DB de instância; instruções de sistema aparecem como folhas. Seguro contra ciclos; uma subárvore já mostrada é recolhida com um marcador. | |
get_references | (deviceName, blockName; filter:AllObjects|ObjectsWithReferences|ObjectsWithoutReferences|UnusedObjects opcional) Referências cruzadas para um bloco. Mostra objetos referenciados com tipo de acesso (Read/Write/Call etc.) e localização. | |
Total: 19 ferramentas, 230 ações — as descrições de ações estão abreviadas nesta tabela; o texto completo de cada ação está na lista de ferramentas legível por máquina (data/tool-list/tools.json). |
Cada meta-ferramenta agrupa ações relacionadas em um único parâmetro action. get_info e open_manager são utilitários independentes que funcionam sem licença. Comece com session para conectar e, em seguida, use qualquer outra ferramenta.
Hardware Testado
O TiaCommander deve funcionar com qualquer PLC suportado pelo TIA Portal e pela API Openness. Os seguintes dispositivos foram testados internamente com cobertura completa de ferramentas:
| Dispositivo | Número do Pedido | Firmware | TIA Portal |
|---|---|---|---|
| S7-1200 CPU 1212C DC/DC/Rly | 6ES7 212-1BE31-0XB0 | V3.0 | V19 |
| S7-1200 CPU 1214C DC/DC/DC | 6ES7 214-1AG31-0XB0 | V3.0 | V19 |
| S7-1200 CPU 1214C DC/DC/DC | 6ES7 214-1HG40-0XB0 | V4.5 | V19 |
| S7-1200 CPU 1215C DC/DC/DC | 6ES7 215-1AG31-0XB0 | V3.0 | V19 |
| S7-1200 CPU 1215C DC/DC/Rly | 6ES7 215-1BG31-0XB0 | V3.0 | V19 |
| S7-1200 CPU 1217C DC/DC/DC | 6ES7 217-1AG40-0XB0 | V4.2 | V19 |
Veja o que a comunidade está realmente usando — tiacommander.com/stats. A lista de compatibilidade ao vivo mostra todos os dispositivos reportados como funcionando entre todos os usuários, com número do pedido, firmware e versões do TIA Portal em que foram vistos, além do uso de ferramentas pela comunidade e adoção por clientes de IA. Ela é construída a partir de telemetria anônima e agregada e oferece um panorama muito mais amplo do que a tabela interna acima.
Criação de Blocos
O TiaCommander cria blocos PLC completos a partir de descrições JSON estruturadas:
- Blocos SCL — via API de Fonte Externa (independente de firmware)
- Blocos LAD/FBD — via construtor XML FlgNet com 69 tipos de instrução verificados:
- Lógica de bits, temporizadores (TON/TOF/TP), contadores (CTU/CTD/CTUD)
- Matemática (Add, Sub, Mul, Div, Mod, Abs, Sqrt, Sin, Cos, etc.)
- Comparadores (EQ, NE, GT, GE, LT, LE)
- Movimentação e conversão, lógica de palavras, deslocamento e rotação, seleção
- Fluxo de programa (chamadas FB/FC com conexão de parâmetros, JMP/JMPN, RET, LABEL)
- Números de bloco — atribuídos automaticamente se omitidos, ou explícitos
- Interfaces personalizadas — seções Input, Output, InOut, Static, Temp, Constant
Dados ao Vivo
A ferramenta live_data lê valores reais diretamente de uma CPU em execução — blocos de dados, tabelas de tags, tabelas de observação e o buffer completo de diagnóstico da CPU. É aqui que o TiaCommander se destaca para depuração e para um ciclo de feedback de desenvolvimento ágil: altere um bloco, faça o download e observe os valores se moverem sem nunca sair do seu cliente de IA.
- Canal separado — leituras ao vivo passam por um processo auxiliar dedicado (a ponte S7) que fala diretamente com a CPU via porta TCP 102, independente da conexão de engenharia Openness, para que a leitura de valores ao vivo nunca interfira na sua sessão do TIA Portal.
- Sem licença, nada extra — o caminho de dados ao vivo não exige licença Openness nem software adicional da Siemens; ele fala o protocolo S7 por conta própria.
- TLS e texto puro suportados — S7-1200 V4.5+ e S7-1500 V2.9+ conectam via TLS; CPUs mais antigas conectam em texto puro.
connectinforma qual foi efetivamente negociado para a CPU à sua frente. - Blocos otimizados e padrão —
read_dbretorna valores simbólicos com códigos de qualidade de blocos de dados otimizados e não otimizados (padrão). - Ciente de senha — uma senha de CPU é necessária apenas se o nível de proteção da CPU exigir; ela pode ser armazenada criptografada em repouso (por projeto ou global) para que
connecta use automaticamente, e nunca é registrada em log ou ecoada. Salve uma na aba Credenciais da GUI do Manager, ou apenas peça ao seu assistente de IA para armazená-la — globalmente para um endereço IP de PLC, ou por projeto.
Segurança
O servidor MCP trata operações de implantação em PLC como destrutivas. Essas ações exigem strings de confirmação explícitas antes da execução:
| Ação | O que faz |
|---|---|
download_to_device | Baixa software/hardware para um PLC em execução |
upload_station | Envia uma estação PLC para o projeto |
delete_unused_types | Remove tipos de biblioteca com zero instâncias |
Todas as outras operações funcionam dentro do projeto TIA Portal e são reversíveis antes do download.
I/O Independente
O TiaCommander funciona totalmente de forma independente — sem necessidade de ferramentas externas de gerenciamento de arquivos.
Três modos de entrada para cada importação: caminho de arquivo, conteúdo inline ou referência ao banco de dados de exportação.
Três modos de saída para cada exportação: inline (padrão), banco de dados de exportação ou arquivo.
As exportações expiram automaticamente após 24 horas. Gerencie por meio das ações da ferramenta admin.
No entanto, recomendamos fortemente combinar o TiaCommander com o Desktop Commander (GitHub) para seu fluxo de trabalho diário com agentes de IA. O Desktop Commander dá ao seu assistente de IA acesso ao terminal, gerenciamento de arquivos e edição de código em todo o seu sistema operacional. Isso não é uma promoção paga — usamos o Desktop Commander todos os dias em nosso próprio trabalho, e ele foi criado pelo nosso colega letão, Eduards Ruzga. É gratuito, de código aberto e torna tudo melhor.
Dados e Privacidade
Todos os dados permanecem na sua máquina. O banco de dados SQLite local armazena estatísticas de chamadas de ferramentas, perfis de dispositivos, log de erros e cache temporário de exportação.
O TiaCommander coleta telemetria limitada para melhorar o produto:
- Relatórios de erro — quando uma chamada de ferramenta falha, o tipo de erro e o contexto são enviados para que possamos identificar e corrigir problemas.
- Estatísticas de uso de ferramentas — quais ferramentas e ações são usadas com mais frequência, para entender o que é mais valioso.
- Informações do cliente de IA — qual assistente de IA está conectado (nome e versão do cliente), para garantir compatibilidade.
Nenhum dado de programa PLC, arquivos de projeto ou conteúdos de blocos são jamais transmitidos.
Suas informações pessoais (nome, sobrenome, e-mail) fornecidas durante o registro são regidas pelas regras do GDPR da União Europeia. Não compartilhamos, vendemos ou divulgamos seus dados a terceiros. Nunca enviaremos materiais de marketing ou qualquer coisa não diretamente relevante ao seu uso do TiaCommander — a menos que você nos peça explicitamente.
O Que Vem a Seguir
O TiaCommander está em desenvolvimento ativo. Aqui está o que estamos trabalhando:
- Integração HMI — acesso a telas HMI, tags e visualizações de alarmes
- Maior cobertura de dados ao vivo — mais do que um PLC em execução expõe, em mais famílias de CPU
- Suporte a simulação — acionar o PLCSIM para desenvolvimento e testes offline
- Validação de hardware mais ampla — mais famílias de dispositivos e firmwares verificados internamente, guiados pelo uso no mundo real
Tem uma ideia de recurso? Envie-a no GitHub.
Início Rápido
Claude Desktop (um clique): Baixe o TiaCommander.mcpb nas Releases e instale via Settings -> Extensions -> Advanced Settings -> Install Extension. Pronto.
Todos os outros clientes de IA: Baixe o ZIP portátil e veja o Guia de Início Rápido — tudo o que você precisa para começar em 5 minutos: extrair, configurar o grupo Openness, configurar o cliente de IA para todos os 7 clientes testados, ativação de licença e primeiros comandos.
Arquivos de configuração prontos para uso de cada cliente de IA estão na pasta configs/.
Licença e Feedback
O TiaCommander é um software proprietário publicado pela SIA A4 Studio. Durante o período beta, a ferramenta é completamente gratuita com uso ilimitado e todas as ferramentas disponíveis — sem restrições.
Em troca, contamos com você para nos ajudar a tornar o TiaCommander melhor. Se você encontrar um bug, tiver uma ideia para um novo recurso, ou apenas quiser compartilhar como usa a ferramenta no seu fluxo de trabalho — queremos ouvir de você:
- Relatórios de bugs: github.com/a4webdev/tiacommander-mcp/issues
- Solicitações de recursos: github.com/a4webdev/tiacommander-mcp/issues
- Depoimentos e feedback: tiacommander.com/wf/github
Cada relatório, cada sugestão, cada comentário nos ajuda a construir uma ferramenta melhor para a comunidade de automação Siemens.
Veja LICENSE.txt para os termos completos. Visite tiacommander.com para mais informações.
Marcas Registradas
TiaCommander™ é uma marca registrada da SIA A4 Studio. Siemens, TIA Portal, SIMATIC, S7-1200, S7-1500 são marcas registradas da Siemens AG. O TiaCommander não é afiliado, endossado ou patrocinado pela Siemens AG.
Agradecimentos
Obrigado a todos que abriram uma issue ou nos enviaram feedback — isso genuinamente nos ajuda a tornar o TiaCommander melhor, e lemos cada palavra. E se sua experiência foi tranquila e não há nada a relatar, ficaríamos gratos se você deixasse uma estrela no repositório — é uma coisa pequena, e ajuda outros engenheiros Siemens a encontrar a ferramenta.