Mostrar Mensajes

Esta sección te permite ver todos los mensajes hechos por este usuario, recuerda que solo puedes ver los mensajes en áreas en donde tu tienes acceso.


Mensajes - Soporte

Páginas: [1] 2 3 ... 87
1
STX8180 / Re:Establecer voltaje en salida analógica
« : junio 24, 2022, 20:06:28 pm »
Nuevamente. Implemente el siguiente script  y funciona bien a nivel VirtualHMI..pero no veo voltaje en la salida VOUT1, leí por ahí que hay un jumper, esto es así para el STX8081? para poder ver voltaje de 1 a 5 V en el canal. Intentamos otras funciones que vienen en el manual pero de igual forma no vemos la tensión que queremos.

Hola Miguel.

Los canales VIO tienen función múltiple, pueden ser entradas o salidas de diversos tipos, por lo tanto, antes hay configurarlos por software.

En el caso del modelo STX8180 no hace falta manipular ningún jumper.

Para que un canal VIO sea salida de voltaje (no corriente, eso es una función diferente) de 0 a 10V, lo podés configurar con la siguiente función antes de utilizarlo:

Código: (Pawn) [Seleccionar]
   
   // Canal VIO1: Salida de voltage, alias VOUT1.
   // Rango: 0 a 10V.
   // Voltaje inicial: 0V
   
   VioInitVout(1, VIO_TYPE_VOUT, VIO_VOUT_RANGE_0V_10V, 0)

La constante VIO_VOUT_RANGE_0V_10V indica rango 0 a 10V.
Mientras que el primer argumento es el número de canal VIO (en este caso 1) y el último argumento es el voltaje inicial (en este caso 0V).
Los canales VIO que pueden ser salida de voltaje son todos, desde VIO1 a VIO11.

Las constantes para rango válidos son:

Código: (Pawn) [Seleccionar]
VIO_VOUT_RANGE_0V_10V      // Output range: 0V to 10V
VIO_VOUT_RANGE_N5V_5V      // Output range: +/-5V
VIO_VOUT_RANGE_N10V_0V    // Output range: -10V to 0V

Luego de inicializar el canal VIO como salida analógica de voltaje VOUT, podés utilizar la función VoutWriteVolt() para escribir o establecer el voltaje de salida. Por ejemplo:

Código: (Pawn) [Seleccionar]
//
// Escribir salida analógica número 1 (VOUT1) con voltaje de 5.5V.
//

VoutWriteVolt(1, 5.5)

Notar que el voltaje pasado a la función (en este caso 5.5) debe estar dentro del rango de voltaje, sino, se recorta el voltaje al límite.

Para medir este voltaje con el voltímetro, debés hacerlo entre el canal VIO seleccionado y el terminal A1G (masa analógica).

En la página de ejemplos del modelo STX8180 hay ejemplos para las salidas analógicas, buscar "Escribir salidas analógicas de voltaje (VOUT)" en la página de ejemplo, lo podés encontrar en el siguiente link:

www.slicetex.com/hw/stx8180/examples.php

El ejemplo que pasaste, también esta disponible adaptado para el modelo STX8180 en la página mencionada, el link directo es:

www.slicetex.com/hw/stx8180/examples/VoutPawn1.zip

Este ejemplo, utiliza el canal VIO5 en vez del VIO1, pero podés modificarlo fácilmente cambiando el número de canal 5 por 1.

Saludos y buen fin de semana!






2
quedó claro! ya vimos como controlar este tema.

Perfecto. Tener en cuenta que para muestreos rápidos, como este, conviene tener el tamaño de SAMPLERS_BUF_SIZE al máximo, es decir en 127. Esto permite que entre cada evento @OnVinBufFullA() donde se escribe la tarjeta, esté más espaciado en el tiempo, por ejemplo 0.635 segundos para 200 muestras/s. Entonces, nos aseguramos tener todo ese tiempo disponible extra para otras operaciones del PLC. Por ejemplo, la operación de escritura de esas muestras tarda entre 0.010 a 0.030 segundos en promedio, pero si por algún motivo se retrasa, estamos sobrados de tiempo hasta la próxima escritura, que debe ser cada 0.635 segundos para no perder últimas muestras adquiridas (sino serán remplazadas o mezcladas por nuevas muestras).

Si bajamos el el valor de SAMPLERS_BUF_SIZE  el tiempo entre eventos @OnVinBufFullA() será menor, con lo cuál dispondremos de menos tiempo extra para cualquier retraso no contemplado en la escritura de las muestras.

