PROGRAMA DE ANÁLISIS DE PÓRTICOS EN 2 DIMENSIONES: MATRIX-PRO

Novedades

Peso Propio

Se puede calcular el peso propio de la estructura como un caso de carga más. La etiqueta a llamar es “pesoPropio:” y luego se le asigna el nombre de caso de carga que el usuario desee (siempre sin espacios).

pesoPropio: nombre_del_PP

Luego este caso de carga se introduce en los combos como cualquier otro caso de carga:

combo: combo1 1.2 nombre_del_PP 1.6 nombre_carga_viva

Articulaciones

Ya se pueden introducir articulaciones en las barras en uno o ambos extremos. La etiqueta es “articulacion:” y lleva los siguientes argumentos.

articulacion: artIzq artDer {lista de barras}

Los valores que toman artIzq y artDerr son 0 ó 1.
1 = articulado. 0 = no articulado o unión rígida.

Descarga del programa

Se puede descargar el programa desde el siguiente enlace:

DESCARGAR PROGRAMA DE MATRIX-PRO 2D Versión 3.0
Tutorial en vídeo del programa

He elaborado dos tutoriales en vídeo disponibles en youtube.

Este primer vídeo corresponde a la primera versión del programa que no tiene implementado el cálculo de peso propio ni articulaciones.


El segundo video corresponde a la versión 3.0 del programa disponible para descarga.

Uso del programa

Existen dos maneras de correr el programa. A partir del explorador de windows y a través de la ventana de comandos.

A partir del explorador (ventanas) de Windows

Si se hace doble click en el ejecutable, este correrá siempre y cuando todos los datos del modelo estructural se encuentren en el archivo “ingresoDatos.txt” que deberá estar en la misma carpeta del ejecutable. Si el programa no encontrara este archivo, simplemente se cerrará.

A partir de la ventana de compandos (CMD prompt)

La manera más completa de utilizar el programa es a partir del command prompt o de la ventana de comandos. Debemos primeramente dirigirnos a la carpeta donde se encuentra el programa:

Una vez en la carpeta de trabajo, debemos llamar al programa seguido del nombre donde se encuentran los datos de la estructura. En este caso tenemos dos archivos de datos: “datosIngreso.txt” y “otroPortico.txt”.

Si solo escribimos winportico2d, automáticamente llamará al archivo por defecto “datosIngreso.txt

C:\Users\marze\Downloads\programa>winportico2d

Sin embargo si escribimos winportico2d seguido del nombre del archivo, abrirá en este caso “otroPortico.txt”

C:\Users\marze\Downloads\programa>winportico2d otroPortico.txt
Unidades

Las unidades con las que se trabaje pueden ser cualesquiera. Sin embargo deben ser homogéneas a lo largo de todo el programa.

si se comienza con unidades de [m], [KN], [KPa], deberán trabajarse con esas unidades de inicio a fin.

Los resultados se entregarán en las mismas unidades.

No se pueden mezclar unidades ni prefijos de unidades. Por ejemplo no se puede usar [cm],[KN],[MPa]

Ingreso de datos

Dentro del archivo .txt se deben ir ingresando los datos del programa secuencialmente para que el programa interprete todos los elementos que se encuentran en el archivo de texto. El programa busca etiquetas específicas y luego lee los datos seguidos de esa etiqueta. Por ejemplo si el programa lee la etiqueta “nudos:”, a continuación leerá tantos datos de nudos como tenga el archivo de texto.

Tomemos como ejemplo el siguiente pórtico sencillo:

Un archivo de ingreso de datos correspondiente a este pórtico tendrá la siguiente forma:

Cada etiqueta como “nudos:” o “puntual:” se escribe siempre sin espacios y con dos puntos al final. Luego de cada etiqueta se escriben los datos de ingreso en el orden explicado en el siguiente apartado.

Etiquetas

Las etiquetas deben escribirse tal cual se muestran en la siguiente lista. No se deben intercambiar Mayúsculas con minúsculas o viseversa.

Cada dato se separa con espacio o con salto de línea (enter). No se admiten “,” comas ni “;” punto y coma para la separación entre datos.

nudos:

Corresponde al ingreso de coordenadas de cada nudo. Primero se escribe la numeración de cada nudo, luego la coordenadaX, y finalmente la coordenada Y. La numeración puede no ser secuencial, sin embargo es mejor evitar esto último.

