mercoledì 28 maggio 2014

MAPPARE CORRETTAMENTE BYTE PLC - PARTE II


Concludiamo il discorso intrapreso nello scorso appuntamento: mappare correttamente i byte provenienti da PLC. Se vi siete persi lo scorso articolo lo potete leggere qui.

Siamo arrivati all’implementazione del codice:



public class PLCByteConverter    {
        public static byte[] GetBytes(int value)
        {
            byte[] output;
            output = BitConverter.GetBytes(value);
            return new byte[] { output[3], output[2], output[1], output[0] };
        }

        public static int ToInt(byte[] input)
        {
            int output;
            output = BitConverter.ToInt32(new byte[] { input[3], input[2], input[1], input[0] }, 0);
            return output;
        }

        public static byte[] GetBytes(short value)
        {
            byte[] output;
            output = BitConverter.GetBytes(value);
            return new byte[] { output[1], output[0] };
        }

        public static short ToShort(byte[] input)
        {
            short output;
            output = BitConverter.ToInt16(new byte[] { input[1], input[0] }, 0);
            return output;
        }

        public static byte[] GetBytes(bool value)
        {
            if (value) return BitConverter.GetBytes((short)1);
            else return GetBytes((short)0);
        }

        public static bool ToBoolean(byte[] input)
        {
            return (input[0] == 1);
        }

        public static byte[] GetBytes(String value)
        {
            return Encoding.ASCII.GetBytes(value);
        }

        public static String ToString(byte[] input)
        {
            return Encoding.ASCII.GetString(input);
        }

        public static byte[] GetBytes(float value)
        {
            byte[] output = BitConverter.GetBytes(value);
            return new byte[] { output[3], output[2], output[1], output[0] };
        }

        public static float ToFloat(byte[] input)
        {
            return BitConverter.ToSingle(new byte[] { input[3], input[2], input[1], input[0] }, 0);
        }
    }

Alcune precisazioni sono dovute. Nel codice C# sarebbe possibile anche utilizzare il metodo Reverse() della classe System.Collections.Generic.List, invece di creare manualmente i byte in ordine inverso.

Fatemi sapere se ci sono domande, Buon Lavoro!

Nessun commento:

Posta un commento