DB nach bestimmten Wert durchsuchen

Casper

Level-2
Beiträge
16
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Tag,

ich hätte eine Anfängerfage zum SCL.

Ich habe nämlich folgendes Problem, es handelt sich um keine echte Anlage sondern um ein Factory IO Projekt.

Ein Scanner scannt Gray Code von Produkten, die auf einem Gurtförderer transportiert werden. Anschliessend werden alle gescannte Produkte inkl. Datum, Uhrzeit und Gewicht in zwei DB gespeichert (DB1- leichte Teile-200 Werte., DB2- schwere Teile-200 Werte). Am Ende des Gurtförderers befindet sich zweiter Scanner (Scanner_2), der entscheiden soll, ob ein Produkt nach links (leicht) oder nach rechts (schwer) ausgeschleust wird.

Dafür habe ich folgende Anweisung in SCL geschrieben

Produkt_Leicht := "Scanner_2" = "DB1".Produkt[1].Gray_Code
Produkt_Schwer := "Scanner_2" = "DB2".Produkt[1].Gray_Code

Es wird also der Ausgang "Teil_Leicht" angesteuert ,wenn der vom Scanner_2 gescannte Wert sich im DB1 befindet.
der Ausgang "Teil_Schwer" wird angesteuert, wenn der vom Scanner_2 gescannte Wert sich im DB2 befindet.

Da ich jetzt im DB1 als auch in DB2 200 Werte habe, wollte ich vermeiden, um für jeden Grey Code extra eine Anweisung zu schreiben, wie z.B.:
Produkt_Leicht := "Scanner_2" = "DB1"Produkt[1].Gray_Code
Produkt_Leicht := "Scanner_2" = "DB1".Produkt2].Gray_Code
Produkt_Leicht := "Scanner_2" = "DB1".Produkt[3].Gray_Code
Produkt_Leicht := "Scanner_2" = "DB1".Produkt[4].Gray_Code
usw.


Ist das Möglich, eine Anweisung zu schreiben, wo ich das halt etwas unkomplizierter machen könnte, also z.B etwas in die Richtung:

Teil_Leicht := "Scanner_2" = "DB1".Teil[1].Gray_Code TO "DB1".Teil[200].Gray_Code
oder
Teil_Leicht := "Scanner_2" = "DB1".Teil[1-200].Gray_Code


Aslo der Ausgang "Produkt_Leicht" wird angesteuert, wenn sich der von Scanner gescannte Grey Code innerhalb von Bereich DB1".Produkt[1].Gray_Code bis DB1".Produkt[200].Gray_Code befindet bzw. für schwere Teile Bereich DB2".Produkt[1].Gray_Code bis DB2".Produkt[200].Gray_Code

Unten Bild mit DB-Struktur

Ich freue mich über eure Vorschläge :)
 

Anhänge

  • Screenshot 2024-06-18 203403.png
    Screenshot 2024-06-18 203403.png
    334,2 KB · Aufrufe: 17
Zuletzt bearbeitet:
Naja ... so wie du es vorhast wird das nichts.
Der Code könnte ungefähr so aussehen :
Code:
Teil_Leicht := false ;
Teil_schwer := false ;

for i := 1 to 200 do
   if DB_leichte_Teile.Teil[i].Gray_Code = Scan_Code then
      Teil_Leicht := true ;
      exit ;
   end_if ;
end_for ;

if not Teil_leicht then
   for i := 1 to 200 do
      if DB_schweree_Teile.Teil[i].Gray_Code = Scan_Code then
         Teil_schwer := true ;
         exit ;
      end_if ;
   end_for ;
end_if ;
Dieser Code ist jetzt natürlich Quick'n'dirty ...
In jedem Fall aber geht jede dieser Suchen ggf. schon "ein wenig" auf die SPS-Zykluszeit.

Die Frage, die ich mir aber stelle ist : warum 2 verschiedene DB's ?
Es könnte doch auch alles in einem DB stehen und die Entscheidung ob leicht oder schwer kann man ja auch am gespeicherten Gewicht festmachen ...
 
Die Frage, die ich mir aber stelle ist : warum 2 verschiedene DB's ?
Es könnte doch auch alles in einem DB stehen und die Entscheidung ob leicht oder schwer kann man ja auch am gespeicherten Gewicht festmachen ..

Nur damit mein Programm übersichtlicher wird. Ich will diese Daten noch später verarbeiten und finde es schon etwas sauberer, wenn die Daten in 2 DB's aufgeteilt sind.
 
Zurück
Oben