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 ... 52
1
PD3060-PT100 / Introduciendo el módulo PD3060-PT100
« : diciembre 29, 2017, 20:40:41 pm »
Introducción

Tenemos el agrado de incorporar el dispostivo PD3060-PT100, un módulo lector de sensores de temperatura PT100 (dispositivo termo-resistivo o RTD) que admite hasta 6 entradas para sensores.

Puede conectar sensores PT100 de 2 y 3 cables.
La lectura de temperatura se obtiene utilizando la interfaz de comunicación RS-485 mediante el protocolo ModBus RTU.
Ideal para conectar a un PLC, HMI o sistema de monitoreo con soporte de dicha interfaz de comunicación.



Documentación y ejemplos


Próximamente daremos soporte y ejemplos para lenguaje Ladder a comienzos de 2018.

Nota-1: Recuerde pulsar un botón de menú o tecla de acción en VirtualHMI para lograr conexión con el PLC, así el mismo comenzará a enviar los valores de temperatura.

Nota-2: Para modelos STX8091 / STX8092 de PLC, recuerde colocar jumpers J1 y J2 para seleccionar interfaz RS-485 en puerto de comunicación.

Fotografías de referencia con sistema de medición PT100

Módulo y PLC



PT100 midiendo temperatura negativa en agua congelada



PT100 midiendo temperatura ambiente


2
STX8092 / Re:Comunicación Visual .Net con PLC (ex Modo DAQ)
« : diciembre 26, 2017, 11:49:01 am »
Si nos pudieras apoyar con la llamada vía Whats App en estos días, queremos una aplicación que registre:

  • Lecturas de una entrada física que nos indicará cada cuando se efectúa un ciclo en una máquina.
  • Si la máquina ha estado detenida por cierto tiempo que la máquina no arranque hasta que no se haya capturado el motivo de de dicho paro.
  • Intervalos de tiempo de cada Ciclo.

Reitero, creo que este ejemplo que nos compartiste nos sirve perfectamente, sólo habría que entenderlo al 100% de nuestra parte para hacer las adecuaciones correspondientes a nuestras necesidades, es decir, tal vez no leer todas las I/0's, tal vez sólo 1 ó 2, y más bien leer registros booleanos, enteros, string, creados y programados desde el PLC.

Muy bien, entonces repaso el código del programa para darte una idea general sobre como funciona, así podés modificarlo.

Habilitamos WhatsApp para esta oportunidad en el número de la empresa: +54-9-351-3423793

Envíanos un mensaje así tenemos tu contacto telefónico.

El jueves 28/12 podríamos hacer la llamada.

Te propongo a las 14 hs (México) que serían las 17 hs (Argentina). Hay 3 horas de diferencia.

Avísame si te queda bien ese día y horario.

Saludos

3
STX8081 / Re:Entendiendo las novedades
« : diciembre 26, 2017, 10:54:26 am »
Buenos días Pablo,

Te quería consultar donde puedo leer para comprender mejor el significado y uso de las nueva funciones que veo has desarrollado. Hay una nueva versiòn del Manual de Pawn?  Particularmente, las siguientes funcionalidades:

Las actualizaciones de software suelen ir más rápidas que la documentación cuando no son fundamentales, o están en documentos que aún son borradores. Sin embargo algunas son heredadas de otros modelos en desarrollo y están en concepto de "compatibilidad".

Igualmente, no hay ningún problema que consultes por información sobre cualquier nueva función que veas, ya que a veces al no tener carácter urgente pasa tiempo hasta que se actualiza la documentación.

En el Firmware version 224:
+ Funcion ResolvLookUp() permite "forzar" resolver nombre con opcion RESOLV_OPT_FORCE en tercer argumento.

Para entender opción RESOLV_OPT_FORCE, hay que comprender antes que cuando ResolvLookUp() intenta resolver un nombre de dominio, primero busca en una tabla caché interna si el dominio fue resuelto con anterioridad y ya tiene la dirección IP. Si no fue resulto con anterioridad, lanza un "query" a la red para intentar resolverlo, lo cual tarda más tiempo porque implica una conexión y espera de servidores.

Con la opción RESOLV_OPT_FORCE lo que hacemos es, por cada llamada de ResolvLookUp() se lance un "query" a la red para intentar resolver el nombre, sin importar si esta en la tabla.

Ejemplo:

Código: (Pawn) [Seleccionar]
ResolvLookUp(Hostname, Ip, RESOLV_OPT_FORCE)
El tercer argumento es opcional, y si no se invoca, esta desactivado (esa es la lógica).

Sin embargo, para las últimas versiones de firmware de este modelo STX8081, la tabla interna de "hosts" es igual a "1", por lo que solo tiene relevancia si intentamos resolver el mismo nombre de dominio siempre, pero si queremos resolver dos nombres diferentes, enviará un "query" a la red para buscar el nombre, ya que la tabla solo contiene un registro..

En otros modelos que están bajo desarrollo, este argumento cobra mayor significado.

En Lenguaje Ladder 1.8.5:
+ Se agrega componente Network Split, para configurar opción de division de paquetes en conexiones TCP.

Esto solo se aplica a Lenguaje ladder, ya que en realidad es un nuevo componente gráfico para llamar a las funciones Pawn:

  • NetTcpSplitOff()
  • NetTcpSplitOn()

Si mal no recuerdo, las venias utilizado. En Pawn no esta documentado aún (solo en el foro) pero si para ladder dentro del StxLadder.

Te copio la descripción de las funciones:

Permiten dividir los paquetes de datos en las conexiones con protocolo TCP que el PLC realice a través del puerto Ethernet.

Una vez llamada NetTcpSplitOn(), los paquetes de datos de las conexiones TCP salientes o entrantes, serán divididos en dos fragmentos. Esto mejora el desempeño cuando un cliente TCP corriendo en sistema operativo Windows se intenta conectar a algún servidor activado en el PLC que use el protocolo TCP (como servidor Web, servidor TCP o servidor ModBus TCP). Por defecto el PLC tiene activada esta opción.

Sin embargo, no se recomienda la división de paquetes TCP, cuando el PLC deba conectarse con otro PLC de la marca Slicetex en la misma red usando protocolo TCP, o con algún dispositivo que no soporte este tipo de comunicación. En este caso, se recomienda usar la función NetTcpSplitOff().

La división de paquetes de datos es interna y no requiere intervención del usuario.

Muchas gracias y felices fiestas !
Pablo.

Gracias, ¡Que tengás también felices fiestas y muy buen comienzo de 2018!

Saludos

4
Kinco / Re:instalacion driver usb
« : diciembre 26, 2017, 10:14:42 am »
Estimados, necesito archivos de driver, para instalar Gadget serial v2.4 . Si bien detecta el puerto a instalar, queda con error y signo de interrogracion. Espero comentarios. Muchas gracias. Ruben

Buenos dias,

Para la pantalla HMI Kinco, el driver USB esta en el directorio de instalación del software "Kinco HMIware", por ejemplo:

<ruta al directorio del software>\Kinco HMIware v2.4\driver

En el manual te explica como instalarlo, sección "2.10 Install USB Driver", página 17:

http://slicetex.com/hmi/kinco/docs.php

Saludos


5
STX8092 / Re:Comunicación Visual .Net con PLC (ex Modo DAQ)
« : diciembre 22, 2017, 21:04:14 pm »
Buenas tardes,

Ejecuté este programa que me enviaste.
Por el lado del PLC todo funciona OK, las salidas reaccionan a su entrada correspondiente, sin embargo en la aplicación visual, al presionar el botón azul me manda el error que adjunto en la imagen.

Eso ocurre cuando corres el programa desde Visual C# en modo "Depuración" o "Debug".

