Mensajes recientes

Páginas: [1] 2 3 ... 10
1
STX8091 / Re:Muestrear dos señales al mismo tiempo
« Último mensaje por Soporte diciembre 03, 2019, 21:39:49 pm »
Buen día,  el tiempo de muestreo lo tengo en 630us que me dan 4 ciclos de una señal de 50Hz, los valores rms funcionan bien con eso no tengo problema pero hice lo que me decías y sigue siendo errático el valor, cómo que se mantiene estable un tiempo y después empieza nuevamente a mandar cualquier valor... Cree dos Buffer de 10 paquetes para ir guardando en uno mientras el otro hace el calculo con sus contadores pero  sigue igual...  Podrá ser que se pierdan tramas UDP y ahí se pierde el sincronismo? O que la trama invierta l orden de los paquetes cuando envía varios del mismo canal? Porque no le encuentro otra explicación... o si hay otra forma de calcular el desfadaje a través de las entradas digitales metiendo medio ciclo pasando las señales por un Smith Trigger? Se me ocurre si puedo medir el tiempo entre ambas y no por medio algebraico

Buenas, estuve haciendo unas pruebas, por ejemplo, en 200 mil muestras, hay un pequeño defasaje o corrimiento de 2 a 4 muestras entre dos canales y puede ser que a la larga, eso sea más pronunciado. Lo que hice fue conectar una senoidal (con la salida analógica 0-10V) a dos canales VIN al mismo tiempo y loguear las muestras de cada canal en dos archivos diferentes. Luego ver si el valor del número de muestra X en canal A, coincide con el número de muestra X en el canal B.

Te paso el log:

http://www.slicetex.com/temp/samples.zip

En el archivo A y B, están la muestras con el formato [número de muestra,valor].

Creo que lo que podés hacer más efectivo, para evitar la red, es calcular el RMS y factor de potencia en modo PLC, utilizando el sampler para llenar los arrays. Activando el sampler para muestrear y hacer el calculo, y luego desactivar. Luego activar y calcular de nuevo, para evitar un posible desincronismo en operación prolongada. Total, supongo que el coseno necesitás tenerlo actualizado casa cierto tiempo.

Luego pódes enviar el dato ya calculado a Visual C# desde el PLC.

No sé si este enfoque te sirve.



Por metódo digital, se puede medir el ancho de un pulso o frecuencia utilizando los contadores rápidos, pero no la diferencia de tiempo entre dos pulsos, al menos no hay funciones disponibles desarrolladas.

Saludos!
2
STX8091 / Re:Muestrear dos señales al mismo tiempo
« Último mensaje por SebaRiera diciembre 03, 2019, 12:05:18 pm »
Buen día,  el tiempo de muestreo lo tengo en 630us que me dan 4 ciclos de una señal de 50Hz, los valores rms funcionan bien con eso no tengo problema pero hice lo que me decías y sigue siendo errático el valor, cómo que se mantiene estable un tiempo y después empieza nuevamente a mandar cualquier valor... Cree dos Buffer de 10 paquetes para ir guardando en uno mientras el otro hace el calculo con sus contadores pero  sigue igual...  Podrá ser que se pierdan tramas UDP y ahí se pierde el sincronismo? O que la trama invierta l orden de los paquetes cuando envía varios del mismo canal? Porque no le encuentro otra explicación... o si hay otra forma de calcular el desfadaje a través de las entradas digitales metiendo medio ciclo pasando las señales por un Smith Trigger? Se me ocurre si puedo medir el tiempo entre ambas y no por medio algebraico
3
STX8091 / Re:Muestrear dos señales al mismo tiempo
« Último mensaje por Soporte diciembre 02, 2019, 21:09:15 pm »
Hola gracias por responder, lo hice así y funciona me muestra las señales en el programa que estoy diseñando pero cuando calcula el coseno me da cualquier valor porque las señales cambian el desfadaje como si no se muestrearan al mismo tiempo , en un momento largan la fase adecuada que debería tener como la veo en el osciloscopio y en otro las cambia y el cálculo del coseno tambien....

Buenas tardes.

El dispositivo muestrea ambos canales al mismo tiempo (con una diferencia mínima entre muestras equivalentes), espera que se llene un buffer de 127 muestras de un canal y las envía en un paquete de 127 bytes por ethernet en periodos constantes, mientras continua con el muestreo.

Lo que puede pasar es que al momento de enviar, el canal 1 haya completado su muestreo, mientras el canal 2 no, entonces, envía un paquete del canal 1, y en la siguiente transmisión ambos canales pueden haber completado el muestreo, por lo que envía los paquetes del canal 1 y 2, o envia dos paquetes de muestras seguidas del canal 2, y luego un paquete del canal 1.

Es decir, el orden de llegada de paquetes de un mismo canal es secuencial y consecutivo, pero en dos canales diferentes no quiere decir que los paquetes lleguen 1 a 1 sincronizados al mismo tiempo.

Por lo tanto, de la forma que calculas el coseno, desde los eventos de llegadas, puede que estés comparando muestras en diferentes tiempos.

Lo que deberías hacer, es crear por ejemplo un array que permita almacenar una X cantidad de paquetes de ambos canales.

Por ejemplo:

Array_Canal_1[127 * X]
Array_Canal_2[127 * X]


Donde X es por ejemplo un número mayor o igual a 10 (jugar con este valor, es para almacenar varios paquetes seguidos).

Entonces, cada vez que almacenás un paquete de un canal, incrementás un contador:

Paquetes_Canal_1++

o

Paquetes_Canal_2++


Cuando ambos contadores de paquetes, llegan a 10, realizas el cálculo.

Deberías contemplar también, que una vez que llegan los contadores a 10, los paquetes que sigan llegando, se almacenen en otro buffer, para el siguiente calculo cuando lleguen nuevamente a 10, y así sucesivamente. Podés utilizar un array bidimensional, para mayor prolijidad:

Array_Canal_1[2][127 * X]

Cuando se llena el array Array_Canal_1[0][127 * X], seguis almacenando en el array Array_Canal_1[1][127 * X], y luego volvés a reutilizar el primer array.


La única parte que depende de las muestras de ambas señales es:

Código: (C#) [Seleccionar]
mainForm.Wi = mainForm.Wi + mainForm.V[i] * mainForm.I[i];
Ya que si solo necesitás obtener el TRUE RMS de ambos canales, y no valores instantáneos, no hace falta ir almacenando en arrays, sino simplemente ir sumando cuadrados.




Por otro lado, veo que utilizás la formula de Valor TRUE RMS, si mal no recuerdo para que el valor sea válido, debés muestrear varios ciclos de la señal (por ejemplo 5 o más) para recién realizar el calculo de valor eficaz, así el calculo es más preciso, ya que se promedian sumatorias de cuadrados. Si en las 127 muestras que tomás, entran varios ciclos de la señal periódica, entonces es correcto, pero conviene dar un margen.

En este post, hay algunos comentarios del valor TRUE RMS que pueden ser de utilidad:

http://foro.slicetex.com/index.php?topic=329.msg1775#msg1775

Si no se me pasa nada por alto, estas serian las consideraciones.

Saludos!



4
STX8091 / Re:Muestrear dos señales al mismo tiempo
« Último mensaje por SebaRiera diciembre 02, 2019, 12:17:59 pm »
Código: (C#) [Seleccionar]
if (ID == UdpStreamPacketIDs.VIN1)
                {
                    mainForm.Ief = 0;
                    for (int i = 0; i < 127; i++)
                    {
                    Corriente = pioBoard.Cmd.Vin.BinToVoltage(VinCh.Vin1, Packet.Data[i], 8);
                    Corriente = (float)Math.Round(Corriente, 3);
                    mainForm.I[i] = Corriente;
                    mainForm.Ief = mainForm.Ief + mainForm.I[i] * mainForm.I[i];
                    }
                }


if (ID == UdpStreamPacketIDs.VIN2)
                {
                    bandera_a = 1;
                    mainForm.Wi = 0;
                    mainForm.Vef = 0;
                    for (int i = 0; i < 127; i++)
                    {
                    Voltage = pioBoard.Cmd.Vin.BinToVoltage(VinCh.Vin2, Packet.Data[i], 8);
                    Voltage = (float)Math.Round(Voltage, 3);
                    mainForm.V[i] = Voltage;
                    mainForm.Vef = mainForm.Vef + mainForm.V[i] * mainForm.V[i];
                    mainForm.Wi = mainForm.Wi + mainForm.V[i] * mainForm.I[i];
                    }
                }


 mainForm.Wi = mainForm.Wi / 127;
                    mainForm.vef = Math.Sqrt((double)mainForm.Vef / 127);
                    mainForm.ief = Math.Sqrt((double)mainForm.Ief / 127);
                    mainForm.res = mainForm.vef / mainForm.ief;
                    mainForm.Wi = mainForm.Wi / (mainForm.vef * mainForm.ief); //ESTE ES EL VALOR DEL COSENO
               
                if (bandera_a == 1) // ESTE IF ES PORQUE SI NO ME GUARDA LOS VALORES DE VEF Y WI CON CERO
                {
                    mainForm.vef = Math.Round(mainForm.vef, 3);
                    mainForm.ief = Math.Round(mainForm.ief, 3);
                    mainForm.res = Math.Round(mainForm.res, 3);
                    mainForm.Wi = Math.Round(mainForm.Wi, 3);
                    samplesFile.Write(mainForm.ranura.ToString());
                    samplesFile.Write(";");                 
                    samplesFile.Write(mainForm.vef.ToString());
                    samplesFile.Write(";");
                    samplesFile.Write(mainForm.ief.ToString());
                    samplesFile.Write(";");
                    samplesFile.Write(mainForm.res.ToString());
                    samplesFile.Write(";");
                    samplesFile.Write(mainForm.Wi.ToString());
                    samplesFile.WriteLine(";");
                    samplesFile.Flush();
                    bandera_a = 0;
                }
5
STX8091 / Re:Muestrear dos señales al mismo tiempo
« Último mensaje por SebaRiera diciembre 02, 2019, 12:02:49 pm »
Hola gracias por responder, lo hice así y funciona me muestra las señales en el programa que estoy diseñando pero cuando calcula el coseno me da cualquier valor porque las señales cambian el desfadaje como si no se muestrearan al mismo tiempo , en un momento largan la fase adecuada que debería tener como la veo en el osciloscopio y en otro las cambia y el cálculo del coseno tambien....
En cuanto esté en la PC te mando parte del código para que lo veas...
6
Kinco / Re:comunicacion modbus tcp server con plc slicetex 8092
« Último mensaje por Soporte diciembre 02, 2019, 11:28:02 am »
Buenos días,

Hice varias funciones de comunicacion para poder enviar todos los bits. En cada una de estas funciones deberia inicializar la comunicacion Modbus tcp server? o solo inicializo una vez en la funcion de inicio? el hmi y el plc estarian interactuando todo el tiempo...me imagino que con inicializar una sola vez bastaria.

Como el PLC es esclavo, y el HMI es maestro, solo hace falta inicializar una sola vez el servidor ModBus TCP. Hacerlo en el diagrama Inicio.sld es la opción recomendada. Una vez que se inicializa, el PLC acepta conexiones desde el HMI normalmente.

Ejemplo:

http://slicetex.com/hmi/kinco/files/examples/ModBusTcpHmiKinco.zip



Para poder leer/escribir los bits, tengo que hacer un get y un load en la misma direccion? con el load escribo al hmi y con el get tomo un valor del hmi para guardarlo en el plc no es asi?

Claro, el PLC tiene una copia en memoria RAM de los registros y bits que el HMI constantemente accede a través de ModBus, ya sea para leerlos o escribirlos. El PLC no inicia comunicación con el HMI, porque es esclavo. Es el HMI que constantemente inicia comunicación para leer/escribir datos al PLC (utilizando su dirección IP).

Lo que hacés con el PLC, es leer/escribir esa memoria RAM que el HMI accede en forma de registros o bits.

Por lo tanto en el PLC, con GET, lees un registro o bit. Con LOAD, cargás un bit o registro (que luego el HMI puede leer).

Las direcciones de escritura/lectura en el PLC y el HMI son equivalentes.

Si el PLC escribe un bit en dirección 4002, el HMI puede leer dicho bit en la dirección 4002 al comunicarse vía ModBus TCP.

Espero que se entienda.

Saludos!
7
Kinco / comunicacion modbus tcp server con plc slicetex 8092
« Último mensaje por fkejner diciembre 02, 2019, 09:15:31 am »
Buenos dias, necesitaria hacer unas consultas.

Tengo un PLC stx8092 y un HMI Kinco MT4434TE.

Necesito interactuar con unos 40 bits y dos valores enteros para modificar dos timers del plc.

Hice varias funciones de comunicacion para poder enviar todos los bits. En cada una de estas funciones deberia inicializar la comunicacion Modbus tcp server? o solo inicializo una vez en la funcion de inicio? el hmi y el plc estarian interactuando todo el tiempo...me imagino que con inicializar una sola vez bastaria.

Para poder leer/escribir los bits, tengo que hacer un get y un load en la misma direccion? con el load escribo al hmi y con el get tomo un valor del hmi para guardarlo en el plc no es asi?

muchas gracias


8
STX8091 / Re:Muestrear dos señales al mismo tiempo
« Último mensaje por Soporte noviembre 29, 2019, 18:22:39 pm »
cuando aplicó la instrucción del ejemplo del PDF para muestrear a la vez no gráfica nada y la siguiente instrucción me larga una advertencia como que es obsoleta:
PioBoard.cmd.vin.sampler12start(Vinsampler12ch.vin1and2,tm)

Buenas tardes,

Si, esa función está obsoleta, se utiliza "SampleAStart", puede haber un error en el PDF.

De manual:

Código: (C#) [Seleccionar]
// Para adquirir los canales Vin1 y Vin2 al mismo tiempo, utilice:
PioBoard.Cmd.Vin.SamplerAStart(VinSamplerACh.Vin1 | VinSamplerACh.Vin2, 400);

¿Qué ejemplo estás cargando, para darme una idea?.

Te adjunto en archivo .ZIP (abajo) un ejemplo para muestrear canal VIN4 y VIN5, y guardar las muestras en un archivo TXT.
Te puede servir de referencia.

Lo ejecutás, y te va a muestrear ambos canales, guardando cada muestra en el archivo "vin.txt".

Saludos!


9
STX8091 / Muestrear dos señales al mismo tiempo
« Último mensaje por SebaRiera noviembre 29, 2019, 08:54:09 am »
Buenos días , estoy utilizando el PLC en modo DAQ y necesito muestrear dos señales al mismo tiempo para calcular el coseno. Cuando muestreo individualmente cada entrada las gráfica bien en Visual pero cuando aplicó la instrucción del ejemplo del PDF para muestrear a la vez no gráfica nada y la siguiente instrucción me larga una advertencia como que es obsoleta:
PioBoard.cmd.vin.sampler12start(Vinsampler12ch.vin1and2,tm)

 Espero me puedan ayudar, saludos!
10
STX8091 / Re:Falla con servicio de mails
« Último mensaje por Soporte noviembre 14, 2019, 17:45:30 pm »
Buenas tardes.

Corregida la falla, ahora retorna correctamente el valor al enviar exitosamente el correo.

Para ello actualizar firmware a versión 225:

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

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