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 ... 59
1
SH-300 / Re:Gráfico Temperatura-tiempo
« : julio 19, 2018, 13:21:43 pm »
... necesito saber como puedo hacer para que me grafíque correctamente la temperatura en función del tiempo, en la pantalla HMI ya que siempre el gráfico me muestra una línea recta y no puedo ver las variaciones...

Buenos días.

¿Utilizás el objeto Trend Line siguiente ?



En principio, la temperatura es un valor que cambia lentamente, es natural que sea una línea recta en intervalos pequeños de tiempo.

Sin embargo, en el tiempo vas a tener cambios.

Para muestrear intervalos grandes de tiempo, podés en el HMI modificar los siguientes parámetros:

  • Data sample: Cantidad de muestras a mostrar en todo el gráfico.
  • Sample interval: Intervalo de tiempo en segundos entre dos muestras.

Por ejemplo, podés colocar:

Data sample = 24
Sample interval (segundos) = 3600

Por lo tanto el gráfico, va a mostrar las últimas 24 muestras de temperatura tomada cada 1 hora, es decir la variación de las últimas 24 hs.

Tiempo total = 24 * 3600 = 86400 segundos := 24 horas

También revisá que los parámetros High y Low estén dentro de tu rango de temperatura (mínimo y máximo).

Saludos!







2
STX8091 / Re:Cliente web, enviar petición HTTP SEND - GET
« : julio 13, 2018, 10:14:27 am »
Buenos días Esteban,

Hola Ing. Boris el problema estaba en que una entrada de la placa de expansion no funciona.

Cualquier cosa me la alcanzas y la reparo.

Ahora el problema es que se tilda.

¿Cómo se tilda?. ¿El mismo código?.

Con respecto a :

Cita de: Soporte
Cuando SQL_ERROR es "1" (imagino que error), también se envia la petición, no sé si ese es el efecto deseado.

Yo hago que cuando de error ponga sql_error en 1 para que vuelva intentar cargar, eso esta mal ? Y el unico problema es que si la pc esta apagada va intentar cargar hasta que lo logre. Pero es correcto eso ?

No, no está mal sí lo pensaste así. Solo lo señalaba por las dudas hiciera algo que no hubieras contemplado.

Saludos!

3
Kinco / Re:problemas con pantalla
« : julio 07, 2018, 13:13:56 pm »
Tuve un problema electrico [...]. Envie a reparar la pantalla, siendo esta la unica falla al parecer, pero cuando la coloque en la maquina solo aparece un menu de setup que solo puede modificarse el dia , la hora y el brillo de la pantalla. No da ninguna opcion para acceder al programa de comando de la llenadora. Que puedo hacer?

Buenos días. Lo más probable es que con el fallo eléctrico se haya borrado/dañado el programa de la pantalla, o el técnico al reparar haya realizado un "RESET" a fábrica de memoria, por eso no inicia.

En ese caso deberías pedirle al fábricante de la máquina que te envíe el programa nuevamente y se lo cargás a la pantalla.

Por último, podés intentar acceder al SETUP de la pantalla y ver si hay alguna opción que te permita hacer algo más. En los otros modelo para acceder al SETUP manualmente tenés que apagar el HMI, tocar la pantalla en una parte táctil, y al mismo tiempo encenderla. No estoy seguro en este modelo de si es así, ya que no lo trabajo.

Luego, al iniciar te va a aparecer un menú de SETUP. Fijate si hay algo ahí que no la deje iniciar como último recurso.

Saludos!

5
STX8091 / Re:Cliente web, enviar petición HTTP SEND - GET
« : julio 07, 2018, 11:45:46 am »
Estoy teniendo problema que no puedo hacer que cargue el segundo valor del HTTP SEND GET.
Y nose si hay algun error aca:

/Avisos/Prueba_1.aspx?field1=%d&field2=%d

en el filed2 en parte del manual lo da como ejemplo %f puse de ambas formas y el segundo valor no me carga nada. envió imagen del programa.

Buenos días Esteban.

No logro ver algo mal, hay que ver como interactua con el resto de la lógica.

Fíjate descargar al PLC el ejemplo del manual, para descartar quizás un error interno.

Ver siguiente link:

