Mensajes recientes

Páginas: 1 ... 4 5 [6] 7 8 ... 10
51
Kinco / Que no muestre "PLC No Response"
« Último mensaje por Jose junio 29, 2022, 14:30:26 pm »
Hola y gracias de antemano, el tema es que tengo conectada la HMI kinco a dos PLCs, uno al COM0 y el otro al COM1 pero no siempre están los dos PLCs encendidos, y si conecto solo uno me sale el mensaje de PLC 2 no response.
Quería saber si se puede deshabilitar esta función
Gracias
52
STX8180 / Re:Log combinado de entrada analógica voltaje y corriente
« Último mensaje por Soporte junio 28, 2022, 21:07:49 pm »
Puede combinarse en un log las muetras de digamos 4 canales VIO como entrada 4-20 y 3 como entrada de voltaje? es decir, conociendo que los canales del 1 al 4 serán usados en corriente y del 5 al 7 como voltaje.

Buenas tardes Miguel.

Si, puede combinarse en este caso.

En el ejemplo mencionado, DiskSamplerLog4, se configura por defecto los canales VIO como entradas de voltaje.

Pero esto no impide, que los canales VIO1:4 se configuren como entradas de corriente 4-20 mA (CIN), y los canales VIO5:7 sea entradas de voltaje (VIN). Esto lo hacés en la función SamplersInit() del ejemplo.

Entonces, podés remplazar:

Código: (Pawn) [Seleccionar]
   for(new Ch=1; Ch <= SAMPLERS_CH; Ch++)
   {
      VioInitVin(Ch, VIO_TYPE_VIN_SINGLE, VIO_VIN_RANGE_N5V_5V, VIO_VIN_SAMPLES_NONE)
   }

Por:

Código: (Pawn) [Seleccionar]

      // Configurar canales VIO1:4 como entradas analógicas CIN de corriente 4-20 mA.
      VioInitCin(1, VIO_TYPE_CIN, VIO_CIN_RANGE_DEFAULT, VIO_CIN_SAMPLES_NONE)
      VioInitCin(2, VIO_TYPE_CIN, VIO_CIN_RANGE_DEFAULT, VIO_CIN_SAMPLES_NONE)
      VioInitCin(3, VIO_TYPE_CIN, VIO_CIN_RANGE_DEFAULT, VIO_CIN_SAMPLES_NONE)
      VioInitCin(4, VIO_TYPE_CIN, VIO_CIN_RANGE_DEFAULT, VIO_CIN_SAMPLES_NONE)

      // Configurar canales VIO5:7 como entradas analógicas VIN de voltaje simple.
      VioInitVin(5, VIO_TYPE_VIN_SINGLE, VIO_VIN_RANGE_N5V_5V, VIO_VIN_SAMPLES_NONE)
      VioInitVin(6, VIO_TYPE_VIN_SINGLE, VIO_VIN_RANGE_N5V_5V, VIO_VIN_SAMPLES_NONE)
      VioInitVin(7, VIO_TYPE_VIN_SINGLE, VIO_VIN_RANGE_N5V_5V, VIO_VIN_SAMPLES_NONE)


Nota: Recordar luego desde la página Web del ejemplo, especificar muestrear 7 canales analógicos.

Como el ejemplo utiliza los "SAMPLERS" para muestrar a una tasa fija, lo que lee es voltaje, y eso es lo que se graba en el archivo binario, independiente de como esté configurado el canal VIO.

Por ello, luego en la aplicación de Visual C# cuando hacés el procesamiento de datos, al obtener el voltaje de los canales VIO1:4 (que son de corriente de acuerdo al PLC), debés dividir el valor de voltaje por "84.1945", que es la resistencia en Ohms utilizada para la medición de corriente internamente (ver figura 85, página 110 en la hoja de datos, allí se muestra el resistor "Rcs" utilizado cuando se configura como entrada de corriente tipo CIN).

Resumiendo, en C# para los canales VIO1:4, hacés la siguiente división:

Voltaje / 84.1945 = Corriente en amperes

Notar que la corriente resultante está en amperes, si la querés en mili-amperes, para que se represente mejor, debés multiplicar por 1000.

(Voltaje / 84.1945) * 1000 = Corriente en mili-amperes

Y ese nuevo valor, es el que podés colocar en el archivo CSV o escalarlo a unidades de ingeniería.

Para los canales VIO5:7 no le aplicás la conversión a corriente, ya que son voltaje.

Eso es todo, avísame si lo podés realizar o no se entiende algo.

Saludos!

Atención: Al utilizar canales VIO como entradas de corriente 4-20 mA (CIN), no aplicar voltajes directos mayores a +/- 4.21 V al terminal VIO, ya que puede generar excesiva corriente y dañar la entrada (por el resistor que se activa internamente). Se recomienda leer hoja de datos para conexionado con sensores de 4-20 mA, sección 11.25.7, página 110. Si hay dudas, consulte.
53
STX8180 / Log combinado con entrada analógica de voltaje y corriente
« Último mensaje por Miguel Gomez junio 28, 2022, 18:18:26 pm »
Hola que tal,
Puede combinarse en un log las muetras de digamos 4 canales VIO como entrada 4-20 y 3 como entrada de voltaje? es decir, conociendo que los canales del 1 al 4 serán usados en corriente y del 5 al 7 como voltaje, hemos visto con ejemplos las funciones para setear como 4-20, pero para combinar en un log, el ejemplo disklog4  supone en voltaje  todos los canales que se requieran muestrear. Tienes ejemplo al respecto? 


saludos y gracias por comentarios.
54
STX8180 / Re:Establecer voltaje en salida analógica
« Último mensaje por Soporte 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!





55
STX8180 / Establecer voltaje en salida analógica
« Último mensaje por Miguel Gomez junio 24, 2022, 18:51:08 pm »
Hola que tal

Nuevamente. Implemente el siguiente script  y funcina 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.

saludos

Código: (Pawn) [Seleccionar]
PlcMain()
{

   // Inicializar rutinas Virtual-HMI.
   VirtualHmiInit()


   new Float:Volts
   // Loop principal.

   for(;;)
   {
     
   // Generar una rampa lineal entre 0 y 5
   
   if(Volts < 5)
   {
   Volts += 0.5
   }
   else
   {
   Volts = 0
   }
   
   //
// Escribir salidas analogicas.
//

VoutWriteVolt(1, Volts)
 
//
// Pausar 2000 mS.
//
// Mostrar lectura en el display de VirtualHMI.
            nLcdPrintf(0, 5, LCD_CLRLINE, "VoltajeCh1 = %f", Volts)
           
           
DelayMS(2000)
LedToggle()
   }

   // Retorno.
   return 0
}
56
STX8180 / Re:Relación SAMPLER BUFF SIZE con segundo de adquisición en DiskSamplerLog4
« Último mensaje por Soporte junio 23, 2022, 12:08:43 pm »
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!
57
STX8180 / Re:Creacion archivo bin despues de un log
« Último mensaje por Soporte 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!




58
quedó claro! ya vimos como controlar este tema.
59
STX8180 / Re:Creacion archivo bin despues de un log
« Último mensaje por Miguel Gomez junio 22, 2022, 22:41:39 pm »
Hola que tal,
Implemente el reemplazo de la linea para poder tener el nombre del archivo bin con YYYYMMDD, pero aún lo veía y se descrgaba como vinxxx.bin,  creo es asunto de actualizar en el codigo de las paginas web, correcto?

Y creo que respondi en otro mensaje, pero si puedes ayudarnos a ejemplificar la escritura de archivo a tarjea con un link al log.

saludo cordial
60
STX8180 / Re:Relación SAMPLER BUFF SIZE con segundo de adquisición en DiskSamplerLog4
« Último mensaje por Soporte junio 22, 2022, 18:15:29 pm »
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!
Páginas: 1 ... 4 5 [6] 7 8 ... 10