Пример #1
0
        /// <summary>
        /// Data received event.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            if (!isCollecting)
            {
                return;
            }
            byte[] data = new byte[36];
            try
            {
                while (SerialCOM.serialPort.ReadByte() != 255)
                {
                    ;
                }
                while (SerialCOM.serialPort.BytesToRead < 36)
                {
                    ;
                }
                SerialCOM.serialPort.Read(data, 0, 36);
            }
            catch (Exception ex)
            {
                Logger.Debug(ex, "Cannot read data from serial port.");
                return;
            }
            DataPackage dataPackage = DataPackage.Decode(data);

            if (dataPackage == null || !dataPackage.passCrc32)
            {
                return;
            }
            dataBaseUtils?.PostData(dataPackage);
            dataLogger.AddData(dataPackage.DataString);
            SensorInfo sensorInfo = SensorInfos.Find(x => x.SensorID == dataPackage.SensorID);

            if (sensorInfo == null)
            {
                //Add undefined sensor to list.
                SensorInfo info = new SensorInfo()
                {
                    Name       = "Undefind" + dataPackage.SensorID.ToString(),
                    SensorID   = dataPackage.SensorID,
                    SensorType = (SensorInfo.Types)(dataPackage.SensorTYpe - 1),
                    NetWorkID  = dataPackage.NetworkID,
                };
                SensorInfos.Add(info);
                Application.Current.Dispatcher.Invoke(() => //Use invoke to refresh UI elements
                {
                    NodeList.Items.Refresh();
                });
                sensorInfo = info;
                //Set as Anemometer if it is not found before.
                if (WindSensor == null && info.SensorType == SensorInfo.Types.Anemometer)
                {
                    WindSensor = info;
                }
            }
            if (sensorInfo.SensorType != (SensorInfo.Types)(dataPackage.SensorTYpe - 1))
            {
                return;
            }
            //Add data to sensor data class and plot
            sensorInfo.SensorData.GetSensorData(dataPackage);
            if (sensorInfo == SelectedSensor)
            {
                using (sciChartSurface.SuspendUpdates())
                {
                    SelectedSensor.SensorData.PlotControl.RefreshLimit(DateTime.Now);
                    LineSeries.DataSeries = SelectedSensor.SensorData.PressureLine;
                }
            }
            if (sensorInfo == WindSensor)
            {
                using (sciChartSurface.SuspendUpdates())
                {
                    WindSeries.DataSeries = WindSensor.SensorData.WindPlot;
                }
            }
        }