Es a criterio del programador, se puede bajar el valor, pero cuando tenemos tiempos muy pequeños o muestreos a alta velocidad, conviene el mayor valor.

Saludos!

3
STX8180 / Re:Creacion archivo bin despues de un log
« : junio 23, 2022, 11:45:32 am »
Buenos días Miguel,

En el siguiente link te paso el ejemplo modificado para descargar:

www.slicetex.com/docs/an/an036/files/examples/DiskSamplerLog3B.zip

Este ejemplo es derivado del ejemplo "DiskSamperLog3", teniendo como principal diferencia el nombre de los archivos de logs, que en este caso incluyen la fecha en el nombre (YYYYMMDD.bin, donde YYYY=Año, MM=Mes, DD=Día). Además se lista cada log nuevo en un archivo llamado "loglist.htm" que es cargado por la página web "log.shml" para un acceso rápido.

Las principales diferencias son:

ARCHIVO SAMPLERS.P

En la función SamplersInit() utilizamos:

Código: (Pawn) [Seleccionar]
DiskLogInit(1, "", "bin", "/web", 100000, 1, DISKLOG_OPT_YYYYMMDD|DISKLOG_OPT_CIRCULAR|DISKLOG_OPT_FAST_WRITE)

El canal 1 de DiskLog está configurado para que los datos se guarden en un archivo con el siguiente nombre "YYYYMMDD.bin", donde YYYY=Año, MM=Mes, DD=Día, por ejemplo 20220623.bin. Cada archivo puede almacenar hasta 100000 entradas de log (configurable) por archivo. Como todos los días se crea un archivo nuevo, si en el mismo día se pasan las 100000 entradas, se sobreescribe el archivo desde el comienzo, perdiendo el contenido previo (esto es porque se utiliza la opción DISKLOG_OPT_CIRCULAR en DiskLogInit()). Puede eliminar la opción DISKLOG_OPT_CIRCULAR si no quiere este comportamiento circular o aumentar el número de entradas por archivo.

En la función SamplersStart() agregamos el siguiente código al inicio:

Código: (Pawn) [Seleccionar]

   new Year, Month, Day
   new File[31]
   
   //
   // Agregar un link del archivo de log actual si no existe el archivo con lista de logs "/web/loglist.htm".
   //
   
   // Obtener fecha del reloj.
   RtcGetDate(Day, Month, Year)
   
   // Crear una cadena con el nombre del archivo del log correspondiente a este día.
   // Nota: %02d, es un código para imprimir un entero anteponiendo como máximo dos ceros,
   // por ejemplo: "1" se imprime como "01".
   StrFormat(File, 31, false, "/web/%04d%02d%02d.bin", Year, Month, Day)
   
   // Verificar si no existe el archivo de log actual o la lista de logs.
   // Nota: Esto permite agregar solo agregar el enlace cuando hay un archivo de log nuevo, o cuando
   // la lista de logs no existe.
   if(DiskFileExist(File) == 0 || DiskFileExist("/web/loglist.htm") == 0)
   {
      // No existe, agregar enlace a archivo en otro archivo llamado /web/loglist.htm
      // Nota: La opción DISK_WRITELOG_OPT_NO_DATE evita colocar fecha/hora en el archivo.
      DiskWriteLogString(DISK_WRITELOG_OPT_NO_DATE, "/web/loglist.htm", "<a href=\"%s\" target=\"_blank\">%s</a><br>", File, File)
   }


Comenzamos obteniendo fecha/hora con RtcGetDate() para formar una cadena con StrFormat() que tenga el mismo nombre que el archivo de log del día, es decir del tipo YYYYMMDD.bin. Esto nos permitirá comprobar si el archivo YYYYMMDD.bin del día existe con DiskFileExist().

Si no existe, con DiskWriteLogString() escribimos una línea de texto en el archivo "/web/loglist.htm" que cotiene un link a YYYYMMDD.bin, de esta manera, luego podremos acceder desde la página web  a una lista con todos los archivos log generados.

También comprobamos si "/web/loglist.htm" no existe, en ese caso, también agregamos el link a YYYYMMDD.bin.

ARCHIVO LOG.SHTML

Finalmente, en la página web dinámica agregamos un comando para cargar el contenido del archivo con la lista de enlaces a los logs: "/web/loglist.htm"

Esto lo hacemos con el comando:

Código: (CGI) [Seleccionar]
$!+ /web/loglist.htm $

Resultando el código HTML de la página web completo como:

Código: (HTML) [Seleccionar]
$!+ /header.html $

<section>

<h1>Logs Disponibles</h1>

<p>Click en archivo para descargar log.</p>

<!-- Cargar contenido de archivo en la página. -->
$!+ /web/loglist.htm $

</section>

$!+ /footer.html $

Cada log nuevo será listado en la página web "log.shtml" que a su vez carga el archivo con enlaces "/web/loglist.htm".

Más información sobre comandos web en la nota de aplicación AN030.

Podés probar generar diferentes archivos logs del tipo YYYYMMDD cambiando la fecha/hora interna del PLC con diferentes días desde menú "PLC > Configurar PLC".

Saludos!





4
Observamos en el log ya en excel que en 1 segundo hay un total de 127 ineas y en otro segundo vemos 254 lineas, es aleatorio. Pudieses ampliarnos el tema del buffer size? Queremos tener claro puesto que el usuario final esperaria, si le digo que muestreo 200 x segundo, ver en el log las 200 muestras del segundo. Para tener bien el argumento del funcionamiento.

Hola Miguel.

Cuando el PLC muestrea a 200 muestras por segundo, esto es, una muestra cada 0.005 segundos, el PLC no las escribe inmediatamente en el archivo binario, sino que espera que se llene un buffer interno, que en este caso tiene el tamaño SAMPLERS_BUF_SIZE = 127.

Entonces, transcurren 0.005 * 127 = 0.635 segundos antes de que se escriban las muestras a un archivo (en este momento se llama al evento @OnVinBufFullA() en "Samplers.p", y escribe las muestras con DiskLogAddArray()).

Por lo tanto, supongamos que se comienza a muestrear justo en el segundo exacto "0", tendremos el siguiente log cada 0.635 segundos:

  • 0.635 segundos: se escriben 127 muestras
  • 1.27 segundos: se escriben 127 muestras
  • 1.905 segundos: se escriben 127 muestras
  • 2.54 segundos: se escriben 127 muestras
  • 3.175 segundos: se escriben 127 muestras
  • 3.81 segundos: se escriben 127 muestras
  • 4.445 segundos: se escriben 127 muestras
  • 5.07 segundos: se escriben 127 muestras

Notar como las líneas marcadas en rojo pertenecen al mismo segundo, porque el log estuvo espaciado cada 0.635, y la sumatoria hace que algunos logs queden en el mismo segundo, pero el espacio de tiempo siempre es el mismo. En esos casos, verá 127+127 = 254 muestras asociadas a un mismo segundo.

Como la menor unidad de tiempo para fecha/hora es el segundo en el reloj del PLC, el tiempo asociado solo contiene el segundo, pero no las milésimas de segundo. Sin embargo, el muestreo es correcto, el espaciado entre cada muestra es de 0.005 segundos.

Si no se entiende la explicación, me avisa.

Saludos!

5
STX8180 / Re:Creacion archivo bin despues de un log
« : junio 22, 2022, 17:30:20 pm »
Tomando como ejemplo Disksample3, para el muestreo de canales (hasta 200 muestras/s), ¿es posible que se creen archivos bin por cada evento con el titulo de la fecha y hora enque se creo el log para ese evento en específico? digamos que cada el evento dure de 30 a 60 segundos. algo como
                 h  m  s
log220622_113915
log220630_120012

Buenas tardes Miguel,

Los nombre de archivos tienen un límite de 8 caracteres en el PLC, por lo tanto no tiene la longitud suficiente para poder colocar fecha y hora en el log en el nombre del archivo.

Lo que puede hacer es que tenga fecha, mes y día el nombre, por ejemplo: "YYYYMMDD.bin"
Donde YYYY=Año, MM=Mes y DD=Día.

Para configurarlo de ese modo, en DiskSamperLog3, vaya al archivo "Samplers.p" y busque la línea:

Código: (Pawn) [Seleccionar]
DiskLogInit(1, "vin", "bin", "/web", 10000, 500, DISKLOG_OPT_PPPPPXXX|DISKLOG_OPT_CIRCULAR|DISKLOG_OPT_FAST_WRITE)

Remplácela por:

Código: (Pawn) [Seleccionar]
DiskLogInit(1, "", "bin", "/web", 10000, 1, DISKLOG_OPT_YYYYMMDD|DISKLOG_OPT_CIRCULAR|DISKLOG_OPT_FAST_WRITE)