http://slicetex.com/docs/an/an032/files/HttpSendGet1.zip

El ejemplo envía 4 valores enteros y los incrementa cada 30 segundos. Podes modificarlo para que solo envíe dos, y lo testeas con tu PC.

Si esto anda, es porque en el proyecto hay algo que esta influyendo, entonces revisamos la lógica.

Probalo por separado, y avísame si te funciona así.

La otra duda es todo el programa esta en un llamado de funcion, eso afectara ?

No creo, pero fijate en el código que pasas:



Cuando SQL_ERROR es "1" (imagino que error), también se envia la petición, no sé si ese es el efecto deseado.

Saludos!

6
PD3060-PT100 / Re:URGENTE! Presencia de ruido en Modulo PD3060
« : junio 25, 2018, 13:31:30 pm »
Hola Boris, vengo a presentarle un problema que estuve teniendo utilizando el modulo PT3060 para leer los PT100. El mismo está instalado en un tablero junto con el PLC y varios relés de 220V. Estos son controlados por las salidas digitales del PLC y activan contactores de mayor potencia, ubicados en un tablero separado.

Ocurre un problema en la comunicación del módulo y el PLC al activar los relés que genera una lectura erronea de las temperaturas. Este error parece ser provocado por el ruido generado por los relés y contactores ya que si el sistema se encuentra en reposo la lectura de los PT100 es correcta y constante.

Buenos días, para activar potencia se recomienda utilizar reles de estado sólido como interfaz entre el PLC y los contactores.

Los reles de estado solido no tienen partes mecánicas y aíslan ruidos eléctricos. Debería seleccionarse aquellos con cruce por zero (que solo activan cuando la onda de alterna pasa por cero, para tener un suave paso de OFF a ON). Además aíslan eléctricamente la fuente del sistema con la energía utilizada para la parte de potencia.

Para 220V corriente alterna, podrías utilizar estos entre el PLC y contactor (o rele de potencia convencional):

https://articulo.mercadolibre.com.ar/MLA-614443922-rele-de-estado-solido-comando-3-32vcc-salida-24-380-vca-10-a-_JM

Este otro, con múltiples salidas en mismo encapsulado también puede ser (si no superás 1A por cada salida):

https://articulo.mercadolibre.com.ar/MLA-674436241-rele-estado-solido-5-salidas-tension-24-380-vac-riel-din-_JM

Luego lo conectas como sigue:

SALIDA PLC --> RELE ESTADO SOLIDO --> RELE/CONTACTOR NORMAL --> CARGA

Esto solucionaría el problema de ruido por conmutación de cargas inductivas o de potencia.

También verificá que los cables de potencia no pasen cera de las entradas analógicas, o aislar lo más que se pueda.

Saludos!

Nota: Los reles de estado sólido que te pasé solo controlan carga en corriente alterna, si necesitas controlar corriente continua, vienen otros modelos.




7
STX8091 / Re:Cliente web, enviar petición HTTP SEND - GET
« : junio 19, 2018, 19:52:14 pm »
Es decir en el componente "HTTP SEND GET" veo si el estado de ENO es 0 quiere decir que no termino ?, porque cuando no se envina nada tambien esta en 0 ? O no es asi ?

Claro, cuando es "1", es porque se aceptó para el envío, si por algún motivo no se acepta, es "0", te copio la descripción de la documentación del componente:

El valor del puerto de salida "ENO" es "1" si la operación fue aceptada por el PLC y está en curso para su transmisión al servidor web (esto no quiere decir que la transmisión sea exitosa, para ello debe comprobar el estado de la librería con el componente HttpSendGetLibStatus). Si es "0" la salida ENO, la operación no fue aceptada por algún error (librería ocupada en otra transacción pendiente, error de memoria, librería no inicializada, etc).


El problema que tengo es que tengo que crear dos regitros que se pueden dar simultáneamente. entonce tengo que decirle que si esta ocupado que espere y luego cargue ese parametro ya que la activacion que carga se realiza cuando una entrada se activa y la misma se activa menos de un segundo.

Claro, si tenés dos entradas que se activan por un tiempo pequeño, una a continuación de la otra, y debes enviar sus valores de activación, es probable que mientras estás enviando el primer valor de la entrada, la segunda ocurra y la librería esté ocupada enviando la primera transacción.

