Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 27 von 27

Thema: Tabelle auslesen

  1. #21
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.697 Danke für 1.949 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Du mußt dich entscheiden, ob in deinem #Index eine Integer oder ein Pointer stehen soll.

    Wenn du eine Integer nimmst (die Adresse als Int), dann steht im #Index

    z.Bsp. 0, 4, 8,12 usw. wenn du auf Adresse 0.0, 4.0, 8.0, 12.0 im DB zugreifen willst.
    Dann kannst du für die nächste Adresse +4 rechnen. Bevor du allerdings diese Int als Pointer verwenden kannst (also dies in das AR1 laden kannst) mußt du mit der Int ein SLD 3 durchführen (das entspricht einer Multiplikation mit 8 ), denn das Pointerformat enthält in den 3 letzten Bit die Bitadresse.

    Int 4 --> SLD 3 macht daraus P#4.0

    Wenn du immer mit Pointern in #Index arbeiten willst geht das auch, dann addierst du einfach immer P#4.0 zu deinem Index, aber nicht Int 4, das ergibt sonst Mist!

    Also immer bei einem bleiben, Pointer oder Int!
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  2. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    Wolfhunter (10.05.2013)

  3. #22
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard

    Zitat Zitat von Wolfhunter Beitrag anzeigen
    Danke Borromeus.

    Und mit einer IF-SChleife alle Werte abfragen bis ich meinen gefunden habe.
    Binäre Suche geht so:

    Angenommen du suchst Materialnummer 1234 in deiner Liste von 280 Einträgen.
    Untergrenze für die Nummer des Eintrags (Arrayindex) ist 0, Obergrenze 279.

    In der MItte liegt der Eintrag (279-0)/2 = 139 (abgerundet).

    Du vergleichst das Gesuchte mit dem Eintrag in der Mitte, d.h. dem auf Platz 139.
    Angenommen, der ist 1330.
    Weil die Liste aufsteigend geordnet ist, weißt du jetzt, dass auch alle nachfolgenden Einträge danach größer sind.
    Du brauchst nur noch in der unteren Hälfte zu suchen, von 0 bis 138.
    Du setzt die Obergrenze auf 139-1

    In der MItte liegt der Eintrag (138-0)/2 = 68 (aberundet).
    Du vergleichst du mit diesem Eintrag.

    Angenommen, der ist 630.

    Weil die Liste aufsteigend geordnet ist, weißt du jetzt, dass auch alle vorhergehenden Einträge kleiner sind.

    Du setzt die Untergrenze auf 68+1

    Das machst du, bis du deinen Eintrag gefunden hast oder bis die Ober- und Untergrenze des Suchbereichs sich nur noch um 0 oder 1 unterscheiden.
    Geändert von Zottel (29.04.2013 um 15:58 Uhr)

  4. Folgende 3 Benutzer sagen Danke zu Zottel für den nützlichen Beitrag:

    KingHelmer (29.04.2013),simon.s (10.05.2013),Wolfhunter (10.05.2013)

  5. #23
    Registriert seit
    06.10.2009
    Ort
    NRW
    Beiträge
    1.572
    Danke
    63
    Erhielt 259 Danke für 219 Beiträge

    Standard

    Hab ich eigentlich irgendwas übersehen?

    Der TE kommt doch aus der Hochsprachenwelt.
    Die Aufgabe kann man mit SCL wunderbar lösen.
    Warum nicht mit SCL?
    Meine Motivation läuft nackig mit einem Cocktail über eine Wiese.

  6. #24
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard

    Zitat Zitat von Tigerente1974 Beitrag anzeigen
    Der TE kommt doch aus der Hochsprachenwelt.
    Deshalb habe ich ihn gefragt, wie er das in C machen würde. Da wollte er auch mit allen Einträgen vergleichen.
    Zitat Zitat von Tigerente1974 Beitrag anzeigen
    Die Aufgabe kann man mit SCL wunderbar lösen.
    Warum nicht mit SCL?
    Klar. Aber SCL hat ja nicht jeder.

    Wenn er sich aber schon einmal durch den Arrays-Zugriff in AWL quält, dann kann er auch gleich einen "guten" Algorithmus benutzen.

    Das eine ist binäre Suche (Aufwand ceil (log2 n)) gegenüber dem Vergleich mit allen Werten (Aufwand n). Die andere Frage ist, ob man in ein SPS-Programm Schleifen einbauen soll. Es verlängert die Zykluszeit, aber schlimmer noch, es erschwert das Testen enorm: Hier im Beispiel hängt es von den Daten ab, ob die Suche einen oder die maximale Zahl oder etwas dazwischen Schleifendurchläufe erfordert.
    Nun stellt euch vor, dass dasselbe Programm eine Positionieraufgabe enthält, wo eine Schaltfahne einen Endschalter betätigt.
    Wenn nun die Suche nach einem Datum am Ende der Liste mit der Positionierbewegung im selben Zyklus zusammentrifft, wir der Endschalter überfahren...
    Und nun such mal den Fehler!

    Selbst wenn alles gut geht: Was ist, wenn im Laufe der Zeit mehr Daten hinzukommen?

    Wahrscheinlich ändert sich der zu suchende Wert nicht sehr oft.

    Unter dieser Vorraussetzung bietet es sich an, pro Zyklus nur einen Durchlauf der Schleife auszuführen.
    Dazu braucht man einen Merker, der besagt, dass die Suche noch läuft.
    Ist er 0, kann eine neue Suche gestartet werden.
    Wenn eine Suche gestartet wird, setzt man den Schleifenzähler auf den Startwert und den neuen zu suchenden Wert.
    Dann setzt man den Merker "Suche läuft"
    Pro Zyklus wird nun eine Vergleich ausgeführt.
    Wird der Wert gefunden, so setzt man den Merker "Suche läuft" zurück.
    Das Ergebnis der Suche (Index auf Daten) ist nun gültig.
    Wird das Ende der Liste erreicht, ohne dass der Wert gefunden wird, so kann man einen Fehlermerker setzen und man setzt den Merker "Suche läuft" ebenfalls zurück.
    Geändert von Zottel (29.04.2013 um 23:04 Uhr)

  7. Folgender Benutzer sagt Danke zu Zottel für den nützlichen Beitrag:

    Wolfhunter (10.05.2013)

  8. #25
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.697 Danke für 1.949 Beiträge

    Standard

    @Zottel
    Die Problematik mit den Schleifen muß man natürlich beachten und entsprechend abschätzen.
    Kleine Schleifen (so bis 30), die etwas suchen oder iterieren (also nicht zuviel Code enthalten), mache ich durchaus auch einmal, ansonsten gehe ich da ebenfalls vor wie du das vorschlägst.
    Hängt auch ein wenig von der Geschwindigkeit ab, die die SPS vorlegt!
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  9. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    Wolfhunter (10.05.2013)

  10. #26
    Registriert seit
    24.04.2013
    Beiträge
    52
    Danke
    10
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Morgen Zusammen,

    Zu dem SCL, ich kann es nicht benutzen da wir es nicht haben. Wäre mir auch lieber gewesen, aber was nicht da ist kann man nicht benutzen.


    Wenn das Binäre Suche ist, dann hab ich das so ähnlich vorher versucht. Ich versuche mich gleich nochmal an der Schleifen geschichte.
    Danke euch schonmal

  11. #27
    Registriert seit
    24.04.2013
    Beiträge
    52
    Danke
    10
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Morgen zusammen,
    nochmal vielen Dank für die Hilfe.
    Ich habe es zum laufen gebracht, ein Fehler war das ich das verschieben um 3 nach links vergessen hatte.
    Und zum anderen waren noch fehler in der "Grammatik".

    Gruß
    Dennis

Ähnliche Themen

  1. Tabelle Visualisierung
    Von Simon_ im Forum CODESYS und IEC61131
    Antworten: 3
    Letzter Beitrag: 21.12.2011, 16:38
  2. Visualisierung Tabelle
    Von COOLT im Forum CODESYS und IEC61131
    Antworten: 0
    Letzter Beitrag: 14.08.2009, 14:13
  3. Globaldaten Tabelle
    Von Sven2603 im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 26.01.2009, 11:13
  4. Tabelle in Protool
    Von Gerd Fährmann im Forum HMI
    Antworten: 1
    Letzter Beitrag: 09.03.2006, 09:06
  5. Antworten: 6
    Letzter Beitrag: 01.02.2005, 11:22

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •