Mensajes recientes

Páginas: 1 ... 4 5 [6] 7 8 ... 10
51
STX8091 / Re:Comunicación al PLC mediante UDP
« Último mensaje por Pedro1 marzo 28, 2019, 10:34:24 am »
Hola Boris,

Ya pude recibir datos en el PLC! Dado que funcionó la comunicación UDP, mas adelante intentaré probar con TCP. Cualquier duda que me surja te escribo nuevamente.

Te agradezco mucho por la rápida respuesta!

Saludos!
52
Kinco / Re:Cambiar de pantalla automáticamente desde el PLC
« Último mensaje por foliva26 marzo 28, 2019, 07:51:29 am »
Como estás, buen día...

Primero quiero agradecerte por la ayuda que nos dió el soporte sobre las dudas que hemos estado teniendo, entorno a la programación de las pantallas Kinco con el plc de la marca.

Por otro lado nos surje otro problema, dentro del programa que estamos realizando, existen estados de alarma del sistema a controlar. Necesitamos que ante una alarma emerja una pantalla de alarma, en forma automática, sin importar la pantalla que en ese momento este activa en la HMI.

Y no sabemos como hacerlo...Nos podrían dar algún ejemplo de como hacerlo?

Desde ya gracias.

Saludos.
53
STX8091 / Re:Controlador infrarrojo
« Último mensaje por Soporte marzo 27, 2019, 20:15:59 pm »
Buenas tardes Esteban,

Tengo mis dudas sobre la dificultad que tengas y si al final llegarás a buen puerto.

En principio necesitás saber los códigos de control para la transmisión y recepción de datos.
El formato del paquete de datos y que significa cada bit.

Luego para entrar los datos al PLC, calculo que podrías hacerlo por el puerto serie. Pero como esos módulos deben tener nivel de voltaje TTL o 0 a 5V, necesitarías un conversor de tensión de TTL a RS232.

Si no tenés en claro cual es el código de transmisión/recepción, la forma de salida del módulo IR, es complicado saber si podrás leerlo con el puerto serie para configurarlo a la velocidad/formato correcto y no perder bits de datos.

Lo mismo para la transmisión, el puerto serie añade algunos bits extras, esto al final, puede generar un formato erróneo para el A/C.

Saludos!
54
STX8091 / Re:Comunicación al PLC mediante UDP
« Último mensaje por Soporte marzo 27, 2019, 19:48:55 pm »
Al no recibir nada desde el PLC, decidí utilizar un programita muy simple (packet sender) en el que mando los mismos datos y me encuentro con que el mismo PLC responde inmediatamente con datos que no se interpretar. Te adjunto la imagen de esto (por ahí reconoces que tipo de error estoy teniendo o que tipo de mensaje es) y también te muestro a continuación el código utilizado para recibir los datos (tomado de la nota de aplicación AN001).

Buenas tardes,

Parece correcta la repuesta del PLC que recibís, al menos coherente haciendo un análisis rápido. Responde que el comando que enviaste es el "6" y no hay datos de retorno (output size = 0). El protocolo con su versión "2" coincide.



Intentá cargar el siguiente programa al PLC:

Código: (Pawn) [Seleccionar]
PlcMain()
{
   // Vaciar Rx Buffer (Optional, recomendado como buena practica).
   UdpRxBufFlush()

   // Activar el evento para recibir datos UDP.
   UdpRxSetEvent()

   // Ciclo principal del programa.
   while(1)
   {
      // Conmutar led debug cada 250 mS.
      DelayMS(250)
      LedToggle()
   }
}

@OnUdpRx()
{
   // Obtener dirección IP remota y Puerto de los datos recibidos.
   // Nota: solo para fines didacticos.
   UdpRxGetAddr(RxIP[0], RxIP[1], RxIP[2], RxIP[3], RxPort)

   // Leer 6 bytes del buffer de recepcion.
   UdpRxDataRead(RxData, 0, 6, false)

   // Comprobar valor de primer byte recibido y activar/desactivar RELAY1/DOUT1.
   if(RxData[0] == 1)
      DoutSetOn(DOUT1)
   if(RxData[0] == 0)
      DoutSetOff(DOUT1)

   // Comprobar valor del segundo byte recibido y activar/desactivar RELAY2/DOUT2.
   if(RxData[1] == 1)
      DoutSetOn(DOUT2)
   if(RxData[1] == 0)
      DoutSetOff(DOUT2)

   // Comprobar valor del tercer byte recibido y activar/desactivar RELAY3/DOUT3.
   if(RxData[2] == 1)
      DoutSetOn(DOUT3)
   if(RxData[2] == 0)
      DoutSetOff(DOUT3)
}

Y desde MatLab enviar lo siguiente para activar las salidas DOUT1 a DOUT3:

