# Linienscanner Höhe Breite einen Produkts ermitteln



## Korpos (18 November 2021)

Hallo zusammen,

ich bin grade dabei eine Funktion zu schreiben die mir aus meinen X und Z Werten die ich durch meinen Linienscanner erhalte die Breite und Höhe eines Paketes zu bestimmen. Ich denke wenn meine Werte Linear wären und nicht Springen/Unebenheiten da wären würde der Code denn ich geschrieben habe funktionieren. Jetzt habe ich mir aber die Frage gestellt wie man eine bessere Lösung schreiben würde wenn das ganze nicht mehr Linear ist und meine Werte rauschen würden wie auf dem Bild. Vielleicht hat ja jemand eine Idee/Tipp, mir fällt im Moment keine wirkliche Lösung dazu ein.

Vielen Dank schon mal

```
#n := 0;
#Anfang_max := FALSE;
#Anfang_steigung := FALSE;
#merke_pos_anfang := 0;
#merke_pos_ende := 0;

WHILE #n < #Nutzdaten-1 DO
    IF "Datenpaket_Z_X".Messdaten.Z_Kordinaten[#n] = "Datenpaket_Z_X".Messdaten.Z_Kordinaten[#n + 1] AND NOT #Anfang_steigung THEN // "0 Punkt" ignorieren
        #n += 1;
    ELSIF "Datenpaket_Z_X".Messdaten.Z_Kordinaten[#n] < "Datenpaket_Z_X".Messdaten.Z_Kordinaten[#n + 1] AND NOT #Anfang_max THEN //Steigung fängt an
        #n += 1;
        #Anfang_steigung := TRUE;
    ELSIF #Anfang_steigung THEN // Anfang gefunden  
        #max_z := "Datenpaket_Z_X".Messdaten.Z_Kordinaten[#n];
        #merke_pos_anfang := #n;
        #Anfang_max := TRUE;
    ELSIF "Datenpaket_Z_X".Messdaten.Z_Kordinaten[#n] <= "Datenpaket_Z_X".Messdaten.Z_Kordinaten[#n + 1] AND #Anfang_max THEN // Nach ENDE des Paketes suchen
        #n += 1;
    ELSE //Ende gefunden
        #merke_pos_ende := #n;
        #Paket_Breite := "Datenpaket_Z_X".Messdaten.X_Kordinaten[#merke_pos_ende] - "Datenpaket_Z_X".Messdaten.X_Kordinaten[#merke_pos_anfang];
        #Paket_hoehe := #max_z - "Datenpaket_Z_X".Messdaten.Z_Kordinaten[0]; // Wenn das Paket natürlich genau am Rand liegt also am Anfang stimmt dies nicht mehr
        EXIT;
    END_IF;
END_WHILE;

//DB wird geleert
FOR #n := 0 TO #Nutzdaten-1 DO
    "Datenpaket_Z_X".Messdaten.Z_Kordinaten[#n] := 0;
    "Datenpaket_Z_X".Messdaten.X_Kordinaten[#n] := 0;
END_FOR;
```


----------



## Blockmove (18 November 2021)

Linenscanner an Kanten ist immer so eine Sache.
Wenn du "normale" Pakete hast, dann ist ein Schwellwert für Anfang / Ende auch eine Möglichkeit.


----------



## Larry Laffer (18 November 2021)

Sehen die Werte tatsächlich so "katastrophal" aus ?
Wie auch immer - ich nehme an, dass dein eingescanntes Paket keine Trapez-Form hat - oder ? Das heißt, dass du wissen möchtest wie weit die obere Linie des "Trapezes" von der Boden-Linie entfernt und wie breit sie oben ist - soweit korrekt ?
Um da näher an die eigentliche Form des Trapezes  heran zu kommen würde die Kurve zunächst glätten und dann in der geglätteten Kurve die Ecken suchen. Die findest dadurch, dass du die Änderung des Anstiegswinkels suchst.

Gruß
Larry


----------



## Korpos (19 November 2021)

Vielen Dank euch beiden


Larry Laffer schrieb:


> Sehen die Werte tatsächlich so "katastrophal" aus ?


Ich denke nicht, habe denn Linienscanner leider noch nicht. Und habe sie nur als Verdeutlichung so schlimm bearbeitet. Da ich noch nie mit einem Linienscanner gearbeitet habe, nutzte ich eine Grafik aus dem Handbuch(es wurde nicht gezeigt wie das Objekt ausgesehen hat). Ich dachte das Trapez könnte vielleicht durch eine Abschattung entstehen. 


Larry Laffer schrieb:


> Das heißt, dass du wissen möchtest wie weit die obere Linie des "Trapezes" von der Boden-Linie entfernt und wie breit sie oben ist - soweit korrekt ?


korrekt 



Larry Laffer schrieb:


> Um da näher an die eigentliche Form des Trapezes heran zu kommen würde die Kurve zunächst glätten und dann in der geglätteten Kurve die Ecken suchen. Die findest dadurch, dass du die Änderung des Anstiegswinkels suchst.


Gibt es dafür vielleicht sogar einen fertigen Baustein für Glättungen/Filter (cpu 1500er) ? Ich könnte es zwar auch Tippen aber wenn es so etwas schon gibt.


----------



## Korpos (19 November 2021)

Fragen haben sich geklärt, habe einen neuen Code geschrieben


----------



## Larry Laffer (19 November 2021)

OK ... prima ... ich dachte schon, dass ich hier vielleicht "ein bisschen" knapp geschrieben hatte ...


----------

