예제 #1
0
        protected byte[] _PollingTo(Channel ch, Device dv, DataBlock db)
        {
            IODriverDataTypes dataType     = (IODriverDataTypes)Enum.Parse(typeof(IODriverDataTypes), db.DataType);
            LSDomainTypes     lsDomainType = (LSDomainTypes)Enum.Parse(typeof(LSDomainTypes), db.MemoryType);
            int baseAddress = db.StartAddress;

            switch (dataType)
            {
            case IODriverDataTypes.BitOnByte:
                baseAddress = ((db.StartAddress >= 2) ? (db.StartAddress / 2) : 0) * 2;
                break;

            case IODriverDataTypes.BitOnWord:
                baseAddress = db.StartAddress * 2;
                break;

            case IODriverDataTypes.Bit:
                baseAddress = ((db.StartAddress >= 16) ? (db.StartAddress / 16) : 0) * 2;
                break;

            case IODriverDataTypes.Byte:
                baseAddress = db.StartAddress;
                break;

            case IODriverDataTypes.Short:
            case IODriverDataTypes.UShort:
                baseAddress = db.StartAddress * 2;
                break;

            case IODriverDataTypes.Int:
            case IODriverDataTypes.UInt:
                baseAddress = db.StartAddress * 4;
                break;

            case IODriverDataTypes.Long:
            case IODriverDataTypes.ULong:
                baseAddress = db.StartAddress * 8;
                break;

            case IODriverDataTypes.Float:
                baseAddress = db.StartAddress * 4;
                break;

            case IODriverDataTypes.Double:
                baseAddress = db.StartAddress * 8;
                break;
            }
            string originAddress  = "%" + LSNetBase.GetDomainType(lsDomainType) + LSNetBase.GetAddress(dataType, lsDomainType, ch.Rack, ch.Slot, db.StartAddress);
            string requestAddress = "%" + LSNetBase.GetDomainType(lsDomainType) + LSNetBase.GetAddress(IODriverDataTypes.Byte, lsDomainType, ch.Rack, ch.Slot, baseAddress);
            ushort count          = LSNetBase.GetCount(dataType, db.StartAddress, db.Length);
            var    FullPacket     = _WriteTo(new LSRequestMessage(Guid.NewGuid(), LSRequestTyes.Consecutive, dataType, originAddress, (byte)dv.SlaveId, requestAddress, count));

            return(FullPacket);
        }
예제 #2
0
        public static string GetAddress(IODriverDataTypes dataType, LSDomainTypes domainType, int baseNumber, int slotNumber, int baseAddress)
        {
            string text  = string.Empty;
            string text2 = string.Empty;

            switch (dataType)
            {
            case IODriverDataTypes.BitOnByte:
                text  = "B";
                text2 = ".0";
                break;

            case IODriverDataTypes.BitOnWord:
                text  = "W";
                text2 = ".0";
                break;

            case IODriverDataTypes.Bit:
                text = "X";
                break;

            case IODriverDataTypes.Byte:
                text = "B";
                break;

            case IODriverDataTypes.Short:
            case IODriverDataTypes.UShort:
                text = "W";
                break;

            case IODriverDataTypes.Int:
            case IODriverDataTypes.UInt:
                text = "D";
                break;

            case IODriverDataTypes.Long:
            case IODriverDataTypes.ULong:
                text = "L";
                break;

            case IODriverDataTypes.Float:
                text = "D";
                break;

            case IODriverDataTypes.Double:
                text = "L";
                break;
            }
            if (domainType - 1 <= LSDomainTypes.I || domainType == LSDomainTypes.U)
            {
                return($"{text}{baseNumber}.{slotNumber}.{baseAddress}{text2}");
            }
            return($"{text}{baseAddress}{text2}");
        }
예제 #3
0
        public static string GetDomainType(LSDomainTypes domainType)
        {
            switch (domainType)
            {
            case LSDomainTypes.I:
                return("I");

            case LSDomainTypes.Q:
                return("Q");

            case LSDomainTypes.M:
                return("M");

            case LSDomainTypes.L:
                return("L");

            case LSDomainTypes.U:
                return("U");

            case LSDomainTypes.R:
                return("R");

            case LSDomainTypes.W:
                return("W");

            case LSDomainTypes.C:
                return("C");

            case LSDomainTypes.D:
                return("D");

            case LSDomainTypes.F:
                return("F");

            case LSDomainTypes.K:
                return("K");

            case LSDomainTypes.N:
                return("N");

            case LSDomainTypes.P:
                return("P");

            case LSDomainTypes.T:
                return("T");

            default:
                return("M");
            }
        }
예제 #4
0
        protected byte[] _PollingTo(Channel ch, Device dv, DataBlock db)
        {
            IODriverDataTypes dataType     = (IODriverDataTypes)Enum.Parse(typeof(IODriverDataTypes), db.DataType);
            LSDomainTypes     lsDomainType = (LSDomainTypes)Enum.Parse(typeof(LSDomainTypes), db.MemoryType);

            int baseAddress = db.StartAddress;

            switch (dataType)
            {
            case IODriverDataTypes.BitOnByte:
                baseAddress = ((db.StartAddress >= 2) ? (db.StartAddress / 2) : 0) * 2;
                break;

            case IODriverDataTypes.BitOnWord:
                baseAddress = db.StartAddress * 2;
                break;

            case IODriverDataTypes.Bit:
                baseAddress = ((db.StartAddress >= 16) ? (db.StartAddress / 16) : 0) * 2;
                break;

            default:
                baseAddress = db.StartAddress;
                break;
            }
            string originAddress = "%" + LSNetBase.GetDomainType(lsDomainType) + LSNetBase.GetAddress(dataType, lsDomainType, ch.Rack, ch.Slot, db.StartAddress);
            string str           = "%" + LSNetBase.GetDomainType(lsDomainType);
            ushort requestCount  = db.Length;

            if (dataType == IODriverDataTypes.Bit || dataType - 177 <= (IODriverDataTypes)1)
            {
                str         += LSNetBase.GetAddress(IODriverDataTypes.Byte, lsDomainType, ch.Rack, ch.Slot, baseAddress);
                requestCount = LSNetBase.GetCount(dataType, db.StartAddress, db.Length);
            }
            else
            {
                str += LSNetBase.GetAddress(dataType, lsDomainType, ch.Rack, ch.Slot, baseAddress);
            }
            byte[] frame = _GetBytes(new LSRequestMessage(Guid.NewGuid(), LSRequestTyes.Consecutive, dataType, originAddress, (byte)dv.SlaveId, str, requestCount));

            return(frame);
        }
        public static string LSGetAddressFormat(string UserDefineFormat, LSDomainTypes LsDomainType, IODriverDataTypes DataType)
        {
            string result = UserDefineFormat ?? "{0}";
            string empty  = string.Empty;


            result = "%";
            empty  = "{0}";
            switch (LsDomainType)
            {
            case LSDomainTypes.I:
                result += "I";
                empty   = "{3}.{4}.";
                break;

            case LSDomainTypes.Q:
                result += "Q";
                empty   = "{3}.{4}.";
                break;

            case LSDomainTypes.M:
                result += "M";
                empty   = "{0}";
                break;

            case LSDomainTypes.L:
                result += "L";
                empty   = "{0}";
                break;

            case LSDomainTypes.U:
                result += "U";
                empty   = "{3}.{4}.";
                break;

            case LSDomainTypes.R:
                result += "R";
                empty   = "{0}";
                break;

            case LSDomainTypes.W:
                result += "W";
                empty   = "{0}";
                break;

            case LSDomainTypes.C:
                result += "C";
                empty   = "{0}";
                break;

            case LSDomainTypes.D:
                result += "D";
                empty   = "{0}";
                break;

            case LSDomainTypes.F:
                result += "F";
                empty   = "{0}";
                break;

            case LSDomainTypes.K:
                result += "K";
                empty   = "{0}";
                break;

            case LSDomainTypes.N:
                result += "N";
                empty   = "{0}";
                break;

            case LSDomainTypes.P:
                result += "P";
                empty   = "{0}";
                break;

            case LSDomainTypes.T:
                result += "T";
                empty   = "{0}";
                break;

            default:
                result += "M";
                empty   = "{0}";
                break;
            }
            switch (DataType)
            {
            case IODriverDataTypes.BitOnByte:
            {
                result += "B";
                LSDomainTypes lsDomainType = LsDomainType;
                empty = ((lsDomainType - 1 > LSDomainTypes.I && lsDomainType != LSDomainTypes.U) ? "{1}.{2}" : (empty + "{1}.{2}"));
                break;
            }

            case IODriverDataTypes.BitOnWord:
            {
                result += "W";
                LSDomainTypes lsDomainType = LsDomainType;
                empty = ((lsDomainType - 1 > LSDomainTypes.I && lsDomainType != LSDomainTypes.U) ? "{1}.{2}" : (empty + "{1}.{2}"));
                break;
            }

            case IODriverDataTypes.Bit:
            {
                result += "X";
                LSDomainTypes lsDomainType = LsDomainType;
                if (lsDomainType - 1 <= LSDomainTypes.I || lsDomainType == LSDomainTypes.U)
                {
                    empty += "{0}";
                }
                break;
            }

            case IODriverDataTypes.Byte:
            case IODriverDataTypes.SByte:
            {
                result = (result = "B");
                LSDomainTypes lsDomainType = LsDomainType;
                if (lsDomainType - 1 <= LSDomainTypes.I || lsDomainType == LSDomainTypes.U)
                {
                    empty += "{0}";
                }
                break;
            }

            case IODriverDataTypes.Int:
            case IODriverDataTypes.UInt:
            {
                result += "D";
                LSDomainTypes lsDomainType = LsDomainType;
                if (lsDomainType - 1 <= LSDomainTypes.I || lsDomainType == LSDomainTypes.U)
                {
                    empty += "{0}";
                }
                break;
            }

            case IODriverDataTypes.Long:
            case IODriverDataTypes.ULong:
            {
                result += "L";
                LSDomainTypes lsDomainType = LsDomainType;
                if (lsDomainType - 1 <= LSDomainTypes.I || lsDomainType == LSDomainTypes.U)
                {
                    empty += "{0}";
                }
                break;
            }

            default:
            {
                result += "W";
                LSDomainTypes lsDomainType = LsDomainType;
                if (lsDomainType - 1 <= LSDomainTypes.I || lsDomainType == LSDomainTypes.U)
                {
                    empty += "{0}";
                }
                break;
            }
            }
            result += empty;


            return(result);
        }