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

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

Thema: DB indirekt beschreiben

  1. #1
    Registriert seit
    09.02.2010
    Beiträge
    35
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    folgendes Problem:

    ich habe zwei DB´s in einem DB werden Daten (DB20.DBW0 bis DB20.DBW500) abgelegt, diese muss ich weiter verarbeiten.
    Je 4 bit ergeben mein ASCII.

    Bis jetzt sieht es so aus:

    Code:
    U DB20.DBx 0.3 
    S M200.0
    
    U DB20.DBx 0.2 
    S M200.1
    
    U DB20.DBx 0.1 
    S M200.2
    
    U DB20.DBx 0.0 
    S M200.3
    
    L MB200
    L 48                   //lt. ASCII-Tabelle
    +I
    
    L MB 200
    T DB 21.DBB0    //erstes ASCII
    
    L 0
    T MB 200
    // usw.

    könnte man das nicht irgendwie in eine Schleife packen, das ganze 2000 mal schreiben ist ja Wahn.

    Gruß lounsome
    Zitieren Zitieren DB indirekt beschreiben  

  2. #2
    Registriert seit
    20.02.2008
    Beiträge
    332
    Danke
    16
    Erhielt 40 Danke für 37 Beiträge

    Standard

    Geht das mit DB20.DBX 0.4 oder DB20.DBX 1.0 weiter ?

    Ach, ja die gute alte Schmiermerkerzeit ab Merkerwort 200 in der S5 - habe ich schon lange nicht mehr gesehen. Das muss man so nicht mehr machen, dafür gibt es die temporäre Variablen.

  3. #3
    Registriert seit
    09.02.2010
    Beiträge
    35
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    geht so weiter:
    0.7, 0.6, 0.5, 0.5 = CHAR 2
    1.3, 1.2, 1.1, 1.0 = CHAR 3
    1.7, 1.6, 1.5, 1.5 = CHAR 4
    .
    .
    .
    usw.

  4. #4
    Registriert seit
    04.10.2008
    Ort
    Nürnberg
    Beiträge
    98
    Danke
    10
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Also wenn das Schmiermerker sind ist das mit dem Setzebefehl eher ungünstig. Solltest vorher vielleicht das Byte ablöschen.
    Und was soll das:

    L MB200
    L 48 //lt. ASCII-Tabelle
    +I ? danach verwirfst Du das ganze. Aber Du wolltest wissen wie es auch geht ohne das Ganze 500 mal zu schreiben. L 0 T #Alarmz // Schmiermerkerdoppelwort anf: NOP 0 L #Alarmz L L#1 +D T #Alarmz // Schleifenzähler L P#0.0
    L #Alarmz +D LAR1 AUF DB20 U DBX [AR1,P#0.0] L P#0.0L #Alarmz
    +D
    LAR1
    AUF DB21
    = DBX [AR1,P#0.0]

    L #Alarmz
    L L#500 // L#100
    <D
    SPB anf // Wenn 500 abgearbeitet Schleife ende
    So in etwa. Ich weiss jetzt aber nicht was mit dem +48 bezweckt wird. Im moment wird einfach nur ein Bit vom DB20 auf Db21 umgeschaufelt. Das müsste man halt noch dementsprechend anpassen. Ist nur ein Beispiel für einen Schleifenzähler mit indirekter Adressierung. Mein Beispiel überspringt jetzt auch das Byte 0.

  5. #5
    Registriert seit
    04.10.2008
    Ort
    Nürnberg
    Beiträge
    98
    Danke
    10
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hilfe.... das Format ist verschwunden beim Posten.
    L 0 T #Alarmz // Schmiermerkerdoppelwort
    anf: NOP 0
    L #Alarmz
    L L#1
    +D
    T #Alarmz // Schleifenzähler L P#0.0
    L #Alarmz
    +D
    LAR1
    AUF DB20
    U DBX [AR1,P#0.0]
    L P#0.0
    L #Alarmz
    +D
    LAR1
    AUF DB21
    = DBX [AR1,P#0.0]

    L #Alarmz
    L L#500 // L#100
    <D
    SPB anf // Wenn 500 abgearbeitet Schleife ende

  6. #6
    Registriert seit
    04.10.2008
    Ort
    Nürnberg
    Beiträge
    98
    Danke
    10
    Erhielt 0 Danke für 0 Beiträge

    Standard

    ich kriege die Krise
    L 0
    T #Alarmz // Schmiermerkerdoppelwort
    anf: NOP 0
    L #Alarmz
    L L#1
    +D
    T #Alarmz // Schleifenzähler L P#0.0
    L #Alarmz
    +D
    LAR1
    AUF DB20
    U DBX [AR1,P#0.0]
    L P#0.0
    L #Alarmz
    +D
    LAR1
    AUF DB21
    = DBX [AR1,P#0.0]

    L #Alarmz
    L L#500 // L#100
    <D
    SPB anf // Wenn 500 abgearbeitet Schleife ende

  7. #7
    Registriert seit
    20.02.2008
    Beiträge
    332
    Danke
    16
    Erhielt 40 Danke für 37 Beiträge

    Standard

    Zitat Zitat von Uwe16 Beitrag anzeigen
    Ich weiss jetzt aber nicht was mit dem +48 bezweckt wird.
    Hallo Uwe, so ändert man den Bytewert einer Zahl in den ASCII-Wert um. Siehe ASCII-Tabelle.

    Ach ja, da gibt es eine Vorschau-Funktion, damit Du Dir das Format ansehen kannst, bevor Du die Antwort postest. Einfach mal auf "Erweitert" klicken und dann auf "Vorschau". Da gibt es auch ein Symbol "#" (Code) in der Symbolleiste, damit kannst Du Quellcode einbetten.
    Geändert von asci25 (06.03.2012 um 12:03 Uhr)

  8. #8
    Registriert seit
    09.02.2010
    Beiträge
    35
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Leute, vielen dank schon mal.
    Aber irgendwie check ich das nicht ganz,
    mit dem Code kopiere ich doch nur von einem DB in den anderen, oder?

  9. #9
    Registriert seit
    04.10.2008
    Ort
    Nürnberg
    Beiträge
    98
    Danke
    10
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke für den Tip. Hmm. Dann wird das Bitbearbeite eher nix.
    Ich habe mit Ascii nicht oft was zu tun. Aber es ist doch so dass ein Byte ein Zeichen ist, oder?
    Byteweise würde das dann doch so aussehen:
    L #Schmierwort /diesmal Integer
    SLW 3
    T #Schmier1
    AUF DB20
    L DBB [#Schmier1]
    L 48
    +i
    t #schmierbyte2
    L #Schmierwort /diesmal Integer
    SLW 3
    T #Schmier1
    AUF DB21
    l#schmierbyte2
    T DBB [#Schmier1]
    sorry dass mit der Vorschau finde ich nicht.
    Das wäre jetzt einfach nur Byte DB20 + 48 nach DB21.
    Das Ganze müsste dann noch in die Schleife eingebettet werden. Wobei der Schleifenzähler dann in Integer umgebaut werden muss.

  10. #10
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.401 Danke für 2.001 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von lounsome Beitrag anzeigen
    ... mit dem Code kopiere ich doch nur von einem DB in den anderen, oder?
    Hallo,
    das würde ich auch so sehen.
    Ich würde solche Konstrukte heute nicht mehr in AWL sondern in SCL machen. Vielleicht solltest du auch darüber nachdenken.

    Wenn es aber AWL sein soll, dann mußt du mit 2 Zeigern (einen für die Quelldaten und einen für die Zieldaten) arbeiten - würde ich jedenfalls so machen ...
    Dann würde ich mir nicht die Bits einzeln laden sondern gleich das erste Byte. Hier maskierst du dann die unteren 4 Bits mit "L w#16#F" und "UW" aus. Auf das Ergebnis dann die Hex 30 oder dezimal 48 draufaddieren. Das (neue) Byte dann wegschreiben und den Schreibzeiger um P#1.0 erhöhen. Nun nochmal das gleiche Quellbyte laden und mit "SRW 4" und "L w#16#F" und "UW" die oberen 4 Bit ausmaskieren. Damit dann verfahren wie vorher. Nun Lesezeiger um "P#1.0" erhöhen und das Ganze wiederholen bis du alle Bytes geschrieben hast.

    Gruß
    Larry

Ähnliche Themen

  1. Eingänge beschreiben?
    Von Sesssko im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 18.06.2011, 09:04
  2. Array beschreiben
    Von focus81 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 16.08.2010, 14:25
  3. String beschreiben
    Von manas im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 16.03.2010, 17:04
  4. PEW beschreiben
    Von Joos im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 03.03.2010, 10:46
  5. Array indirekt beschreiben
    Von Airpower im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 22.06.2009, 08:34

Lesezeichen

Berechtigungen

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