Un dato float tiene 32-bits de informacion, que es lo mismo a 4-bytes. Por lo tanto hay que enviar el
float a traves de la red ethernet mediante 4 bytes. Luego desde la PC, tomar los 4 bytes
recibidos y ensamblarlos nuevamente en una variable de 32-bits. Finalmente con un cast,
transformarla a float.
El PLC mediante la funcion UdpSend() puede enviar los 4 bytes de una variable de 32-bits, si se pasa
el argumento Packed=true.
A continuacion se muestra un ejemplo para enviar un float de 32-bits mediante UDP en Pawn desde
el PLC y luego recibirlo en la PC desde la interfaz de programacion en Microsoft Visual C#.
Podes probar lo siguiente:
Desde el PLC (lenguaje Pawn):
// Variable para almacenar voltaje.
// Declaramos como un array para poder utilizar en UdpSend().
new Float: Volt[1]
// Especificar que el jumper 5 no esta colocado (rango 0 a 10 V).
VinJumper5UnSet()
// Leer entrada analógica VIN1 y almacenar en variable "Volt".
Volt = Float: VinReadVolt(1)
// Enviar dato UDP a dirección 192.168.1.15, puerto 4980.
// Utilizar Packed=true, asi se toma cada elemento del array como
// un valor de 32-bits, enviandose 4 bytes por la red.
// Especificar que el tamaño a enviar es de 4 bytes.
// El byte menos significativo se envia primero.
UdpSend(192,168,1,15, 4980, 4, Volt, true)
Desde la PC (lenguaje Visual C#):
byte[] Packet;
UInt32 Data;
float Volt = 0;
// Esperar 0.5 segundos por un paquete UDP, en puerto 4980.
if(PioBoard.Cmd.Udp.Receive(4980,0.5,out Packet) == UdpReceiveStat.Success)
{
// PAQUETE RECIBIDO!!!
// Convertir 4 bytes en un entero de 32-bits.
// Recordar que el byte menos significativo llego primero.
Data = (UInt32) Packet[0];
Data |= ((UInt32) Packet[1] << 8);
Data |= ((UInt32) Packet[2] << 16);
Data |= ((UInt32) Packet[3] << 24);
// Convertir entero de 32-bits a float.
Volt = (float) Data;
// Imprimir valor en ventana.
MessageBox.Show(Volt.ToString(), "Voltage 1:", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
// NO SE RECIBIO NINGUN PAQUETE.
}
Avisame si te funciona o cualquier duda.