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 - PabloS

Páginas: [1] 2
1
STX8081 / Re: Entrada Analógica
« : septiembre 09, 2014, 17:06:13 pm »
Buenisimo.

Yo ahora estoy usando el Ladder no por Script, pero quizas se pueda poner alguna opción en el BoardConfig, que sirva para ambos casos.




2
STX8081 / Re: Entrada Analógica
« : septiembre 09, 2014, 15:56:58 pm »
Hola Boris,

Todavía no consegui el datasheet pero ya hice la consulta al fabricante.

- Por lo que me dijeron la fuente es de 12V, con lo cual tengo un margen de 2V.
- De todas modos me propusieron trabajar con 250 Ohms, asi que voy a probar.
- Esta todo conectado a tierra ya que parte fue la solución para resolver otro problema de ruido donde se caia la expansión al cerrar algún contactor.
- La salida esta dedicada exclusivamente a eso.

Cuando tenga mas novedades las pongo en el post. Aprovecho para consultarte:

Tiene por defecto habilitado un Watchdog Timer? Se puede habilitar? No es la primera vez que el PLC se cuelga, dejando una bomba encendida que me hace rebalsar un tanque.

Gracias.

3
STX8081 / Entrada Analógica
« : agosto 27, 2014, 09:10:08 am »
Buenos días Boris,

Quería hacerte una consulta a ver si me podes orientar con un problema que tengo con la entrada analógica de datos.

Sobre la entrada AI1 y AGND tengo conectada una resistencia de 500Ω (2 de 1KΩ en parelelo), y a la vez un generador de señal de 4-20mA. De esta forma leo valores de entre 2 y 10V. Todo funciona bien hasta que conecto el borne GND de la plaqueta a tierra. En ese momento el generador de corriente produce un funcionamiento erróneo.

Estuve viendo y recordando un poco como son los generadores de señal de 4-20mA, y según como este planteado el circuito, el problema puede ser que al estar vinculados los bornes AGND y GND en la plaqueta, no esten ofreciendo una lectura correcta ya que el Loop no se cierra correctamente.

Por un problema de ruido necesito conectar la plaqueta a tierra, pero también me es útil leer ese valor. ¿Se te ocurre alguna solución? Creo que voy a tener que poner un circuito intermedio entre ambos equipos de modo de poder adaptar la señal antes que llegue al PLC.

Gracias,

Pablo

4
STX8081 / Re: Soluciones al Ruido eléctrico.
« : noviembre 07, 2013, 12:04:56 pm »
Ah y me olvidé de agregar las siguientes recomendaciones, que no tuve que implementar, ya que mi problema venía de otro lado:

Citar
Si es posible, conviene activar las DIN siempre conectando a masa.
Conectar tension a los bornes positivos y luego llevar a masa el borne negativo para producir el UNO.

Filtro de ruido que se le pueden poner a las entradas, serian capacitores de 100 nF o 4.7uF en paralelo al switch que conmuta.

Por otro lado, aprovechando que tengo trifásica, una fase la dejé dedicada a los elementos de control, mientras que las bombas (que no funcionan todas a la vez) las repartí en las otras dos fases.

5
STX8081 / Soluciones al Ruido eléctrico.
« : noviembre 06, 2013, 16:20:07 pm »
Bueno, aprovechando que este es un foro, no voy a preguntar nada sino que les voy a comentar cual fue mi problema y espero que puedan aprovecharlo al momento de montar el PLC en el tablero.

Cometí algunos erroes y no fue por no tener el conocimiento, pero desde que me recibí en el secundario, casi que no había hecho nada de electrónica. Y eso que hice la orientación de automatización y control!!!... Pero se me escaparon algunos detalles. Por falta de tiempo yo no monté el PLC sino que lo hizo personal de la fábrica donde trabajo y donde estoy por instalar el PLC, pero no tuvimos en cuenta algunos detalles que luego nos generarian problemas, siendo el mas grave, que el puerto de expnasión dejaba de funcionar.

Primer error
: Al momento de montar el PLC y el puerto de expansión, no tuvimos en cuenta, que quedó mucha distancia entre el PLC y la expansión. Lo cual me obliga a tener un cable de 40cm. Mirando de frente el tablero, creo que lo más óptimo, en el caso del STX8081, es poner la placa del PLC a la izquierda, con los relays hacia la izquierda y el puerto de expansión a la derecha, con los relay hacia abajo. De esta forma, el espacio que queda entre ambas placas va a estar casi libre de cableado (excpeto el cable de red y la fuente del PLC). Con lo cual, el cable plano no cruza sobre cableado que puede inducirle corrientes parásitas.

La etapa de potencia queda a criterio de cada uno. POr mi parte, utilice relay tipo Izumi o Aea, con bobinas de 24 Vac, ya que mucho de los componentes que manejo son electrónicos. Excepto 4 bombas, las cuales conmuto mediante contactores. Es decir que los Relay del PLC manejan una tensión "de control" de 24Vac. No me gusta mucho la idea de manejar directamente 220vac, pero repito, esto va a criterio y experiencia de cada uno.  Pero esto me llevó a cometer el Segundo error: Debido a que el PLC ya estaba mal puesto, y de la manera en que se ordenaron los componentes en el tablero, los cables de 24Vac se me cruzaron con los cables de señal de las entradas discretas. Al desconectar el contactor, y por el fenomeno de autoinducción, mis 24Vac se convertían en picos de 800V. Con lo cual podía ver un leve destello en todos los leds y el puerto serie dejaba de funcionar.

