예제 #1
0
        /// <summary>
        /// Converts a S7 DInt to double
        /// </summary>
        public static double FromDWord(Int32 value)
        {
            byte[] b = DInt.ToByteArray(value);
            double d = FromByteArray(b);

            return(d);
        }
예제 #2
0
        /// <summary>
        /// Converts a S7 DInt to float
        /// </summary>
        public static float FromDWord(Int32 value)
        {
            byte[] b = DInt.ToByteArray(value);
            float  d = FromByteArray(b);

            return(d);
        }
예제 #3
0
        private static double SetBytesFromProperty(object propertyValue, byte[] bytes, double numBytes)
        {
            int bytePos = 0;
            int bitPos  = 0;

            byte[] bytes2 = null;

            switch (propertyValue.GetType().Name)
            {
            case "Boolean":
                // get the value
                bytePos = (int)Math.Floor(numBytes);
                bitPos  = (int)((numBytes - (double)bytePos) / 0.125);
                if ((bool)propertyValue)
                {
                    bytes[bytePos] |= (byte)Math.Pow(2, bitPos);                // is true
                }
                else
                {
                    bytes[bytePos] &= (byte)(~(byte)Math.Pow(2, bitPos));       // is false
                }
                numBytes += 0.125;
                break;

            case "Byte":
                numBytes       = (int)Math.Ceiling(numBytes);
                bytePos        = (int)numBytes;
                bytes[bytePos] = (byte)propertyValue;
                numBytes++;
                break;

            case "Int16":
                bytes2 = Int.ToByteArray((Int16)propertyValue);
                break;

            case "UInt16":
                bytes2 = Word.ToByteArray((UInt16)propertyValue);
                break;

            case "Int32":
                bytes2 = DInt.ToByteArray((Int32)propertyValue);
                break;

            case "UInt32":
                bytes2 = DWord.ToByteArray((UInt32)propertyValue);
                break;

            case "Double":
                bytes2 = Double.ToByteArray((double)propertyValue);
                break;

            case "Single":
                bytes2 = Single.ToByteArray((float)propertyValue);
                break;

            default:
                numBytes = ToBytes(propertyValue, bytes, numBytes);
                break;
            }

            if (bytes2 != null)
            {
                // add them
                numBytes = Math.Ceiling(numBytes);
                if ((numBytes / 2 - Math.Floor(numBytes / 2.0)) > 0)
                {
                    numBytes++;
                }
                bytePos = (int)numBytes;
                for (int bCnt = 0; bCnt < bytes2.Length; bCnt++)
                {
                    bytes[bytePos + bCnt] = bytes2[bCnt];
                }
                numBytes += bytes2.Length;
            }

            return(numBytes);
        }