Beispiel #1
0
        private void returnToIdle(RSCommunication rsConnector, bool fileHandlerExist, string errorMessage = "")
        {
            if (errorMessage != "")
            {
                System.Windows.MessageBox.Show(errorMessage);
            }

            rsConnector.changeAVGInDevice("1");
            if (fileHandlerExist)
            {
                fileHandler.closeWriter();
            }
            System.Threading.Thread.Sleep(200);
            rsConnector.unlockKeypadInDevice();
            rsConnector.closePort();
            rsConnector.Dispose();
            SendButton.Content = "Wykonaj test";
        }
Beispiel #2
0
        private void ExecuteTests()
        {
            // pobieranie parametrów połączenia z urządzeniem
            var baudRate  = TransSpeed.Text == "" ? 115200 : uint.Parse(TransSpeed.Text);
            var dataBits  = DataBit.Text == "" ? 8 : uint.Parse(DataBit.Text);
            var parity    = Enum.Parse(typeof(Parity), ParityList.Text);
            var stopBits  = Enum.Parse(typeof(StopBits), StopBitsList.Text);
            var handshake = Enum.Parse(typeof(Handshake), Handshakes.Text);

            string[] frequencies = new string[4];

            if (ModeList.SelectedItem.ToString() != "DCR")
            {
                frequencies[0] = Freq1.Text;
                frequencies[1] = Freq2.Text;
                frequencies[2] = Freq3.Text;
                frequencies[3] = Freq4.Text;
            }
            else
            {
                frequencies[0] = Freq1.Text;
            }

            if (rsConnector == null || !rsConnector._serialPort.IsOpen)
            {
                try
                {
                    rsConnector = new RSCommunication(
                        portName: ComPorts.Text,
                        baudRate: baudRate,
                        parityNumber: (Parity)parity,
                        dataBits: dataBits,
                        stopBits: (StopBits)stopBits,
                        handshakeType: (Handshake)handshake
                        );
                }
                catch (ArgumentException)
                {
                    System.Windows.MessageBox.Show("Nie można się połączyć z danym portem");
                    return;
                }
                catch (FileNotFoundException)
                {
                    System.Windows.MessageBox.Show("Nie można się połączyć z danym portem, jesteś pewien, że nie został w trakcie rozłączony?");
                    return;
                }
            }
            // zmienne pomocnicze
            int  waitMs;
            bool continueMeas  = true;
            int  deviceCounter = 1;

            System.Threading.Thread.Sleep(2000);

            if (AVGTextLabel.Visibility == Visibility.Visible)
            {
                if (int.Parse(AVGValue.Text) >= 1 && int.Parse(AVGValue.Text) <= 256)
                {
                    rsConnector.changeAVGInDevice(AVGValue.Text);
                    // obliczane dokładnie na podstawie testów oczekiwania na maszynie Gwinstek LCR 6300
                    // 1,5s dodane żeby upewnić się co do przewidywalności wyników
                    waitMs = (int)((int.Parse(AVGValue.Text) / 2.9090909 + 1.5) * 1000);
                }
                else
                {
                    returnToIdle(rsConnector, false, "Podano niepoprawną wartość AVG, poprawne wartości to liczby całkowite z zakresu od 1 do 256");
                    return;
                }
            }
            else
            {
                rsConnector.changeAVGInDevice("1");
                waitMs = 700;
            }

            System.Threading.Thread.Sleep(2000);

            if (ModeList.SelectedItem.ToString() != "DCR")
            {
                System.Windows.MessageBox.Show("Rozpoczynanie mierzenia dla parametrów: Częstotliwości: " + Freq1.Text + " " + Freq2.Text + " " + Freq3.Text + " " + Freq4.Text);
            }
            else
            {
                System.Windows.MessageBox.Show("Rozpoczynanie mierzenia dla parametrów: Częstotliwości: " + Freq1.Text);
            }

            // główna pętla
            while (continueMeas)
            {
                // dwa sposoby wyjścia z pętli
                // 1 : test wielu kondenstatorów : wybór z okienka (if)
                // 2 : test pojedyńczego kondensatora : automatyczne wyjście (else)
                if (!(bool)SerialTest.IsChecked)
                {
                    MessageBoxResult result = System.Windows.MessageBox.Show("Jeśli chcesz rozpocząć mierzenie urządzenia numer: " + deviceCounter + " kilknij OK, jeśli chcesz zakończyć mierzenie wciśnij Cancel", "Czy kontynuować?", MessageBoxButton.OKCancel);
                    if (result != MessageBoxResult.OK)
                    {
                        returnToIdle(rsConnector, false);
                        continueMeas = false;
                        break;
                    }
                }
                else
                {
                    MessageBoxResult result = System.Windows.MessageBox.Show("Jeśli chcesz rozpocząć test seryjny urządzenia kilknij OK, jeśli nie wciśnij Cancel", "Czy kontynuować?", MessageBoxButton.OKCancel);
                    if (result != MessageBoxResult.OK)
                    {
                        returnToIdle(rsConnector, false);
                        continueMeas = false;
                        break;
                    }
                    continueMeas = false;
                }


                // pobieranie i zapisywanie danych do csv
                try
                {
                    if (int.Parse(Cycles.Text) < 0)
                    {
                        returnToIdle(rsConnector, false, "Podana wartość dla cykli jest za mała, należy podać liczbę całkowitą większą od 0");
                        return;
                    }

                    for (int cycle = 0; cycle < int.Parse(Cycles.Text); cycle++)
                    {
                        foreach (string freq in frequencies)
                        {
                            if (freq != "" && freq != "0" && !string.IsNullOrEmpty(freq))
                            {
                                uint freqNumber = RSCommunication.convertHz(freq);
                                if ((freqNumber < 10 && freqNumber != 0) || freqNumber > 300000)
                                {
                                    returnToIdle(rsConnector, false, "Podano niepoprawną wartość częstotliwości, Hz musi byc w zakresie od 10 do 300kHz");
                                    return;
                                }

                                System.Threading.Thread.Sleep(3000);
                                rsConnector.changeHzInDevice(freq);


                                decimal[] responseParams = new decimal[3];
                                try
                                {
                                    // pobieranie danych z urządzenia
                                    responseParams = rsConnector.getMeasurementParams(
                                        ModeList.Text,                                                                            // tryb pomiaru
                                        unitList.Text,                                                                            // mnożnik SI
                                        waitFetchMs: waitMs,                                                                      // odstęp czasowy
                                        addD: (DParameter.Visibility == Visibility.Hidden) ? false : DParameter.IsChecked == true // parametr D
                                        );
                                }
                                catch (TimeoutException)
                                {
                                    returnToIdle(rsConnector, false, "Przekroczono czas oczekiwania na odpowiedź, czy jesteś pewny, że parametry połączenia się zgadzają?");
                                    return;
                                }
                                catch (Exception)
                                {
                                    returnToIdle(rsConnector, false, "Wstrzymano pomiar");
                                    return;
                                }

                                // zapis do pliku csv
                                fileHandler.writeCSV(responseParams, unitList.Text, freq, ModeList.Text, cycle + 1, AVGValue.Text, deviceCounter);
                            }
                        }
                    }
                    deviceCounter += 1;
                }
                catch (FormatException)
                {
                    returnToIdle(rsConnector, false, "Podano nienumeryczną lub niepoprawną wartość dla częstotliwości bądź cyklów!");
                    return;
                }
            }
            fileHandler.closeWriter();
            System.Windows.MessageBox.Show("Zakończono wszystkie testy");
        }