Básicamente dice que no puede llamarse a un control desde un proceso diferente al proceso que creó el control (objeto gráfico).
Si corres el programa en modo "Release", generando desde menú "Depurar > Generar solución" el ejecutable y luego buscas el archivo "EXE" generado por el compilador en la carpeta "bin\Release" del proyecto; lo ejecutas y no tenés el problema.

En .Net no se recomienda llamar de esa manera a un control, es decir, el programa crea un proceso en segundo plano para escuchar comunicaciones desde el PLC, y cuando recibe los datos, altera textos de la ventana principal (otro proceso independiente).

Esto se debe hacer con "delegados" y otras cuestiones para hacerlo "seguro", pero para una aplicación simple como el ejemplo no es necesario.
Así que no le des mucha importancia.

Por otro lado, sigo contemplando el viaje a Argentina para las consultas que tengo con respecto a la marca y los modelos que manejan, sería a después del 25 de enero, aunque, habría la posibilidad e hacer sesiones virtuales vía skype o team viewer en estos días? desde luego con los respectivos honorarios que esto genere.

La semana siguiente es una semana un tanto complicada, acá en Argentina llega esta época de fin de año y hay más presión para terminar pedidos, por los feriados festivos, por lo que es complicado hacerlo bien con tiempo.

No dispongo para darte una asistencia en este momento por Skype o Team Viewer (pero se puede ver en otra oportunidad).

Sin embargo, más a mediado de semana, si tenes alguna consulta que no puedas resolver, podemos ver de un llamado telefónico por WhatsApp, como para aclararte algún panorama o cuestión en lo cual tengas dudas.

Si querés podes avisarme antes sobre que tema es la consulta, así estoy mejor preparado y aprovechamos mejor el tiempo.

Avísame si te parece y coordinamos teniendo en cuenta el horario que manejan en México.

Saludos.


6
STX8091 / Re:OnTimeAlarm - No anda en determinado momento
« : diciembre 22, 2017, 20:27:56 pm »
Buenas tardes Esteban,

Estuve verificando las alarmas durante una semana y días, de forma aislada (solo alarmas) en un código nuevo y no he encontrado falla.
Algunos días se interrumpió la prueba por cortes eléctricos debido a las tormentas con viento de estos días.

El código en cuestión, lo que hace es ejecutar 5 alarmas (tal cuál como lo hace tu proyecto), solo que cuando una alarma se produce se envía un correo electrónico con número de alarma ejecutada y número total de alarmas generadas. De tal forma, que en la casilla de e-mail de pruebas, se tenga registro de las alarmas (el número indica la alarma recibida por el e-mail, en caso que llegue fuera de fecha, y la cuenta, sirve por las dudas hubiera existido una falla de conexión, así se puede saber en el próximo e-mail si la alarma fue ejecutada).

El cuerpo del mensaje del mail tiene la siguiente apariencia:



Te adjunto el proyecto utilizado como prueba, por las dudas quieras probar, debes configurar tu dirección de e-mail en el siguiente código:



Recordar configurar la hora/fecha correcta del reloj del PLC.

Quizás en la lógica del código principal de tu proyecto pueda haber algo interfiriendo, alguna variable que la activas en otra parte.
No he visto demasiado tu código, pero ¿solo un rele activas? ¿Nada más activa/desactiva ese rele?.

Saludos


7
STX8091 / Re:Uniones sobre estructuras de variables
« : diciembre 14, 2017, 17:01:33 pm »
Buenisimo. Asi si funciona. En C o C++ convertis las variables directamente anteponiendo Float o word o dword a la variale o ecuacion en cuestion. en otros plcs convertis las variables con funciones determinadas dado que el formato float es diferente al binario en CA1 o CA2. Pense que podia existir alguna funcion asi. no importa, armo las funciones de conversion y listo.
muchas gracias.
saludos.

