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);
            }
        }
Exemple #2
0
        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;
            }
        }