A veces las transacciones pueden durar hasta varios segundos, ya que depende de la red y de la computadora que reciba. Generalmente es menos de 1 segundo y más de 300 ms o 500 ms.

En ese caso lo que podes hacer es enviar un entero (ejemplo una variable llamada Estado): por ejemplo, si entrada A es "1", haces el entero "Estado=01", si entrada B es "1", lo hacés "Estado=10". Si ambás entradas son "1", lo hacés "Estado=11".

Luego, si "Estado" es diferente de cero, es porque registraste una entrada activa, entonces con algún flag (que lo podes obtener desde el evento OnHttpSendCompleted), comprobás que la librería este lista para enviar nuevamente, y envías el entero.

Una vez que envías, haces el entero "Estado=0", para que si luego hay una entrada activa, quede registrado para el próximo envío.

Saludos!

8
Kinco / Re:bits
« : junio 19, 2018, 19:01:35 pm »
BUEN DÍA
ALGUIEN SABE COMO PUEDO DAR DE ALTA MAS BITS PARA PODER DIRECCIONAR AL PLC TENGO UNA HMI KINCO MT4434TE Y SOLO TIENE PARA DIRECCIONAR AL PLC B3,B10,B11,B12 Y B13 Y EN EL PROGRAMA DEL PLC (AB MICROLOGIX 1500) TENGO DIRECCIONES COMO B49:0/1.
O COMO HAVER UN SHORT CUT ASI COMO EN FACTORY Y YA LEER TODA LA DATA FILE
ESPERO ALGUIEN ME PUEDA AYUDAR

Buenas tardes, no le sabría decir como es para el PLC de la línea AB MICROLOGIX, desconozco su operación, ya que solo damos soporte para uso del HMI con los PLC de Slicetex Electronics.

Saludos!

9
Kinco / Re:Trend curve
« : junio 19, 2018, 11:20:05 am »
Estoy usando una Pantalla Hmi - Kinco 10'' Touch Mt4532te y me comunico mediante modbus a un equipo remoto mediante el protocolo.
Me puedo comunicar bien con los datos, solo quiero que se generar el movimiento de la barra de datos del historia.

Adjunto programa.

Buenos días. No puedo descomprimir el archivo, me da un error de formato el archivo RAR.

Para habilitar la barra de "scroll", dentro del componente Trend Curve debes ir a pestaña "Trend Graphics", y en opción "Type" seleccionar "Multiple pages".

También colocar Sampling Points = 10 y PageNum = 10 (valores iniciales, luego podés cambiarlos, determinan la cantidad de datos a almacenar).

Posteriormente en pestaña "Scale", tildar "Use scroll bar".

Luego te quedaría algo así en pantalla:



La barra "scroll" a medida que llegan las muestras, se va achicando y luego podes moverla con el dedo.

En el manual hay algunos conceptos para la configuración del Trend Curve que pueden ayudarlo a entender mejor.

Saludos!


10
STX8091 / Re:Cliente web, enviar petición HTTP SEND - GET
« : junio 19, 2018, 10:43:22 am »
Una consulta, cuantos componentes HTTP SEND -GET puedo colocar ? POrque veo que no son numero como en el caso de los temporizadores u otros elementos.

Buenos días Esteban.

Podés hacer solo una transacción al mismo tiempo al servidor. Es decir, podés llamar al componente las veces que quieras, pero siempre asegurando que la transacción anterior haya terminado para que tenga efecto.

Caso contrario, el componente al estar ocupado en una transacción previa, retorna en la salida ENO el valor "0".

Esto no afecta a la conexión actual, solo que no tiene efecto mientras este ocupado.

Saludos!

11
Kinco / Re:Trend curve
« : junio 11, 2018, 10:44:30 am »
Buenos Tardas, mi consulta es sobre la manera correcta de realizar un gráfico de curva "TREND CURVE".. no puedo hacer que se desplace la barra para datos anteriores y hacer el zoom sobre ellos.

estoy tratando de realizar el modelo de ejemplo.

Buenos días,

¿Qué modelo de HMI y PLC estás utilizando?

¿El componente "Trend curve" de la sección 4.6.1 del manual estas intentando utilizar? ¿Cuál ejemplo?.

