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

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

Thema: Array Stomverbrauch

  1. #1
    Registriert seit
    10.08.2010
    Beiträge
    770
    Danke
    1
    Erhielt 14 Danke für 13 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Ich wollte den Täglichen Stomverbrauch in einer array Variable für jeden Tag speichern.

    Der Tägliche Stomverbrauch wird einmal am Tag gelöscht. Bevor er gelöscht wird wollte ich ihne für ein ganzes Monat in eier Array variable erfassen und dan visualisieren.

    Ich lege eine Array mit 31 Seicherplätze an. Wie bekomme ich jetzt für tag 1 den wert in Speicherplatz 1 für Tag 2 den Wert in Speicherplatz 2 usw ?
    Zitieren Zitieren Array Stomverbrauch  

  2. #2
    Registriert seit
    20.11.2006
    Ort
    Hamburg
    Beiträge
    225
    Danke
    35
    Erhielt 35 Danke für 32 Beiträge

    Standard

    Code:
    FUNCTION FC_Tag : VOID
    VAR_INPUT
        I_Tag:INT;
        R_Verbrauch:REAL;
    END_VAR
    VAR_IN_OUT
        Verbrauch:ARRAY[1..31] OF REAL;
    END_VAR
        // Anweisungsteil
        Verbrauch[I_Tag] := R_Verbrauch;
    END_FUNCTION
    Wie wäre es damit?

    Gruß

  3. #3
    Registriert seit
    10.08.2010
    Beiträge
    770
    Danke
    1
    Erhielt 14 Danke für 13 Beiträge

    Standard

    gibt es einen FUP baustein mit dem ich werte in eine Array speichern kann und der einen Pointer laufen läst ?

  4. #4
    Registriert seit
    20.11.2006
    Ort
    Hamburg
    Beiträge
    225
    Danke
    35
    Erhielt 35 Danke für 32 Beiträge

    Standard

    Einen Pointer in FUP zusammenbasteln geht sicher, ist aber ehrlich gesagt total behämmert.

    Was gefällt dir nicht an dem zur Verfügung gestellten Code?

    Du kannst den FC_Tag aus deinem FUP Programm aufrufen, musst ihn nur mit Werten versorgen.


    Vielleicht habe ich ja auch was falsch verstanden.

  5. #5
    Registriert seit
    14.10.2010
    Ort
    Telgte
    Beiträge
    653
    Danke
    97
    Erhielt 129 Danke für 99 Beiträge

    Idee

    Hi Emilio20

    ist dein Problem noch aktuell ?
    Habe da mal einen FC vorbereitet und in eine Bibliothek gezippt.
    Weiß nicht wie gut deine Programmierkenntnisse sind, aber schau dir das erst mal an. Dann melde dich ob du damit klar kommst...

    Gruß
    Toki
    Angehängte Dateien Angehängte Dateien
    Zitieren Zitieren FC als Bibliothek gezippt  

  6. #6
    Registriert seit
    14.10.2010
    Ort
    Telgte
    Beiträge
    653
    Danke
    97
    Erhielt 129 Danke für 99 Beiträge

    Standard

    Achso,
    selbstverständlich sollte der FC im passend konfigurierten OB10 aufgerufen werden,
    und einen DB muss du auch noch erstellen

    Toki

  7. #7
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.173
    Danke
    922
    Erhielt 3.288 Danke für 2.657 Beiträge

    Standard

    Zitat Zitat von emilio20 Beitrag anzeigen
    gibt es einen FUP baustein mit dem ich werte in eine Array speichern kann und der einen Pointer laufen läst ?
    Fast das gleiche Problem mit FUP-Lösung findest Du hier:
    FUP-Beispiele Zähler, Tagesdurchfluss und 30-Tage-Liste

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  8. #8
    Registriert seit
    10.08.2010
    Beiträge
    770
    Danke
    1
    Erhielt 14 Danke für 13 Beiträge

    Standard

    Hallo dein Beispiel ist gut, aber ich möchte eigentlich nur wissen wie ich in FUP eine Wert in eine Vortlaufende Array speuchere. So wie es in AWl mit dem Pointer gemacht wird

    Ich habe z.b30 Array Variablen und möchte einen Wert in in Array 1 dann in Array 2 usw. Speichern. Gibt es dafür einen vertigen FUP Baustein der nach dem Ablegen in Array1 die 'Adresse auf Array 2 ändert?

    so wie das

    L #Datenanfang
    T #akt_dw

    anf: NOP 0 //schleifenanfang

    L #akt_dw
    SLD 3
    LAR1
    ...
    ...
    T DBD [AR1,P#0.0]

    L #akt_dw
    L 4
    +D //nächstes dw
    T #akt_dw
    L #Datenende
    >D
    SPB ende //Schleifenende erreicht

    SPA anf //zum Schleifenanfang
    ende: nop 0
    Geändert von emilio20 (09.12.2010 um 12:17 Uhr)

  9. #9
    Registriert seit
    10.08.2010
    Beiträge
    770
    Danke
    1
    Erhielt 14 Danke für 13 Beiträge

    Standard

    Hallo

    Ich hab jetzt aus der Uhrzeit den Monat herausgefildert z.b( Dezember =12). Array steht auf Speicherort 60 und geht bis 108

    Berechnet habe ich jetzt Monat(12)*4=48 + 56 = 104 (SP_ORT)

    Wie bekomme ich jetzt in FUP die Variable SP_ORT in
    DB103.DBD SP_ORT ??
    somit sollte es heisen DB103.DBD104
    Geändert von emilio20 (09.12.2010 um 15:12 Uhr)

  10. #10
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.173
    Danke
    922
    Erhielt 3.288 Danke für 2.657 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von emilio20 Beitrag anzeigen
    Hallo dein Beispiel ist gut, aber ich möchte eigentlich nur wissen wie ich in FUP eine Wert in eine Vortlaufende Array speuchere. So wie es in AWl mit dem Pointer gemacht wird
    In FUP und KOP gibt es keine indirekte Adressierung. Pointer können höchstens an aufgerufene FB/FC/SFB/SFC übergeben werden.

    Zitat Zitat von emilio20 Beitrag anzeigen
    Ich habe z.b30 Array Variablen und möchte einen Wert in in Array 1 dann in Array 2 usw. Speichern. Gibt es dafür einen vertigen FUP Baustein der nach dem Ablegen in Array1 die 'Adresse auf Array 2 ändert?
    Falls es einen fertigen Baustein geben sollte, dann ist der garantiert nicht in FUP geschrieben. Man könnte ihn aber in FUP aufrufen.
    Auch den Baustein von Dotzi in #2 kann man in FUP aufrufen, da muß nur noch der Schreibindex I_Tag extern verwaltet werden.

    Wenn das Array nicht groß ist, dann kann in FUP ein variabler Index als Pointer genutzt werden, indem man für jeden möglichen Index-Wert den zugehörigen Array-Zugriff extra ausprogrammiert. #akt_dw ist der Zähler bzw. Pointer (1...30), in welches Array-Element gespeichert werden soll. Der muß noch bei jedem Speicherimpuls vor oder nach dem Einspeichern erhöht werden (auf das nächste Arrayelement gestellt werden).
    Beispiel: das Array ist im DB2 die Variable: Verbrauch ARRAY[1..30] OF REAL
    Code:
    // #TagVerbrauch in Verbrauch[#akt_dw] einspeichern
                    +---+                       +--------+
                    | & |                       |  MOVE  |
    #SpeicherImpuls-|   |-+---------------------|EN   OUT|-#WR_Index
                    +---+ |                     |        |
                          |             #akt_dw-|IN   ENO|-
                          |                     +--------+
                          |                     +--------+
                          |                     |  MOVE  |
                          +--------------------O|EN   OUT|-#WR_Index
                                                |        |
                                              0-|IN   ENO|-
                                                +--------+
                    +--------+
                    | CMP==I |
          #WR_Index-|IN1     |                  +--------+
                    |        |                  |  MOVE  |
                  1-|IN2     |------------------|EN   OUT|-"DB2".Verbrauch[1]
                    +--------+                  |        |
                                  #TagVerbrauch-|IN   ENO|-
                                                +--------+
                    +--------+
                    | CMP==I |
          #WR_Index-|IN1     |                  +--------+
                    |        |                  |  MOVE  |
                  2-|IN2     |------------------|EN   OUT|-"DB2".Verbrauch[2]
                    +--------+                  |        |
                                  #TagVerbrauch-|IN   ENO|-
                                                +--------+
    
                         ...      //noch CMP+MOVE für 3 bis 29 einfügen
    
                    +--------+
                    | CMP==I |
          #WR_Index-|IN1     |                  +--------+
                    |        |                  |  MOVE  |
                 30-|IN2     |------------------|EN   OUT|-"DB2".Verbrauch[30]
                    +--------+                  |        |
                                  #TagVerbrauch-|IN   ENO|-
                                                +--------+

    Dein AWL-Beispiel macht irgendwie keinen Sinn (wieso eine Schleife, wenn Du nur 1 Wert einspeichern willst?).
    Falls Du das Array als FIFO nutzen wolltest, wo der neue TagVerbrauch am Anfang eingespeichert wird und die vorherigen Werte 1 Platz nach hinten rücken,
    das geht in FUP so:
    Code:
    // #TagVerbrauch in Verbrauch[1] einspeichern, 
    // vorher Verbrauch[1..29] nach Verbrauch[2..30] umspeichern
                    +---+                       +--------+
                    | & |                       |  MOVE  |
    #SpeicherImpuls-|   |-+---------------------|EN   OUT|-"DB2".Verbrauch[30]
                    +---+ |                     |        |
                          | "DB2".Verbrauch[29]-|IN   ENO|-
                          |                     +--------+
                          |                     +--------+
                          |                     |  MOVE  |
                          +---------------------|EN   OUT|-"DB2".Verbrauch[29]
                          |                     |        |
                          | "DB2".Verbrauch[28]-|IN   ENO|-
                          |                     +--------+
                          |
                         ...        //noch Verbrauch[2] bis Verbrauch[27] einfügen
                          |
                          |                     +--------+
                          |                     |  MOVE  |
                          +---------------------|EN   OUT|-"DB2".Verbrauch[2]
                          |                     |        |
                          |  "DB2".Verbrauch[1]-|IN   ENO|-
                          |                     +--------+
                          |                     +--------+
                          |                     |  MOVE  |
                          +---------------------|EN   OUT|-"DB2".Verbrauch[1]
                                                |        |
                                  #TagVerbrauch-|IN   ENO|-
                                                +--------+
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

Ähnliche Themen

  1. Antworten: 18
    Letzter Beitrag: 21.12.2016, 17:03
  2. Array in Nov Ram
    Von COOLT im Forum CODESYS und IEC61131
    Antworten: 41
    Letzter Beitrag: 22.09.2009, 20:19
  3. Array
    Von rainer-step5 im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 31.10.2006, 19:46
  4. Array?????
    Von Adenauer im Forum Simatic
    Antworten: 15
    Letzter Beitrag: 20.04.2006, 10:32
  5. Bool-Array in Byte-Array
    Von Techniker im Forum Sonstige Steuerungen
    Antworten: 10
    Letzter Beitrag: 13.01.2006, 19:12

Lesezeichen

Berechtigungen

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