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 ... 61
1
StxLadder - Slicetex Ladder Designer Studio / Re:Reset de contador
« : septiembre 20, 2018, 13:02:00 pm »
Gracias boris, voy a intentar con ésto que me decís, porque me parece lo más lógico, que la entrada DIN5, que en mi caso es el vacuostato puede generar un ruído y se active en la segunda vez como si fuera la tercera. Voy a probar y después te aviso como me fue.

Otra posibilidad, es remplazar el componente que lee DIN5, por otro que solo lee "flancos positivos", es decir solo si la señal va de 0 a 1, genera un 1 a la salida, pero si es "1" constante, genera un "0".

Seria así:



Te dejo el proyecto modificado para esta prueba.

Saludos!

2
StxLadder - Slicetex Ladder Designer Studio / Re:Reset de contador
« : septiembre 19, 2018, 17:32:19 pm »
Buenas tardes,

buenas boris, te cuento que realicé el programa tal cual vos me habías aconsejado, coloqué un reset mediante un DIN(adjunto programa), y anda perfectamente hasta la 3era carga luego se ancla el el contador C12 cuando cuenta 2 en lugar de 3, y no encuentro el problema ya que como te digo las primeras dos veces funcionó perfectamente, si podés darme una mano te voy a agradecer.

Quizás, si cuenta 2 en lugar de 3, puede ser que por algún motivo este tomando 2 pulsos, como 3 pulsos, por ejemplo por ruido. Esto es, entre un pulso y otro, se genera un pequeño pulso que se toma como válido.

¿Cómo te das cuenta que cuenta 2 en lugar de 3?.

Una forma de hacer más lentas las entradas digitales, para que no respondan tan rápido, es con el componente DIN DELAY llamándolo desde el diagrama Inicio:




En el ejemplo de arriba, se establece un retardo de 20 mS para que el PLC no tome como válidos pulsos de menor duración.
Te adjunto el proyecto para que lo pruebes con este componente.

Puede ser una solución. Fijate de incrementar el valor hasta 50 mS, no más, y ver resultado obtenido.

Sino vemos otra posibilidad.

Puede ser que en el N030 el T9 me esté complicando, y no me dede resetear?porque las primeras dos veces anduvo bien, y para iniciar de nuevo el proceso se tardó bastante, en cambio la última carga, en la que falló el programa no se tardó en volver a colocar.

No parece estar relacionado con el otro código a primera vista.

También puse los siguientes componentes, antes del contador (en N024), para asegurar que Reseteo_C12 se actualice antes de llamar al contador.:



Fijate de cargar el proyecto que te pasé adjunto en el ZIP y probar.

Saludos!


3
Buenas tardes,

Buenas tardes Boris, aplique la finción de filtro VinFilterAOn(200,2000) lo cual ayuda pero no creo que sea la solución buscada.

Pensé que estabas utilizando VinFilterAOn(200,2000), por eso recomendaba última versión de firmware.

te comento, lo que creo que hace es filtrar n muestra. pero si hay un error como una falsa lectura (porque he comprobado que entrega cero frente a un valor de tensión no nulo), lo mete dentro del promedio que por ser alto no se nota tanto pero genera una baja. lo que tuve que hacer es cuando el valor leído es cero o no está en el rango de medición lo descarto.

Se me ocurre entonces quizás una falla por estar el ADC ocupado o un error de comunicación que no se maneja correctamente (que está contemplado, pero de alguna forma se escapa).

A la lectura de entradas, ¿las haces dentro de un loop?, ¿cada cuánto tiempo lees? ¿estás utilizando último firmware?.

Avísame, y podría repetir la prueba para ver si me hace lo mismo.

Saludos!






4
STX8091 / Re:Dudas sobre guardar en Eeprom varias veces
« : septiembre 13, 2018, 17:52:30 pm »
Buenas tardes,

Escribir_eeprom_f(Float: Valor, Address)
   {
   new Sts_write_eeprom_local
   new B_Eeprom[4]
   new Float: W_Eeprom[1]

   //Escribe en Eeprom
   W_Eeprom[0] = Valor
   UnpackBytes(W_Eeprom,0,B_Eeprom,0, 4)
   Sts_write_eeprom_local = EepromWriteCells(Address, 4, B_Eeprom)
   return Sts_write_eeprom_local
   }


