Uso de aplicación PLC UDP Receiver

  • 12 Respuestas
  • 546 Vistas

InduxSA

  • Aprendiz
  • **
  • Mensajes: 23
Uso de aplicación PLC UDP Receiver
« : julio 19, 2016, 13:47:21 pm »
Hola Boris

He leído la nota de aplicación STX-AN001  pero no me queda claro como usar la aplicación PLC UDP Receiver

Lo que quiero es enviar el valor de algunas variables cuando sea introducida una nueva clave en mi programa

cada que leo un nuevo valor en esta parte

// Leer registro 42020 para selección de articulo desde SH-300
     
      MbRtuServGetRegister(42020, Select)

necesito enviar el valor que tienen 3 variables en ese momento, la fecha y hora, a la aplicación antes mencionada

Saludos

José Camacho



Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 1636
  • Soporte Técnico
Re:Uso de aplicación PLC UDP Receiver
« Respuesta #1 : julio 19, 2016, 20:36:22 pm »
Buenas tardes Jose,

¿ Queres recibir desde un programa en la computadora mediante UDP los valores de 3 variables del PLC ?.

Confirmame si eso buscas, así puedo ejemplificarte.

Quedo a disposición.

SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

InduxSA

  • Aprendiz
  • **
  • Mensajes: 23
Re:Uso de aplicación PLC UDP Receiver
« Respuesta #2 : julio 20, 2016, 10:31:26 am »
Hola Boris

Tal vez no me supe explicar,

En la nota de aplicación  AN001 punto 7.4 se expone lo siguiente

"El programa PawnUdpRx puede serle útil para recibir datos Ethernet / UDP desde el PLC."

Efectivamente lo que quiero es recibir los datos de 3 variables del PLC en el programa  PawnUdpRx

Pero no alcanzo a entender como usarlo para que pueda escuchar lo que el PLC envía

Saludos

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 1636
  • Soporte Técnico
Re:Uso de aplicación PLC UDP Receiver
« Respuesta #3 : julio 20, 2016, 11:46:51 am »
Buenos dias,

¿Cuando utiliza el programa para el PLC del ejemplo de nota AN001 (llamado UDP_Tx) y ejecuta PawnUdpRx, recibe datos en su computadora?.

El programa se baja del SDK (www.slicetex.com/hw/stx80xx/soft.html).

El PLC debe tener configurada la IP de la maquina donde se ejecuta PawnUdpRx.

Dentro del while(1) del código del proyecto UDP_Tx la siguiente linea define IP y datos a enviar.

Código: (Pawn) [Seleccionar]
      // Enviar paquete UDP a dirección 192.168.1.15, puerto 4980.
      UdpSend(192,168,1,15, 4980, 5, Data, false)

El array que se envía es Data[] que en este caso envía 5 bytes con las letras "Hola!":

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

Necesitaría que me confirme si puede recibir los datos del ejemplo y le funciona bien.

Asi partimos de este punto.

Gracias

SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

InduxSA

  • Aprendiz
  • **
  • Mensajes: 23
Re:Uso de aplicación PLC UDP Receiver
« Respuesta #4 : julio 20, 2016, 12:49:17 pm »
Estimado Boris

ya lo he corrido
Funciona perfectamente



Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 1636
  • Soporte Técnico
Re:Uso de aplicación PLC UDP Receiver
« Respuesta #5 : julio 20, 2016, 13:39:29 pm »
Perfecto, saludos.
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

InduxSA

  • Aprendiz
  • **
  • Mensajes: 23
Re:Uso de aplicación PLC UDP Receiver
« Respuesta #6 : julio 20, 2016, 14:33:29 pm »
Estimado Boris

Los datos que quiero envíar son de tipo entero, de 3 variables distintas X, Y, Z

Como puedo enviar este tipo de dato en esta función

UdpSend(192,168,1,15, 4980, 5, Data, false)

En lugar de la cadena de caracteres

Saludos

 


Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 1636
  • Soporte Técnico
Re:Uso de aplicación PLC UDP Receiver
« Respuesta #7 : julio 20, 2016, 15:03:55 pm »
UdpSend(A0, A1, A2, A3, Port, Size, Data[], Packed):


La funcion UdpSend() puede enviar el array Data[], donde cada elemento se envía como byte (es decir toma el valor de 0 a 255) si Packed es false.

Por ejemplo:

Código: (Pawn) [Seleccionar]
new Data[3]
new x=100
new y=200
new z=1000

Data[0] = x
Data[1] = y
Data[2] = z


UdpSend(192,168,1,15, 4980, 3, Data, false)


Las variables x e y se enviaran correctamente porque tiene un valor menor a 255, pero z se enviará truncada porque su valor es mayor a 255.

Pero si se usa la función UdpSend() con Packed es true, cada elemento del array Data[] se envía como 4 bytes, es decir con su valor total de 32-bits, permitiendo enviar números de hasta +/- 2,147,483,647.

Código: (Pawn) [Seleccionar]
new Data[3]
new x=100
new y=200
new z=1000

Data[0] = x
Data[1] = y
Data[2] = z


UdpSend(192,168,1,15, 4980, 3, Data, true)


El valor de la variable "z" se envía como 4 bytes, y el numero 1000 se representa perfectamente en la computadora.

Por lo tanto desde la PC es necesario interpretar los 4 bytes recibidos como un numero entero con signo para decodificar su correcto valor, esto lo haces desde el programa en Microsoft Visual C#.

Pero esto ultimo es para el caso de enviar numero mayores a 255.

Si necesitas enviar fecha, hora, etc... los números son menores a 255 y podes usar Packed=false.

Espero que se entienda.

Cualquier duda, quedo a disposición.



SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

InduxSA

  • Aprendiz
  • **
  • Mensajes: 23
Re:Uso de aplicación PLC UDP Receiver
« Respuesta #8 : julio 20, 2016, 16:52:41 pm »
OK

Y estos datos no los puedo obtener en el programa PawnUdpRx.?

Es necesario crear una aplicacion C#?

Saludos

InduxSA

  • Aprendiz
  • **
  • Mensajes: 23
Re:Uso de aplicación PLC UDP Receiver
« Respuesta #9 : julio 20, 2016, 16:54:36 pm »
Los datos que envió son mayor a 255

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 1636
  • Soporte Técnico
Re:Uso de aplicación PLC UDP Receiver
« Respuesta #10 : julio 21, 2016, 08:19:31 am »
Buenos días.

El código fuente de PawnUdpRx esta disponible para modificar y hacer que muestre los valores de 32-bits (Packed).

A modo de ejemplo, te adjunto PawnUdpRx modificado para aceptar valores Packed .

Para poder usarlo, ejecutalo y selecciona la casilla "Packed" del programa.

Luego carga el ejemplo para el PLC que te paso para transmitir valores mayores a 255 con el argumento Packed=true en la función UdpSend().



En profundidad:

En  PawnUdpRx lo que hice fue interpretar los 4-bytes recibidos del PLC como un entero con el siguiente código en función backgroundWorker1_DoWork():

Código: (C#) [Seleccionar]
   // Packed bytes -> Convert to Int.
   DataStr += Tools.BytesToInt(Packet, i).ToString() + ",";
   i += 4;

En el lado PLC, envio valores de enteros de 32-bits, es decir que ocupan 4-bytes:

Código: (Pawn) [Seleccionar]
   // Almacenar valores en array.
   Data[0] = 1234
   Data[1] = 6400
   Data[2] = 35000
   Data[3] = 100
   Data[4] = 0

   // Enviar paquete UDP a direccion 192.168.1.15, puerto 4980.
   // Enviar valores con argumento "Packed=true".
   // En este caso, cada entero o elemento del array Data[] es
   // enviado en forma completa, con sus 4 bytes o 32 bits.
   // Por ello el argumento "Size" debe ser el numero de enteros
   // a enviar multiplicados por por 4 (numero de bytes por elemento).
   // Esto permite enviar valores de 32-bits de forma completa.
     
   UdpSend(192,168,1,15, 4980, INT_BYTES*5, Data, true)

Cualquier duda, quedamos a disposición.


« Última Modificación: julio 21, 2016, 08:23:18 am por Soporte »
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

InduxSA

  • Aprendiz
  • **
  • Mensajes: 23
Re:Uso de aplicación PLC UDP Receiver
« Respuesta #11 : julio 21, 2016, 12:19:58 pm »
Hola Boris

He corrido el programa  PawnUdpRx modificado que adjuntaste con este codigo en el PLC

Pero el programa solo se queda en el primer dato y no muestra el valor te adjunto una imagen del programa

PlcMain()
{
   // Crear un array para almacenar los bytes a enviar.
   new Data[1]

   // Almacenar caracteres ASCII a enviar...
 
   Data[0] = 1000

   // Ciclo principal del programa.
   while(1)
   {
      // Enviar paquete UDP a dirección 192.168.1.15, puerto 4980.
      UdpSend(192,168,0,137, 4980, 1, Data, true)

      // Pausar programa por 1 segundo y conmutar led debug.
      DelayS(2)
      LedToggle()
   }
}

Agradeciendo tu acostumbrado apoyo quedo en espera de tus comentarios

Saludos

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 1636
  • Soporte Técnico
Re:Uso de aplicación PLC UDP Receiver
« Respuesta #12 : julio 21, 2016, 13:09:51 pm »
Por lo que veo estas enviando "1" solo byte, recorda que cuando es "Packed=true" cada elemento del array representa 4 bytes a enviar.

Proba haciendo:

     
      UdpSend(192,168,0,137, 4980, 1*4, Data, true)


Nota que puse 1*4 para que sea mas fácil entender con una multiplicación explicita, si necesitas enviar dos elementos, serian 8 bytes, entonces harías 2*4, para 3 elementos seria 3*4, y asi...

Probalo y avisame.
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com