Código: (MatLab) [Seleccionar]
%    Data[0] = 0           // LSB
%    Data[1] = 0
%    Data[2] = 0
%    Data[3] = 0           // MSB
%    Data[4] = 2           // Proto version
%    Data[5] = 0xFA      // type
%    Data[6] = 7           // Argument size 1 byte + 6 bytes
%    Data[7] = 0
%    Data[8] = 6           // Código de comando (UdpRx())
%    Data[9] = 6           // Argument size Cmd UdpRx Arg. Size (6 bytes)
%    // Set data values.
%    Data[9+1] = 1       // Value 1
%    Data[9+2] = 1       // Value 2
%    Data[9+3] = 1       // Value 3
%    Data[9+4] = 1       // Value 4
%    Data[9+5] = 1       // Value 5
%    Data[9+6] = 1       // Value 6

Fíjate si en MatLab, el número 0xFA se define así en hexadecimal, sino convertilo a decimal (250).

La librería STX8XXX.DLL tiene algunos mecanismos para insistir cuando el PLC no responde, ya sea por error de red, u otros inconvenientes del protocolo UDP. Pero algo debería detectar el PLC.

¿Otros protocolos como ModBus TCP o TCP, soporta MatLab?.

Saludos!
55
STX8091 / Controlador infrarrojo
« Último mensaje por Esteban E marzo 27, 2019, 19:13:25 pm »
Buenas tarde Ing. Boris: estoy necesitando controlar un aire acondicionado y solo puedo hacerlo por medio del control remoto. Y quería realizarlo mediante el plc.  Para eso quería hacerlo por medio del siguiente modulador.

https://s.click.aliexpress.com/e/5SoB3xw

La idea es tener un tramitador y un receptor para descifrar el código.


Se podrá lograr ? El plc del aire acondicionado esta a 30 metros aproximadamente.


Saludos

Esteban
56
STX8091 / Comunicación al PLC mediante UDP
« Último mensaje por Pedro1 marzo 27, 2019, 16:24:13 pm »
Hola Boris,

Estoy buscando comunicar mi PLC STX8091 con el programa MATLAB mediante el protocolo UDP. Desde el PLC puedo transmitir datos al programa sin ningún problema. A la hora de hacer la recepción de datos desde el PLC tengo ciertos inconvenientes. Revisando el foro, me encontré con que existe el protocolo CSP en el cual es necesario definir ciertos parámetros previos antes de enviar los datos. Desde el MATLAB envié un array de datos como lo indicaste en otra respuesta:
Código: [Seleccionar]
%    Data[0] = 0      // LSB
%    Data[1] = 0
%    Data[2] = 0
%    Data[3] = 0      // MSB
%    Data[4] = 2      // Proto version
%    Data[5] = 0xFA // type
%    Data[6] = 3      // Argument size 1 byte + 2 bytes
%    Data[7] = 0
%    Data[8] = 6    // Código de comando (UdpRx())
%    Data[9] = 2  // Argument size Cmd UdpRx Arg. Size (2 bytes)
%    // Set data values.
%    Data[9+1] = 1       // Value 1
%    Data[9+2] = 55     // Value 2


Al no recibir nada desde el PLC, decidí utilizar un programita muy simple (packet sender) en el que mando los mismos datos y me encuentro con que el mismo PLC responde inmediatamente con datos que no se interpretar. Te adjunto la imagen de esto (por ahí reconoces que tipo de error estoy teniendo o que tipo de mensaje es) y también te muestro a continuación el código utilizado para recibir los datos (tomado de la nota de aplicación AN001).

Código: [Seleccionar]
// Crear array de 4 celdas para almacenar una dirección IP.
 new RxIP[4]
 // Crear variable para almacenar un valor de puerto UDP.
 new RxPort
 // Crear array de 2 celdas para almacenar los datos recibidos.
 new RxData[2]
PlcMain()
{

   // Inicializar rutinas Virtual-HMI.
   VirtualHmiInit()

 // Comprobar si el buffer tiene nuevos datos sin leer.
 if(UdpRxBufIsEmpty() == 0)
 {
   // Leer 6 bytes del array y almacenarlos en RxData[].
   UdpRxDataRead(RxData, 0, 2, false)
   // Imprimir solo los 3 primeros bytes almacenados.
   nLcdPrintf(0,0,0,"Rx %03d %03d %03d ", RxData[0], RxData[1])
   LedToggle()
   DoutToggle(DOUT1)
 }

      DelayMS(500)
     
}

Desde ya, muchas gracias!

Saludos.
57
STX8091 / Re:Consulta modo PLC y soft en C#
« Último mensaje por Soporte marzo 26, 2019, 20:57:09 pm »
Ok Boris,

Teniendo un dispositivo en modo PLC (STX8091-d2)... un programa en c# en una pc de que forma puede acceder al valor de una entrada analógica (supongamos voltaje), y de una entrada digital?...

He intentado leer directamente el valor mediante las sentencias

Código: [Seleccionar]
// Establecer rango de 0-10V para canal VIN1 (llamar una sola vez para configurar).
PioBoard.Cmd.Vin.SetRange(VinCh.Vin1,
VinVoltRange.Unipolar_10V);
// Variable donde se almacenara el voltage de la entrada analogica.
float Voltage;
// Leer entrada analogica Vin1 y almacenar resultado en "Voltage".
PioBoard.Cmd.Vin.ReadVoltage(VinCh.Vin1, out Voltage);
textBox1.Text = Convert.ToString(Voltage);