Podríamos crear algunas funciones genéricas para que ya este soportado de forma estándar en una actualización de firmware.

¿Cómo son en los PLC que utilizas?.

Se me ocurre que podría implementarse algo similar a lo siguiente para fácil uso:

  • FloatToReg16(FloatValue, Reg16Low, Reg16High): Separa FloatValue en dos variables enteras, con valores de 16-bits en Reg16Low y Reg16High.
  • Reg16ToFloat(Reg16Low, Reg16High): Une dos registros o variables enteras que contienen un valor float, retorna el valor convertido.

Básicamente para ser utilizado en operaciones ModBus.

8
STX8091 / Re:Uniones sobre estructuras de variables
« : diciembre 14, 2017, 13:40:15 pm »
En realidad ambas cosas dado que despues voy a tener que enviar un dato flotante por modbus a la pantalla.

Bien, lo que debes utilizar es el operador "desplazamiento de bits" en Pawn.

Leer variable Float desde registros ModBus

En este caso, lees dos registros de 16-bits del dispositivo remoto que representan un valor float de 32-bits.

El float, debería estar almacenado en las direcciones de registros como sigue:

RegistroH  = 16-bits mas significativos.
RegistroL  = 16-bits menos significativos.

Entonces, debes leer ambos registros (supongamos que ya recibiste ambos valores vía ModBus y los tenes en las variables RegistroH y RegistroL):

// En Pawn (en rojo los valores ya recibidos)
new RegistroH = Valor Y
new RegistroL = Valor X


// Crear dos variables intermedias.
new RawValue
new Float: FloatValue = 0


// Convertir a 32-bits (unir ambos registros para formar el float de 32-bits).
// Notar en segunda linea como realizo una operación SHIFT y luego un OR bit-a-bit.
RawValue = RegistroL
RawValue |= (RegistroH << 16)


// Almacenar en float haciendo un cast (para que se interprete correctamente).
FloatValue = Float: RawValue


Finalmente, en FloatValue tenes el float obtenido del registro ModBus.

Escribir variable Float en registros ModBus

Acá debes hacer al revés, del float, copiar 16-bits más significativo en un registro y 16-bits menos significativos en otro registro.

// Valor float a transmitir.
new Float: FloatValue = 123.456

// Variables enteras a copiar en registros.
new RegistroH
new RegistroL


// Almacenamos 16-bits más significativos, desplazando 16 bits a la derecha:
RegistroH = FloatValue >> 16

// Almacenamos 16-bits menos significativos, haciendo cero 16-bits más significatios con operación AND.
RegistroL = FloatValue & 0xFFFF


Luego en RegistroH y RegistroL tenes el float descompuesto, que podes copiar a los registros ModBus.



En ambos ejemplos podes usar VirtualHMI para imprimir en pantalla el valor y corroborar operación.

Te recomiendo hacer la prueba con un código básico para entender el proceso.

Las operaciones con bits (desplazamientos, AND, OR, etc) son iguales que en lenguaje C. Si tenes alguna duda conceptual, avísanos.

Saludos.


9
STX8091 / Re:Uniones sobre estructuras de variables
« : diciembre 14, 2017, 12:54:00 pm »
El problema que me surge es que cada modulo genera una variable a transmitir flotante (32bits), y el tipo de variable en modbus es de 16 bits. lo que hago habitualmente es en un micro generar una estructura tipo union donde puedo convertir ese flotante en dos variables de 16 bits que copia bit a bit el flotante en estas dos variables. Del otro lado hago lo inverso, es decir cargo estos registros de 16 bits y a traves de una union paso bis a bit a una variable de 32 bits y tengo el flotante transmitido. El concepto de union es un clasico en C.

se puede hacer algo asi? no he encontrado data en lo que he leido de los manuales.

Buenos días,

Si, es posible, aclárame si lo que querés hacer, ¿es leer dos registros de 16-bits por ModBus, para luego unirlo en un float en el PLC y tenerlo disponible?.