¿Por qué utilizas UnpackBytes()?.

Además, en EepromWriteCells(), estas escribiendo 4 valores, pero ocupando 4x4 bytes.

Podés hacer así para guardar de a un Float/Entero a la vez:

Código: (Pawn) [Seleccionar]
EepromWriteValue(Address, Val)
{
   // Definir un array de 1 celdas.
   new Data[1]
   
   // Asignar array con valor.
   Data[0] = Val
   
   // Escribir Data[] a partir de la dirección Address de la EEPROM.
   return EepromWriteCells(Address, 1, Data)
}


O si queres guardar todo el array de una sola vez:

Código: (Pawn) [Seleccionar]
EepromWriteCells(Totalizadores_de_consumo_mensual, 13, DIR_VAL_CONSUMO_0)
Y te van a quedar los 13 elementos a partir de la dirección DIR_VAL_CONSUMO_0 separados (por 4 bytes cada uno, es decir el elemento 2 va a estar a partir de DIR_VAL_CONSUMO_0+4.

La dirección DIR_VAL_CONSUMO_0 debe ser múltiplo de 4, por ejemplo 0, 100, 104, 200, etc.

Para leer de a un valor:

Código: (Pawn) [Seleccionar]
EepromReadValue(Address)
{
   // Definir un array de 1 celdas.
   new Data[1]
   
   // Leer 1 celdas a partir de la dirección Address de la EEPROM.
   EepromReadCells(Address, 1, Data)
   
   // Retornar Valor.
   return Data[0]   
}


O leer todos los valores:

Código: (Pawn) [Seleccionar]
EepromReadCells(DIR_VAL_CONSUMO_0, 13, Totalizadores_de_consumo_mensual)
Luego, cada elemento que leas y tengas en un array (por ejemplo entero) podes convertirlo a Float así:

Código: (Pawn) [Seleccionar]
new Float: ValorFloat

ValorFloat = Float: Totalizadores_de_consumo_mensual[0]

Si por ejemplo Totalizadores_de_consumo_mensual[] estaba definido como entero.

Un Float: de un Entero desde el punto de vista binario no tiene diferencias, ambos ocupan 4 bytes. Luego, para leerlos, si. Uno se interpreta con decimales (por ello usas el "tag" Float:) y otro simplemente es un entero. Por ello para guardarlo en EEPROM no hace falta nada especial, lo mismo que para leerlos, lo que guardas/lees es un dato binario. Luego en tu programa, si debes colocarlo en la variable adecuada mediante una conversión para que pueda interpretarse.

La pregunta es : al llamar a la función  EepromWriteCells() debo tener alguna consideración si el llamado se hace varias veces?

No, el PLC espera a que la memoria EEPROM este lista para escribir (si esta ocupada), pero podes probar colocar un pequeño delay (ejemplo 10 mS) si sospechas que hay un tema de tiempos.

Igual, evitar un bucle de escritura infinito, porque la memoria tiene un límite de escritura.

Actualizar a último firmware, ya que hay algunas correcciones para memoria EEPROM.

Avísame cualquier duda,

Saludos!

5
Buenas tardes,

La pregunta es:  ¿ Que puedo hacer para que el resultado leido de la conversión no sea nulo ?

¿Utilizás en alguna parte del código una llamada a la función VinFilterAOn() para activar el filtrado analógico?.

Ya que en la últimas versiones de firmware fue corregido un Bug que evita que entregue valores extremos.

Sino decime.

Saludos!


6
STX8091 / Re:Guardar registros a PC
« : septiembre 13, 2018, 17:23:25 pm »
Buenas tardes Mariano,

Consulta1: Será posible hacerla funcionar en windows 2007? y en xp?

Si, basta que tengas instalado el Framework 2.0 para Visual C#, fijate para descaregarlo en el siguiente link (al final de la página):

http://slicetex.com/hw/stx80xx/soft.php

También, otra forma que podes hacer es instalar StxLadder en la máquina de destino, para que descargue los requisitos de framework.

Si funciona StxLadder, funciona la aplicación.

Consulta2: Podrías pasarme unas líneas de código PAWN para guardar datos en la EEPROM de un PLC STX8091-D1?

Me estuve fijando, y lo único que debés hacer es cambiar el modelo de dispositivo en el proyecto por el STX8091-D1.

La única diferencia, es que vas a tener la mitad de memoria para log de datos, ya que la EEPROM es de 16KB frente a 32KB del otro modelo.

Es altamente recomendado actualizar el firmware a la última versión.

Consulta3: Por favor pasame a mi correo una cotización actualizada de un PLC PLCSTX8091-D2.

Ahí te pasé la cotización a tu email.

Saludos!

7
Discusión General / MOVIDO: Capacidad de fuente entradas 4-20mA
« : septiembre 10, 2018, 11:49:15 am »
El tema ha sido movido a STX8091.

Link al mensaje:

http://foro.slicetex.com/index.php?topic=352.0

9
STX8091 / Re:Comunicación ModBus RTU de sensores y pantallas Kinco
« : septiembre 07, 2018, 11:26:28 am »
Buenos días.

No, ya que la pantalla la tenés conectada por ModBus TCP (Ethernet) y los módulos pensás conectarlos por RS485 utilizando ModBus RTU, dos interfaces diferentes y aisladas entre sí.

Generalmente el PLC es Maestro (cliente) y las 3 balanzas son Esclavas (Servidores).

Comenzá conectando de a una, y probar, luego ir conectando el resto.

En algunos casos, es probable que necesites colocar resistores de polarización, como explica la hoja de datos (figura 22, pág. 33):
http://slicetex.com/hw/stx8091/docs/STX8091-DS-AX_BX_CX_DX.pdf

También recordar colocar el jumper J1.

Finalmente, leer nota de aplicación:

http://slicetex.com/docs/an/an026/index.php

Y tener a mano especificaciones técnicas de las balanzas, en cuanto a velocidad de comunicación, dirección de red ModBus, dirección de los registros (esto los fabricantes pueden tomarlo de diferente formas, por ejemplo registro holding 40002, pueden tomarlo como el número "40002" o simplemente "2").

Como siempre, comenzar con un ejemplo por separado, simple, para leer algo y mostrar en pantalla y luego integrar al proyecto cuando funcione.

Saludos!


10
STX8091 / Re:Capacidad de fuente entradas 4-20mA
« : septiembre 07, 2018, 11:14:38 am »
Tengo  una fuente stx612. Estoy alimentando un stx8091 y una hmi kinco mt4532te. Necesito utilizar 3 entradas 4-20. ¿Alcanzará la fuente? la distancia entre la fuente y los controladores 4-20 es aprox 20metros

En cuanto a capacidad de corriente debes estar en lo justo, ya que te debe quedar una capacidad de 0.8A libres, de los 2A de la fuente.

A esa distancia es probable que tengas una pequeña caída de tensión.

Sin embargo, para alimentar transductores de 4-20 mA, se recomienda en general 24VDC, ya que al estar en lazo con el PLC y cable largo, se crea una impedancia en serie que hace caer bastante la tensión disponible para el sensor, y con 12VDC, es muy probable que no sea suficiente.

Admás a 20 metros, ya que conviene utilizar una fuente diferente para que no se creen "current loops", interferecias en los cables, etc.
En suma, conviene una fuente de 24VDC dedicada.

Luego lo conectás al sensor de la siguiente forma al PLC:



Saludos!

11
StxLadder - Slicetex Ladder Designer Studio / Re:Reset de contador
« : septiembre 07, 2018, 11:04:41 am »
Buenos días. Es complicado ver la interacción de todas las variables en el programa y que activan a DOUT6 para que reseteé el contador C12, ya que no tengo forma de probarlo.

Si embargo, te modifiqué el código, para que puedas resetear el contador C12 con DOUT6 o DIN13 (botón DEF/BOOT).



Fíjate cuando te falle, apretás el botón y ves si se resetea el contador.



Es decir, buscar los pasos anteriores que estan asociados a dicho reset, como timers, variables, etc.

Es probable que otro punto en el programa este interfiriendo con la lógica.

Te adjunto el proyecto con la modificación.

Saludos!

12
STX8091 / Re:Código para lectura/escritura de datos con RS485
« : septiembre 05, 2018, 11:23:07 am »
La duda está presente en el main y en como interactúan los valores obtenidos a través del teclado con los comandos MbRtuClSendReadHoldingReg y MbRtuClSendWriteReg.

Deberías crear una variable Global (aquellas que declarás fuera de una función), por ejemplo una llamada ReadModBusFlag (si querés leer) y otra llamada WriteModBusFlag (sí querés escribir).

Código: (Pawn) [Seleccionar]
new ReadModBusFlag, WriteModBusFlag

Luego, desde VirtualHMI las hacés "1" si querés leer o escribir, y desde PlcMain() comprobás su valor para iniciar el tipo de operación, por ejemplo:

Código: (Pawn) [Seleccionar]
     if(ReadModBusFlag == 1 && WaitResponse == 0)
     {
         // Enviar peticion para leer "Holding Registers".
         if(MbRtuClSendReadHoldingReg(SLAVE_ADDR, StartAddr, Qty) < 0)
         {
            // Error en transmision.
         }
         else
         {
            WaitResponse = 1

            // Operación ejecutada, limpiar flag.
            ReadModBusFlag = 0
         }
     }

Para escribir:

Código: (Pawn) [Seleccionar]
     if(WriteModBusFlag == 1 && WaitResponse == 0)
     {
         // Enviar petición para escribir "Holding Register".
         if(MbRtuClSendWriteReg(SLAVE_ADDR, StartAddr, Value) < 0)
         {
            // Error en transmision.
         }
         else
         {
            WaitResponse = 1

            // Operación ejecutada, limpiar flag.
            WriteModBusFlag = 0
         }
     }

Te aconsejo leer la nota de aplicación AN026 sobre ModBus RTU cliente, allí tenes en un archivo PDF todas las funciones disponibles y descripciones de las mismas, así como ejemplos. Primero, debes comprender como funciona ModBus RTU.

Link a nota de aplicación:
http://slicetex.com/docs/an/an026

Además, los valores recibidos se acumulan en un vector RxData, el cual me gustaría que no tenga que restringirlo a un número preestablecido de muestras (por ejemplo 4 como en mi código), sino que el mismo dependa de la cantidad de interacciones que realizo con el sensor.

Lo mismo que lo anterior, debes crear una variable global donde almacenes el número de registros a leer o pedir desde ModBus.

El tamaño del array RxData[] podes hacerlo más grande, por ejemplo de 20 registros, para tener espacio suficiente:

Código: (Pawn) [Seleccionar]
new RxData[20]
Luego, cuando hagas la petición, debes pasar el número de registros a leer, según el valor obtenido desde VirtualHMI:

MbRtuClSendReadHoldingReg(SLAVE_ADDR, StartAddr, Qty)

El argumento Qty, lo remplazas con la variable global que almacena el número de registros a leer y fue establecida desde VirtualHMI.

Te aconsejo que mantengas el código de VirtualHMI.p y PlcMain.p en archivos independientes, ya que en tu proyecto, están todo juntos, sino con el tiempo a medida que crezca el código, se te va a hacer confuso y desordenado.

Te recomiendo leer esta introducción al lenguaje Pawn:

http://slicetex.com/ladder/docs/files/STXLADDER-PI.pdf

Saludos!






13
STX8091 / Re:Código para lectura/escritura de datos con RS485
« : septiembre 04, 2018, 18:28:40 pm »
Buenas tardes Joaquin.

El archivo que nos pasás, no es el proyecto completo con el código.

Para compartir el proyecto con todos los archivos, en StxLadder debes ir a menú "Archivo > Crear backup del proyecto (zip)" y eso te va a generar un archivo .ZIP.

Luego subís ese .ZIP acá, así lo podemos abrir y ver el código al cuál haces referencia en el mensaje.

Saludos!

14
STX8081 / Re:Problema con las últimas versiones (packed string)
« : agosto 13, 2018, 11:03:03 am »
Buenos días Pablo.

- El tema ese de los emails que te llegan "por rebote", cuando los emails enviados por mi sistema son tomados como spam. Es posible que sean enviados a otra dirección que no sea @slicetex.com ?? Es esto configurable?
De todas formas acabo de modificar el SUBJECT de los mails, como vos me indicaste, y espero que con esto ya no te lleguen más emails rebotados, pero la verdad es que este punto me dejó un tanto preocupado.

No, ya que cuando usas SmtpInitSimple() se utiliza el server SMTP de Slicetex, y la protección anti-spam no es configurable en el server.

Las últimas versiones de firmware, permiten actualizar hora/fecha desde internet, es importante tener la hora/fecha correcta del sistema al momento de enviar emails, para que no sean sospechosos de "spam", fíjate en el siguiente post:

http://foro.slicetex.com/index.php?topic=321.0

- La habilitación de los "Packed Strings" que ahora tengo implementada, tiene alguna consecuencia para la identificación de los bytes dentro del buffer de recepción de datos por UDP ? Concretamente yo tengo algo más o menos así:

@OnUdpRx()
{
      // Leer 10 bytes del array y almacenarlos en RxData[].
      UdpRxDataRead(RxData,0,10,false)

      // Y Luego voy extrayendo los datos que hay en cada byte de la trama UDP...
      if (RxData[0] == 122)


No, porque lo que se modifica es la codificación de un string, que en vez de tomar un caracter cada 4 bytes, se utiliza un caracter por byte. Esto solo influye en los string que se almacenan en un array como "packed".

Saludos!

15
STX8081 / Re:Problema con las últimas versiones (packed string)
« : agosto 12, 2018, 18:27:12 pm »
Impecable. Ya lo tengo andando.

Perfecto Pablo!

Pruebo a ejecutar, y todo parece funcionar bien, pero en un sitio donde muestro strings a través de VirtualHMI, no salen bien. Entonces recorro el fuente hasta encontrar todos los lugares donde haya StrFormat(), y cambio "false" por "true" (primero cambié por "packed", pero tiró error al compilar, entonces le puse "true").

Probá con mayúsculas: PACKED

Con esto último, aparentemente todo está funcionando bien de nuevo, con software actualizado a lo último.
Si algo no quedó bien, en los próximos días me voy a dar cuenta.

A veces me llega un mail de reporte de "spam" con los mails que envías desde la placa, se me hace, por lo que veo, que se debe ser por poner en el "Subject" la fecha/hora sin ningún texto.

En el asunto podrías colocar algo como: "Notificacion - DDMMAAAA-HHMM"

Sí es que necesitas poner le fecha/hora en el asunto.

Para que parezca más normal.

Este es la copia del reporte:

Código: (Mail) [Seleccionar]
This message was created automatically by mail delivery software.

A message that you sent could not be delivered to one or more of its
recipients. This is a permanent error. The following address(es) failed:

  pXXXXX@gmail.com
    host outbound.mailspamprotection.com [108.163.220.50]
    SMTP error from remote mail server after end of data:
    550 High probability of spam

---------- Forwarded message ----------
From: PLC <plc.XXXXX@slicetex.com>
To: <pXXXXX@gmail.com>
Cc:
Bcc:
Date: Sat, 11 Aug 2018 21:21:29 -0000
Subject: 11/08/2018 - 21:21:22
RECONEXION ENERGIA
FASES=R S T
TANQUE PA=005  PB=000
ALARMA=DESARM-OFF
M.CALD=SMART  CONF=1
T.Ext=14.7C   T.Int=20.1C

--

PLC
pXXXX@gmail.com


Supongo que mientras te lo considere como spam, no lo debes estar recibiendo.

De paso. Debo esperar algún cambio o mejora derivado de las siguientes mejoras del firmware?:
      + Se amplia de 6 a 10 la cantidad de conexiones abiertas
        simultáneas TCP.
      + Se amplia de 12 a 20 la cantidad de puertos disponibles para
        escucha de paquetes TCP.
      + Se amplia de 2 a 4 la cantidad de conexiones abiertas
        simultáneas ModBus TCP (esto se conoce en documentación
        como parámetro "NumberMaxOfTransactions").

Nada que afecte el funcionamiento, debería mejorar la conectividad para aplicaciones con protocolo TCP, como ModBus TCP, webserver, mails, etc.

Saludos!

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