Saludos


12
Buenos días Marcos,

En el caso de usar StrFormat con las cadenas "packed" es necesario poner la sentencia "true" en el tercer parámetro, correcto?

Si queres que la cadena resultante sea "packed", utilizar "true". Caso contrario, la salida será "unpacked" independiente del formato de la cadena de entrada.

¿Cuál es el resultado de usar la función de la siguiente manera?

StrFormat(errorMsg[1], DISPLAY_LENGTH, false, !"Falla al inicializar ModBus.")

En este caso, con parámetro "false", en la cadena resultante de salida en errorMsg[1][] vas tener la cadena "Falla al inicializar ModBus.", pero en formato "unpacked".

Es decir, seria lo mismo que hacer:

Código: (Pawn) [Seleccionar]
new errorMsg_Unpacked[] = "Falla al inicializar ModBus."  // Unpacked
Con parámetro "true" la salida seria equivalente a:

Código: (Pawn) [Seleccionar]
new errorMsg_Packed[] = !"Falla al inicializar ModBus."  // Packed
La diferencia esta que el array "errorMsg_Unpacked[]" ocupa 29 celdas *4 = 116 bytes, mientras que errorMsg_Packed[] ocupa 8 celdas * 4 = 32 bytes.



Solo para entender:

Para acceder a cada caracter de errorMsg_Unpacked[] (en el caso que quieras hacerlo), indexas normalmente, ejemplo:

