Пример #1
0
 public OneDasModule(OneDasDataType dataType, DataDirection dataDirection, Endianness endianness, int size)
 {
     this.DataType      = dataType;
     this.DataDirection = dataDirection;
     this.Endianness    = endianness;
     this.Size          = size;
 }
Пример #2
0
        public static Type GetTypeFromOneDasDataType(OneDasDataType oneDasDataType)
        {
            switch (oneDasDataType)
            {
            case OneDasDataType.BOOLEAN:
                return(typeof(bool));

            case OneDasDataType.UINT8:
                return(typeof(Byte));

            case OneDasDataType.INT8:
                return(typeof(SByte));

            case OneDasDataType.UINT16:
                return(typeof(UInt16));

            case OneDasDataType.INT16:
                return(typeof(Int16));

            case OneDasDataType.UINT32:
                return(typeof(UInt32));

            case OneDasDataType.INT32:
                return(typeof(Int32));

            case OneDasDataType.FLOAT32:
                return(typeof(Single));

            case OneDasDataType.FLOAT64:
                return(typeof(Double));

            default:
                throw new NotSupportedException();
            }
        }
Пример #3
0
        public DataPort(string name, OneDasDataType dataType, DataDirection dataDirection, Endianness endianness)
        {
            this.Name          = name;
            this.DataType      = dataType;
            this.DataDirection = dataDirection;
            this.Endianness    = endianness;

            this.BitOffset = -1; // i.e. bool is treated as byte-oriented
        }
Пример #4
0
 public static byte GetBitLength(OneDasDataType oneDasDataType, bool expandedBoolean)
 {
     if (!expandedBoolean && oneDasDataType == OneDasDataType.BOOLEAN)
     {
         return(1);
     }
     else
     {
         return(Convert.ToByte((int)oneDasDataType & 0xff));
     }
 }
Пример #5
0
        public override void EvaluateSettings()
        {
            Contract.Requires(SelectedModuleSet != null);

            if (!(0 < this.StationNumber && this.StationNumber < 127))
            {
                throw new Exception(ExtensionErrorMessage.EL6731_0010Settings_StationNumberInvalid);
            }

            this.SlaveInfo.DynamicData.PdoSet.Clear();

            foreach (EL6731_0010Module el6731_0010_Module in this.SelectedModuleSet)
            {
                ushort               pdoIndex           = 0;
                ushort               syncManager        = 0;
                ushort               variableIndex      = 0;
                ushort               arrayLength        = 0;
                OneDasDataType       dataType           = default;
                DataDirection        dataDirection      = default;
                List <SlaveVariable> ecSlaveVariableSet = new List <SlaveVariable>();

                if ((int)el6731_0010_Module == 0x50) // word ouput
                {
                    dataType      = OneDasDataType.UINT16;
                    dataDirection = DataDirection.Output;
                    arrayLength   = (ushort)(el6731_0010_Module - 0x50 + 1);
                }
                else if (0xd1 <= (int)el6731_0010_Module && (int)el6731_0010_Module <= 0xdf)
                {
                    dataType      = OneDasDataType.UINT16;
                    dataDirection = DataDirection.Output;
                    arrayLength   = (ushort)(el6731_0010_Module - 0xd1 + 2);
                }
                else if (0x40d0 <= (int)el6731_0010_Module && (int)el6731_0010_Module <= 0x40ff)
                {
                    dataType      = OneDasDataType.UINT16;
                    dataDirection = DataDirection.Output;
                    arrayLength   = (ushort)(el6731_0010_Module - 0x40d0 + 16 + 1);
                }
                else if ((int)el6731_0010_Module == 0x60) // word input
                {
                    dataType      = OneDasDataType.UINT16;
                    dataDirection = DataDirection.Input;
                    arrayLength   = (ushort)(el6731_0010_Module - 0x60 + 1);
                }
                else if (0xe1 <= (int)el6731_0010_Module && (int)el6731_0010_Module <= 0xef)
                {
                    dataType      = OneDasDataType.UINT16;
                    dataDirection = DataDirection.Input;
                    arrayLength   = (ushort)(el6731_0010_Module - 0xe1 + 2);
                }
                else if (0x80d0 <= (int)el6731_0010_Module && (int)el6731_0010_Module <= 0x80fff)
                {
                    dataType      = OneDasDataType.UINT16;
                    dataDirection = DataDirection.Input;
                    arrayLength   = (ushort)(el6731_0010_Module - 0x80d0 + 16 + 1);
                }
                else if (0x10 <= (int)el6731_0010_Module && (int)el6731_0010_Module <= 0x1f) // byte output
                {
                    dataType      = OneDasDataType.UINT8;
                    dataDirection = DataDirection.Output;
                    arrayLength   = (ushort)(el6731_0010_Module - 0x10 + 1);
                }
                else if (0x20 <= (int)el6731_0010_Module && (int)el6731_0010_Module <= 0x2f) // byte input
                {
                    dataType      = OneDasDataType.UINT8;
                    dataDirection = DataDirection.Input;
                    arrayLength   = (ushort)(el6731_0010_Module - 0x20 + 1);
                }
                else
                {
                    throw new Exception(ExtensionErrorMessage.EL6731_0010Settings_ModuleInvalid);
                }

                // improve, implicit?
                switch (dataDirection)
                {
                case DataDirection.Output:
                    pdoIndex      = 0x1600;
                    syncManager   = 2;
                    variableIndex = 0x7000;
                    break;

                case DataDirection.Input:
                    pdoIndex      = 0x1a00;
                    syncManager   = 3;
                    variableIndex = 0x6000;
                    break;
                }

                SlavePdo slavePdo = new SlavePdo(this.SlaveInfo, el6731_0010_Module.ToString(), pdoIndex, 0, true, true, syncManager);
                ushort   offset   = (ushort)this.SlaveInfo.DynamicData.PdoSet.SelectMany(x => x.VariableSet).Where(x => x.DataDirection == dataDirection).Count();

                for (ushort i = (ushort)(offset + 0); i <= offset + arrayLength - 1; i++)
                {
                    ecSlaveVariableSet.Add(new SlaveVariable(slavePdo, i.ToString(), variableIndex, Convert.ToByte(i + 1), dataDirection, dataType));
                }

                slavePdo.SetVariableSet(ecSlaveVariableSet);
                this.SlaveInfo.DynamicData.PdoSet.Add(slavePdo);
            }

            // 1A80 improve! include Variables
            SlavePdo slavePdo2 = new SlavePdo(this.SlaveInfo, "Diagnostics", 0x1a80, 0, true, true, 3);

            slavePdo2.SetVariableSet(new List <SlaveVariable>());
            this.SlaveInfo.DynamicData.PdoSet.Add(slavePdo2);
        }
Пример #6
0
        public SlaveVariable(SlavePdo parent, string name, ushort index, byte subIndex, DataDirection dataDirection, OneDasDataType dataType, byte bitLength = 0) : base(name, dataType, dataDirection, Endianness.LittleEndian)
        {
            Contract.Requires(parent != null);

            this.Parent   = parent;
            this.Index    = index;
            this.SubIndex = subIndex;

            if (bitLength == 0)
            {
                this.BitLength = OneDasUtilities.GetBitLength(dataType, false);
            }
            else
            {
                this.BitLength = bitLength;
            }
        }
Пример #7
0
        public VariableDescription(Guid guid, string variableName, string datasetName, string group, OneDasDataType dataType, ulong samplesPerDay, string unit, List <TransferFunction> transferFunctionSet, Type dataStorageType)
        {
            this.Guid                = guid;
            this.VariableName        = variableName;
            this.DatasetName         = datasetName;
            this.Group               = group;
            this.DataType            = dataType;
            this.SamplesPerDay       = samplesPerDay;
            this.Unit                = unit;
            this.TransferFunctionSet = transferFunctionSet;
            this.DataStorageType     = dataStorageType;

            if (!typeof(IDataStorage).IsAssignableFrom(dataStorageType))
            {
                throw new ArgumentException(ErrorMessage.VariableContext_DataStorageTypeInvalid);
            }
        }
Пример #8
0
 public static int SizeOf(OneDasDataType dataType)
 {
     return(OneDasUtilities.SizeOf(OneDasUtilities.GetTypeFromOneDasDataType(dataType)));
 }