Esas funciones que utilizás pertenecen al modo DAQ, como lo dicho anteriormente, son para otro modo diferente al modo PLC.

La nota de aplicación AN001 explica como transmitir/recibir datos por UDP desde el PLC.

También el ejemplo para leer memoria EEPROM que te había pasado puede usarse como base para obtener datos del PLC, y luego convertir esos datos a valores de variables.

El ejemplo 2 de la nota de aplicación AN001 te muestra de forma simple como recibir la cadena "Hola!" en C# desde el PLC.

Partiendo del ejemplo mencionado como referencia, en el PLC se transmite:

Código: (Pawn) [Seleccionar]
   Data[0] = 'H'
   Data[1] = 'o'
   Data[2] = 'l'
   Data[3] = 'a'
   Data[4] = '!'

Si eso lo cambiás por valores, por ejemplo, transmitir un entero de 32-bits, en 4 bytes:

Código: (Pawn) [Seleccionar]
   new Entero=335435

   Data[0] = Entero & 0xFF
   Data[1] = (Entero >> 8) & 0xFF
   Data[2] = (Entero >> 16) & 0xFF
   Data[3] = (Entero >> 24) & 0xFF

Al recibirlos en la computadora (ver ejemplo 2 de AN001), en C# podes decodificarlo luego con:

Código: (C#) [Seleccionar]
Int32 ValueInteger = BitConverter.ToInt32(Packet, 0);
Y al imprimir 'ValueInteger', deberías ver el valor transmitido "335435".

Si es un float, el procedimiento es similar, ya que son 32-bits o 4-bytes también:

Código: (Pawn) [Seleccionar]
   new Float: Value=18.54

   Data[0] = Value & 0xFF
   Data[1] = (Value >> 8) & 0xFF
   Data[2] = (Value >> 16) & 0xFF
   Data[3] = (Value >> 24) & 0xFF

Al recibirlos, en C# podes decodificarlo luego con:

Código: (C#) [Seleccionar]
float Value = BitConverter.ToSingle(Packet, 0);
Y al imprimir 'Value', deberías ver el valor transmitido "18.54".

Te recomiendo ver el código del ejemplo para leer memoria EEPROM, allí desde C#, decodifica datos recibidos desde el PLC en variables float, int, etc.

Saludos!

PD: UDP se recomienda como protocolo para aplicaciones en que los dispositivos están en la misma red Ethernet física.
58
STX8091 / Re:Consulta modo PLC y soft en C#
« Último mensaje por Soporte marzo 26, 2019, 20:32:16 pm »
Cuales serían las funciones que si soporta el modo PLC...

Quiero comentarte que los programas de prueba de la nota de ap 001 funcionan ambos...

Las funciones del manual en modo DAQ, son para el modo DAQ, no van a funcionar en modo PLC.

Las que funcionan en ambos, son aquellas informativas, como por ejemplo leer el número de serie, o comandos genéricos, como resetear el dispositivo, etc. Pero no creo que las estés utilizando.
59
STX8091 / Re:Consulta modo PLC y soft en C#
« Último mensaje por Mariano marzo 26, 2019, 13:40:19 pm »
Algunas funciones que no son especificas al modo DAQ, si funcionan en ambos modos.

Cuales serían las funciones que si soporta el modo PLC...

Quiero comentarte que los programas de prueba de la nota de ap 001 funcionan ambos...

Saludos
60
STX8091 / Re:Consulta modo PLC y soft en C#
« Último mensaje por Mariano marzo 26, 2019, 13:38:00 pm »
Ok Boris,

Teniendo un dispositivo en modo PLC (STX8091-d2)... un programa en c# en una pc de que forma puede acceder al valor de una entrada analógica (supongamos voltaje), y de una entrada digital?...

He intentado leer directamente el valor mediante las sentencias

Código: [Seleccionar]
// Establecer rango de 0-10V para canal VIN1 (llamar una sola vez para configurar).
PioBoard.Cmd.Vin.SetRange(VinCh.Vin1,
VinVoltRange.Unipolar_10V);
// Variable donde se almacenara el voltage de la entrada analogica.
float Voltage;
// Leer entrada analogica Vin1 y almacenar resultado en "Voltage".
PioBoard.Cmd.Vin.ReadVoltage(VinCh.Vin1, out Voltage);
textBox1.Text = Convert.ToString(Voltage);


Agregando un cuadro de texto para mostrar dicho valor analógico al programa prueba2 que escucha un array de caracteres desde el PLC (La comunicación se produce correctamente en el programa original)....

Cuando lo ejecuto en el cuadro de texto me muestra la cadena "NeuN" en lugar del voltaje aplicado en la entrada..

Si no se puede directamente de esta forma que debería hacer para poder enviar los valores float? Podría guardarlos en una variable dentro del programa pawn y transmitir dicha variable?

Si es posible por favor enviame unas líneas de código para probar o señalame que documentación debería leer...

Saludos
Páginas: 1 ... 4 5 [6] 7 8 ... 10