La nueva constante utilizada es: DISKLOG_OPT_YYYYMMDD que le da el nombre de archivo el año, mes y día.
En el segundo argumento colocamos "" (sin prefijo de nombre de archivo), y en el sexto argumento '1' ya que se genera un solo archivo por día.

y se puedan observar en el webpage

¿Un listado en la página con todos los archivos "YYYYMMDD.bin" generados?.

Se me ocurre que una forma de realizarlo, es que cada vez que se genere un log por día nuevo, se escriba un archivo en la tarjeta con un link al log. Luego al cargar una página web, se cargue este archivo que muestre la lista.

Si esto busca, puedo ejemplificarle.

Saludos!


6
STX8180 / Re:Calibrar voltajes analógicos de entradas flotantes
« : junio 20, 2022, 21:06:55 pm »
Simulando el rango bajo en los canales 1 y 3 El resultado en el archivo SCV  es:
1   20/06/2022   10:33:18   1.0107   0.5518   0.874   0.5444   0.5469
como puedo obtener 0 en los otros canales que no se usan y si estos se pueden calibrar

Hola Víctor,

Te edité el título y una parte del contenido del mensaje, ya que la consulta estaba duplicada respecto a la conversión de unidades de ingeniería, que fue respondida en otro hilo de mensajes.

Para mantener cierto orden, favor de realizar consultas en diferentes hilos cuando los temas de consultas sean muy diferentes entre sí. También, puede modificar sus mensajes y editar el texto sin necesidad de duplicarlos en caso de querer corregir algo.

Volviendo a la consulta, si necesitas calibrar un valor, lo que te conviene hacer es sumar o restar un "offset" al valor medido. Esto lo podés hacer al convertir el archivo CSV desde Visual C#, ya que allí obtenés el voltaje y podés hacer la corrección hasta lograr el valor deseado.

Por otro lado, si la entrada está desconectada, sin conexión, y querés que el valor esté fijo en un valor cercano a 0V, lo que podés hacer es colocar un resistor (resistencia) de 100K a 1Mega Ohm, entre el terminal VIO y A1G, como te muestro en la siguiente figura:



El resistor "R" mostrado en la imagen superior permitirá tener un voltaje cercano a 0V cuando no haya señal conectada en VIO2. Esto debe repetirse por cada canal.

En mi opinión, a menos que sea necesario, no debería hacerte falta, ya que siempre le conectarás una señal de entrada al canal VIO para el cliente final, sería lo correcto. Si el cliente no usa una entrada, pero la quiere tener disponible, desde Visual C#, deberías darle la opción a que no imprima en el archivo CSV las mediciones de un canal determinado, evitando que vea mediciones de entradas desconectadas. De esta manera te ahorrás conexionado extra.

Saludos!

7
STX8180 / Re:Convertir voltaje a unidades de ingeniería
« : junio 20, 2022, 20:46:48 pm »
Ya revisamos las opciones y queremos hacerlo a través de la aplicación SampleBinToText editandolo con visual studio  para que en el archivo CSV ya aparezcan los rangos de los canales en unidades de ingeniería, primero de 0 a 100% como primera práctica y después quisiéramos implementar que estos rangos sean editados a través del programa SampleBinToText para que cada canal pueda tener diferente rango y se pueda modificar rápidamente.

Buenas tardes Víctor,

Convertir a unidades de ingeniería en el programa "SampleBinToText" es fácil, ya que tenés el valor de voltaje.

Lo primero que debés realizar es un escalamiento matemático, es decir, convertir por ejemplo valores de voltaje de 0 a 10V a temperatura de 0 a 100 °C.

Para ello podés utilizar crear la siguiente función (método se le dice) en Visual C#:

Código: (C#) [Seleccionar]
        private float MathScale(float InValue, float InMin, float InMax, float OutMin, float OutMax)
        {
            float ScaledValue;

            // Convertir valor utilizando la ecuación de la recta que pasa por dos puntos.
            ScaledValue = ((((InValue) - InMin) / (InMax - InMin)) * (OutMax - OutMin) + OutMin);

            // Return.
            return ScaledValue;
        }

El método escala el valor 'InValue" entre 'InMin' y 'InMax' para el rango de salida especificado por 'OutMin' y 'OutMax'.
Donde "InValue" es el valor de voltaje.

Por ejemplo, volviendo al ejemplo de temperatura, si los valores de voltaje de 0 a 10V corresponden a temperatura de 0 a 100 °C, hacemos:

Código: (C#) [Seleccionar]
MathScale(VoltajeActual, 0, 10, 0, 100)

Y el método MathScale() devolverá la temperatura correspondiente entre 0 y 100 °C, para un voltaje entre 0 y 10V.
Una forma rápida de entenderla, es que a 0V le corresponden 0°C y a 10V le corresponden 100°C. Podés utilizarla para cualquier tipo de unidad de ingeniería (temperatura, presión, etc) y valor de entrada (voltaje o corriente).

Entonces, ahora que ya tenemos el método de conversión a unidades de ingeniería vamos al código del programa "SamplesBinToText" y buscamos la parte dónde obtenemos el voltaje (señalado en rojo):

    // Convertir muestra de canal de binario a analógico (float).
    // Nota: Cada muestra de canal está separada a SamplersBufSize*4 bytes del canal actual.
    Value = BitConverter.ToUInt32(LogEntryData, (int)(DataIndex + Ch*SamplersBufSize*4));
   
    VinValue = VinBinaryToVoltage(Value, VinRangeSelected, false);

    // Agregar a la línea de texto.
    // Nota: Imprimir valor con máximo 4 decimales.
    TextLines.AppendFormat(";{0:0.####}", VinValue);


El valor "VinValue" es el voltaje y le aplicamos el método MathScale() para convertir a unidades de ingeniería:

Código: (C#) [Seleccionar]
EngValue = MathScale(VinValue, 0, 10, 0, 100)

El valor EngValue será un valor entre 0 y 100, que es la temperatura correspondiente a 0 y 10V. Este valor ahora se guarda en el archivo CSV.

Para simplificar, te paso el ejemplo modificado, deberías ver una pantalla similar a la siguiente:



Observar en la imagen superior, la parte resaltada en amarillo, como podés configurar cada canal VIN, en este caso se muestra que -3V corresponde a 0, y 3V corresponde a 100.

Luego en el código fuente se toman estos valores de configuración para MathScale() para cada canal VIN.

Podés descargar desde este mensaje el código del proyecto modificado: SampleBinToTextEngUnits_v001.zip

Avisáme si hay algo puntual que no se entienda en el programa.

Saludos!



8
STX8180 / Re:Convertir voltaje a unidades de ingeniería
« : junio 17, 2022, 18:20:47 pm »
Buenas tardes Isaac,

En el ejemplo DiskSamplerLog4, el PLC al muestrear los canales analógicos almacena las lecturas en valores de voltaje con formato binario. Como la visualización final es a través de un archivo CSV que convertís de binario a texto con la computadora, no tiene sentido hacer la conversión a unidades de ingeniería en el PLC.

Lo que conviene es realizarlo en la utilidad de conversión "SampleBinToText". Esto además trae otra ventaja, y es que el PLC no tiene que hacer cálculos extras liberándolo para que aproveche todo el procesador en muestrear y guardar en memoria.

Ahora, hay varias formas de encarar lo que querés hacer.

Una es modificando la aplicación SampleBinToText con Microsoft Visual Studio para convertir voltaje a temperatura al hacer la conversión para obtener el CSV.

La otra opción, es que si es temperatura lo que necesitás leer, al ser una señal lenta, no veo que sea necesario que le apliques un muestreo rápido de 200 muestras por segundo, con que lo hagas a una muestra por segundo es más que suficiente. En ese caso, podés almacenar directamente la temperatura por separado en otro archivo CSV con el PLC, sin necesidad de usar la aplicación de conversión (ya que lo almacenás como texto, no en binario). En este caso utilizarías otro canal DiskLog.

Por ejemplo, si tenés señales rápidas en los canales VIN1 a VIN3, y otras señales lentas en los canales VIN4 a VIN6, podés por un lado aplicar el muestreo de 200 muestras por segundo a VIN1:VIN3 y almacenar en un archivo binario, y por otro lado un muestreo lento a VIN4:VIN6 que almacenás en un archivo de texto CSV directamente. Esto ahorra también memoria en la tarjeta Micro-SD ya que el muestreo rápido genera muchos datos de almacenamiento.

Avisáme qué opción te parece mejor, si almacenar por separado la temperatura, o todo junto y convertir desde Visual Studio, y te guío para que puedas hacerlo.

Saludos!

PD: El ejemplo DiskSamplerLog4 es al más avanzado y complejo de todos los ejemplos, quizás te conviene partir del ejemplo DiskSamplerLog3 que es más simple y específico.

9
Miguel nos consulta:

Citar
Estamos probando y conociendo el equipo..ya nos conectamos y probamos el proyecto disklog3..descargamos el archivo bin y lo pasamos a csv..  de momento no le conectamos nada....y lo que observamos en el log en todas las lineas   y columnas  el valor 2.2 ... despues en el canal 2 simulamos un a señal de 3.2+ V en el entendido q la variables están en el rango -5 a 5v  y al correr el log nuevamente  observamos que en la columna 2 (canal 2) el mismo valor 2.2, bueno en todos los canales.

Estamos siguiendo el manual en cuanto a las conexiones en este caso,  vin2  el positivo de los 3.2 v simulados u en AIG el negativo.

Eseperabamos en el log el valor de 3.2 v pero no fue asi.

Saludos
Miguel


Buenos días Miguel,

El valor 2.2V en realidad significa que la entrada está flotante, es decir, que no tiene conectada ningún voltaje, y por lo tanto mide un voltaje no definido. Pero este valor no es fijo, cuando una entrada analógica no tiene conexión, la medición puede ser cualquier valor ya que no hay referencia.

Te recomiendo que hagas de nuevo la prueba con el voltaje bien conectado, quizás estás mirando un log viejo o el cable en los terminales no hace buen contacto.

Fijáte que en la página web del ejemplo " DiskSamplerLog3" hay un botón que dice "Reiniciar log a 0". Tocálo antes de hacer la medición, así borras todo lo anterior, y solo te concentrás en el último muestreo.

Para conectar la señal, podés conectar 3.2V a VIO2 y la masa de ese voltaje al terminal A1G, como te muestro en la siguiente imagen. Revisá que haga buen contacto el cable en los terminales. El registro del log debería mostrarte 3.2V en ese canal. También podés probarlo en el canal VIO1 a VIO5 para el ejemplo mencionado.



Avísame si luego de revisar y repetir la medición continua sin leer el voltaje.

Saludos!

10
STX8091 / Re:Valores de corriente lazo 4-20 mA
« : junio 03, 2022, 16:33:53 pm »
tengo una consulta: puedo leer presión diferencial mediante el lazo de 4-20 mA, el tema es que quiero medir velocidad y tendría que calcular Raiz(Velocidad)= 2*presión diferencial/densidad .Mi pregunta es si hay una función especifica del pawn para hacer raíces o se debe recurrir a un método iterativo.

Buenas tardes Maximiliano.

Si, hay una función para calcular raíces, se llama Sqrt().

Ejemplo:

Código: (Pawn) [Seleccionar]

new Float: Velocidad
new Float: Raiz

// Calcular la raiz cuadrada de "Velocidad" y guardar resultado en "Raiz"
Raiz = Float: Sqrt(Velocidad)

También existen LogN(x) y Log10(x) para calcular el lograritmo natural y en base 10 de "x".

Saludos!


11
STX8180 / Detección de daño eléctrico en canal VIO
« : mayo 26, 2022, 16:55:15 pm »
A veces, ya sea por error o distracción en la manipulación del cableado o configuración de software, se exceden los límites eléctricos soportados en los canales VIO (Voltage Input/Output) del PLC de acuerdo a su hoja de datos. En estos casos, actúan las protecciones del canal, las cuales protegen picos de tensión o corriente por cortos periodos de tiempo, pero si se exceden ciertos límites, se pueden producir daños.

Si tiene una medición errónea de voltaje o corriente en un canal VIO, recomendamos hacer la siguiente prueba para determinar si un canal tiene un daño eléctrico:

  • Desconectar todo cableado del PLC, incluso la alimentación.
  • Colocar un multímetro entre un canal VIO y el terminal A1G como muestra la figura de abajo.
  • Configurar el múltimetro para medir resistencia (óhmetro).
  • Si la resistencia medida es de varios mega-ohms, el canal no presenta daños eléctricos medibles. Si la resistencia es menor a 1000 ohms, o similar, hay daño eléctrico.
  • Repetir para todos los canales VIO.



Como se aprecia en la figura de arriba, los canales VIO tienen un diodo zener de protección (ver trazado con rayas discontinuas), si el mismo se daña, queda en "corto" (en realidad queda con una impedancia muy baja). También es posible medir con multímetro entre el canal VIO y A1G el voltaje del diodo, si es superior a varios voltios o fuera de rango, es probable que esté bien, si es menor a 0.5/1V, hay daño.

Esta puede ser una causa de daño si se exceden los límites eléctricos de voltaje, pero también la entrada puede estar dañada si se han excedido los límites eléctricos de corriente, pero esto es más difícil de determinar.

En caso de daño, puede enviar el PLC a nuestras instalaciones para reparación.

Nota[1]: Solo aplicable a versión de hardware de Peripheral Board (PB/V) número 3. Ver  hoja de datos.
Nota[2]: Versiones más modernas de hardware incorporarán otras protecciones adicionales.

12
Si está buscando muestrear uno o más canales analógicos VIN a una velocidad mayor de 5 muestras por segundo y a su vez guardar los datos en archivos dentro de la tarjera Micro-SD para luego analizarlos con Excel (por ejemplo), aquí podrá encontrar ejemplos que le serán útiles.



Los ejemplos utilizan los "SAMPLERS" del PLC, que permiten muestrear un canal VIN a una velocidad fija, por ejemplo a 200 o 2000 muestras por segundo. Si requiere velocidades menores o iguales a 5 muestras por segundo, puede evitar el uso de los SAMPLERS y utilizar solo temporizadores con eventos @OnTimer[X](), que son más fáciles de configurar y utilizar.

Si bien los SAMPLERS pueden muestrear una señal a alta velocidad, el cuello de botella, es decir, el lugar en donde el PLC tarda más tiempo de procesamiento, es en escribir las muestras dentro de un archivo de la tarjeta Micro-SD. Por lo tanto la escritura en tarjeta Micro-SD nos limita a una tasa de muestreo de 2000 a 3000 muestras por segundo para el modelo STX8180, y este valor puede variar según el tipo de proyecto, cantidad de canales analógicos a muestrear y el uso del procesador del PLC en otras lógicas.

Hay muchos caminos para hacer un log de datos, aquí damos algunos ejemplos con diferentes técnicas que puede utilizar como referencia inicial.

LENGUAJE PAWN

EJEMPLO #1: DiskSamplerLog1

www.slicetex.com/docs/an/an036/files/examples/DiskSamplerLog1.zip

Este ejemplo permite muestrear cinco canales analógicos VIN a 10 muestras por segundo (configurable) y almacenar las lecturas en un archivo de texto CSV que puede importar a Excel para análisis y gráficos. El acceso a las muestras es a través de la página web del PLC. Se recomienda leer el archivo "info.txt" del proyecto para una explicación detallada del ejemplo.

EJEMPLO #2: DiskSamplerLog2

www.slicetex.com/docs/an/an036/examples/files/DiskSamplerLog2.zip

Este ejemplo permite muestrear cinco canales analógicos VIN a 200 muestras por segundo (configurable, por ejemplo 2000 muestras por segundo) y almacenar las lecturas en un archivo binario que luego puede convertir a CSV con la aplicación "SampleBinToText" y por lo tanto importar a Excel para análisis y gráficos. El acceso a las muestras es a través de la página web del PLC. Se recomienda leer el archivo "info.txt" del proyecto para una explicación detallada del ejemplo.

Este ejemplo, a diferencia del ejemplo DiskSamplerLog3, no utiliza las funciones DiskLogXXX() que simplifican el log de datos en archivos, pero muestran como utilizar las funciones genéricas DiskXXX() para manipular archivos.

EJEMPLO #3: DiskSamplerLog3

www.slicetex.com/docs/an/an036/files/examples/DiskSamplerLog3.zip

Este ejemplo permite muestrear cinco canales analógicos VIN a 200 muestras por segundo (configurable, por ejemplo 2000 muestras por segundo) y almacenar las lecturas en un archivo binario que luego puede convertir a CSV con la aplicación "SampleBinToText" y por lo tanto importar a Excel para análisis y gráficos. A diferencia del ejemplo DiskSamplerLog2, este ejemplo utiliza las funciones DiskLogXXX() para simplificar el log de datos en archivos.

El acceso a las muestras es a través de la página web del PLC. Se recomienda leer el archivo "info.txt" del proyecto para una explicación detallada del ejemplo.

EJEMPLO #3 (B): DiskSamplerLog3B

www.slicetex.com/docs/an/an036/files/examples/DiskSamplerLog3B.zip
 
Ejemplo derivado del ejemplo "DiskSamperLog3", teniendo como principal diferencia el nombre de los archivos de logs, que en este caso incluyen la fecha en el nombre. Además se va listando cada archivo de log como enlace en una página web a medida que nuevos archivos son creados. Información adicional en este mensaje.

EJEMPLO #4: DiskSamplerLog4

www.slicetex.com/docs/an/an036/files/examples/DiskSamplerLog4.zip

Este ejemplo es idéntico al ejemplo DiskSamplerLog3, con la diferencia que permite configurar todos los parámetros del Log desde la página web, por ejemplo velocidad de muestreo, tiempo de muestreo, etc. Puede ser muy útil para hacer pruebas de desempeño de forma fácil, sin necesidad de modificar código y transferir el programa al PLC una y otra vez.

El acceso a las muestras es a través de la página web del PLC. Se recomienda leer el archivo "info.txt" del proyecto para una explicación detallada del ejemplo.

LENGUAJE C#

EJEMPLO: SampleBinToText

www.slicetex.com/docs/an/an036/files/examples/SampleBinToText.zip

La aplicación toma un archivo binario con muestras de canales analógicos VIN (ver ejemplos arriba) y los convierte a un archivo de texto en formato CSV (Comma Separated Values), que luego puede utilizar para importar desde Microsoft Excel.

Esta aplicación se suministra con el código fuente en Microsoft Visual C# para que pueda utilizarla como referencia y modificarla de acuerdo a sus necesidades.



Consejo: Puede copiar esta aplicación a la tarjeta Micro-SD y hacerla disponible para descarga en la página web del PLC. De esta manera sus clientes tienen siempre a mano la aplicación de conversión.

Nota[1]: Otra versión de este programa, pero con conversión a unidades de ingeniería lo puede encontrar aquí.

ANEXO

ARCHIVO CON FORMATO CSV TÍPICO

En la siguiente imagen puede apreciar un archivo de texto CSV con las muestras de cinco canales VIN muestreados mediante las técnicas descriptas arriba. Cada campo está separado por un punto y coma (";"). Notar como la fecha/hora es añadida en cada entrada (línea), junto con los voltajes de los canales analógicos. Este archivo luego se puede importar fácilmente a Excel (ver imagen al comienzo de este post) y realizar gráficos u otros cálculos.







13
Buenos días, es buena idea, la tendremos en cuenta para próximas versiones. Gracias!.

Por otro lado, si tiene código largos que se ejecutan con alguna condición, y en caso contrario no se ejecutan, puede ser útil agruparlos dentro de funciones Ladder (Explorador de Proyecto > Funciones (Click derecho "Agregar  nuevo diagrama ...")). De tal forma que solo entre a ejecutarse la función (con el código agrupado) si la condición es verdadera o es necesario llamarlos. Esto también acelera la ejecución del diagrama Principal ya que ese código se saltea si no es utilizado, y además permite reusar código si el mismo se repite (ahorrando memoria).

Saludos!

14
STX8180 / Re: Rango de direcciones Modbus TCP y Modbus RS-232
« : mayo 13, 2022, 13:03:07 pm »
Buenos días Leonardo.

Adjuntamos el firmware actualizado para extender el rango de direcciones ModBus.

En el caso de ModBus TCP tiene ahora 768 registros disponibles.

Los nuevos límites quedarían en:

MODBUS TCP

  • Discrete Outputs (GP-Coils), rango de 4001 a 5024
  • Holding Registers Read / Write, rango de 40001 a 40768

MODBUS RTU

  • Discrete Outputs (GP-Coils), rango de 6001 a 6512
  • Holding Registers Read / Write, rango de 42001 a 42256

Estos cambios quedarán reflejados de forma oficial para todos los modelos en el la próxima versión de firmware V232.

Cualquier inconveniente en el uso de las nuevas direcciones, nos avisa.

Saludos!

15
STX8140 / Re:HTTP GET a diferentes IP
« : mayo 13, 2022, 10:23:37 am »
Buenos días Esteban.

Conectarse al mismo tiempo no se puede. Lo que podés hacer es conectarte a un Sonoff primero, enviar los datos, y luego modificar la dirección de destino con el componente HttpSendInit (HTTP SEND INIT) de lenguaje Ladder para el próximo Sonoff.

Podrías implementar una función Ladder, que tome como argumento un número del 1 al 10. De acuerdo al número recibido, llama a HttpSendInit con una dirección precargada. Luego te conectás por HTTP GET.

Para que HttpSendInit tenga efecto, la actual conexión debe estar cerrada o finalizada, no en curso, sino el componente no actualiza la dirección hasta que la conexión anterior no haya finalizado, devolviendo ENO=0.

El evento "OnHttpSendCompleted" se llama cuando una transacción HTTP fue completada, te puede ser de utilidad para cambiar desde ahí los parámetros de conexión con HttpSendInit para la próxima conexión. Ver ejemplos.

Saludos!

Páginas: [1] 2 3 ... 87