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"; }
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"); }