nudos:
#nudo CoordX coordY
barras:

Luego de esta etiqueta se indica la conexión de cada barra entre nudos. Para cada barra se escribe separado por espacios:
– Número de barra
– Nudo de inicio
– Nudo de llegada
El valor de nudo de inicio o de llegada corresponden a la numeración de nudo establecida en la etiqueda “nudos:”.

barras:
#barra deNudo aNudo
seccionRectangular:

Acá se establece la sección transversal rectangular de los elementos. Si existieran elementos no rectangulares o de forma irregular, utilizar la etiqueta “secciónGenerica:”. El orden en el cual se ingresan los datos es el siguiente:

seccionRectangular:
tagSeccion (tagSeccion es texto sin espacios)
base altura modElas pesoEspecifico
{lista de barras}

En el pórtico el ingreso de datos de la sección es como sigue:

seccionRectangular:
viga
0.25 0.4 20e6 24
1 2 3 4

La primera línea indica el nombre de la etiqueta.
La segunda línea corresponde al nombre que le damos a la sección (puede ser cualquier nombre, pero sin espacios)
La tercera línea corresponde a la sección: base=0.25m, altura = 0.4m, moduloElastico = 20’000’000 KN/m2 y peso específico de 24KN/m3
La última línea indica los elementos o barras a los que se le asigna esta sección.

seccionGenerica:

Se establece la sección transversal de los elementos no rectangulares. El orden en el cual se ingresan los datos es el siguiente:

seccionGenerica:
tagSeccion (tagSeccion es texto sin espacios)
area inercia modElas pesoEspecifico
{lista de barras}

El formato de ingreso de datos es muy similar al de “seccionRectangular:”. Ver los detalles de esta etiqueta para un ejemplo.

distribuidaLocal:

Se usa al aplicar cargas distribuidas en un elemento de barra, en coordenadas locales. Se pueden introducir cargas trapezoidales perpendiculares y paralelas a la barra. Obviamente una carga rectangular o triangular es un caso particular de la trapezoidal.

La manera de introducir los datos de carga a una lista de barras es la siguiente. Para todo un conjunto de barras o elementos de pórtico que reciban la misma carga se introduce la carga como sigue:

distribuidaLocal:
casoCarga (casoCarga es texto sin espacios)
fIqz fDer qIzq qDer
{lista de barras}

Primero se introduce el nombre de la etiqueta “distribuidaLocal:”.
A continuación donde se lee “casoCarga” se introduce el nombre del caso de carga. Este es un nombre que nosotros podemos escoger a gusto y necesidad. Sin embargo nombres como “viva”, “muerta”, “lateral” serán nombres típicos para denotar el tipo de carga que estamos utilizando. Este deberá ser un texto sin espacios.
Luego se introducen las cargas paralelas a la barra o perpendiculares a la barra en sus extremos:
fIzq: fuerza paralela a la barra a la izquierda o inicio de la barra
fDer: fuerza paralela a la barra a la derecha o fin de la barra
qIzq: fuerza perpendicular a la barra a la izquierda o inicio de la barra
qIzq: fuerza perpendicular a la barra a la derecha o fin de la barra
{lista de barras} corresponde a la lista de elementos frame a los cuales se les aplicará la carga indicada. Las cargas serán positivas a la derecha y positivas hacia arriba de la barra.

distribuidaGlobal:

Se usa al aplicar cargas distribuidas en un elemento de barra, en coordenadas Globales. Se pueden introducir cargas trapezoidales, rectangulares o triangulares en cualquier dirección.

La manera de introducir los datos de carga a una lista de barras es la siguiente. Para todo un conjunto de barras o elementos de pórtico que reciban la misma carga se introduce la carga como sigue:

distribuidaGlobal:
casoCarga (texto sin espacios)
qIzq qDer dirX dirY
{lista de barras}

Primero se introduce el nombre de la etiqueta “distribuidaGlobal:”.
A continuación donde se lee “casoCarga” se introduce el nombre del caso de carga. Este es un nombre que nosotros podemos escoger a gusto y necesidad. Sin embargo nombres como “viva”, “muerta”, “lateral” serán nombres típicos para denotar el tipo de carga que estamos utilizando. Este deberá ser un texto sin espacios.
Luego se introduce la carga según el siguiente orden:
qIzq: Carga distribuida en el extremo inicial de la barra
qDer: Carga distribuida en el extremo final de la barra
dirX y dirY: componentes del vector dirección hacia donde apuntará la carga.
En este caso, qIzq y qDer deberán ser positivos, ya que la dirección de la carga la da el vector dirección.

Por ejemplo el siguiente código para unidades de [KN] y [m] se interpreta como sigue:

distribudaGlobal:
viva
30 30 1 1
1 3 4

Una carga distribuida en coordenadas globales, con el nombre “viva” se aplicará con una magnitud de 30 [KN] al inicio y fin de la barra (uniformemente) en una dirección a 45° medida desde el eje positivo de las X. (1 derecha y 1 hacia arriba). Los elementos a los que se aplicará esta carga son los elementos 1 3 4.

puntual:

Etiqueta que se usa para introducir una carga puntual en la estructura. Su sintaxis es la siguiente:

puntual:
casoCarga (texto sin espacios)
Px Py M
{lista de nudos}

“puntual:” es la etiqueta. Luego se introduce el nombre de la carga. “viva” “muerta” o “lateral” son nombres adecuados aunque se puede utilizar cualquier otro siempre que no lleve espacios.
Luego se introduce el valor de la carga en X, en Y y el momento aplicado en un nudo. Finalmente en {lista de nudos} se introduce el número de nudos a los cuales se les asignará esta carga establecida.

apoyo:

Etiqueta que se utiliza para apoyar un nudo (o varios nudos) de la estructura. Su sintaxis es la siguiente:

apoyo:
Ux Uy Giro
{lista de nudos}

Los valores que toma Ux, Uy y Giro son: Restringido = 1, sin restringir o libre = 0. Un ejemplo ayudará a explicar el concepto:

apoyo:
1 1 0
1 3

el código mostrado indica que el apoyo será restringido en X, restringido en Y y libre en giro (1 1 0). Por tanto es un apoyo fijo. La lista de nudos a los que se aplica el apoyo es nudos 1 y 3.

Un apoyo móvil tradicional tiene la configuración (0 1 0); un apoyo empotrado estará restringido a los tres movimientos (1 1 1).

resorte:

Etiqueta que se utiliza para apoyar elásticamente un nudo (o varios nudos) de la estructura. Su sintaxis es la siguiente:

resorte:
kx ky kGiro
{lista de nudos}

Los valores que toman kx, ky, kGiro son:
– kx: Rigidez de resorte en X
– ky: Rigidez del resorte en Y
– kGiro: Rigidez de resorte de giro.
Las magnitudes que toman estas constantes deberán estar en las mismas unidades que las cargas, distancias, y rigideces de la estructura. Ejemplo:

resorte:
0 5000 0
2 4

el código mostrado indica que el nudo estará soportado por un resorte en dirección Y de 5000 KN/m (en el entendido de que las unidades de trabajo de toda la estructura son KN y m).

pesoPropio:

Se puede calcular el peso propio de la estructura como un caso de carga más. La etiqueta a llamar es “pesoPropio:” y luego se le asigna el nombre de caso de carga que el usuario desee (siempre sin espacios).

pesoPropio: nombre_del_PP

Luego este caso de carga se introduce en los combos como cualquier otro caso de carga:

combo: combo1 1.2 nombre_del_PP 1.6 nombre_carga_viva
articulacion:

Ya se pueden introducir articulaciones en las barras en uno o ambos extremos. La etiqueta es “articulacion:” y lleva los siguientes argumentos.

articulacion: artIzq artDer {lista de barras}

Los valores que toman artIzq y artDerr son 0 ó 1.
1 = articulado. 0 = no articulado o unión rígida.

combo:

Esta etiqueta es obligatoria dentro de la definición de cargas, ya que el programa solo grafica y calcula las cargas contenidas en la etiqueta “combo:”. De nada sirve que una carga con nombre “viva” por ejemplo, haya sido creada arriba, si no se la aplica dentro de un combo en esta etiqueta. La sintaxis es la siguiente:

combo:
nombreCombo
FactorMayoracion1 CasoDeCarga1
FactorMayoracion2 CasoDeCarga2
FactorMayoracion3 CasoDeCarga3
etc...

Se pueden crear tantos combos como se guste. El siguiente ejemplo ayuda con la idea:

combo:
miCombo1
1.4 muerta
1.4 pesoPropio

combo:
miCombo2 1.2 muerta
1.2 pesoPropio
1.6 viva

combo:
servicio
1.0 muerta
1.0 pesoPropio
1.0 viva

El anterior es un ejemplo típico de combinación de carga en Hormigón Armado. Para la estructura se tienen generados 3 estados de carga correspondientes a las combinación de carga del código americado. Las cargas creadas tienen nombres “viva”, “muerta”, y “pesoPropio”. Cada combinación necesita un nombre: miCombo1, miCombo2, servicio.

Posteriormente se incluyen los factores de mayoración de cada carga seguido del nombre de la carga que se quiera mayorar. No necesariamente deben entrar todas las cargas dentro de la lista de cargas de cada combo, como se ve en el combo “miCombo1”.

Etiquetas de escala

Las siguientes etiquetas son opcionales, y sirven para controlar desde el inicio la escala de diferentes elementos al momento que se muestren los resultados.

precision: cantidad de decimales (por defecto 3)
escalaDef: escala deformaciones (por defecto 100 veces)
escalaN: escala de diagramas de axiales (por defecto 0.1)
escalaV: escala de diagramas de cortante (por defecto 0.1)
escalaM: escala de diagramas de momento flector (por defecto 0.01)
escalaTexto: Tamaño de texto (Defecto 0.15 unidades de distanci)
escalaCarga: Tamaño de cargas. (Por defecto 0.1)
escalaApoyo: Tamaño de apoyos. (por defecto adopta un tamaño en función al tamaño de la estructura)
Corriendo el software

Cuando se corre el programa y este lee los datos del problema satisfactoriamente, se genera una ventana con el pórtico dibujado. A partir de este punto se controlan los comandos de mostrado de resultados a partir de teclado.

La navegación de zoom y paneo se realizan con el Mouse.

Teclas de uso

Cuando esté corriendo el ejecutable y se quieran mostrar los resultados del pórtico, se debe pedir el programa que muestre los resultados desde la línea de comandos.

Primero se debe activar un combo, escribiendo:

combo (enter)
nombreDeCombo (enter)

Los nombres de los combos generados (que por defecto están apagados) se divisan en la esquina superior derecha de la ventana.

Con el combo (o los combos) encendido(s), se pueden llamar a distintos comandos para ver las solicitaciones de dichos combos.

los comandos son:

plotDef
plotN
plotV
plotM

PlotDef grafica las deformaciones con valores en los nudos.
plotN grafica solicitaciones Axiales
plotV grafica solicitaciones de cortante
plotM grafica solicitaciones de momento flector

También se puede llamar a la numeración de nudos, barras y secciones con los siguientes comandos:

tagNudos
tagBarras
secciones
noTags

noTags apaga la graficación de todos los tags.

Para apagar alguna solicitación o algún Tag, se debe volver a escribir el comando que lo encendió.

Adicionalmente se puede modificar la escala de los gráficos y texto mediante las teclas:

+: incrementa la escala del grafico en 10%
-: decrementa la escala del gráfico en 10%
shift +: incrementa tamaño de texto
shift -: disminuye tamaño de texto

Recargar el modelo

En muchas situaciones se deben modificar los datos de ingreso desde el archivo de texto. Una vez modificado el archivo de ingreso de datos, se puede re-leer el archivo desde el programa corriendo con la tecla F5.

Mejoras posteriores

Se tienen proyectadas las siguientes mejoras futuras:

  • Introducción de etiquetas de secciones tubulares, o secciones T, W, L
  • Opción de desplazamientos impuestos

Si tienes sugerencias de otras mejoras, estoy mucho más que agradecido de leer tus comentarios.

autor: Marcelo Pardo

←←← VOLVER A TABLA DE CONTENIDO DE ELEMENTOS FINITOS ←←←

