miércoles, 15 de febrero de 2017

Util para documentación y migraciones de sistemas de control. Como abrir y organizar información contenida en archivos de texto o código fuente en excel

Por medio de Excel VBA podemos leer archivos de texto o código, filtrar el texto leído y organizar el texto que contienen los archivos en filas y columnas

En el ejemplo siguiente utilizaremos los archivos de backup generados por un sistema de control y los organizaremos en Excel, útil para documentaciones o migraciones de sistemas de control.

Documentación de la información de código fuente de un sistema de control (útil para migraciones)

Algunas veces los backups o exportaciones de las lógicas de control de diferentes sistemas se pueden leer por medio de programas de lectura de texto como notedpad, wordpad, etc. Esto nos permite visualizar el contenido de la lógica y de alguna manera interpretarla, lo cual ayuda mucho especialmente en migraciones de sistemas de control.

Aunque estos programas nos permiten visualizar la información, también es útil poder organizarla para obtener listas de entradas y salidas y la clasificación de los diferentes tipos de lógicas, como controles PIDs, motores, válvulas, monitoreo analógico, monitoreo digital, caracterizadores, compensadores, cálculos, bloques de código, etc. También nos permite obtener listas de parámetros de los diferentes tipos de lógicas mencionados.

En este caso, mostrare como podemos obtener una lista en Excel de las referencias externas de cada lógica, tag o módulo de control.

Abrir archivos de código o texto en Excel

Para abrir los códigos fuente en Excel, primero hay que definir la dirección donde se encuentran los archivos. Para esto creamos una lista en Excel con las ubicaciones de los códigos fuente.
Ver como crear lista de archivos contenidos en un folder.


Luego en la pestaña de Developer, damos click en Visual Basic y seleccionamos la hoja excel donde creamos la lista de ubicaciones y escribimos el siguiente código que permite:
  • Leer  los archivos de texto o codigo en excel

  • Crear columna con los nombres de los archivos.

  • Filtar el texto contenido en los archivos.

  • Organizar por filas y columnas el texto filtrado.

Sub Leer_Filtrar_Texto()
Dim archivo As String   'ruta y nombre del archivo definidos en la lista
Dim texto As String     'línea de texto o codigo a leer
Dim fila As Integer     'fila donde se colocara el texto en la hoja de excel
Dim filaCL As Integer   'fila donde se colocara el nombre del archive
Dim colunma As Integer  'columna donde se colocara el texto en la hoja de excel
fila = 1
filaCL = 1
ActiveSheet.Range("A2").Select      'Primera celda de la lista de unbicaciones de archivos'
Cells(1, 2).Value = "ID_CL"         'Se coloca el titulo ID_CL en la fila 1 columna 2
Do While Not IsEmpty(ActiveCell)    'Lazo para recorrer la lista de ubicaciones
    fila = fila + 1
    filaCL = filaCL + 1
    archivo = ActiveCell.Value      'se asigna a la variable archivo el valor de la celda actual
    Open archivo For Input As #1    'leer un archivo de texto por el canal #1
    columna = 2                     'los nombres de los archivo los colocamos en la columna 2
    'Leer y procesar el contenido del archive
    While Not EOF(1) 'la función EOF regresa verdadero al llegar al final del archivo
        'Creamos la columna 2 con los nombres de los archivos
        If archivo Like "*CL Files*" Then
            archivo = Replace(archivo, "C:\CL Files\Folder1", "")
        End If
        Cells(filaCL, 2).Value = archive
        Line Input #1, texto  'lee cada una de las líneas del archivo y las almacena en la variable texto
        'Filtramos el texto para que solo muestre las lineas que definen las referencias externas
        If texto Like "*EXTERNAL*" Then
            'Removemos el texto EXTERNAL de la linea
            texto = Right(texto, Len(texto) - InStr(texto, "EXTERNAL") + 1)
            texto = Replace(texto, "EXTERNAL ", "")
            'Eliminamos cualquier otro especio que haya a la izquierda
            Do While Left(texto, 1) = " "
                texto = Replace(texto, " ", "")
            Loop
            columna = columna + 1
                If texto Like "* *" Then
                    texto = Left(texto, InStr(texto, " ") - 1) 
                End If
        'Colocamos la referencia encontrada en la celda correspondiente
        Cells(fila, columna).Value = texto
        'Colocamos los titulos de las columnas de referencias
        Cells(1, columna).Value = "EXTERNAL_REF" & columna - 2
        End If               
    Wend   
    'Cerrar el archivo de entrada
    Close #1
ActiveCell.Offset(1, 0).Select
Loop
End Sub

El código anterior genera la siguiente tabla, donde se listan las referencias externas de cada uno de los códigos .CL definidos:

Manipulando el código anterior, podemos crear otras hojas de excel para los AIs (entradas analogicas), DIs (entradas discretas), PIDs (Reguladores), motores, válvulas y listar cada uno de sus parametros.

No hay comentarios.:

Publicar un comentario