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

Page 1 of 2 12 LastLast
Results 1 to 10 of 12

Thread: andere möglichkeit als ein schieberegister??

  1. #1
    Join Date
    22.07.2004
    Posts
    14
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    hallo,

    hab ne frage

    ich hab ein datenbaustein (db 10) im dem sind 10 datenwörter beschreiben und wie kan ich es machen, das wenn im datenwort 1 eine 0 steht das programm aus dem datenwort 2 den wert ins datenwort 1 schreibt und das immer weiter solange bis das programm am ende den wert aus dem datenwort 10 ins datenwort 1 schreibt und da ganze ohne ein schieberegister...
    schieberister in dem sinn:
    [ code ]
    l dw 2
    t dw 1
    l dw 3
    t dw 2
    usw.

    das alles in s5-100u cpu 103
    Reply With Quote Reply With Quote andere möglichkeit als ein schieberegister??  

  2. #2
    Join Date
    19.06.2003
    Posts
    2,299
    Danke
    85
    Erhielt 274 Danke für 179 Beiträge

    Default

    Irgendwas hast du durcheinander: soll nun der Wert von DW2 nach DW1 oder der von DW10?

    LOOP:
    L KF10
    T MW 200 // Schmiermerker, zählt Quelladressen
    L KF9
    T MW 202 // Schmiermerker, zählt Zieladressen


    B MW 200 // mach die nächste Operation mit der Adresse aus MW200
    L DW0 // nein, lädt NICHT DW0 sondern DW10, wenn MW200 10 enthält.
    B MW 202 // mach die nächste Operation mit der Adresse aus MW202
    T DW0 // nein, speichert NICHT nach DW0 sondern nach DW9, wenn MW202 9 enthält.

    jetzt kannst du beide Adressen um eins runterzählen und zum Anfang springen, wenn MW200 >0 ist.

    Das ist zwar weiger Code, aber deine CPU führt mehr Anweisungen aus. Zykluszeit beachten!

  3. #3
    gorden is offline Neuer Benutzer
    Themenstarter
    Join Date
    22.07.2004
    Posts
    14
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Default

    thx für die antwort als erstes mal so ählich mein ich es, ich erklärs mal mit 3 datenwörter...

    also in dw1 dw2 dw 3 stehen beliebige werte drin, jetzt transferiere ich ins dw1 eine 0 und sobald im dw 1 eine 0 steht soll das programm den wert aus dem dw 2 ins dw 1 schreiben. dann transferiere ich wieder eine 0 ins dw 1 und nun soll der wert aus dem dw 3 ins dw 1 geschrieben werden.

    das kan man durch ein schieberegister machen, das halt dann den wert immer weiter schiebt:
    L DW 2
    T DW 1
    L DW 3
    T DW 2

    und diese will ich ohne so ein schieberegister machen.
    da der DB bis dw 245 beschrieben ist, und dann ist mir diese möglichkeit zu groß.

  4. #4
    Join Date
    19.06.2003
    Posts
    2,299
    Danke
    85
    Erhielt 274 Danke für 179 Beiträge

    Default

    MW 200 habe den Anfangswert 2
    Immer wenn 0 im DW1 steht zählst du MW 200 hoch und machst damit:

    B MW200
    L DW 0
    T DW 1


    Also:

    LDW1
    LKF0
    <>F
    BEB // nix tun wenn keine 0
    L MW200
    add kf 1
    T MW200
    B MW200
    L DW 0
    T DW 1


    Jetzt fehlt nur noch, daß du MW200 irgendwo initialisierst und irgendwas wirst du tun wollen, wenn MW200>245 ist, sonst geht dir die CPU in STOP wergen Zugriff auf nicht existierendes Datenwort.

  5. #5
    Join Date
    16.06.2003
    Location
    88356 Ostrach
    Posts
    5,013
    Danke
    1,347
    Erhielt 1,170 Danke für 552 Beiträge

    Default

    ein schieberegister ist etwas anderes als das was du beschreibst.

    du meinst ein fifo bei dem die daten direkt geschoben werden...


    bei so vielen datenwörtern würde ich eben ein schieberegister verwenden!
    du schiebst nicht alle daten durch den speicher, sondern du änderst nur die stelle an der du aus dem register (db) liest oder an der du schreibst.

    indirekte adressierung

  6. #6
    gorden is offline Neuer Benutzer
    Themenstarter
    Join Date
    22.07.2004
    Posts
    14
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Default

    knanst du das mal genauer beschreiben markus?
    und thx an zottel, ich werds mal ausprobieren

  7. #7
    Join Date
    22.07.2004
    Posts
    788
    Danke
    41
    Erhielt 66 Danke für 47 Beiträge

    Default

    ich hätte da noch mal ne frage zu deinem Problem
    soll jetzt wenn ins dw1 eine null geschrieben wird folgendes passieren
    dw1 = dw2
    dw2 = dw3
    dw3 = dw4
    .
    .
    .

    oder soll nur bei einem erneuten schreiben einer null ins dw 1 geschrieben wird
    dw1 = 0?
    dw1 = dw2
    dw1 = 0?
    dw1 = dw3

    weil im ersten post würde ich die erste möglichkeit rauslesen und im zweiten von dir dann die zweite möglichkeit

  8. #8
    gorden is offline Neuer Benutzer
    Themenstarter
    Join Date
    22.07.2004
    Posts
    14
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Default

    hallo,

    ich meinte

    dw2 = dw1
    dw3 = dw2
    dw4 = dw3
    .
    .
    .

    und mit der 0 meinte ich, das dieser vorgang gestartet wird, wenn eine 0 im dw1 steht...

    mfg

  9. #9
    Join Date
    22.07.2004
    Posts
    788
    Danke
    41
    Erhielt 66 Danke für 47 Beiträge

    Default

    okay dann alles klar hatte das halt beim zweiten post völlig anders interpretiert weil dann wäre ja der lösungsansatz auch anders gewäsen

  10. #10
    gorden is offline Neuer Benutzer
    Themenstarter
    Join Date
    22.07.2004
    Posts
    14
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    gibt es eine möglichkeit, z.b. ein befehl oder so, der die werte in allen dws in einem db um 1 dw nach oben schiebt?

    z.b.

    dw 1 = 3
    dw 2 = 7
    dw 3 = 4

    und nach der operation...

    dw 1 = 7
    dw 2 = 4

Similar Threads

  1. Replies: 2
    Last Post: 06.09.2017, 19:26
  2. Replies: 6
    Last Post: 09.12.2011, 09:15
  3. Andere Möglichkeit als PAP oder Struktogramm
    By Mitschy86 in forum Programmierstrategien
    Replies: 7
    Last Post: 02.05.2011, 14:05
  4. Replies: 44
    Last Post: 14.11.2007, 11:20
  5. Replies: 8
    Last Post: 19.10.2005, 18:19

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •