Die Prüfung konnte nicht abgeschlossen werden. Fehler

2. Fehlerfall //es wäre schon sehr eigenartig, wenn verschiedene Fehlercodes nacheinander ausgespuckt würden (Wackelkontakt?) if($bridges1 !== $bridges2) { measurementsDiffer($bridges1, $bridges2); } // Isoliere die Brücken und speichere sie als $bridges (hiermit wird später alles weitere verarbeitet) $bridges = array_map(function($entry) { return $entry[0]; }, $bridges1); //Isoliere die Fehlercodes der ersten Messung; da Messungen identisch reicht erste Messung $errors = array_filter($bridges1, function($entry) { return $entry[1] !== 0; }); //Wenn Fehlerspeicher gefüllt: Ausgabe und Abbruch if (!empty($errors)) { measurementsContainErrors($bridges1); } // ---------- //Ab hier wird die Logik geprüft, die Messung ist bis hierhin äußerlich in Ordnung // ---------- //Hier wird jetzt geprüft, dass jede Messung bidirektional aufgenommen wurde, also 10<>20 UND 20<>10 $doubles = []; // Array zur Verfolgung von Doppelungen $errors = []; // Array für fehlende Doppelungen // Untersuche die einzelnen aufgenommenen Messpaare foreach ($bridges as $pair) { // Jedes Paar MUSS aus zwei Elementen bestehen if (count($pair) !== 2) { $errors[] = $pair; // speichere diesen fehlerhaften Eintrag continue; } // Sortiere die Paare, um [23,14] und [14,23] gleich zu behandeln sort($pair); // Setze dieses Paar als "Index", um es gleich wieder zu finden $key = implode("-", $pair); // Prüfe, ob dieser Eintrag schon einmal da war if (isset($doubles[$key])) { $doubles[$key]++; // Verbindung erneut gefunden } else { $doubles[$key] = 1; // Erstmaliges Auftreten } } // Überprüfe, ob jede Verbindung genau zweimal vorhanden ist foreach ($doubles as $key => $count) { if ($count !== 2) { $errors[] = $key; } } // Abbruch bei fehlenden Doppelungen if (!empty($errors)) { echo "Die Messung wurde zwar erfolgreich abgeschlossen, die Messergebnisse überzeugten jedoch nicht.
Es ist notwendig, dass Kabelbrücken aus beiden Richtungen erkannt werden.
Erwägen Sie, eine erneute Messung durchzuführen. Sollte der Fehler erneut auftreten, ist ein interner Defekt des Prüfgeräts wahrscheinlich.

Die folgende(n) Kabelbrücke(n) konnte(n) nur one-way gemessen werden:
"; print_r($errors); ?>
Zurück
Ergebnis

Gesamtergebnis

Einzelbrücken


Identifizierte Brücken

query(" SELECT b.id AS bridge_id, n.node_from, n.node_to FROM bridges b JOIN nodes n ON b.id = n.required_by ORDER BY b.id "); /* Ausgabe sieht z.B. so aus: | bridge_id | node_from | node_to | | --------- | --------- | ------- | | 1 | 20 | 30 | | 1 | 13 | 17 | | 2 | 10 | 15 | */ //die DB-ausgbe wird als indexiertes Array gespeichert, um einfacher durchsucht werden zu können $bridges_db = []; while ($row = $nodes->fetchArray(SQLITE3_ASSOC)) { //Die Bridge-ID ist der Index, die geforderten Brücken werden im Standardformat eingefügt, z.B.: 1 => [[20,30],[13,17]] $bridge_id = $row['bridge_id']; $bridges_db[$bridge_id][] = [$row['node_from'], $row['node_to']]; } //Vergleiche Datenbank mit gemessenen Werten //iteriere durch alle Datenabnk-Brücken foreach($bridges_db as $bridge_db => $required_nodes) { $satisfied = true; //iteriere durch alle von einer Brücke geforderten Node-Paare foreach($required_nodes as $required_nodes_pairs) { $innerMatch = 0; // vergleiche die aktuelle Datenbank-Node mit allen gemessenen Nodes (+überkreuz) for($i=0;$i<$measurement_result_number;$i++) { if(($required_nodes_pairs[0] == $measurement_result[$i][0] && $required_nodes_pairs[1] == $measurement_result[$i][1] )||($required_nodes_pairs[1] == $measurement_result[$i][0] && $required_nodes_pairs[0] == $measurement_result[$i][1])){ // innerhalb der Node-zu-Node-Verbidnung wurde die Bedingung erfüllt $innerMatch = 1; } } if($innerMatch != 1) { // An dieser Stelle wird satisfied direkt negiert, da mind. eine Abhängigkeit, die in der Datenbank gefordert ist, nicht gefunden wurde $satisfied = false; } } // Kommen alle Nodes vor, wird die Brücke mit ihrem entsprechenden Namen dargestellt if($satisfied == true) { //Brücke vollständig enthalten -> speichern für später (Programm-Erkennung) $identified_bridges[] = $bridge_db; //Erinnerung: es gilt bridge_db=>bridges_db $url = '../stecker.php?data=' . urlencode(json_encode($bridges_db[$bridge_db])); // URL parsen ?>
' . $bridge_db . '
'); print(''); ?> query(" SELECT p.id AS program_id, p.program_description, b.id AS bridge_id, r.plug_id FROM program_bridge_relation r JOIN programs p ON p.id = r.program_id JOIN bridges b ON b.id = r.bridge_id WHERE r.plug_id = '" . $plug . "' "); /* Ausgabe sieht z.B. so aus: | program_id | program_description | bridge_id | | ---------- | ------------------- | --------- | | 1 | Weiche, die... | 1 | | 2 | Gs, die... | 1 | | 2 | Gs, die... | 10 | */ $bridges_db = []; while ($row = $programs->fetchArray(SQLITE3_ASSOC)) { // Gleiches vorgehen wie bei den Brücken: Programm-ID ist Index, Brücken sind Inhalt (2 => [1,10]) $program_id = $row['program_id']; $programs_db[$program_id][] = $row['bridge_id']; $program_descriptions[$program_id] = $row['program_description']; } //Ist eine Stelle der Kennung des Programmsteckers zwischendrin doppelt beschrieben woren, wird idse Variable wahr $double_program_identifier = false; ?>

Identifizierte Programme

$required_bridges) { if(!empty($identified_bridges)) { //Abscicherung, sonst würde ein leeres Programm immer als vollständig enthalten markiert werden $ok = 1; } else { $ok = 0; } // Iteriere durch alle geforderten Brücken foreach ($required_bridges as $bridge_id) { // sollte sich eine Programmbrücke nicht unter den identifizierten Messwerte befinden -> ok=0 if (!in_array($bridge_id, $identified_bridges)) { $ok = 0; } } // Programm ist mit allen Brücken vollständig vertreten if($ok == 1) { ?>
query("SELECT * FROM program_id_bits WHERE program_id = '" . $program_db . "' ORDER BY position;"); while ($program_identifier = $program_identifiers->fetchArray(SQLITE3_ASSOC)) { echo '' . $program_identifier["value"] . ''; if($program_identifier["value"] != "" && $program_identifier["value"] != "-") { // wenn noch nicht anders beschrieben oder leer -> Einfügen in großen "Gesamtspeicher" für später if($program_cache[$program_identifier["position"]] == "?") { $program_cache[$program_identifier["position"]] = $program_identifier["value"]; } else { // Wenn Stelle schon gesetzt war -> Warnung speichern $double_program_identifier = true; } } $i++; } ?>
'); ?>

Kennungs-Nummer

' . $cacheChar . ''; if($cacheChar == "?") { $ok = 0; } } ?>

Wichtiger Hinweis: Es sind nicht alle Stellen der Kennungsnummer definiert. Dies deutet darauf hin, dass möglicherweise nicht alle Programme des Steckers korrekt erkannt wurden. Andererseits kann auch die Programm-Datenbank unvollständig sein, sodass eine Erkennung nicht möglich ist.
Betrachten Sie daher das Ergebnis mit Vorsicht!

Wichtiger Hinweis: Im Laufe der Programmabgleiche wurde versucht, eine Stelle der Gesamtkennungsnummer zu übeschreiben, da diese bereits durch ein vorheriges Programm festgelegt wurde. Details dazu finden Sie unter "Indentifizierte Programme". Bitte gleichen Sie die Spalten ab, ob eine doppelte Stellendefinition vorliegt!
Betrachten Sie daher das Ergebnis mit Vorsicht!


Identische Messungen

query(" SELECT m.id AS measurement_id, m.comment AS comment, m.timestamp AS timestamp, m.place_name AS place_name, n.node_from AS node_from, n.node_to AS node_to FROM measurements m JOIN places p ON p.name = m.place_name JOIN measurement_nodes n ON m.id = n.required_by ORDER BY m.id "); /* Ausgabe sieht z.B. so aus: | measurement_id | comment | timestamp | place_name | node_from | node_to | | -------------- | ------- | ---------- | -------------------- | --------- | ------- | | 1 | abc | 1753357680 | Mannheim-Waldhof Wf | 20 | 26 | | 1 | abc | 1753357680 | Mannheim-Waldhof Wf | 13 | 16 | | 1 | abc | 1753357680 | Mannheim-Waldhof Wf | 30 | 35 | | 2 | def | 1753357548 | Dudweiler Df | 30 | 35 | | 2 | def | 1753357548 | Dudweiler Df | 10 | 12 | */ // Auch hier werden alle Messungen erstmal komplex indexiert (also zwei ineinander indexierte Arrays): measurement_id=>(nodes=>[[30,35],[10,12]], place_name, timestamp, comment) $measurements_db = []; while ($row = $measurement_nodes_db->fetchArray(SQLITE3_ASSOC)) { $measurement_id = $row['measurement_id']; $measurements_db[$measurement_id]['nodes'][] = [$row['node_from'],$row['node_to']]; $measurements_db[$measurement_id]['place_name'] = $row['place_name']; $measurements_db[$measurement_id]['timestamp'] = $row['timestamp']; $measurements_db[$measurement_id]['comment'] = $row['comment']; } //Indikator, dass alle Brücken gefunden wurden $ok = 0; foreach ($measurements_db as $measurement_db) { $satisfied = true; foreach ($measurement_result as $bridge_measure) { $found = false; foreach ($measurement_db["nodes"] as $measurement_db_node) { // Prüfe, ob Brücke identisch (+ überkreuz) if ( ($bridge_measure[0] == $measurement_db_node[0] && $bridge_measure[1] == $measurement_db_node[1]) || ($bridge_measure[0] == $measurement_db_node[1] && $bridge_measure[1] == $measurement_db_node[0]) ) { $found = true; // Brücke gefunden break; // Nächste Brücke prüfen } } if (!$found) { // Diese Brücke nicht in DB gefunden -> Messung nicht erfüllt $satisfied = false; break; // weitere Brücken prüfen sinnlos } } if ($satisfied) { $ok = 1; ?>
" . date('d.m.Y H:i:s',$measurement_db["timestamp"]) . ""; ?>

Keine bekannt.


Anpassen der Ergebnisse

Kennungs-Nr.

Sekundärbrücken abwählen

Besonderheiten


Speichern unter...?

Die dargestellten Vorschläge befinden sich bereits in der Datenbank. Geben Sie einen Ort sein, der noch nicht in der Datenbank vorhanden ist, so wird dieser automatisch erstellt


Zurück