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); }
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}"); }
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"); } }
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); }