O al revés, ¿tenés un float en el PLC y deseas transmitirlo como 2 registros de 16-bits vía ModBus?.

¿Que lenguaje estas utilizando?

Saludos

10
STX8091 / Re:OnTimeAlarm - No anda en determinado momento
« : diciembre 14, 2017, 12:47:54 pm »
Buenos días Esteban,

Muy bien, lo que voy a hacer es probar la parte de las alarmas de forma aislada, pero conservando la configuración de las mismas, y ver si los eventos se generan o se pasan por alto.

Te mantengo al tanto.

Saludos

11
STX8091 / Re:OnTimeAlarm - No anda en determinado momento
« : diciembre 06, 2017, 18:50:58 pm »
Podría revisar el comando OnTimeAlarm  ya que capaz que una vez al mes no funciona justo es evento. Esta programado para todos los dias a las 13 hs, el plc estuvo funcionando ya que la alarma a las 10 funciono pero ese no trabajo hoy 06/12/2017. Yo voy a ir anotando los dias pero es como que tiene algo puntual que hace que no funcione esa determinada alarma en un día puntual y en su momento crei que era por algo de calendario que tenia de lunes a viernes y lo modifique a todos los dias pero igual sigue con esa falla, y no es siempre el de las 13 aveces es el de las 8:00 y todas van al mismo rele.

Buenas tardes Esteban. ¿Tendría el código relacionado al evento para compartir así puedo testearlo y reproducir el error?. Gracias.

12
STX8091 / Re:Ciclo scan
« : diciembre 06, 2017, 11:13:29 am »
Le envío un ejemplo donde con un pulsador activo una marca y luego con el mismo le hago un reset si esta activado, pero no lo desactiva.



En ese código que pasas en ladder, DOUT1 se activa mientras DIN1=1, y se desactiva cuando DIN1=0.

Si lo analizás:

N001: inicialmente M1=0, DIN1=1, entonces M1=1.
N002: M1=1, entonces DOUT1=1.
N003: DOU1=1, DIN1=1, entonces M1=0.

Siguiente SCAN CYCLE:

N001: Nuevamente M1=0, DIN1=1, entonces M1=1.
N002: M1=1, entonces DOUT1=1.
N003: DOUT1=1, DIN1=1, entonces M1=0.

Solo si DIN1 cambia a 0, tenemos:

N001: M1=0, DIN1=0, M1 sin cambios (viene de ciclo anterior con valor 0).
N002: M1=0, entonces DOUT1=0.
N003: DOUT1=0, DIN1=0, M1 (sin cambios, viene con valor 0).



Si lo que necesitas es que cuando DIN1 pase de 0 a 1 se active DOUT1, pero cuando DIN1 pase de 1 a 0, no produzca cambios en DOUT1, sino que para desactivar otra vez tenga que pasar DIN1 de 0 a 1 (como si fuera un pulsador toggle), podes usar el siguiente código:



O también más simple:



Es lo que interpreto que querés hacer.

Si no es esto, decime que valor debe tener DOUT1, frente al comportamiento de DIN1, para que te pueda guiar.

Saludos.

13
STX8091 / Re:Variables retentivas
« : diciembre 05, 2017, 19:45:19 pm »
Buenas tardes Damian,

Para guardar valores y no perderlos luego cortar energía eléctrica, debes usar la memoria EEPROM del PLC.

Te paso un link a un ejemplo que guarda en memoria EEPROM, 4 valores de una variable tipo Int32_Array.

Ejemplo: EepromVirtualHMI_Version_1.zip

Para guardar se da la orden con la entrada DIN2.

Para cargar/leer se da la orden con la entrada DIN3.

Los 4 valores se pueden incrementar como contadores, pulsando la entrada DIN1.

Todo el proceso se puede ver por VirtualHMI.

Leer también archivo info.txt en proyecto.



