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);
?>

" />
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
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