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

Ergebnis 1 bis 10 von 10

Thema: Array [0..30] Of String[40] (DB) -> Array [0..30] Of String[40] TEMP einschreiben

  1. #1
    Registriert seit
    04.08.2015
    Beiträge
    7
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Frage


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Guten tag alle.

    (Zum erst entschuldige sie meinen schlechten Deutsch Grammatik).

    Wie kann ich in Step 7 (AWL) ein Array [0..30] Of String[40] (das Array ist in einen DB) ins einen TEMP variable Array [0..30] Of String[40] einlesen/einschreiben?

    Bin ich noch ein "NOOB" in STEP 7 Programmierung. Mehr Erfahrung in JavaScript, Java, Python, PHP, Ruby.

    Vielen dank für sein Hilfe.
    Zitieren Zitieren Array [0..30] Of String[40] (DB) -> Array [0..30] Of String[40] TEMP einschreiben  

  2. #2
    Registriert seit
    29.03.2004
    Beiträge
    5.800
    Danke
    144
    Erhielt 1.709 Danke für 1.240 Beiträge

    Standard

    Dein Array würde 31*42 = 1302 Bytes an Speicher benötigen

    Das geht nicht bei einer S7-300, aber nur weil der Speicher für die Lokaldaten (d.h. der TEMP-Bereich) zu klein ist. Eine S7-300 hat fast immer maximal 256 Bytes Lokaldaten. Bei einer S7-400 könntest du den Speicherbereich für die Lokaldaten in der Hardwarekonfiguration entsprechend hoch einstellen. Dann könntest du das Array mittels Blockmove (SFC22) kopieren.
    Warum muss es denn im Temp-Bereich sein?

  3. #3
    nWEBd ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    04.08.2015
    Beiträge
    7
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Thomas_v2.1 danke für dein Antwort.

    Es gehts um des das den Array von einen API bearbeitet wird (2x aufgerufen wird) und ich muss die Daten von den ersten Aufruf zwischen speichern und danach vergleichen.

    Also muss ich einen neuen DB festlegen, die Werte mit einen Loop ein schreiben und mit den DB weiter bearbeiten?

    In andere Prog.sprachen ist ein Array Bearbeitung viel leichter...

  4. #4
    Registriert seit
    29.03.2004
    Beiträge
    5.800
    Danke
    144
    Erhielt 1.709 Danke für 1.240 Beiträge

    Standard

    Du könntest auch einen FB verwenden und den Zwischenspeicher im Stat-Bereich anlegen, dann hast du nicht die Begrenzung mit der Größe der Lokaldaten.

    Sicher ist das in anderen Sprachen leichter. Wenn du SCL verwendest wird es aber schonmal etwas komfortabler. In AWL ist das übelstes Gebastel.

    Und dann wie schon geschrieben, Speicherbereiche kopieren mittels SFC22. Der macht keinen Unterschied zwischen Lokaldaten, Global-DBs oder Instanz (Stat) Daten.

  5. Folgender Benutzer sagt Danke zu Thomas_v2.1 für den nützlichen Beitrag:

    nWEBd (04.08.2015)

  6. #5
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.367
    Danke
    457
    Erhielt 696 Danke für 521 Beiträge

    Standard

    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    as geht nicht bei einer S7-300, aber nur weil der Speicher für die Lokaldaten (d.h. der TEMP-Bereich) zu klein ist. Eine S7-300 hat fast immer maximal 256 Bytes Lokaldaten.
    @Thomas: Die Info ist aber nicht mehr ganz taufrisch...
    Zitat Zitat von SIEMENS S7315-2PN/DP Datenblatt
    Lokaldaten
    ● je Prioritätsklasse, max. 32 768 byte; max. 2048 byte pro Baustein

    Die Zeiten mit den 256 sind schon lang vorbei, bei den Vipas muss man aufpassen, da sind die Modelle sehr unterschiedlich...
    Da bin ich mal gestolpert als ein paar Standard-FBs von mir nimmer gingen....

    Theoretisch sollte das, sofern man im FB unter 2048 bleibt, also OK sein....
    Für Details müsste man aber die genaue Ziel-CPU-Type kennen.
    If at first you don't succeed, you're not Van Damme!
    ... or maybe using TIA!

  7. #6
    nWEBd ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    04.08.2015
    Beiträge
    7
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Beitrag

    Vielen dank für dein Hilfe und "WayPoints"

    Probiere ich einmal und melde wie es Funktioniert hat

    Danke nochmals.


    Noch dazu:

    wie ist mit die Array Indexierung?

    Mein Erfahrung mit JavaScript kannst ein "For loop" nehmen und durch schpringen:

    for (var i = 0; i < array.length; i++) {
    console.log(array[i]);
    }

    Gehts bei AWL auch so? Kann ich den Array Index mit einen Variable aufrufen? Array[_hvar] ?
    Geändert von nWEBd (04.08.2015 um 13:06 Uhr)

  8. #7
    Registriert seit
    22.07.2007
    Beiträge
    87
    Danke
    16
    Erhielt 25 Danke für 19 Beiträge

    Standard

    Die Verwendung einer Indexvariable funktioniert mit Step7 "Classic" nur unter SCL.

    Bei verwendung von AWL wirst du mit Adressregistern oder selbstgebauten ANY-Pointern arbeiten müssen.
    Beispiel:
    Code:
    LAR1 P##MyArr[0] // Start-Adresse des ersten String im Array ins Adressregister 1 laden
    L B[AR1, p#1.0] // Laden der Stringlänge des ersten Strings
    ...
    
    AR1+ P#42.0 // Adressregister 1 + Max-Länge String[40]
    L B[AR1, p#1.0] // Laden der genutzten Stringlänge des 2. Strings
    ...
    Zu den Anypointern findest du nen ausführlichen Thread im FAQ.


    MfG Semo
    Geändert von Semo (04.08.2015 um 13:58 Uhr) Grund: Vervollständigt

  9. Folgender Benutzer sagt Danke zu Semo für den nützlichen Beitrag:

    nWEBd (04.08.2015)

  10. #8
    nWEBd ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    04.08.2015
    Beiträge
    7
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke Semo.

    Schaut's aus ich habe noch viel zum lernen

    MfG,

    N.Vukovic

  11. #9
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.367
    Danke
    457
    Erhielt 696 Danke für 521 Beiträge

    Standard

    Wenn ich den TE richtig verstanden habe dann will er doch eh das ganze Array aus dem DB in ein gleiches Array in Temp kopieren.
    Das kann er dann ja doch (wie von Thomas vorgeschlagen) auf einen schlag mit dem SFC20 Blockmove machen.
    Da wäre nicht viel zu programmieren....

    Wenns AWL sein soll...
    Code:
          CALL  "BLKMOV"
           SRCBLK :="MyDb".StrArray
           RET_VAL:=tmpRetVal
           DSTBLK :=#MyTempArray
          NOP   0
    [EDIT] Hab esst später gemerkt dass es schon um den nächsten Schritt (dyn. Einzeladressierung der Arraymembers ging)....
    Geändert von RONIN (04.08.2015 um 14:43 Uhr)
    If at first you don't succeed, you're not Van Damme!
    ... or maybe using TIA!

  12. #10
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.648
    Danke
    789
    Erhielt 654 Danke für 497 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von nWEBd Beitrag anzeigen
    Es gehts um des das den Array von einen API bearbeitet wird (2x aufgerufen wird) und ich muss die Daten von den ersten Aufruf zwischen speichern und danach vergleichen.
    Das sieht jetzt aber auch so aus, als ob der Vergleich nicht im selben Zyklus stattfindet. Darum ist der Tempbereich sowieso ungeeignet.

    In SCL sind solche Arrayoperationen sehr einfach und übersichtlich. Ich würde das in der Hinsicht ins Auge fassen.

    mfg René

Ähnliche Themen

  1. TIA Array zu String
    Von christian_87 im Forum Simatic
    Antworten: 15
    Letzter Beitrag: 25.03.2015, 12:35
  2. String in Array
    Von bige im Forum CODESYS und IEC61131
    Antworten: 17
    Letzter Beitrag: 02.07.2014, 18:26
  3. String in Array of String schreiben
    Von carepicha im Forum CODESYS und IEC61131
    Antworten: 26
    Letzter Beitrag: 17.10.2013, 20:08
  4. Array of Byte to String[12] ,S7
    Von sb9674 im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 28.09.2009, 19:15
  5. Antworten: 13
    Letzter Beitrag: 24.09.2009, 12:54

Stichworte

Lesezeichen

Berechtigungen

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