public _PieceData(string address, IODriverDataTypes dataType, double value) : this() { Address = address; DataType = dataType; Value = value; }
public static LSRequestTyes GetRequestType(IODriverDataTypes dataType) { switch (dataType) { case IODriverDataTypes.Bit: return(LSRequestTyes.Bit); case IODriverDataTypes.Short: case IODriverDataTypes.UShort: return(LSRequestTyes.Word); case IODriverDataTypes.Int: case IODriverDataTypes.UInt: return(LSRequestTyes.DWord); case IODriverDataTypes.Long: case IODriverDataTypes.ULong: return(LSRequestTyes.LWord); case IODriverDataTypes.Float: return(LSRequestTyes.DWord); case IODriverDataTypes.Double: return(LSRequestTyes.LWord); default: return(LSRequestTyes.Word); } }
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 LSRequestMessage(Guid uniqueId, LSRequestTyes requestType, IODriverDataTypes dataType, string originAddress, byte deviceAddress, string requestAddress, ushort requestCount) : this() { UniqueId = uniqueId; RequestType = LSRequestTyes.Consecutive; DataType = dataType; OriginAddress = originAddress; Device = deviceAddress; Command = LSCommandTypes.ReqRead; RequestAddress = requestAddress; RequestCount = requestCount; }
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 ushort GetCount(IODriverDataTypes dataType, int offset, int count) { switch (dataType) { case IODriverDataTypes.BitOnByte: { int num = offset * 8; return((ushort)((((num + count >= 17) ? ((num + count) / 16) : 0) + 1) * 2)); } case IODriverDataTypes.BitOnWord: return((ushort)((((count >= 17) ? (count / 16) : 0) + 1) * 2)); case IODriverDataTypes.Bit: return((ushort)((((offset + count >= 17) ? ((offset + count) / 16) : 0) + 1) * 2)); case IODriverDataTypes.Byte: return((ushort)count); case IODriverDataTypes.Short: case IODriverDataTypes.UShort: return((ushort)(count * 2)); case IODriverDataTypes.Int: case IODriverDataTypes.UInt: return((ushort)(count * 4)); case IODriverDataTypes.Long: case IODriverDataTypes.ULong: return((ushort)(count * 8)); case IODriverDataTypes.Float: return((ushort)(count * 4)); case IODriverDataTypes.Double: return((ushort)(count * 8)); default: return((ushort)(count * 2)); } }
public bool BeginWrite(Channel ch, Device dv, Tag item, string value) { IODriverDataTypes iODriverDataTypes = (IODriverDataTypes)Enum.Parse(typeof(IODriverDataTypes), item?.DataType); string address = item.Address; switch (iODriverDataTypes) { case IODriverDataTypes.BitOnByte: { string text3 = item.Address.Substring(1, 1); item.Address.Substring(2, 1); string text4 = item.Address.Remove(0, 3); int num3 = 0; int num4 = 0; switch (text3) { case "I": case "Q": case "U": { string[] array4 = text4.Split(new char[1] { '.' }, 4); address = "%" + text3 + "B" + array4[0] + "." + array4[1] + "."; num3 = int.Parse(array4[2]); num4 = int.Parse(array4[3]); break; } default: { string[] array3 = text4.Split(new char[1] { '.' }, 2); address = "%" + text3 + "B"; num3 = int.Parse(array3[0]); num4 = int.Parse(array3[1]); break; } } address = $"{address}{(num3 * 8 + num4) / 8}.{num4 % 8}"; break; } case IODriverDataTypes.BitOnWord: { string text = item.Address.Substring(1, 1); item.Address.Substring(2, 1); string text2 = item.Address.Remove(0, 3); int num = 0; int num2 = 0; switch (text) { case "I": case "Q": case "U": { string[] array2 = text2.Split(new char[1] { '.' }, 4); address = "%" + text + "B" + array2[0] + "." + array2[1] + "."; num = int.Parse(array2[2]); num2 = int.Parse(array2[3]); break; } default: { string[] array = text2.Split(new char[1] { '.' }, 2); address = "%" + text + "B"; num = int.Parse(array[0]); num2 = int.Parse(array[1]); break; } } address = $"{address}{(num * 16 + num2) / 8}.{num2 % 8}"; break; } } if (double.TryParse(value, out double result)) { _SendTo(new LSRequestMessage(LSNetBase.GetRequestType(iODriverDataTypes), (byte)dv.SlaveId, new _PieceData(address, iODriverDataTypes, result))); } return(false); }
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); }