private static PumpCard PopulatePumpCard(List <ModbusRegisterValue> registerValues) { if (registerValues == null || registerValues.Count == 0) { System.Console.WriteLine("Empty register values passed."); return(null); } Console.WriteLine("Parsing pump card."); PumpCard pumpCard = new PumpCard() { CardCoordinates = new List <CardCoordinate>() }; var timestampProp = ModbusMessage.PumpLayoutConfig.Timestamp; if (timestampProp != null) { int timestamp = 0; var timeStampValues = GetValueArray(timestampProp.RegisterNumber, timestampProp.NumberOfRegisters, registerValues); if (timeStampValues != null && timeStampValues.Count > 1) { short left = (short)Int32.Parse(timeStampValues[0]); short right = (short)Int32.Parse(timeStampValues[1]); timestamp = left; timestamp = (timestamp << 16); timestamp = timestamp | (int)(ushort)right; } DateTime dateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); dateTime = dateTime.AddSeconds(timestamp).ToLocalTime(); pumpCard.Timestamp = dateTime; } var maxLoadProp = ModbusMessage.PumpLayoutConfig.MaxLoad; if (maxLoadProp != null) { var maxLoadpValues = GetValueArray(maxLoadProp.RegisterNumber, maxLoadProp.NumberOfRegisters, registerValues); if (maxLoadpValues != null && maxLoadpValues.Count > 0) { pumpCard.ScaledMaxLoad = Int32.Parse(maxLoadpValues.First()); } } var minLoadProp = ModbusMessage.PumpLayoutConfig.MinLoad; if (minLoadProp != null) { var minLoadValues = GetValueArray(minLoadProp.RegisterNumber, minLoadProp.NumberOfRegisters, registerValues); if (minLoadValues != null && minLoadValues.Count > 0) { pumpCard.ScaledMinLoad = Int32.Parse(minLoadValues.First()); } } var grossStroke = ModbusMessage.PumpLayoutConfig.GrossStroke; if (grossStroke != null) { var grossStrokeValues = GetValueArray(grossStroke.RegisterNumber, grossStroke.NumberOfRegisters, registerValues); if (grossStrokeValues != null && grossStrokeValues.Count > 0) { pumpCard.GrossStroke = Int32.Parse(grossStrokeValues.First()); } } var netStroke = ModbusMessage.PumpLayoutConfig.NetStroke; if (netStroke != null) { var netStrokeValues = GetValueArray(netStroke.RegisterNumber, netStroke.NumberOfRegisters, registerValues); if (netStrokeValues != null && netStrokeValues.Count > 0) { pumpCard.NetStroke = Int32.Parse(netStrokeValues.First()); } } var fluidLoad = ModbusMessage.PumpLayoutConfig.NetStroke; if (fluidLoad != null) { var fluidLoadValues = GetValueArray(fluidLoad.RegisterNumber, fluidLoad.NumberOfRegisters, registerValues); if (fluidLoadValues != null && fluidLoadValues.Count > 0) { pumpCard.FluidLoad = Int32.Parse(fluidLoadValues.First()); } } var pumpFillage = ModbusMessage.PumpLayoutConfig.NetStroke; if (pumpFillage != null) { var pumpFillageValues = GetValueArray(pumpFillage.RegisterNumber, pumpFillage.NumberOfRegisters, registerValues); if (pumpFillageValues != null && pumpFillageValues.Count > 0) { pumpCard.PumpFillage = Int32.Parse(pumpFillageValues.First()); } } var numberOfPointsProp = ModbusMessage.PumpLayoutConfig.NumberOfPoints; int numberOfDataPoints = 0; if (numberOfPointsProp != null) { var numberOfPointsValues = GetValueArray(numberOfPointsProp.RegisterNumber, numberOfPointsProp.NumberOfRegisters, registerValues); if (numberOfPointsValues != null && numberOfPointsValues.Count > 0) { numberOfDataPoints = Int32.Parse(numberOfPointsValues.First()); //Get just the low byte of the value numberOfDataPoints = Int32.Parse(numberOfPointsValues.First()); Console.WriteLine($"Number of pump card points 16-bit value: {numberOfDataPoints}"); numberOfDataPoints = (int)(ushort)numberOfDataPoints; Console.WriteLine($"Number of pump card points 8-bit value: {numberOfDataPoints}"); pumpCard.NumberOfPoints = numberOfDataPoints; if (numberOfDataPoints == 0) { //If the number of detail points is 0, that's an indication we have bad data. Console.WriteLine("Zero coordinates found. Returning null card."); return(null); } List <CardCoordinate> cardCoordinates = new List <CardCoordinate>(); var pointArrayProperty = ModbusMessage.PumpLayoutConfig.Point; for (int i = 0; i < pumpCard.NumberOfPoints; i += pointArrayProperty.NumberOfRegisters) { var pointsArray = GetValueArray(pointArrayProperty.RegisterNumber + i, pointArrayProperty.NumberOfRegisters, registerValues); if (pointsArray != null && pointsArray.Count > 1) { cardCoordinates.Add(new CardCoordinate() { Load = Int32.Parse(pointsArray[0]), Position = Int32.Parse(pointsArray[1]) }); } } pumpCard.CardCoordinates = cardCoordinates; } } return(pumpCard); }
public DynoCard() { SurfaceCard = new SurfaceCard(); PumpCard = new PumpCard(); }