La solución para este problema, sin mover el PLC, fue implementar las sugerencias de Boris las cuales copio:

Citar
- Conectar a tierra la bornera GND del PLC (esto es importante).
- En paralelo a los contactos del relay, podes utilizar algun capacitor de 0.1µF/630V ceramico en serie con un resitor ( de 5 ohms  a 330ohms por ej). Esto disminuye el arco electrico.
- Tambien alejar los cables de potencia del PLC.
- Referir a tierra tambien todos los gabinetes y superficies metalicas cercanas.
 - En lo posible utilizar cables mallados, con la malla conectada a masa.

Desde ya que comencé por lo mas fácil. Verifique las tierras. Noté que la fuente switching para riel DIN de 12Vcc que utilizo para generar los 1 en las entradas discretas, tenía desconectada la masa. También conecté a tierra el borne GND del puerto de expansión.

Por último fui a la casa de electronica y compré los capacitores y una serie de resitencias. Empecé a probar con una resistencia de 220ohms y 100ohms. Pero no había caso. Colocandolo en paralelo al contacto de los relays que manejaban los contactores no funcionaba. En eso se me ocurrió colocar el capacitor de 0,1uF en serie con la resistencia de 220ohms, en parelelo a la bobina del contactor. Y ahí comencé a notar las mejoras. Hice varios test y los leds se dejaron de iluminar. Y además, el puerto funcionó sin caerse en ningun momento.

Después de detectar el problema y lidiar varios días, se puede decir que el problema esta resuelto.


Cualquier cosa que los pueda ayudar, estoy a su disposición.

Pablo.

6
Por ejemplo, ¿Algo asi?

Código: [Seleccionar]
EepromBufferAdd(ArrayEscritura,Count)
{
   if(EepromWriteCells(UltimaAdress(), Count, ArrayEscritura) == 0)
{
return 0;
}
else //Error al procesar el comando
{
return 1;
}
}

7
Hola Boris,

Entendí perfectamente lo del anillo, pero hice algunas modificaciones en base al ejemplo.

Dejo un ejemplo de cómo quedó conformado mi ejemplo de Datalogger. Funciona bien sólo, excepto que todavía no lo incorporé al programa principal.

A modo de ejemplo, estan las funciones, que cada uno despues tendrá que adaptar, cuales son los eventos que producirán la grabación y la desgrabación de datos.

En mi caso al iniciar el PLC leo la posición 0x00 donde tengo almacenada la ultima posicion disponible. De esta manera, ante una interrupción de energía, puede continuar grabando desde donde se había quedado. Otra cosa que hice, si se llena el espacio, comienza a borrar los datos mas viejos.

Una contra, al momento de leer la memoria para el recupero de datos, por ahora no hay nada que indique si esta llena o no. Con lo cual es necesario leer todas las posiciones. En la "primera vuelta" se puede leer de 0x00 a la última address, pero si ya estamos sobreescribiendo datos viejos, entonces hay que leer toda la memoria.
De todas maneras no es algo que demore mucho tiempo.


8
Hola Boris,

Siendo que mi duda puede ser de utilidad para muchos usuarios, te amplio un poco lo que te consultaba por mail. Cada X segundos tomo una muestra de VIN1 y un timestamp para crear un datalogger. El mismo tiene que funcionar como un sistema FIFO (Primero en entrar, Primero en Salir)

Lo primero que debo tener en cuenta, es reservar los primeros 4 bytes, para poder grabar un número entero con la última posición o address disponible. Estando la memoria vacía, se supone que la primera posición libre es la 4. Con lo cual, por única vez, puedo ejecutar un programa para grabar este valor, y evitar errores futuros.

Esto es un resumen de mi programa Ladder, aunque lo copio en Pawn para que sea mas facil de visualizar:
Código: [Seleccionar]
//En el evento Al inicio del programa puedo leer la última posición libre:
EepromReadCells(0, 4, gai_ValorRead)

//Y acá es donde tengo dudas de como armar el entero gi_UltimaDisponbile, en base al array gai_ValorRead. ¿Con desplazamiento de bits?
gi_UltimaDisponible =  

//Luego armo los valores que quiero grabar, y los escribo
gai_ValorWrite[0] = RtcGetTimestamp()
gai_ValorWrite[1] = Vin1Read()
EepromWriteCells(gi_UltimaDisponible, 2, gai_ValorWrite)

// Como cada entero ocupa 4 bytes, incremento la última posición disponible y la guardo,
// Siempre y cuando no me exceda de la capacidad de mi memoria. Si me excedo, arranco en la primera
// Posición para ir descartando los registros mas antiguos
// Después no hace falta volver a leerla porque la voy guardando en gi_UltimaDisponible

