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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: kleines Problem mit Schieberegister

  1. #1
    Registriert seit
    24.07.2008
    Beiträge
    124
    Danke
    0
    Erhielt 8 Danke für 6 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    huhu
    ich bin gerade dabei ein kleines Schieberegister für eine Anlage zu programmieren.Leider macht er nicht das was ich vorhabe..

    FUNCTION FC 1 : VOID
    TITLE =Schieberegister
    AUTHOR :
    VERSION : 0.1

    VAR_INPUT
    DB_NR : INT ; //DB_NR des Schieberegisters
    Laenge : INT ; //Länge des Schieberegisters
    Eingabe : BYTE ; //Aktueller Wert
    Schiebetakt : BOOL ; //Schiebetakt
    END_VAR
    VAR_IN_OUT
    HM_Flanke : BOOL ;
    END_VAR
    VAR_TEMP
    DB_Nummer : INT ; //Hilfsnummer
    Schleifenzaehler : INT ;
    Zeiger_lesen : DWORD ;
    Zeiger_schreiben : DWORD ;
    Adresse_erster_DS : DWORD ; //Adresse des Datensatzes
    END_VAR
    BEGIN
    NETWORK
    TITLE =DB aufschlagen
    L #DB_NR;
    T #DB_Nummer;
    AUF DB [#DB_Nummer];
    NETWORK
    TITLE =Länge des Schieberegister prüfen
    L #Laenge;
    L 1;
    ==I ;
    SPB Lae1;
    NETWORK
    TITLE =Länge des Schieberegisters berechnen
    L #Laenge;
    + -1;
    SLD 3;
    T #Adresse_erster_DS;
    // Lesezeiger initialisieren
    L P#1.0;
    T #Zeiger_lesen;
    // Schiebetakt generieren
    U #Schiebetakt;
    FP #HM_Flanke;
    SPBN Ende;
    NETWORK
    TITLE =Schleife für Schieberegister
    L #Laenge;
    + -1;
    schl: T #Schleifenzaehler;
    L #Zeiger_lesen;
    SRD 3;
    + 1;
    SLD 3;
    T #Zeiger_schreiben;
    L DBB [#Zeiger_lesen];
    T DBB [#Zeiger_schreiben];
    // neuen Lesezeiger berechnen (1 Byte erhöhen)
    L #Zeiger_lesen;
    SRD 3;
    + 1;
    SLD 3;
    T #Zeiger_lesen;
    L #Schleifenzaehler;
    LOOP schl;
    Ende: NOP 0;
    NETWORK
    TITLE =Aktuellen Wert ins Schieberegister schreiben
    Lae1: L #Eingabe;
    T DBB [#Adresse_erster_DS];
    END_FUNCTION

    Vielleicht hat hier jemand eine Idee was ich falsch gemacht habe...
    danke im voraus
    ciao
    klaus.ka
    Zitieren Zitieren kleines Problem mit Schieberegister  

  2. #2
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    frage: was macht er denn nicht?

    hinweis: deine adressberechnung ist ziemlich aufwendig um nicht zu sagen kompliziert ...

    bitte: code-tags benutzen!
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  3. #3
    Klaus.Ka ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    24.07.2008
    Beiträge
    124
    Danke
    0
    Erhielt 8 Danke für 6 Beiträge

    Standard

    huhu vierlagig
    sorry er schiebt den wert nicht weiter...
    warum aufwendig bzw kompliziert?
    hast du nen besseren vorschlag?
    ciao
    klaus.ka

  4. #4
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Zitat Zitat von Klaus.Ka Beitrag anzeigen
    huhu vierlagig
    sorry er schiebt den wert nicht weiter...
    warum aufwendig bzw kompliziert?
    hast du nen besseren vorschlag?
    ciao
    klaus.ka
    ja, ich adressiere solche dinge in zusammenhängenden blöcken gern mit hilfe des adressregister 1 ... ein beispiel dafür findest du hier:

    http://www.sps-forum.de/showpost.php...25&postcount=8
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  5. #5
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    Zitat Zitat von Klaus.Ka Beitrag anzeigen
    huhu vierlagig
    sorry er schiebt den wert nicht weiter...
    warum aufwendig bzw kompliziert?
    hast du nen besseren vorschlag?
    ciao
    klaus.ka
    Schiebt er ihn gar nicht, oder steht hinterher etwas Falsches drin? Ich hab den Code nur mal so überflogen.

    Du schiebst immer von:

    1 nach 2
    2 nach 3
    3 nach 4
    4 nach 5
    ...

    Wenn du also in 1 eine 15 stehen hast, wird die in einer Schleife (1 Schiebetakt) komplett durchgeschoben, bleibt aber auf 1 erhalten, da sie dort nicht gelöscht wird.
    Du mußt hinten anfangen zu schieben:

    ...
    6 nach 7
    5 nach 6
    4 nach 5
    3 nach 4
    2 nach 3
    1 nach 2
    1 löschen
    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
    Klaus.Ka ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    24.07.2008
    Beiträge
    124
    Danke
    0
    Erhielt 8 Danke für 6 Beiträge

    Standard

    huhu vierlagig
    werd mir deinen code mal anschauen....

    huhu ralle
    nein der code wird einmal eingetragen und bleibt und bleibt dann dort...
    eigentlich sollte das schieberegister rückwärts laufen also von 15 nach 1

    ciao
    klaus.ka

  7. #7
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Zitat Zitat von Klaus.Ka Beitrag anzeigen
    huhu vierlagig
    werd mir deinen code mal anschauen....
    aufpassen:
    bezieht sich auf den instanz-db des fbs
    doppelwortadressierung
    und kommt von hinten, also im array[0..7] of real von 7 nach 0
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  8. #8
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    Zitat Zitat von Klaus.Ka Beitrag anzeigen
    huhu vierlagig
    werd mir deinen code mal anschauen....

    huhu ralle
    nein der code wird einmal eingetragen und bleibt und bleibt dann dort...
    eigentlich sollte das schieberegister rückwärts laufen also von 15 nach 1

    ciao
    klaus.ka
    Wo trägst du den Code ein, an Stelle 1 des SR?, da bleibt er auch, da er da ja nie gelöscht wird.

    Du fängst an mit Zeiger_lesen P#1.0 daraus Zeiger schreiben (+1) macht P#2.0. In der nächsten Schleife erhöhst du um 1, also lesen: P#2.0. Schreiben P#3.0.
    Damit jagst du den Wert an P#1.0 bei einem kompletten Schleifendurchlauf einmal durch dein Schieberegister. Das ist so sicher nicht gewollt oder?
    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. #9
    Klaus.Ka ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    24.07.2008
    Beiträge
    124
    Danke
    0
    Erhielt 8 Danke für 6 Beiträge

    Standard

    Zitat Zitat von Ralle Beitrag anzeigen
    Wo trägst du den Code ein, an Stelle 1 des SR?, da bleibt er auch, da er da ja nie gelöscht wird.

    Du fängst an mit Zeiger_lesen P#1.0 daraus Zeiger schreiben (+1) macht P#2.0. In der nächsten Schleife erhöhst du um 1, also lesen: P#2.0. Schreiben P#3.0.
    Damit jagst du den Wert an P#1.0 bei einem kompletten Schleifendurchlauf einmal durch dein Schieberegister. Das ist so sicher nicht gewollt oder?
    huhu ralle
    stimmt du hast recht aber ich versteh net warum er nicht bei p#1.0 anfängt sondern bei p#10.0 und nicht richtig arbeitet.
    irgendwo seh ich den wald vor lauter bäumen nicht.muß glaub ich nochmal neu anfangen...
    ciao
    klaus.ka

  10. #10
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Wenn ich das richtig sehe, willst du ja von links nach rechts also vom Ende zum Anfang schieben. Du stellst deinen Wert z.Bsp. in 10 ein und schiebst in dann Richtung 1, also vom "höheren" Speicheort zum "niedrigeren", richtig?

    dann mußt du deine Lesen- und Schreiben-Zeiger anders berechnen.

    Mit dem hohen Wert anfangen, z.Bsp 10, bei Länge 10 des SR:

    2 nach 1 (2-->lesen, 1-->schreiben)
    3 nach 2
    4 nach 3
    ...
    9 nach 8
    10 nach 9
    neuer Wert in 10.
    Geändert von Ralle (31.08.2008 um 18:12 Uhr) Grund: Rechtschreibung
    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

Ähnliche Themen

  1. ProSave - kleines problem...
    Von Blut-Zwente im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 28.06.2011, 21:58
  2. Kleines Problem mit LAR1
    Von DjTommyB im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 31.08.2009, 10:19
  3. Kleines Problem
    Von ETim im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 03.08.2009, 10:13
  4. !! Kleines Problem als Neuling? !!
    Von TOKO777 im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 15.03.2009, 13:11
  5. habe ein kleines problem
    Von sago im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 24.01.2009, 17:21

Lesezeichen

Berechtigungen

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