Inventário de IPs e portas dos drivers de comunicação.

Como percorrer todos os drivers de um Domínio pelo E3 Studio e exportar em CSV o endereço de rede configurado em cada um, sem alterar o projeto.

1. Introdução

Em aplicações com muitos drivers de comunicação, descobrir para onde cada um aponta significa abrir a configuração de driver em driver e anotar o endereço. Em uma auditoria de rede, uma migração de faixa de IP ou a documentação de uma planta herdada, isso consome horas.

O E3 Studio permite automatizar esse levantamento por script, gerando um CSV com uma linha por driver. O procedimento é somente de leitura: não cria Tags, não ativa a comunicação e não altera o projeto.

2. O que o script faz

O script executa quatro passos:

  1. Enumera o Domínio. Application.ListFiles() retorna uma coleção com todos os objetos do Domínio. Esse método pertence ao objeto E3StudioApplication e não está disponível em tempo de execução — o levantamento é feito em tempo de configuração.
  2. Identifica os drivers por sondagem. Em vez de filtrar pelo nome da classe, o laço tenta ler ExtraConfig, EndPointURL e ServerMachine em cada objeto sob On Error Resume Next. Telas, Viewers e Servidores de Dados não têm essas propriedades, geram erro 438 e são descartados. O On Error Resume Next é obrigatório: sem ele, o script para no primeiro objeto que não é driver.
  3. Extrai IP e porta. No IODriver, percorre o vetor de ExtraConfig procurando qualquer chave terminada em MainIP ou MainPort — assim funciona mesmo quando o protocolo usa outro prefixo. No UaDriver, quebra a EndPointURL em host e porta. No OPCDriver, lê o ServerMachine direto.
  4. Grava o CSV. Uma linha por driver, com ponto e vírgula como separador, em C:\Temp\Drivers_IP_Porta.csv.

Atenção. No IODriver o endereço não é uma propriedade nomeada: protocolo, meio físico, IP e porta ficam na janela Configuração…, aberta com o botão direito sobre o driver. O acesso por script é a propriedade ExtraConfig, do tipo variant e escondida — ela não aparece no AppBrowser nem na Lista de Propriedades do E3 Studio.

' Relatorio Driver;IP;Porta de todos os drivers do Dominio - Elipse E3
' Cole no CustomConfig de um XControl e execute com botao-direito -> "Configuracao...".
' Design-time, somente leitura: nao cria Tag, nao ativa driver, nao altera o projeto.

Const ARQ = "C:\Temp\Drivers_IP_Porta.csv"

Dim fso, f, col, obj, drv, cfg, j, sNome, sIP, sPorta, sChave, sRest, p, n

Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FolderExists(fso.GetParentFolderName(ARQ)) Then fso.CreateFolder fso.GetParentFolderName(ARQ)
Set f = fso.CreateTextFile(ARQ, True)
f.WriteLine "Driver;IP;Porta"
n = 0

' OERN obrigatorio: Telas/Viewers/DataServers nao tem as propriedades sondadas
' abaixo e dariam erro 438 (800A01B6). Aqui eles sao apenas ignorados.
On Error Resume Next

Set col = Application.ListFiles()   ' todos os objetos do Dominio (so existe no Studio)
If Err.Number <> 0 Then MsgBox "ListFiles falhou: " & Err.Description : f.Close : Exit Sub

For Each obj In col
    sIP = "" : sPorta = "" : Err.Clear

    sNome = obj.PathName
    If Err.Number <> 0 Then Err.Clear : sNome = obj.Name
    Err.Clear

    ' IODriver: o IP nao e propriedade nomeada, mora na propriedade oculta
    ' ExtraConfig - array VARIANT de pares chave/valor da janela "Configuracao...".
    cfg = obj.ExtraConfig
    If Err.Number <> 0 Then          ' fallback: re-obtem o objeto real pelo caminho
        Err.Clear
        Set drv = Application.GetObject(sNome)
        If Err.Number = 0 Then cfg = drv.ExtraConfig
    End If

    If Err.Number = 0 And IsArray(cfg) Then
        For j = 0 To UBound(cfg) - 1
            sChave = CStr(cfg(j))
            If Err.Number <> 0 Then Err.Clear : sChave = ""
            If sIP = "" And Right(sChave, 6) = "MainIP" Then sIP = CStr(cfg(j + 1))
            If sPorta = "" And Right(sChave, 8) = "MainPort" Then sPorta = CStr(cfg(j + 1))
            If Err.Number <> 0 Then Err.Clear
        Next
    End If
    Err.Clear

    ' UaDriver: quebra a EndPointURL (opc.tcp://host:porta/caminho) em host + porta
    sRest = obj.EndPointURL
    If Err.Number = 0 Then
        p = InStr(sRest, "://") : If p > 0 Then sRest = Mid(sRest, p + 3)
        p = InStr(sRest, "/")   : If p > 0 Then sRest = Left(sRest, p - 1)
        p = InStrRev(sRest, ":")
        If p > 0 Then
            sIP = Left(sRest, p - 1) : sPorta = Mid(sRest, p + 1)
        Else
            sIP = sRest
        End If
    End If
    Err.Clear

    ' OPCDriver: DCOM nao usa porta fixa, so o nome/IP da maquina
    sRest = obj.ServerMachine
    If Err.Number = 0 Then sIP = sRest
    Err.Clear

    If sIP <> "" Or sPorta <> "" Then
        f.WriteLine sNome & ";" & sIP & ";" & sPorta
        n = n + 1
    End If
Next

f.Close
MsgBox "Gerado: " & ARQ & vbCrLf & "Drivers no relatorio: " & n

3. Como executar e resultado

O script roda no contexto de configuração, hospedado no evento CustomConfig de um ElipseX:

  1. No E3 Studio, crie (ou abra) um XControl no projeto.
  2. Cole o código no evento CustomConfig. O corpo do CustomConfig é escrito sem declarar Sub ou Function.
  3. Salve o projeto.
  4. Na árvore do Studio, clique com o botão direito sobre o XControl e escolha Configuração….

Ao final, uma caixa de mensagem informa o caminho do CSV e quantos drivers entraram no relatório. O arquivo abre direto no Excel em configuração regional pt-BR:

Drivers_IP_Porta.csv
Driver;IP;Porta
Comunicacao.DrvModbus;192.168.0.10;502
Comunicacao.DrvCLP2;192.168.0.11;502
Comunicacao.DrvOpcUa;servidor-ua;4840
Comunicacao.DrvOpcDa;\\ESTACAO01;

A coluna Porta fica vazia nos drivers OPC DA: a comunicação é feita por DCOM, que não usa uma porta fixa configurada no objeto.

Drivers seriais não entram no relatório. A condição final do laço só grava a linha quando há IP ou porta, e um driver configurado para meio físico serial não tem MainIP. Para listá-los mesmo assim, remova a condição e deixe as colunas em branco.

Print Friendly, PDF & Email

Este artigo foi útil? Was this helpful?

Classificação média - Average rating 0 / 5. Count: 0

Deixe seu Comentário

Seu endereço de e-mail não será publicado. Campos marcados com asterisco são obrigatórios *