gi_UltimaDisponible = gi_UltimaDisponible + 8
if(gi_UltimaDisponible > EepromSize())
{
    gi_UltimaDisponible = 4
}
//Escribo la última disponible en la address 0
[b]EepromWriteCells[/b](0, 1, gi_UltimaDisponible)

Ahora, y a modo de ejemplo, ¿Cómo hago para recuperar los datos guardados, ya sea para mostrar en display o enviar por UDP, mail, etc?
Me encuentro con el mismo problema, que al leer los datos, del array tengo que armar un entero. Supongo que lo mejor es trabajar con datos empaquetados, pero no estoy familiarizado con los comandos.

Agradecería si me podes mostrar un ejemplo para realizar un datalogger.

Gracias,
Pablo.


9
StxLadder - Slicetex Ladder Designer Studio / Re: Envio datos UDP
« : octubre 20, 2013, 23:59:57 pm »
Gracias,

De todas formas lo del pueto UDP no es algo crítico. Simplemente lo puse para completar la sintaxis del comando.


10
StxLadder - Slicetex Ladder Designer Studio / Re: Envio datos UDP
« : octubre 19, 2013, 11:03:47 am »
Boris,

Solucione el problema dejando el puerto fijo, evidentemente no recupera bien el puerto.

Gracias,

Pablo.


11
StxLadder - Slicetex Ladder Designer Studio / Re: Envio datos UDP
« : octubre 17, 2013, 20:54:59 pm »
Gracias, mañana pruebo desde el trabajo.

El componente Ladder UdpSend, puede recibir como configuración del puerto una variable, pero la ip hay que establecerla con un valor fijo. Con lo cual el PLC siempre enviaría los paquetes a una misma ip. Como alternativa se puede hacer mediante Pawn como lo estoy haciendo yo, pero quizas se podría asociar la ip de destino a un array. De esta forma se puede grabar la IP en un array con UdpRxGetAddr y enviar los paquetes a esa misma IP sin necesidad de fijar un valor en el programa del PLC.



12
StxLadder - Slicetex Ladder Designer Studio / Envio datos UDP
« : octubre 17, 2013, 19:27:22 pm »
Hola Boris,

Te quería comentar lo que me sucede, al manejar datos por UDP. Como la PC cliente que ejecuta la interfaz en C#, no siempre tiene la misma IP, en el evento OnUdpRx, guardo la IP en un array. De esta forma puede responder a una ip que no siempre es fija.

Código: [Seleccionar]
UdpRxGetAddr(gai_IpPC[0], gai_IpPC[1], gai_IpPC[2], gai_IpPC[3],gi_PuertoPC)
De acuerdo al dato que recibo, tengo que enviar datos de vuelta y siempre lo hago dentro del evento OnUdpRx, por ejemplo:

Código: [Seleccionar]
UdpSend(gai_IpPC[0], gai_IpPC[1], gai_IpPC[2], gai_IpPC[3], gi_PuertoPC, 4, gai_PaqueteTx, false)
El problema que esta línea de código, no envía el paquete, o al menos no lo recibo ni en mi interfaz ni en el programa de ejemplo del SDK ¿Puedo estar olvidandome de algo?

También me surgieron dos ideas. La primera incluir un componente Ladder para la función UdpRxGetAddr. La segunda que el evento UdpSend, soporte un array como metodo de configuración de la IP (como si se puede asignar una variable al puerto).


Gracias,

Pablo.

13
Gracias.
Ya estoy bajando la nueva versión.


14
Hola Boris,

Una consulta, para cuando una línea en Pawn es muy larga, hay alguna manera de generar una salto de línea como existe el &_ para visual?

Código: [Seleccionar]
if(SmtpSend("mi@correo.com.ar", "avisos@correo.com.ar", "Email automatico", "Este es un correo automático que muestra el estado de las primeras cuatro entradas discretas\n DIN1: %d\n, DIN2: %d\n, DIN3: %d\n DIN4: %d, pBoolRead(gb_DIN1),pBoolRead(gb_DIN2),pBoolRead(gb_DIN3),pBoolRead(gb_DIN4)) < 0) CurrentFlow = 0

Estaría bueno que se pueda escribir algo asi, para que sea mas facil de leer:

Código: [Seleccionar]
if(SmtpSend("mi@correo.com.ar", "avisos@correo.com.ar", "Email automatico", (concatenador)
"Este es un correo automático que muestra el estado de las primeras cuatro entradas discretas\n" (concatenador)
"DIN1: %d\n, DIN2: %d\n, DIN3: %d\n DIN4: %d, pBoolRead(gb_DIN1),pBoolRead(gb_DIN2), (concatenador)
pBoolRead(gb_DIN3),pBoolRead(gb_DIN4)) < 0) CurrentFlow = 0

Gracias,

Pablo

15
Es justo lo que necesitaba.

Y tanto la primera como la segunda opción me sirven. Ya que estoy tratando de armar un HMI en C#, y con cualquiera de los 2 ejemplos puedo transmitir, de una sola vez, el estado actual de relay o entradas.

Otra vez gracias por la buena predisposición.

Páginas: [1] 2