public async Task <bool> Start(ConfigViewModel config, Sensors mcuSensors)
        {
            _serialPort.PortName = config.PortName;
            _config  = config;
            _command = Command.Proceed;

            try
            {
                _serialPort.Open();

                _runningCollector = Task.Factory.StartNew(ReceiveProtobuf,
                                                          CancellationToken.None, TaskCreationOptions.LongRunning, TaskScheduler.Default)
                                    .Unwrap();

                // Send configuration to MCU and begin
                _serialPort.Write(mcuSensors.ToByteArray(), 0, mcuSensors.CalculateSize());
            }
            catch (Exception)
            {
                _serialPort.Close();
                return(false);
            }

            while (!SensorsDTO.Data.Any())
            {
                await Task.Delay(8);
            }

            return(true);
        }
Пример #2
0
        private static void TrySerial(bool run = false)
        {
            if (!run)
            {
                return;
            }

            using var serial = new SerialPort
                  {
                      PortName  = "COM4",
                      BaudRate  = 115200,
                      Parity    = Parity.None,
                      DataBits  = 7,
                      StopBits  = StopBits.One,
                      DtrEnable = true
                  };

            var sensors = new Sensors
            {
                List =
                {
                    new Sensor
                    {
                        Analog = new AnalogSensor
                        {
                            UpperRange = 1023,
                            LowerRange = 0
                        },
                        MeasurementUnit = "B47", //Kilonewton
                        Pin             = 20
                    },
                    new Sensor
                    {
                        Digital         = new DigitalSensor(),
                        MeasurementUnit = "1N",
                        Pin             = 10
                    }
                }
            };

            try
            {
                serial.Open();
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                return;
            }

            using var file             = System.IO.File.CreateText("D:\\Users\\pdimp\\Pictures\\output.txt");
            using var codedInputStream = new CodedInputStream(serial.BaseStream);
            var s = new Stopwatch();

            serial.DataReceived += (sender, eventArgs) =>
            {
                s.Reset();
                s.Start();
                var ss = new Sensors();
                codedInputStream.ReadMessage(ss);
                s.Stop();
                Console.WriteLine($"pc time after parsing: {s.Elapsed.TotalMilliseconds} ms");
                Console.WriteLine($"timestamp: {ss.Timestamp}");
                //foreach (var s in ss.List)
                //    switch (s.TypeCase)
                //    {
                //        case Sensor.TypeOneofCase.Analog:
                //            file.WriteLine($"analog: {s.Analog.Value} {s.MeasurementUnit}");
                //            break;
                //        case Sensor.TypeOneofCase.Digital:
                //            file.WriteLine($"digital: {s.Digital.Value} {s.MeasurementUnit}, time of change: {s.Digital.Timestamp}");
                //            break;
                //        default:
                //            file.WriteLine("Sensor type is unknown");
                //            break;
                //    }
            };

            serial.Write(sensors.ToByteArray(), 0, sensors.CalculateSize());

            Console.ReadKey();
            serial.Close();
            Console.ReadKey();
        }