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

Ergebnis 1 bis 9 von 9

Thema: Werte aus DB auslesen

  1. #1
    Registriert seit
    28.01.2010
    Beiträge
    37
    Danke
    12
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Leute,

    bekomme über HMI eine INT Eingabe und muss dazu den entsprechenden Wert ausgeben.
    Dazu habe ich zwei DB´s angelegt.
    In der einen stehen die möglichen INT Werte, in der anderen die entsprechenden auszugebenden Werte.

    DB1
    0.0 x1 50
    0.2 x2 55
    0.4 x3 57
    0.6 x4 60

    DB2
    0.0 x1 32
    0.2 x2 33
    0.4 x3 34
    0.6 x4 35

    Bekomme ich jetzt als Eingabe z.B. 50,51,52,53 oder 54 soll 32 ausgeben werden
    Bei Eingabe von 55 und 56 soll 33 ausgeben werden.
    D.h. ich möchte in DB1 die Werte nacheinander durchgehen so lange mein Eingabewert kleiner dem DB Wert ist.
    Dann möchte ich mit der entsprechenden Adresse oder dem entsprechenden Name den Wert aus DB2 ausgeben.

    Hoffe dass ich das halbwegs verständlich ausgedrückt habe.

    Habe momentan leider überhaupt leine Ahnung wie ich das überhaupt angehen soll.
    Kann mir jemand einen vernünftigen Tippgeben wie man so etwas bewerkstelligen kann?
    Gibt es eventuell eine geschicktere Herangehensweise an dieses Problem?

    Vielleicht gibt es ja ähnliche Beispiele zu meiner Problemstellung.

    Brauche keine fertige Lösung von Euch sondern zweckdienliche Hinweise, die aber dennoch über die Info: "Mit AWL kann man das lösen" hinausgehen.

    Danke
    Alex
    Zitieren Zitieren Werte aus DB auslesen  

  2. #2
    Registriert seit
    13.09.2010
    Beiträge
    2.292
    Danke
    178
    Erhielt 375 Danke für 355 Beiträge

    Standard

    .
    Zitat Zitat von --alex-- Beitrag anzeigen
    ...
    Brauche keine fertige Lösung von Euch sondern zweckdienliche Hinweise, die aber dennoch über die Info: "Mit AWL kann man das lösen" hinausgehen.

    HMI-Eingabe in einer Schleife mit den DW´s in deinem DB 1 vergleichen, bis
    dein Wert erreicht wird.
    Aus dem mitlaufenden Schleifenindex (Schleifenzähler) einen Pointer bauen,
    der auf den entsprechenden DW im DB 2 zugreift.

    Die Handhabung mit Pointern ist in unserer FAQ-Rubrik ausführlich erklärt.

    .
    kind regards
    SoftMachine

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

    Standard

    Es ist nicht verkehrt wie es SoftMachine schildert, aber je nach Art deiner Werte gibt es geschicktere/schnellere Methoden:

    1.Wenn es sich bei den Werten in DB1 tatsächlich um 1-Byte-Werte handelt, würde es sich eventuell anbieten, den DB1 wegzulassen und den DB2 so zu gestalten, dass in der durch die Eingabe adressierten Speicherstelle das Ergebnis steht. Keine Schleife, nur ein einziger indirekter Zugriff.

    2. Wenn es viele Werte sind, läuft eine einfache Schleife schlimmstenfalls bis zum Letzten und im Mittel bei n Werten n/2 mal. Das kann für deine Zykluszeit zuviel werden. Wenn die Werte sich selten ändern, kann man sie so anordnen, das sie im DB1 aufsteigend sortiert stehen. Dann man einen Wert schneller suchen, in dem man die Liste in zwei Teile teilt und schaut, in welcher Hälfte der gesuchte Wert liegen muß. Das heißt auch binäre Suche.

    3. Statt Schleifen zu programmieren kann man diese Verfahren so umformen, dass pro Zyklus ein Schritt der ursprünglichen Schleife ausgeführt wird. Das lohnt sich wenn das Ergebnis nicht sofort oder sehr schnell benötigt wird und wenn sich die Eingabe relativ selten ändert.

    4. Wenn du SCL hast, ist das alles in SCL einfacher zu programmieren.

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

    --alex-- (04.11.2014),SoftMachine (04.11.2014)

  5. #4
    Registriert seit
    13.09.2010
    Beiträge
    2.292
    Danke
    178
    Erhielt 375 Danke für 355 Beiträge

    Standard

    .
    Ja, sicher,

    der TE bat erstmal um "zweckdienliche Hinweise", damit er überhaupt einen Ansatz findet.

    Mal sehen, was er jetzt aus deinen und meinen Hinweisen macht.

    Wäre schön, wenn er seinen entworfenen Code hier nochmal zeigt.

    .
    kind regards
    SoftMachine

  6. #5
    Registriert seit
    28.01.2010
    Beiträge
    37
    Danke
    12
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke für euren Hinweis,

    habe mir Zottel´s Hinweis zu Herzen genommen und die Datenbank so aufgebaut dass ich den HMI Wert auf die Datenbankadresse umrechnen kann.

    zB.
    0,25 --> 4
    0,30 --> 8
    0,35 --> 12

    Das funktioniert soweit recht gut.
    Mittels KOP wandle ich den HMI Wert um und bekomme den entsprechenden Wert als Int.

    Jetzt stehe ich nur noch vor dem "kleinen" Problem wie ich mit meinem ermittelten Wert (zB. 124) auf den Datenbankwert DB100.DBD124 zugreifen kann.
    Schätze dass es sich hier um 2 Zeilen AWL handelt.

    AWL ist aber nicht, oder noch nicht, meine Welt.

    Könnt ihr mir verraten wie ich den Wert auslesen kann?


    Danke Alex

  7. #6
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.181
    Danke
    923
    Erhielt 3.289 Danke für 2.658 Beiträge

    Standard

    Zitat Zitat von --alex-- Beitrag anzeigen
    Jetzt stehe ich nur noch vor dem "kleinen" Problem wie ich mit meinem ermittelten Wert (zB. 124) auf den Datenbankwert DB100.DBD124 zugreifen kann.
    Code:
    L   124  //oder der ermittelte Wert
    SLD 3    //--> P#124.0
    LAR1
    AUF DB100
    L   DBD [AR1,P#0.0]
    T   #meinWert
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  8. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    --alex-- (04.11.2014)

  9. #7
    Registriert seit
    19.06.2008
    Ort
    Ostalbkreis
    Beiträge
    3.140
    Danke
    201
    Erhielt 553 Danke für 498 Beiträge

    Standard

    zu langsam

  10. #8
    Registriert seit
    28.01.2010
    Beiträge
    37
    Danke
    12
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke für die Info.
    Werde das gleich testen.

  11. #9
    Registriert seit
    28.01.2010
    Beiträge
    37
    Danke
    12
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Problem ist gelöst.
    Danke an alle

Ähnliche Themen

  1. Step 7 Werte direkt aus DB auslesen
    Von Schnabeltiermann im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 17.10.2014, 11:57
  2. Werte auslesen
    Von Andreas185 im Forum CODESYS und IEC61131
    Antworten: 8
    Letzter Beitrag: 07.08.2013, 12:42
  3. Antworten: 2
    Letzter Beitrag: 10.07.2011, 21:04
  4. Werte aus einen DB auslesen
    Von magmaa im Forum Programmierstrategien
    Antworten: 64
    Letzter Beitrag: 29.04.2009, 22:02
  5. Werte aus einer Siemens LOGO! auslesen
    Von cni im Forum Sonstige Steuerungen
    Antworten: 1
    Letzter Beitrag: 07.02.2007, 15:51

Lesezeichen

Berechtigungen

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