Código: (Pawn) [Seleccionar]
nLcdPrintf(0, 1, LCD_CLRLINE, ""%c %c %c %c %c", errorMsg_Unpacked[0], errorMsg_Unpacked[1],errorMsg_Unpacked[2],errorMsg_Unpacked[3],errorMsg_Unpacked[4])
Imprime "F a l l a"

En el caso de un "packed" string, se agrupan 4 carácter por celda, estando el primer carácter de 8-bit, en la posición más alta. Por lo tanto hay que "desempaquetarlo" para obtener caracter por caracter.

Para ello usamos GetCellChar(cell, char_num), donde "cell" es el entero donde esta el carácter y char_num el número de caracter a obtener (del 0 al 3).

Ejemplo:

Código: (Pawn) [Seleccionar]
nLcdPrintf(0, 1, LCD_CLRLINE, ""%c %c %c %c %c", GetCellChar(errorMsg_Packed[0], 0), GetCellChar(errorMsg_Packed[0], 1),GetCellChar(errorMsg_Packed[0], 2),GetCellChar(errorMsg_Packed[0], 3),GetCellChar(errorMsg_Packed[1], 0))
Imprime "F a l l a"

Saludos!


13
Buenas tardes Marcos,

Te paso a detallar las causas del problema y como solucionarlo.

CAUSAS

Luego de analizar el proyecto completo que enviaste por email, encontré que el mismo "colgaba" el PLC en el mismo instante que se transfería el código desde StxLadder a la memoria del PLC, sin ejecutar instrucción alguna de tu código.

Por lo tanto, el problema no es de error de código o de alguna función como StrFormat() que producía misteriosamente cierta interacción de acuerdo a si se comentaba o no.

El problema es de memoria RAM, en este caso, el proyecto utilizaba más memoria RAM que la que tiene asignada el dispositivo para código de usuario, por lo tanto, cuando se cargaba al PLC, interfería con el sistema operativo interno, escribiendo su área de memoria, lo cual generaba fallas aleatorias, de acuerdo a si el proyecto utilizaba más o menos RAM (por ello cuando comentabas, a veces funcionaba y otras no).

El "culpable" fue StxLadder que comprobaba erróneamente la cantidad de RAM utilizada por el proyecto y no te daba advertencia alguna de que estabas superando los limites del modelo de dispositivo que tenés.

SOLUCIÓN

Esto se solucionó en la última versión de StxLadder, la versión 1.9.0 que liberé hoy.

Te recomiendo instalarla.

Esta versión te muestra al compilar en detalle cuanta memoria ROM y RAM utilizas en el proyecto, y cuanto te queda disponible. También, si te excedes, te da un error de compilación para que bajes el consumo.

Por otro lado, también se mejoró el firmware del PLC, que también comprueba previamente si el programa que va a ejecutar no excede sus limites de RAM / ROM. Es decir, un doble-check, entre StxLadder y el PLC. Aumentando la seguridad, y evitando "colgarse" si el programa es inválido, solo prenderia el led RUN ERROR, pero no perderías conectividad (como te pasaba).

La versión de firmware que debés bajar es la 211 o superior para tu modelo de PLC:

http://slicetex.com/hw/stx8091/soft.php#Firmware

APLICACIÓN A TU PROYECTO

Una vez que instales StxLadder versión 1.9.0 y actualices el firmware del PLC a la versión 211, abrí tu proyecto.

Si es el mismo que me pasaste a mí, al compilar deberías ver el siguiente mensaje de error:

Cita de: StxLadder 1.9.0
Error de Memoria: Insuficiente memoria RAM: El proyecto requiere 23268 bytes y el dispositivo tiene disponible 16384 bytes. Disminuya variables globales, variables locales inicializadas, comparta/reutilice variables globales, utilice packed strings, agrupe datos, etc

El mensaje dice que utilizas 23268 bytes de memoria RAM, pero el dispositivo tiene 16384 (16KB).

En el PLC tenés dos memorias, RAM (donde van las variables lectura/escritura) y la ROM (donde van las instrucciones de código para ejecutar la lógica o datos de solo lectura).

La RAM es más pequeña que la ROM, por lo tanto hay que tener más cuidado en definir grandes cantidades de variables, que en escribir código.

El compilador Pawn, considera a los string literales o constantes string como variables que van en RAM, por lo tanto cuando escribís "Falla al inicializar ModBus." en StrFormat(), se coloca en memoria RAM dicha cadena, ocupándote lugar:

Código: (Pawn) [Seleccionar]
StrFormat(errorMsg[1], DISPLAY_LENGTH, false, "Falla al inicializar ModBus.")
La cadena "Falla al inicializar ModBus." tiene 26 caracteres más un terminador "0", en total ocupa 27 posiciones. En Pawn, las cadenas son arrays de enteros, por lo tanto cada posición tiene 4 bytes.

La memoria RAM consumida por esa cadena es de: 27*4=108 bytes.

Es bastante, y más si utilizas muchísimas cadenas en tu código, a la larga ocupas toda la memoria RAM.

Un truco para que una cadena literal (constante) no utilice tanta memoria RAM es haciéndola "packed", en ese caso, el compilador agrupa en cada posición 4 caracteres. Esto se especifica con el operador " ! " antes de una cadena, por ejemplo:

Código: (Pawn) [Seleccionar]
StrFormat(errorMsg[1], DISPLAY_LENGTH, true, !"Falla al inicializar ModBus.")
Ahora la cadena de 27 caracteres ocupa 27 bytes, una reducción importante.

Notar como el tercer parámetro de StrFormat() es "true", indicando que la cadena resultante en errorMsg[] va a ser packed también.

Como la cadena resultante es "packed", podes definir a errorMsg[]  con un tamaño en "celdas" 4 veces menor.

Otro ejemplo:

Código: (Pawn) [Seleccionar]
new String1[] = !"Falla al inicializar ModBus."
Esto solo funciona con cadenas, pero para variables enteras o flotantes, arrays, etc, cada vez que definís uno de forma global o del tipo estático (inicializado dentro de una función), te ocupa 4 bytes de memoria RAM. Por lo tanto, también, usar a discreción e intentar ahorrar lo más que pueda.

LUEGO VOY A PUBLICAR UN POST CON TRUCOS Y CONSEJOS PARA DISMINUIR MEMORIA RAM

Volviendo a tu proyecto, una forma de considerar a todas las cadenas como "packed" por defecto, es utilizando la opción "Packed literal strings" antes de compilar como muestra la siguiente imagen:



Se encuentra en menú "Proyecto > Propiedades > Compilador (pestaña)".

Ahora si volvés a compilar te va a mostrar "Compilación correcta":



Notar como en los mensajes ahora el total de RAM requerida es "10348" bytes, respecto a los "23268" bytes de antes.

Una reducción importante logra la opción Packed literal strings, que considera a todas tus cadenas literales como packed, tal como si le hubieras aplicado el símbolo " ! " a cada una.

Cuando esta opción esta activada, si antepones el símbolo " ! " a la cadena, genera el comportamiento inverso, se transforma en unpacked y ocupa 1 carácter por celda.



Si bien utilizar la opción Packed literal strings ya te permite liberar RAM necesaria para que el proyecto se pueda cargar, te recomiendo no utilizar tantas cadenas, así tenes RAM disponible para futuro uso cuando el proyecto crezca con nuevas funciones o código que le agregues.

En todo caso, hacé las cadenas menos descriptivas, utilizá códigos de error para hacerlas más cortas en extensión, etc.

Por otro lado, al usar el argumento "true" en StrFormat(), te habilita a que puedas reducir el tamaño del array:

Código: (Pawn) [Seleccionar]
new errorMsg[8][DISPLAY_LENGTH+5]
Que si lo analizás, tiene 8*(DISPLAY_LENGTH+5) celdas. Si DISPLAY_LENGTH=34, la cantidad de celdas utilizadas es:

312 celdas = 1248 bytes (bastante)

Si el string que vas a almacenar es "packed" con StrFormat() podrías reducir DISPLAY_LENGTH a 10, para almacenar 39+1 caracteres por linea:

Código: (Pawn) [Seleccionar]
#define DISPLAY_LENGTH 10
new errorMsg[8][DISPLAY_LENGTH]

Ahora, el total seria: 80*4 = 320 (bytes)

Podes ir probando reduciendo código o diferentes alternativas con variables, compilar y ver que opción te genera menos consumo de RAM, hasta que logres un equilibrio.

En el detalle de compilación, donde dice "Data block 6252 bytes", esa es la RAM usada por variables globales, strings, etc.

Luego haré un post resumiendo y explicando mejor como ahorrar RAM, pero esto es lo fundamental.

Saludos!

14
STX8081 / Ejemplo display LCD para I2C y memoria EEPROM
« : junio 07, 2018, 12:13:50 pm »
Para aquellos que utilizan el display LCD a través de I2C (puerto HP2/HP3), ver siguiente post del foro:

foro.slicetex.com/index.php?topic=269.msg1432#msg1432

Adjuntamos en esta oportunidad el mismo ejemplo, pero que también escribe y lee datos de memoria EEPROM.

Cabe mencionar que las funciones para la memoria EEPROM están descriptas en el Manual de Programación Pawn del PLC.

Ver proyecto adjunto.

Saludos!

15
A continuación adjuntamos el ejemplo "MbTcpServerCountOut.zip" para el PLC que a diferencia del ejemplo "MbTcpServerCounter.zip" conmuta una salida a transistor cada vez que el registro ModBus 40001 es puesto a 0.

Requiere un PLC con salida PWM o transistor rápida.

Esto permite medir tiempos mediante un osciloscopio o analizador lógico en la salida.

Capturas tomadas en salida digital (la duración de cada pulso  alto o bajo es el tiempo entre escritura lectura):





Log tomado desde aplicación Visual C# (sin relación a capturas previas):

Código: (log.txt) [Seleccionar]
Response: 915 ms
Response: 934 ms
Response: 20 ms
Response: 30 ms
Response: 76 ms
Response: 97 ms
Response: 139 ms
Response: 161 ms
Response: 21 ms
Response: 31 ms
Response: 84 ms
Response: 95 ms
Response: 140 ms
Response: 161 ms
Response: 205 ms
Response: 218 ms
Response: 271 ms
Response: 282 ms
Response: 327 ms
Response: 347 ms
Response: 389 ms
Response: 411 ms
Response: 458 ms
Response: 469 ms
Response: 522 ms
Response: 532 ms
Response: 10 ms
Response: 31 ms
Response: 9 ms
Response: 24 ms
Response: 76 ms
Response: 86 ms
Response: 133 ms
Response: 154 ms
Response: 10 ms
Response: 30 ms
Response: 20 ms
Response: 31 ms
Response: 79 ms
Response: 89 ms
Response: 141 ms
Response: 152 ms
Response: 205 ms
Response: 217 ms
Response: 21 ms
Response: 32 ms
Response: 13 ms
Response: 33 ms
Response: 76 ms
Response: 97 ms
Response: 142 ms


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