Mensajes recientes

Páginas: 1 2 [3] 4 5 ... 10
21
STX8091 - Familia PLC Cube / Re:AYUDA: ruido eléctrico en entradas digitales?
« Último mensaje por guille julio 12, 2017, 20:11:08 pm »
Hola Boris!

Te pego el código antirrebote que saque de este foro:

//anti-rebote
DinReadFiltered(Din)
{
   new timeOut = 25
   new lastLevel = 0

   lastLevel = DinValue(Din)

   while(timeOut > 0) 
   {
      if(DinValue(Din) == lastLevel)
      {
          // Retardo de 500 mS.
          DelayMS(20)
          timeOut--
      }
      else
      {
          // Valor difiere al ultimo leído, reiniciar timeout.
          lastLevel = DinValue(Din)
          timeOut = 25
      }
   }

   return lastLevel
}

//anti-rebotes placa expansión
EXT_DinReadFiltered(Din)
{
   new timeOut = 25
   new lastLevel = 0

   lastLevel = Stx570_DinGetValue(0, Din)

   while(timeOut > 0) 
   {
      if(Stx570_DinGetValue(0, Din) == lastLevel)
      {
          // Retardo de 500 mS.
          DelayMS(20)
          timeOut--
      }
      else
      {
          // Valor difiere al ultimo leído, reiniciar timeout.
          lastLevel = Stx570_DinGetValue(0, Din)
          timeOut = 25
      }
   }

   return lastLevel
}


Existen en total 10 finales de carrera (5 actuadores) por el momento. Hay 5 conectados al PLC y 5 al módulo de expansión.

Con respecto al circuito, al tablero lo armaron otros contratistas y no hay planos completos todavía. Según lo que pude apreciar, parece que el modo de conexión es de 3 hilos: +,GND y Señal, que va la entrada del PLC y modulo de expansión. La tensión de alimentación es 12V y cuando conmuta he medido valores de 11V y pico. La interfaz "extra" de transistores creo que se utiliza sólo para la placa de expansión. (tengo que fijarme bien y en todo caso pedir planimetria precisa). En ningún lugar IFM dice que el cuerpo esta unido a algún contacto eléctrico ni tampoco advierte de su aislación de otros elementos metálicos "no sometidos a tension".

Gracias por tu ayuda!

Estamos en contacto,

Guille.
22
Weintek - Weinview / Re:Objeto Ascii
« Último mensaje por InduxSA julio 12, 2017, 15:08:31 pm »
Hola Boris

Como puedo tomar los valores de un vector y convertirlos en un entero, algo como la función atoid que se usa en C

Saludos
23
STX8091 - Familia PLC Cube / Re:AYUDA: ruido eléctrico en entradas digitales?
« Último mensaje por Soporte julio 11, 2017, 12:28:46 pm »
Buenos días Guillermo,

Estuve probando la rutina, quitando la siguiente porción de código:

if(DinReadFiltered(i))
               {
                  LedOn()
                  break    //Final de carrera?
               }

 y

if(EXT_DinReadFiltered(i))
               {
                  LedOn()
                  break//Final de carrera?
               }


O sea, no tuve en cuenta los finales de carrera, pero sólo posicioné los actuadores en posiciones intermedias, evitando llegar a los extremos asi no me pasaba del tope mecánico.

El programa anduvo perfecto, sin errores. Descarto que el ruido ingrese por los relays de interfase o por las entradas analógicas de los potenciómetros. Tampoco observo un bug en la programación.

Luego volví a agregar el mencionado código y el bug apareció enseguida. Trate de filtrar la entrada de los finales de carrera con un RC, pero esto solo empeoró la cuestión. Entonces llego a la conclusión de que el ruido ingresa por acá.

¿Podrías pasarme el código que usas para las funciones DinReadFiltered(i) y EXT_DinReadFiltered(i)?

¿Es posible que solo uses el PLC para leer los fines de carrera y no el módulo de expansión?.

Quizás el ruido pueda estar relacionado a la expansión.

Los FC utilizados son los siguientes:

https://www.ifm.com/products/ar/ds/IF7100.htm

Inductivos, M12, cuerpo metálico.

Es muy raro que venga relacionado en "forma de ruido" el problema por las entradas discretas, ya que están opto-acopladas.

Este es el diagrama de conexión de los detectores-inductivos, ¿como lo conectas el PLC y con que tensión alimentas?:



Por ahí pienso que no estén generando un "0" o "1" correctamente en el PLC, es decir, que la tensión resultante aplicada quede dentro del margen de tensión (5-9V) donde para el PLC puede ser 0 o 1. Entonces la lectura sea indeterminada o variable. Porque fíjate, según hoja de datos dice "2.5V" de caída de tensión, si alimentas con +12, le resta y queda en 9.5V desde el vamos, pero depende de como lo conectes a las entradas.

¿El fin de carrera es estático de tensión, no?. ¿Es decir te pone un valor fijo cuando llega sin que variar hasta que sale de esa condición?.

Me preguntaba, es posible que al estar en contacto con el chasis de la maquina el ruido ingrese por alli? Sera mejor aislar estos componentes? Como son NA, hay una interfaz de transistores que los cambia a NC, cuestión de comodidad. Podrá ingresar por aqui el ruido?

Si mal no entiendo ¿Le pones otro transistor al sensor? . Pregunto, por lo que te mencioné antes, que no sea el caso que este cerrando/abriendo incorrectamente el circuito.

Si el chasis de la maquina hace contacto en alguna conexion electrica del sensor, como GND o alimentacion, entonces si es posible que entre ruido o tensiones inducidas en el chasis a la parte de DC (corriente continua) del sistema. Deberia estar aislado.

Otro opcion seria optoaislar las entradas? (No es que el PLC tiene su circuiteria interna asi?)

Claro, están opto-aisladas las entradas. Por eso suponía que si es tema de ruido, debería entrar el ruido cuando los motores o cargas inductivas entran en funcionamiento.

Espero tus comentarios.

Saludos
24
STX8091 - Familia PLC Cube / Re:AYUDA: ruido eléctrico en entradas digitales?
« Último mensaje por guille julio 10, 2017, 21:31:31 pm »
Hola Boris!

Ya corregi algunas cosas q me sugeriste: agregue un delay de 50mS despues de la lectura de EEPROM y la variable STEPS la hice entera, total no necesito los valores decimales.

Estuve probando la rutina, quitando la siguiente porción de código:

if(DinReadFiltered(i))
               {
                  LedOn()
                  break    //Final de carrera?
               }

 y

if(EXT_DinReadFiltered(i))
               {
                  LedOn()
                  break//Final de carrera?
               }


O sea, no tuve en cuenta los finales de carrera, pero sólo posicioné los actuadores en posiciones intermedias, evitando llegar a los extremos asi no me pasaba del tope mecánico.

El programa anduvo perfecto, sin errores. Descarto que el ruido ingrese por los relays de interfase o por las entradas analógicas de los potenciómetros. Tampoco observo un bug en la programación.

Luego volví a agregar el mencionado código y el bug apareció enseguida. Trate de filtrar la entrada de los finales de carrera con un RC, pero esto solo empeoró la cuestión. Entonces llego a la conclusión de que el ruido ingresa por acá.

Los FC utilizados son los siguientes:

https://www.ifm.com/products/ar/ds/IF7100.htm

Inductivos, M12, cuerpo metálico.

Me preguntaba, es posible que al estar en contacto con el chasis de la maquina el ruido ingrese por alli? Sera mejor aislar estos componentes? Como son NA, hay una interfaz de transistores que los cambia a NC, cuestión de comodidad. Podrá ingresar por aqui el ruido?

Segun tengo entendido IFM es una marca "respetable" (?). No encontré ni un solo foro en que alguien se quejara de algo como ruido....ni una queja! jajaa

Otro opcion seria optoaislar las entradas? (No es que el PLC tiene su circuiteria interna asi?)

Gracias por tu ayuda Boris!
25
StxLadder - Slicetex Ladder Designer Studio / Re:error RTC
« Último mensaje por Soporte julio 07, 2017, 11:08:26 am »
Buenos dias,

No, lo que significa que la hora/fecha esta desconfigurada.

Si el programa depende de la hora o fecha para sus activida, entonces esta leyendo hora/fecha erroneos.

Debes conectar StxLadder y desde menú "PLC > Configurar PLC" entras a la pestaña "Fecha/Hora" y envías la hora/fecha actual.

Luego reseteas y el PLC tiene la hora/fecha actualizada. En este caso se apaga el led "RTC Error".

Entre las posibles causas, puede ser desconfiguración de RTC por batería baja, la cual puede reemplazarse.

Si no usas el RTC para fecha/hora en tu programa, entonces la causa es otra del porque te activa/desactiva los reles de estado solido.

Saludos
26
StxLadder - Slicetex Ladder Designer Studio / error RTC
« Último mensaje por sebeta julio 07, 2017, 08:36:34 am »
hola boris como va? te cuento que instale el PLC en el autoclave, pero despues de mucho tiempo recien lo puse en funcionamiento, y cuando lo active me tiraba ese error en el PLC error de RTC, y la pantalla HMI mandaba la señal a los reles de estado solido sin que yo haya iniciado el programa. Tengo que cargarle el programa devuelta?intenté resetear pero sigue en las mismas
27
STX8081 - Familia Power I/O Board / Re:Consulta por emails (nuevo firmware)
« Último mensaje por PabloGa julio 03, 2017, 16:07:00 pm »
Hola,

Si, efectivamente, estoy usando SMTPSIMPLE.

Enconces el cambio ocurrió con el último firmware, por el tema del spam. No tenía claro de dónde venía ese texto...

Muchas gracias,
Pablo.
28
STX8091 - Familia PLC Cube / Re:AYUDA: ruido eléctrico en entradas digitales?
« Último mensaje por Soporte junio 29, 2017, 16:40:44 pm »
Una forma optima de evitar que la EEPROM este ocupada con la escritura previa, seria haciendo uso de la función EepromBusy().

Ejemplo:

Código: (Pawn) [Seleccionar]
// ********************************************************************************
// Funcion     : EepromWriteCheck()
// Descripcion : Escribe en memoria EEPROM comprobando si esta ocupada previamente.
//
// ENTRADA     :
//
//    - Address = Direccion de variable en memoria EEPROM.
//    - Len = Cantidad de elementos a escribir.
//    - Data[] = Array con datos a escribir.
//
// SALIDA      :
//
//    - (  0   ) = Operacion exitosa.
//      ( <0   ) = Error de escritura.
//
// ********************************************************************************

EepromWriteCheck(Address, Len, Data[])
{
   // Esperar que memoria este lista para escribir.
   for(new i=0; i < 10; i++)
   {
      if(EepromBusy())
      {
         PauseMS(10)
      }
      else
      {
         break
      }
   }
   
   // Escribir Data[] a partir de la dirección Address de la EEPROM.
   return EepromWriteCells(Address, Len, Data)
}
29
STX8081 - Familia Power I/O Board / Re:Consulta por emails (nuevo firmware)
« Último mensaje por Soporte junio 29, 2017, 14:09:26 pm »
Buenos días Pablo,

¿Estas enviando con SMTP SIMPLE?.

En ese caso, se agregó para que el destinatario del mensaje sepa a donde responder en el caso que el cliente de e-mail (software) no detecte el "Reply-to", ya que en el "From" del mensaje se incluye una dirección propia del PLC cuando se envía por SMTP SIMPLE, para evitar así ser considerado SPAM por algunos servers y que pase todos los filtros.

Quedo a disposición.

Saludos
30
STX8091 - Familia PLC Cube / Re:AYUDA: ruido eléctrico en entradas digitales?
« Último mensaje por Soporte junio 29, 2017, 13:53:00 pm »
Buenos días Guillermo,

3-Tengo 3 fuentes de DC; vinculé todos los GND y los conecte al chasis y a la puesta a tierra del tablero.

Si la fuente con que alimentas los reles externos o entradas digitales, es diferente a la del PLC, no compartas la masa. Ya que no es utilizada entre ambos y esto mejora la aislación.

4-Los variadores tienen una conexión del chasis a GND, pero creo que es en AC. (Se entiende?) Es conveniente unir las tierras/masas AC y DC??

No, la masa de AC no debe compartirse con la de DC, ya que las perturbaciones en la linea de AC estaran disponibles en la linea de DC.

No logro dar con el problema de "ruido" y empiezo a pensar si no habrá un problema de formatos o "representación" numéricos en la comparación del valor analógico leído y el set point...

Si, me pone en duda, de si es un tema de soft o externo.

Algo a considerar es como guardas los datos en EEPROM, es conveniente que si llamas varias veces seguido a las funciones de escritura, entre cada llamado exista un pequeño delay, ya que la EEPROM suele ser más lenta que el Microporcesador para guardar un dato, por lo tanto mientras intentas guardas el siguiente dato con una llamada write, el dato anterior todavía esta en proceso de guardarse e interrumpa el proceso. Esto es muy rápido, pero puede ser una posibilidad, ya que esta en el orden de los mili-segundos.

Entonces, entre cada escritura podrías agregar un pequeño delay de seguridad:

DelayMS(50)
EepromWriteCells()
DelayMS(50)
EepromWriteCells()


Inicialmente se calibran los actuadores: se los hace recorrer a todos desde el final de carrera 0% hasta el final de carrera 100%, se toman los valores de potenciómetro "inicial" y "final", se restan y se dividen por 10, obteniéndose un valor de "escalón" para cada actuador.

....PORCIÓN RUTINA CALIBRADO....

for(new i=1;i<=5;i++) STEPS=Float:(POT_Fin-POT_Inicio)/10

         EepromWriteCells(52,6,STEPS)
         EepromWriteCells(76,6,POT_Inicio)

¿ Usas valores Float para guardar en EEPROM ? Entonces dos notas:

1)

Para guardar en EEPROM, podes guardar el float normalmente, por ejemplo:

Código: (Pawn) [Seleccionar]
EepromWriteCells(Address, Len, FloatValues[])
Para recuperar los valores floats:

Código: (Pawn) [Seleccionar]
EepromReadCells(Address, Len, ValuesTemp)
Y luego convertís a Float:

Código: (Pawn) [Seleccionar]
FloatValue[x] = Float: ValuesTemp[x]
2) Conviene usar constantes como direcciones para guardar en memoria EEPROM, ya que evita que luego te confundas con los números o que estés sobre-escribiendo alguna dirección.

Código: (Pawn) [Seleccionar]
#define EEPROM_STEPS_INDEX_ADDRESS       (52)
EepromWriteCells(EEPROM_STEPS_INDEX_ADDRESS,6,STEPS)

....PORCIÓN RUTINA CALIBRADO....

El usuario puede elegir entre estos 11 escalones (0 incluido!) mediante el HMI para determinar la posición del actuador. La siguiente linea de codigo calcula el setpoint

for(new i=1;i<=5;i++) SetPoint_Compuertas=FloatToInt(X[i+1]*STEPS) + POT_Inicio // + Offset!

El vector X contiene los numeros del 0 al 10.

Esta bien el indice X[i+1] ?. No deberia ser X ?. Solamente comento, ya que probablemente tenga que ver con otro código y sea correcto.

      
         if(POTENCIOMETRO<=SetPoint_Compuertas) OpenClose=0
         else OpenClose=1
      
         if(!OpenClose)
            {
            //Abrir
            while(POTENCIOMETRO<=SetPoint_Compuertas)
             {
               
               if(DinReadFiltered(i))
               {
                  LedOn()
                  break    //Final de carrera?
               }
               
               POTENCIOMETRO=VinRead(i+3)
               DelayMS(60)
               DoutSetOn(Salida)
             }
            DoutSetOff(Salida)
            }   
         else
            {
            //Cerrar
            while(POTENCIOMETRO>=SetPoint_Compuertas)
             {
               
               if(EXT_DinReadFiltered(i))
               {
                  LedOn()
                  break//Final de carrera?
               }
               
               POTENCIOMETRO=VinRead(i+3)
               DelayMS(60)
                Stx570_DoutSet(0, Salida)
               
             }
             Stx570_DoutClr(0, Salida)
         }
         

Otro posibilidad es que se induzca alguna tensión al momento de leer el canal analógico en el cable y te de una lectura falsa, invalidandote la lógica.
Esto suponiendo que en laboratorio te anduviera bien.

Un capacitor de 100 nF o mas, entre VIN y AGND, puede hacer mas lenta la entrada analógica respecto a cambios bruscos de tensión.

La conversión AD devuelve un SIGNED de 12 bits, que puede ser complemento a 0. El valor de Setpoint se almacena en una variable cell de 32bits. Y los datos de la EEPROM son de tipo cell, 32bits. Es posible que exista algun error de truncado, conversión, formato, y que esto lleve a una comparación errónea en el programa??

Si usas el rango 0 a 10V o 0 a 5V de las entradas, no hay complemento a dos en la conversión, ya que no lees valores de tensión negativos. Así mismo toda la lectura es en 12 bits, que cabe en los 32-bits. Pero si debes prestar atención si guardas en EEPROM tipo float, para recuperarlo correctamente como te expliqué.

Bueno, si ves que seguís sin dar con mejora, avísame y tengo reles des estado solido para que conectes en los actuadores, estos aíslan el PLC de los motores de CC.

Saludos
Páginas: 1 2 [3] 4 5 ... 10