Großer Vergleicherbaustein mit SCL

Boka

Level-1
Beiträge
6
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten tag,

ich stehe vor der Aufgabe eine Station zu bauen die Gewinde erkennen soll.
Ich bekomme von einer Kamera auf die SPS Verschiedene Werte wie Länge, Breite, Anstieg des Gewindes usw. Jetzt muss ich anhand dieser Werte herausfinden welches der 28 Möglichen Gewinde es ist. Hat da jemand eine Idee wie das einfach lösbar ist. 20 mal die einzelnen Werte nacheinander zu vergleichen wird sehr aufwenig. geht da villeicht was mit Arrays? bin mit SCL noch nicht so vertraut, aber der Kunde will es so
 
Hallo,

ich würde ein UDT anlegen wo nur die Parameter drin gespeichert sind die auch von der Kamera kommen.
In einem DB sind die 28 Gewindetypen gespeichert: Array[1..28 of GewindeTypUDT].

Die Daten die von der Kamera kommen schiebst du in ein vergleichsUDT gleichen Types. Danach brauchst du nur die UDT's in einer Schleife über die 28 Einträge mit GLEICH vergleich.

Code:
FOR #i := 1 to 28 DO
  IF VergleichsUDT = GewindetypUDT[#i] then
    Typ gefunden -> Mach irgendwas
    EXIT;
  End_IF;
End_FOR;

So geht es mit TIA V14 SP1. Das sollte relativ flott sein.


Stefan
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ganz so einfach wird die Lösung wohl nicht sein.
Ich gehe mal davon aus, dass bei der Prüfung der Messwerte zu den 28 verschiedenen Möglichkeiten auch Toleranzen eine Rolle spielen.
Boka wird nicht drum herum kommen innerhalb der FOR-Schleife die einzelnen Messwerte (Länge, Breite, usw.) mit den hinterlegten Werten des indizierten UDTs zu prüfen.
 
Wie würden die Parameter denn aussehen?
Ich vermute jetzt mal, dass es ein paar Hauptmerkmale geben wird,
womit du das ganze von vornherein vorsortieren könntest
 
Ganz so einfach wird die Lösung wohl nicht sein.
Ich gehe mal davon aus, dass bei der Prüfung der Messwerte zu den 28 verschiedenen Möglichkeiten auch Toleranzen eine Rolle spielen.
Boka wird nicht drum herum kommen innerhalb der FOR-Schleife die einzelnen Messwerte (Länge, Breite, usw.) mit den hinterlegten Werten des indizierten UDTs zu prüfen.

Naja, dies sollte ja eigentlich über einen Vergleich untereToleranz[1]<messwert[1]>obereToleranz[1] machbar sein? Also in der Art "if (messwert[1]>untereToleranz[1] & messwert[1]<obereToleranz[1])", oder?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... Ich vermute jetzt mal, dass es ein paar Hauptmerkmale geben wird,
womit du das ganze von vornherein vorsortieren könntest
Der Programmschleife dürfte egal sein, dass sie "20 mal die einzelnen Werte nacheinander ... vergleichen" muss ... oder sogar 28-mal. Computer sind gut geeignet, mit langweiligen, sich oft wiederholenden Tätigkeiten beschäftigt zu werden. Die ZyklusZeit sollte jedoch nicht überstrapaziert werden. Das Wort "vorsortieren" ist allerdings ein sehr guter Tipp! In einer sortierten Liste kann man "binär suchen" und die Anzahl der Vergleiche dadurch drastisch vermindern - besonders allerdings nur bei sehr langen Listen. Ob 28 Positionen das rechtfertigen, ist Geschmackssache.
Prinzip:
- zuerst mit einem Eintrag in der Mitte der (Teil-)Liste vergleichen
- wenn gefunden, dann Suche beendet
- wenn zu klein oder zu gross, dann weiss man, in welcher Hälfte der (Teil-)Liste man nicht zu suchen braucht und man sucht in der erfolgversprechenden Hälfte der (Teil-)Liste nach derselben Methode weiter.

Da es mehrere Kriterien gibt, die zur Entscheidung beitragen, könnte man "irgendwie" aus den diversen Kriterien einen Begriff basteln, nachdem sortiert und gesucht wird.
Z.B.: Durchmesser*1000 + Steigung (ich setze mal voraus, dass die grösste Steigung vom Zahlenwert kleiner ist, als der kleinste Durchmesser*1000 und, dass 1000*Durchmesser nicht grösser wird, als die grösste darstellbare Zahl - da kann man mal ein Bisschen tüfteln).
Gruss, Heinileini
 
Zuletzt bearbeitet:
Zurück
Oben