Mensajes recientes

Páginas: 1 ... 7 8 [9] 10
81
STX8091 / Re:utilizacion de entrada analógica para señales 4-20 mA
« Último mensaje por Soporte marzo 15, 2019, 13:53:51 pm »
Necesito conectar al PLC más de 6 señales 4-20 mA.
Es posible adaptar las entradas analógicas VIN4, VIN5 y VIN6 para esto?

Buenas tardes. Si, deberías colocar un resistor de 250 ohms al 1% (o similar) en paralelo a la entrada, entre VIN4 y AGND (repetir en el resto de entradas). Luego conectar normalmente el transductor de corriente. Utilizar en la entrada el rango 0 a 5V, ya que para 4 mA, tendrás 1V, y para 20 mA tendrás 5V.

Finalmente, la tensión leída, es la corriente, y ya tenés funciones en donde podes especificarle que usas una resistencia 250 ohms para convertir a corriente.

Como nota, algunos transductores de corriente pueden considerar a 250 ohms como una impedancia alta, pero en general no, y deberías medir normalmente.

Saludos!
82
STX8091 / Re:Proyecto C# EEPROM
« Último mensaje por Soporte marzo 15, 2019, 13:47:08 pm »
Con respecto a este tema quería comentarte que logré "personalizar" la aplicación para adecuarla al "mapa" de memoria del PLC de mi aplicación. Quedó de forma tal que presionando un sólo botón descarga el contenido de la EEPROM en tres archivos .txt.

Buenas tardes Mariano, perfecto que hayas podido hacerlo y aprendido el proceso.

Por otro lado te comento, que ahora hay una nueva forma simple de descargar toda la memoria EEPROM como un archivo usando el servidor web, donde luego podes abrirlo con C# y procesar los bytes recibidos

Fijate probar el ejemplo del siguiente Post:

http://foro.slicetex.com/index.php?topic=388.msg2079#msg2079

Con esta nueva forma, podes descargar toda la EEPROM (o parcialmente por bloques) en un archivo binario (ejemplo eeprom.bin) y luego cargarlo en C# para procesarlo y mostrar el log de datos personalizado.

Saludos!
83
STX8091 / Re:Detención indeseada PLC
« Último mensaje por Soporte marzo 15, 2019, 13:43:20 pm »
Hola Boris,

Queria comentarte con respecto a este tema que no hubo un sólo reset indeseado más luego de los cambios de número de los puertos tcp y webserver.

Saludos

Perfecto, es bueno saberlo.

Saludos!
84
STX8091 / Re:Acceder a memoria EEPROM como archivo a través de internet (web)
« Último mensaje por Soporte marzo 15, 2019, 13:32:18 pm »
En la útlima actualización de StxLadder y firmware, se puede acceder a la memoria como un archivo a través del servidor web del PLC.

El ejemplo para el PLC en lenguaje Pawn se puede descargar desde el siguiente enlace:

www.slicetex.com/docs/an/an030/files/EepromWeb1.zip

Leer archivo info.txt incluido en el proyecto para más información.



LEER MEMORIA EEPROM DESDE PÁGINA WEB

Este proyecto ejemplifica como leer o recuperar datos de memoria EEPROM utilizando el servidor web integrado al PLC, para luego poder acceder desde un navegador.

En el navegador podrá descargar la memoria EEPROM como un archivo, en su totalidad o parcialmente de acuerdo al bloque de datos seleccionado.

Está nueva característica le permitirá descargar datos de un Data-Log de forma simple para posterior procesamiento, o también utilizar la memoria para mostrar información de texto.



Para leer la memoria EEPROM, debe utilizarse en una página dinámica (extensiones actuales: .BIN, .SHTML y .JSON) el COMANDO CGI:

$! EepromRead Address Quantity $

DONDE:

  • Address: Dirección inicial a leer en memoria EEPROM.
  • Quantity: Cantidad de bytes a leer desde la dirección inicial.

Ejemplo 1) Leer 600 bytes de memoria a partir de dirección 0

Código: (CGI Web) [Seleccionar]
$! EepromRead 0 600 $
Ejemplo 2) Leer toda la memoria EEPROM (su poniendo que capacidad sea 32*1024=32768 bytes)

Código: (CGI Web) [Seleccionar]
$! EepromRead 0 32768 $
Ejemplo 3) Pedir dos bloques de datos de memoria diferentes

Código: (CGI Web) [Seleccionar]
$! EepromRead 0 600 $$! EepromRead 1000 400 $
En este caso se piden 600 bytes desde dirección 0, y a continuación se piden otros 400 bytes a partir de dirección 1000, contabilizando 1000 bytes en total.

Note como ambos comandos se pegan a continuación uno del otro, sin espacios, esto es necesario para no inyectar en el flujo de datos caracteres extras. Lo mismo que al final del comando, evite colocar una nueva línea, presionando "ENTER". Esto no implica error, simplemente que si lo hace, también recibirá dichos caracteres, y puede ser indeseado (o no, dependiendo del objetivo).

TIPOS DE ARCHIVOS

EL navegador web (Chrome, Firefox, Edge, Opera, etc...) procesan las páginas web de forma diferente de acuerdo al tipo de datos o formato de las mismas. Esto se conoce como Media Type o tipos MIME, y es enviado desde el Servidor Web, al navegador.

Por ejemplo, cuando el navegador accede a un archivo .HTML o .SHTML, el servidor del PLC le dice al navegador que el archivo que está abriendo tiene formato web, por lo tanto el navegador imprime en pantalla texto e imágenes de la página.

Si el navegador accede a un archivo .BIN, el servidor del PLC le dice al navegador que el tipo de archivo es binario. En este caso, el navegador por defecto intenta descargarlo o abrirlo con la  aplicación predeterminada por el usuario en su computadora. Pero no intenta imprimir en pantalla texto como si fuera una página web ni genera perdida de bytes al procesarlo.

Muchas veces, por seguridad, los navegadores tratan con cuidado estos archivos, para evitar que se descarguen virus, pero eso depende de cada configuración y pueden advertir al usuario.

Entonces, si su idea es descargar el contenido binario de la memoria EEPROM para posterior análisis en un software particular, lo ideal es utilizar la extensión .BIN para los archivos y colocar el comando CGI adentro de dicho archivo. Ver en este ejemplo, archivos "eeprom.bin", "eeprom_block.bin" y "eeprom_blocks.bin".

Por otro lado, si en memoria EEPROM guarda cadenas con texto (caracteres), puede ser útil leerlas con el navegador directamente, para ello debe usar el comando CGI en un archivo con extensión SHTML.
De esta manera, el servidor web inyecta en el flujo de datos del archivo SHTML los bytes almacenados en memoria EEPROM, y como son caracteres, el navegador los imprime normalmente en pantalla.
Ver ejemplo en archivo "eeprom_html.shtml". Donde se leen 250 bytes a partir de dirección 300 de la memoria EEPROM, que según el ejemplo, en PlcMain.p, se guardan cadenas de texto.

Notar que si la memoria contiene valores aleatorios diferentes a cero o basura, en el navegador web se imprimirá basura también.

Otro caso especial es los archivos con extensión .JSON, generalmente, estos archivos son tratados como texto por los navegadores web y se imprimen en pantalla sin ser procesados como HTML. Puede probar también utilizar el comando CGI para memoria EEPROM en dicho archivos.

CÓDIGO PAWN DEL EJEMPLO

Este proyecto habilita el servidor web para ser utilizado en el PLC, se crean unas cuantas páginas de prueba y algunas rutinas de incialización, esto se explica correctamente en la nota de aplicación AN030, que puede descargar desde nuestra pagina Web.

Partiendo del ejemplo explicado en nota AN030, se han agregado los siguientes archivos al servidor web:

  • eeprom.bin: Descarga el contenido binario de toda la memoria EEPROM.
  • eeprom_block.bin: Descarga el contenido binario de los primeros 600 bytes.
  • eeprom_html.shtml: Inyecta 250 bytes de memoria a partir de dirección 300 en el flujo de la página HTML.
  • eeprom_blocks.bin: Descarga el contenido binario de dos bloques de datos por separado, direcciones 0 a 599, y 1000 a 1399.

Puede acceder a los mismos desde la página principal del servidor, y/o ver su contenido desde el "Explorador de proyecto". El contenido fue explicado en las secciones anteriores.

El código que altera la memoria EEPROM para este ejemplo se encuentra en el archivo "PlcMain.p", y es muy simple y directo. Básicamente incializa la memoria EEPROM escribiendo valores para luego poder verlos o descargarlos desde el servidor web, código es el siguiente:

Código: (Pawn) [Seleccionar]
   // Limpiar memoria.
   // Escribir 'EepromSize()' bytes de memoria con valor '0' a partir de dirección '0'.
   EepromMemSet(0, 0, EepromSize())
   
   // Escribir una cadena de texto a partir de dirección 0 (inicio de la memoria).
   EepromWriteString(0, "Hola Mundo!!!")

   // Escribir otra cadena con formato HTML a partir de dirección 300.
   // Nota: Esto nos permitirá leer la cadena fácilmente en un navegador.
   EepromWriteString(300, "<p>Hola soy un texto!<br><strong>Con formato web</strong>!</p>")           
   
   // Escribir un valor de 32-bits en dirección 1000, luego leerlo.
   EepromWriteCell(1000, 7849365)
   EepromReadCell(1000, Value)
   
   // Escribir un valor float  en dirección 1004.
   EepromWriteFloat(1004, 75.43)
   
   // Leer valor float almacenado en dirección 1004.
   // Nota: A diferencia de el resto de las funciones para EEPROM, el retorno de esta función
   // es el valor leído.
   FloatValue = EepromReadFloat(1004)
   
   // Escribir un byte con el valor 66 en la última dirección de la mamoria EEPROM.
   EepromWriteByte(EepromSize()-1, 66)
   
   // Leer byte en la última dirección de la mamoria EEPROM.
   EepromReadByte(EepromSize()-1, ByteValue)

   // Escribir cadenas con formato HTML en EEPROM y con valores de variables.
   EepromWriteString(400, "<p>Address 1000 = %d</p>", Value)
   EepromWriteString(450, "<p>Address 1004 = %f</p>", FloatValue)   
   EepromWriteString(500, "<p>Address %d = %d</p>", EepromSize()-1, ByteValue)

Notar como se utiliza la función EepromMemSet() para incializar todo el contenido de la memora a 0, esto puede ser útil para partir con una memoria "limpia" sin datos previos guardados. Pero dicha operación puede tardar varios segundos, dependiendo del tamaño de la memoria (para 32KB, unos 3-4 segundos).

Puede utilizar EepromMemSet() para limpiar o incializar solamente una porción de memoria y agilizar velocidad.

Luego "EepromWriteString(0, "Hola Mundo!!!")" escribe el texto "Hola Mundo!!!" a partir de la dirección 0 de la memoria.

Esto puede leerse normalmente desde una página web como texto, o incluirlo en una sección HTML con formato particular.

Si necesitamos que el texto tenga formato propio, podemos hacer:

Código: (Pawn) [Seleccionar]
EepromWriteString(300, "<p>Hola soy un texto!<br><strong>Con formato web</strong>!</p>")
Se agregaron "TAGS" HTML de formato, como <p> y <strong>, esto tiene la desventaja de consumir bytes extras y entorpecer la lectura de código, pero puede ser útil.

En la pagina "eeprom_html.shtml" se inyectan los bytes de memoria EEPROM a partir de dirección 300, lo que resulta que el navegador imprima la cadena anteriormente mencionada.



También se escriben variables/constantes enteras, bytes y floats:

Código: (Pawn) [Seleccionar]
EepromWriteCell(1000, 7849365)
EepromWriteFloat(1004, 75.43)
EepromWriteByte(EepromSize()-1, 66)

Debe notar, que estos números no están en formato texto, simplemente códificados en binario, por lo tanto, si descarga el archivo binario, deberá decodificarlos correctamente, para obtener su valor original.

Ejemplo, como un entero (cell) o float tiene 4 bytes, luego deberá leer en el archivo descargado:
Bytes 1000 a 1003 para obtener el entero 7849365.
Bytes 1004 a 1007 para obtener el float 75.43.

Recuerde hacer la conversión correcta o cast en su lenguaje favorito. El bytes menos significativo, se encuentra en la posición más baja de memoria (orden de byte little-endian).

Ejemplo, para obtener el entero 7849365 en nuestra computadora, luego de descargar el archivo ".BIN" y leerlo como un binario desde el lenguaje de programación (por ejemplo C o C#), haríamos:

Código: (C#) [Seleccionar]
int Word;

Word = Byte[1000];
Word |= ((int) Byte[1001]) << 8;
Word |= ((int) Byte[1002]) << 16;
Word |= ((int) Byte[1003]) << 24;

Notar que declaramos a Word, como un entero con signo, ya que Pawn por defecto utiliza enteros con signo.
Además esto nos permite guardar números negativos.
El array "Byte[]" es un array con todos los datos binarios del archivo "eeprom.bin" que previamente se cargo en el el programa.

Puede entender como los datos se codifican en memoria, descargando el archivo "eeprom.bin" y  leyéndolo con un editor hexadecimal (por ejemplo HxD, link https://mh-nexus.de/en/hxd).



ERRORES

Si la memoria EEPROM está ocupada justo al momento de ser accedida por página web y se excede el tiempo de espera, el servidor devuelve "EEPROM Error: I2C Busy", si hay otro error diferente devuelve "EEPROM Error: X", donde X es un número con el código de error.

MAS INFORMACIÓN

Para documentación y ejemplos de uso del servidor web, descargue la nota de aplicación AN030 desde nuestra pagina Web.

Saludos!
85
STX8091 / Re:Proyecto C# EEPROM
« Último mensaje por Mariano marzo 15, 2019, 12:49:29 pm »
Estimado Boris,

Con respecto a este tema quería comentarte que logré "personalizar" la aplicación para adecuarla al "mapa" de memoria del PLC de mi aplicación. Quedó de forma tal que presionando un sólo botón descarga el contenido de la EEPROM en tres archivos .txt.

Gracias por la ayuda.

Saludos
86
STX8091 / utilizacion de entrada analógica para señales 4-20 mA
« Último mensaje por fruiz marzo 15, 2019, 12:46:45 pm »
Buenas!
Necesito conectar al PLC más de 6 señales 4-20 mA.
Es posible adaptar las entradas analógicas VIN4, VIN5 y VIN6 para esto?
Saludos
87
STX8091 / Re:Detención indeseada PLC
« Último mensaje por Mariano marzo 15, 2019, 12:44:02 pm »
Hola Boris,

Queria comentarte con respecto a este tema que no hubo un sólo reset indeseado más luego de los cambios de número de los puertos tcp y webserver.

Saludos
88
Kinco / Re:Codificación de variable de entrada como cadena (string) en pantalla kinco
« Último mensaje por fruiz marzo 12, 2019, 11:43:14 am »
Gracias genio!
89
Kinco / Re:Codificacion de variable de entrada en pantalla kinco
« Último mensaje por Soporte marzo 12, 2019, 11:34:58 am »
Ingreso una cadena de caracteres (texto)

En el plc recibo los dos registros.

ejemplo, en la hmi escribo "pru" y en la página recibo "29296"

Lo que necesito es que lo que se escribe en la pantalla lo pueda ver en la página web.

Si analizás el valor "29296" (decimal) y lo pasás a hexadecimal te queda: 0x7270

Separando por byte y convirtiendo por tabla ASCCI:

  • 0x70 = "p"
  • 0x72 = "r"

Eso quiere decir que estás recibiendo el primer WORD de dos bytes, te falta el otro WORD, donde debe estar la "u" de la cadena original "pru".

Si estás enviando con el PLC, mediante transacciones POST a una página web de una computadora, te conviene enviar los valores de los registros por separados, como enteros, registros 40010 y 40011.

Una vez que tengas esos dos valores en la computadora, debés unirlos en un array de bytes, agregando el terminador o valor cero al final, para formar un "string". En total tendrías 5 bytes, 4 con carácteres y el último byte igualado a 0 (terminador).

Para unirlos, suponiendo que el array de bytes se llame "data[5]", podes hacer:

Código: (Código en computadora) [Seleccionar]
data[0] = WORD1 & 0xFF                 // Primer caracter, WORD1
data[1] = (WORD1 >> 8) & 0xFF      // Segundo caracter, WORD1
data[2] = WORD2 & 0xFF                 // Primer caracter, WORD2
data[3] = (WORD2 >> 8) & 0xFF      // Segundo caracter, WORD2
data[4] = 0                                     // Terminador de cadena.

Luego imprimís el array "data[]" como una cadena y el sistema debería mostrarte los caracteres.

Saludos!
90
Kinco / Re:Codificacion de variable de entrada en pantalla kinco
« Último mensaje por fruiz marzo 12, 2019, 08:05:41 am »
Ingreso una cadena de caracteres (texto)

En el plc recibo los dos registros.

ejemplo, en la hmi escribo "pru" y en la página recibo "29296"

Lo que necesito es que lo que se escribe en la pantalla lo pueda ver en la página web.
Páginas: 1 ... 7 8 [9] 10