Esta entrada tiene 22 comentarios

  1. Miguel Luque

    Buenas ingeniero. Yo de nuevo molestando. No logro ver qué problema puedo tener en axiales de las diagonales (no veo que me generen valores) a la hora de correr el programa y también en los valores de las deformaciones. Te comparto mis datos del archivo, si tuvieras tiempo ¿le podrías dar una revisadita? Gracias.

    nudos:
    1 0 0
    2 0 3
    3 0 6
    4 2.5 3
    5 2.5 6
    6 5 0
    7 5 3
    8 5 6
    9 7 0
    10 7 3
    11 7 6
    12 9 0
    13 9 3
    14 9 6
    15 10.67 3
    16 10.67 6
    17 12.33 3
    18 12.33 6
    19 14.00 3
    20 14.00 6

    barras:
    1 1 2
    2 2 3
    3 2 4
    4 3 5
    5 4 7
    6 5 8
    7 6 7
    8 7 8
    9 9 10
    10 7 10
    11 10 11
    12 12 13
    13 10 13
    14 13 14
    15 11 14
    16 13 15
    17 15 16
    18 14 16
    19 15 17
    20 17 18
    21 16 18
    22 17 19
    23 19 20
    24 18 20
    25 13 11
    26 13 16
    27 15 18
    28 17 20

    apoyo:
    1 1 1
    1 6 9 12

    seccionRectangular:
    col30x30
    0.30 0.30 20e6 24e3
    1 2 7 8 9 11 12 14

    seccionRectangular:
    vig20x45
    0.20 0.45 20e6 24e3
    3 4 5 6 10 13 15 16 18 19 21 22 24

    seccionRectangular:
    diag20x20
    0.20 0.20 206e 24e3
    17 20 23 25 26 27 28

    distribuidaLocal:
    viva
    0 0 -19.80 -19.80
    3 4 5 6 10 13 15 16 18 19 21 22 24

    pesoPropio:
    muerta

    combo:
    c1
    1.0 muerta

    combo:
    c2
    1.0 viva

    combo:
    c3
    1.2 muerta
    1.6 viva

    escalaTexto: 0.25
    escalaCarga: 0.05
    escalaApoyo: 0.4
    precision: 4
    escalaDeflexion: 40
    escalaN: 0.006
    escalaV: 0.015
    escalaM: 0.013

    1. marzellus81

      Miguel, hay un par de errores en tu ingreso de datos:
      1) En todas las secciones el peso específico es de 24. (pues el peso específico del concreto es de 24KN/m3)
      2) el módulo elástico es 206e (o sea 206 KN/m2) . Debería ser 20e6 (o sea 20’000’000). Por eso se deforman mucho

      1. Miguel Luque

        Muchas gracias por el apoyo y por las respuestas. Ya he corregido TODO y está bien. Todo fue error mío. El software va de maravilla.

  2. Miguel Luque

    Ingeniero, buenas tardes.
    No se si estoy haciendo algo mal pero, “escalaTexto” no me funciona. ¿habrá algún error o soy yo quien no puede usar el programa? jejeje
    Saludos

    1. marzellus81

      Miguel, puedes pegar el código completo para revisar tu ingreso de datos?

      1. Miguel Luque

        Ingeniero, ya he logrado que la “escalaTexto” funcione. Yo estaba omitiendo una mayúscula por ahí pero, ahora tengo una duda respecto al ingreso de las barras. ¿importa el si el Nudo de inicio es mayor o menor al Nudo de llegada? Es que creo que eso me está afectando en unos resultados a la hora de darle el comando de plotDef.
        Digamos, si yo tengo una barra 10 que está entre los nudos 11 y 13. ¿el nudo de inicio debe ser el 11 o el 13 o no importa?

        Gracias ingeniero

        1. marzellus81

          Miguel buenas tardes. No tendría que afectar si la conexión va de 11 a 13 o de 13 a 11. Te está dando valores diferentes?

          1. Miguel Luque

            Buenas tardes. La verdad si, si me da valores diferentes. Sobre todo si la barra tiene una carga distribuida, al colocar la gráfica de cargas, la carga en esa barra se invierte. Es decir, si tengo una barra 8, que va del nudo 7 al 9 con una carga distribuida de 8 kN/m, al llamar ak comando plotCarga, se muestra la carga distribuida hacia abajo pero, si le cambio de posición la conexión de los nudos, es decir coloca la barra 8 conectada del 9 al 7, la carga distribuida se muestra hacia arriba y me puede cambiar valores de Axiales y cortantes. Bueno eso es lo que logré ver en un ejercicio que colocaste inge, sobre un pórtico con un resorte del lado izquierdo y con dos apoyos empotrados y uno articulado.
            No se si será bueno, definir que las nudos de las barras vayan siempre del menor al mayor número de nudo. Pero si pudieras revisarlo seria excelente. Siempre cabe la posibilidad de que me esté equivocando.

            Saludos ingeniero.

  3. Miguel Luque

    Gracias ingeniero por seguir actualizando el software. Con un par de cosas.
    1.- En lo personal no me molestan las líneas que se generan dentro de los diagramas de cortante o momento pero, a lo mejor puedes dejar que se llene toda el área de color sólido pero semitransparente.
    2.- ¿es posible que se pueda escoger, que se muestre uno u otro, entre el diagrama de momentos normal y el diagrama invertido?
    3.- En el ejemplo del último video “Programa de cálculo de Pórticos en 2D. Con novedades” de fecha 14/11/2024 realizas el ejemplo de una viga con articulaciones pero, al ingresar los datos en el archivo de texto ingresas dos articulaciones de dos barras seguidas (entiendo que es la misma articulación y se pudo generar solamente una). Así como el último nudo (6) el problema indica que está articulado en ese punto pero tu lo ingresaste como un apoyo articulado. ¿también la primera articulación de la barra 1 se hubiera podido asignar como apoyo articulado? o ¿el último nudo se pudo haber ingresado como articulación y no como apoyo?

    Saludos y Gracias TOTALES

    1. marzellus81

      Miguel, muchas gracias por las sugerencias, intentaré implementarlas de la mejor manera.
      Respecto a la pregunta, efectivamente, en el extremo derecho de la viga, podría haberse impuesto un empotramiento, y posteriormente aplicar articulación en la barra. Funcionaría igual.

      muchas gracias por el apoyo con el uso del programa, de verdad!

    2. Miguel Luque

      Buenas tardes. La verdad si, si me da valores diferentes. Sobre todo si la barra tiene una carga distribuida, al colocar la gráfica de cargas, la carga en esa barra se invierte. Es decir, si tengo una barra 8, que va del nudo 7 al 9 con una carga distribuida de 8 kN/m, al llamar ak comando plotCarga, se muestra la carga distribuida hacia abajo pero, si le cambio de posición la conexión de los nudos, es decir coloca la barra 8 conectada del 9 al 7, la carga distribuida se muestra hacia arriba y me puede cambiar valores de Axiales y cortantes. Bueno eso es lo que logré ver en un ejercicio que colocaste inge, sobre un pórtico con un resorte del lado izquierdo y con dos apoyos empotrados y uno articulado.
      No se si será bueno, definir que las nudos de las barras vayan siempre del menor al mayor número de nudo. Pero si pudieras revisarlo seria excelente. Siempre cabe la posibilidad de que me esté equivocando.

      Saludos ingeniero.

      1. marzellus81

        Miguel muchas gracias. Ese es un problema más de la carga en coordenadas locales. Se puede aplicar la carga de las barras en coordenadas globales y con esa variación ya no influye la dirección en la que se hacen las conexiones de elementos.

  4. tomas hernandez

    Causas ajenas me impidieron agradecer oportunamente tu amable atención. Gracias!!!

  5. Kevin

    Buenas tardes ingeniero, le escribo por este medio también ya que el programa es fenomenal, hay manera de visualizar la deflexíón máxima y su valor?; así como la distancia a la cual se encuentra, en el caso de vigas?

    1. marzellus81

      Kevin, aun no he implementado esa opción. Sin embargo es muy útil. Haré eso en un siguiente upgrade. Muchas gracias en todo caso por la sugerencia

  6. Miguel Luque

    Que tal ingeniero. Tengo que agradecerte por este medio también, ¡¡GRACIAS… TOTALES!!
    Como te mencionaba en YouTube, si de pura casualidad aceptaras mis sugerencias, pues sería bueno:
    ¿Habrá versión de 3D?
    ¿Qué tal mandar a imprimir o guardar en PDF?
    ¿Y si visualizamos máximos o valores a una distancia “x”?

    ¿Algún ejemplito en coordenadas globales?

    Saludos ingeniero.

  7. X22Fub

    Hey people!!!!!
    Good mood and good luck to everyone!!!!!

  8. Edgar

    buenos dias Marcelo, descargue el programa pero no pude ejecutarlo, da un error y no logro abrirlo, muchas gracias

    1. marzellus81

      Edgar, puedes escribirme a télegram al +591 698 12366 por favor. Quiero ver el error que obtienes

  9. tomas hernandez

    Estimado Marcelo:
    Muchas gracias por tu programa, resulta muy amigable y de mi interés.
    Por favor me puedes indicar el nombre del programa usado para descargar los archivos de texto, no lo tengo instalado y para visualizarlos utilizo el block de notas

    .

Deja una respuesta