A modo de nota, cuando grabe/escriba en EEPROM, intente asegurar que no se realice la operación infinita veces, por ejemplo usando una condición con algún componente de flanco ascendente (ver ejemplo), o alguna variable que inmediatamente se haga FALSA y no permita grabar nuevamente en la EEPROM.
Esto importante, ya que la EEPROM tiene un ciclo limitados de escrituras, alrededor de 1 millón, pero si el programa por error graba indefinidamente, se acorta la vida útil.

Si tiene dudas, quedamos a disposición.

Saludos.

14
STX8091 / Re:Activar rele en otro PLC por tcp/ip
« : diciembre 05, 2017, 19:31:54 pm »
Buenas tardes Esteban,

Te paso link a dos proyectos que te permiten configurar dos PLC, uno como cliente ModBus TCP y otro como servidor ModBus TCP para el intercambio de datos:

  • MbTcpClientReadWrite.zip: Ejemplo en lenguaje Ladder para configurar un PLC como cliente ModBus TCP. Permite enviar comandos al servidor para leer entradas DIN, escribir/leer registros, escribir salidas DOUT, etc. Recuerde leer el archivo info.txt.
  • MbTcpServerReadWrite.zip: Ejemplo en lenguaje Ladder para configurar otro PLC como servidor ModBus TCP y aceptar las conexiones ModBus TCP del cliente. Recuerde leer el archivo info.txt.

Debes conectar ambos PLC en la red Ethernet, con dos IP diferentes.

Al PLC que le cargues el cliente ModBus TCP le debes especificar la dirección IP del PLC con el servidor ModBus TCP.



Estos ejemplos requieren que tengas instalada la última versión de StxLadder (1.8.5 o superior).



Para probar el cliente ModBus TCP tenes que usar VirtualHMI para ver los resultados en pantalla, ya que según el ejemplo, cuando activas:

- DIN1: Envía un requerimiento para leer 4 holding registers en dirección 40001.
- DIN2: Envía un requerimiento para escribir coil (DOUT1) en direccion 1.
- DIN3: Envía un requerimiento para leer 16 entradas DIN en direccion 10001.
- DIN4: Envía un requerimiento escribir 1 holding registers en direccion 40017.
- DIN5: Envía un requerimiento para escribir coil (BIT) en dirección 4002.

Como podes notar, el ejemplo te permite escribir variables, leer variables y activar/desactivar reles directamente en el PLC remoto.

Esto es más fácil que realizar conexiones TCP/IP directamente, ya que tiene un esquema de registros. El protocolo usado base, es el TCP/IP igualmente.

Puede ser conveniente que leas las notas de aplicación AN021 y AN022 respectivamente, ya que describen el protocolo.

Cualquier duda, avisame.

Saludos.





15
STX8091 / Re:Ciclo scan
« : diciembre 04, 2017, 21:59:10 pm »
Hola cómo trabaja el ciclo scan, porque tengo problema cuando uso una misma entrada para distinto evento entonces abajo del todo reset una marca y arriba el mismo botón activa una marca pero tiene otra marca adelante que cuando se reset recién puede activarse. Pero la realidad es que resetea la marca y luego la de arriba ya toma que se desactivo y vuelve a activarla.

Estimado Esteban,

El SCAN CYCLE comienza de arriba hacia abajo, ejecuta los componentes ciclicamente en el diagrama Principal.

En el diagrama hay una opción (click botón derecho) para Ver el orden de ejecución de los componentes (requiere compilar).

Con ello podes ver que se ejecuta primero, en caso que estés modificando/leyendo una variable en un orden diferente al deseado.

También hay una explicación del SCAN CYCLE en el manual de usuario.

No comprendí bien el texto, en el sentido a la secuencia que mencionas, decime si es esto lo que estas buscando, o si podes pasame una captura del fragmento del código que tenes duda.

Saludos.

 




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