private void Parse() { try { var commaSplit = Frame.Split(','); List <byte> bytes = new List <byte>(commaSplit.Length); foreach (var part in commaSplit) { if (!byte.TryParse(part, out var temp)) { throw new InvalidOperationException($"Unable to parse '{part}'"); } bytes.Add(temp); } byte[] frame = bytes.ToArray(); Result = FunctionServiceManager.Process(frame); } catch (Exception ex) { Result = new FunctionServiceResult(error: ex.Message); } }
public PacketViewModel(IEnumerable <Sample> samples) { if (samples == null) { throw new ArgumentNullException(nameof(samples)); } _samples = samples.ToArray(); if (_samples.Length > 0) { SlaveId = _samples[0].Value; } if (_samples.Length > 1) { FunctionCode = _samples[1].Value; FunctionCodeDescription = FunctionCodeDescriptionFactory.GetFunctionCodeDescription(_samples[1].Value); } //Get the raw message in bytes var message = _samples.Select(s => s.Value).ToArray(); if (_samples.Length < 5) { Error = $"Only {_samples.Length} samples - not enough samples to make a valid Modbus packet."; } else { if (!message.DoesCrcMatch()) { Error = "CRC Mismatch"; } } if (!HasError) { _serviceResult = FunctionServiceManager.Process(_samples); Summary = _serviceResult.Summary; Error = _serviceResult.Error; } }