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

Ergebnis 1 bis 8 von 8

Thema: Eingangsänderungen erkennen und Speichern

  1. #1
    Registriert seit
    09.11.2007
    Beiträge
    34
    Danke
    7
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo da draußen,

    Da ich mich noch nicht lange mit SPS Programmierung beschäftige, fällt mir folgende Aufgabenstellung reichlich schwer.
    Aufgabenstellung:
    Ich muss eine bestimmt Anzahl an Eingängen überwachen. Sobald sich einer der Eingänge ändert muss das geänderte Eingangsbyte das Datum und die Uhrzeit gespeichert werden.
    *********************************************************
    Auswertung der Zustandänderung der Eingänge
    *********************************************************
    L EB 0 //zu überwachendes Eingangsbyte
    L MB 10
    <>I
    = M 20.0 //sobald das alte EB nicht mit dem aktuellen übereinstimmt
    L EB 0 // wird m20.0 gesetzt
    T MB 10
    ********************************************************

    Mit dem SFC1 lese ich Datum und Zeit aus und schreibe es auf die Variable
    #OUT_UHRZEIT_DATUM (Variable umfasst 8Bytes)

    Anschließend wird mit dem SFC20 die Variable #OUT_UHRZEIT_DATUM in den DB100.DBX0.0 kopiert.
    Soweit funktioniert es ja auch.

    Mein Problem ist jetzt das ich bei jeder Änderung die alten Daten im DB mit den neuen Werten überschreibe. Wie kann ich das Programm ändern das sich die DB Adresse erhöt?????????????

    Das Eingangsbyte wird über den SFC20 in den DB100.DBB8 kopiert.
    D.h. Bei der ersten Eingangsänderung sollen Datum und Zeit auf die Bytes
    0 bis 7 im DB100geschrieben werden. Das Eingangsbyte soll auf das Byte 8geschrieben werden.
    Bei der zweiten Änderung Datum u. Zeit auf Byte 10 bis 17 im DB100 und das EB auf Byte 18.
    USW....

    Danke schon mal.
    Mfg Topse
    Zitieren Zitieren Eingangsänderungen erkennen und Speichern  

  2. #2
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.227
    Danke
    534
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Wenn du es mit dem SFC20 kopierst ist es eigentlich kein Problem. Du mußt den Any für das Ziel selbst zusammenbauen und die Adresse entsprechend berechnen. Siehe dazu hier im Forum in der FAQ unter Any und Pointer, sowie FIFO und LIFO. Auch in der Forums-Suche findest du unter diesen Stichwörtern alles, was du brauchst.
    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

  3. #3
    Topse ist offline Benutzer
    Themenstarter
    Registriert seit
    09.11.2007
    Beiträge
    34
    Danke
    7
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke Ralle,

    das mit dem Any Pointer habe ich jetzt verstanden. Das klappt soweit auch.
    Jetzt müsste ich nur noch die Sache mit dem automatisch hochzählen in den Griff bekommen.

    Gibt es da so etwas wie FOR-Schleifen zum automatischen zählen bei S7???
    Oder muss man das wieder selber zusammen bauen?

    Vielleicht kann mir da jemand weiterhelfen.

    Grüße

  4. #4
    Registriert seit
    11.09.2007
    Ort
    Suedwestpfalz
    Beiträge
    917
    Danke
    81
    Erhielt 209 Danke für 192 Beiträge

    Standard

    Bau Dir am besten einen UDT zusammen, 10 BYte lang mit deine Daten und ein bisschen Reserve und bau dann einen Pointer der immer 10 Byte weitertaktet.
    Sehe kein Problem darin.
    Das Grauen lauert in der Zwischenablage !!

  5. #5
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.227
    Danke
    534
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Zitat Zitat von Topse Beitrag anzeigen
    Danke Ralle,

    das mit dem Any Pointer habe ich jetzt verstanden. Das klappt soweit auch.
    Jetzt müsste ich nur noch die Sache mit dem automatisch hochzählen in den Griff bekommen.

    Gibt es da so etwas wie FOR-Schleifen zum automatischen zählen bei S7???
    Oder muss man das wieder selber zusammen bauen?

    Vielleicht kann mir da jemand weiterhelfen.

    Grüße
    Den einzigen Automatismus für Schleifen in AWL stellt die Loop-Anweisung dar, ansonsten macht man das "von Hand" mit Zählvariablen, Vergleichern und Sprüngen. In SCL gibt es die meißten der aus Pascal allgemein bekannten Sprachelemente.
    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

  6. #6
    Topse ist offline Benutzer
    Themenstarter
    Registriert seit
    09.11.2007
    Beiträge
    34
    Danke
    7
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Erstmal danke,

    das waren alles heiße Tipps di mir weiter geholfen haben.
    Ihr müßt wissen ich beschäftige mich erst seit knapp 2 Monaten mit S7.
    Die ganzen Themen Pointer, DB, ... wende ich das erste mal an, doch dank diesem Forum geht das recht gut.

    Hallo dtsclipper,

    das mit dem weitertakten ist klar aber ich bin bisher mit meinen Ansätzen immer gescheitert. Das ist mein variabler Pointer.

    L B#16#10 //10h für s7
    T LB 10

    L B#16#E //Typ Date and Time
    T LB 11

    L 1 //Anzahl (Wiederholungsfaktor)
    T LW 12

    L 100 //Datenbaustein
    T LW 14
    Hier ist mein Knackpunkt, wie sage ich Ihm das er bei jeder Änderung 10Bytes weiterspringen soll???????
    L 0 //Anfangsadresse des Datenbausteins
    SLD 3 //Pointer bauen
    T LD 16

    L B#16#84 //Speicherbereich (Datenbaustein)
    T LB 16

  7. #7
    Registriert seit
    11.09.2007
    Ort
    Suedwestpfalz
    Beiträge
    917
    Danke
    81
    Erhielt 209 Danke für 192 Beiträge

    Standard

    Stimmt, ich gebe Dir recht, so gehts nicht.

    Im Moment sehe ich nur Lokalvariablen, willst Du die Daten in der Instanz ablegen?
    Oder gibt es einen DatenDB dafür?
    Wennja, welche Struktur?

    Poste auch mal wie der SFC 20 bei Die anparametriert ist, das könnte mir helfen.

    Ansonsten :
    Du hast die Anfangsadress ja schon geposted.
    ES gelt doch nur noch darum den Pointer dann weiterzuschieben.

    L B#16#10 //10h für s7
    T LB 10

    L B#16#E //Typ Date and Time
    T LB 11

    L 1 //Anzahl (Wiederholungsfaktor)
    T LW 12

    L 100 //Datenbaustein
    T LW 14
    Hier ist mein Knackpunkt, wie sage ich Ihm das er bei jeder Änderung 10Bytes weiterspringen soll???????
    L mw128
    L 10
    +I
    T mw128
    SLD 3 //Pointer bauen
    T LD 16

    L B#16#84 //Speicherbereich (Datenbaustein)
    T LB 16
    Ich hätte es aber ganz anders gemacht, gebe keine Garantie auf die Lösung!!!!

    ÜBERNAHME NICHT FÜR SCHULAUFGABEN ZUGELASSEN
    Das Grauen lauert in der Zwischenablage !!

  8. #8
    Topse ist offline Benutzer
    Themenstarter
    Registriert seit
    09.11.2007
    Beiträge
    34
    Danke
    7
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Danke dtsclipper,

    des war wieder ein heißer Tipp. Ich hab des jetzt mit bestimmten Sprungen gemacht. Er soll immer dann wenn er eine Eingangsänderung erkennt den Wert des MW um 10 erhöhen. So wie es ausschaut klappt es. Ich hab des über einen DB gemacht.

    Herzlichen dank.

    Gruß Topse

Ähnliche Themen

  1. Druckabfall erkennen
    Von detoto im Forum Simatic
    Antworten: 21
    Letzter Beitrag: 03.12.2010, 16:35
  2. Ausreisser erkennen.
    Von McNugget im Forum CODESYS und IEC61131
    Antworten: 40
    Letzter Beitrag: 16.12.2009, 16:57
  3. Berührung TP erkennen
    Von Harry im Forum HMI
    Antworten: 8
    Letzter Beitrag: 05.08.2009, 12:34
  4. Bildänderung erkennen
    Von costa im Forum PC- und Netzwerktechnik
    Antworten: 3
    Letzter Beitrag: 17.04.2007, 12:42
  5. Durchmesser erkennen
    Von PeterPan2099 im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 24.04.2006, 19:48

Lesezeichen

Berechtigungen

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