예제 #1
0
        public void ConvertToBoolArray_Roundtrips(int boolArraySize)
        {
            var bools  = new bool[boolArraySize];
            var bytes  = new byte[boolArraySize];
            var random = new Random();

            for (int i = 0; i < bools.Length; ++i)
            {
                bools[i] = random.Next() % 2 == 0;
            }

            var toS7Converter   = ConverterFactory.GetToPlcConverter <bool[]>();
            var fromS7Converter = ConverterFactory.GetFromPlcConverter <bool[]>();

            int length = toS7Converter(bools, bools.Length, bytes);

            bool[]? actual = null;
            fromS7Converter(ref actual, bytes, boolArraySize);

            Assert.Equal(boolArraySize, actual !.Length);

            for (int i = 0; i < boolArraySize; ++i)
            {
                Assert.Equal(bools[i], actual[i]);
            }
        }
예제 #2
0
 public DataBlockDataItem() : this(ConverterFactory.GetToPlcConverter <TValue>(),
                                   ConverterFactory.GetFromPlcConverter <TValue>(), ConversionHelper.GetElementSize <TValue>())
 {
     if (typeof(TValue) == typeof(bool))
     {
         variableType  = VariableType.Bit;
         transportSize = TransportSize.Bit;
     }
     else
     {
         variableType  = VariableType.Byte;
         transportSize = TransportSize.Byte;
     }
 }
예제 #3
0
        public void ConvertToFloat(float value)
        {
            var bytes = BitConverter.GetBytes(value);

            if (BitConverter.IsLittleEndian)
            {
                Array.Reverse(bytes);
            }

            var   converter = ConverterFactory.GetFromPlcConverter <float>();
            float result    = default;

            converter(ref result, bytes, sizeof(float));

            Assert.Equal(value, result);
        }
예제 #4
0
        public void ConvertToLong(long value)
        {
            var bytes = BitConverter.GetBytes(value);

            if (BitConverter.IsLittleEndian)
            {
                Array.Reverse(bytes);
            }

            var  converter = ConverterFactory.GetFromPlcConverter <long>();
            long result    = default;

            converter(ref result, bytes, sizeof(long));

            Assert.Equal(value, result);
        }
예제 #5
0
        public void ConvertToEnumOfInt(EnumOfInt value)
        {
            var bytes = BitConverter.GetBytes((int)value);

            if (BitConverter.IsLittleEndian)
            {
                Array.Reverse(bytes);
            }

            var       converter = ConverterFactory.GetFromPlcConverter <EnumOfInt>();
            EnumOfInt result    = default;

            converter(ref result, bytes, sizeof(int));

            Assert.Equal(value, result);
        }
예제 #6
0
        public void ConvertToFloatArray(float[] value)
        {
            var bytes = value.SelectMany(v =>
            {
                var b = BitConverter.GetBytes(v);
                if (BitConverter.IsLittleEndian)
                {
                    Array.Reverse(b);
                }
                return(b);
            }).ToArray();

            var converter = ConverterFactory.GetFromPlcConverter <float[]>();
            var result    = new float[value.Length];

            converter(ref result, bytes, value.Length);

            Assert.Equal(value, result);
        }