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

Page 4 of 4 FirstFirst ... 234
Results 31 to 37 of 37

Thread: Messwerte in einen DB schreiben

  1. #31
    Join Date
    23.02.2015
    Posts
    3
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Leute,
    ich klinke mich da einfach mal rein da es zu meinem Problem passt.

    Ich will auch Werte in einem Datenbaustein abspeichern.
    Der DB ist bis dw60700 geöffnet.
    Ich will über indizierte Adressierung auf (z.B.)DBxx.DD60620 schreiben.
    Jetzt hab ich das Problem wenn ich diese 60620 mit einer Variable übergebe muss diese ja eine INT - variable sein. ERGO: fehler weil INT -32000 / +32000 (ungefähr).
    Kann ich auf 60620 überhaupt adressieren ?
    Falls ja - wie ?

    danke für eure Hilfe
    Gruß Tom

  2. #32
    Join Date
    22.06.2009
    Location
    Sassnitz
    Posts
    13,451
    Danke
    1,086
    Erhielt 3,962 Danke für 3,201 Beiträge

    Default

    Hmm, ich mag jetzt nicht 30 Beiträge lesen und dann raten, wozu Dein Beitrag passen könnte
    Also: wo musst Du den Wert übergeben? Warum muß es INT sein?
    Du könntest auch als WORD oder DINT übergeben oder einfach vorzeichenlos rechnen - die Adressberechnung muß ja eigentlich sowieso in DINT durchgeführt werden.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  3. #33
    Join Date
    23.02.2015
    Posts
    3
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Default

    Hallo Harald,
    Danke für deine Antwort.
    Ich sehe ich muss dann doch präziser werden.
    Ich schreibe einen SCL Baustein der mir von einen angeschlossenen Sensor Messwerte ich einen Datenbaustein speichert.
    Mein System:
    Code:
    S7 Distributed Safety Programming V5.4 + SP5 K5.4.5.0_3.5.0.2 K5.4.5.0
    Automation License Manager V5.1 + SP1 K05.01.01.00_01.10.00.06 K5.1.1.0
    S7-PLCSIM V5.4 + SP5 + Upd1 K05.04.05.01_01.02.00.01 K5.4.5.1
    S7-PDIAG V5.3 + SP6 K05.03.06.00_01.01.00.09 K5.3.6.0
    S7 F ConfigurationPack V5.5 + SP6 K5.5.6.0_9.1.0.1 K5.5.6.0
    S7-GRAPH V5.3 + SP7 K5.3.7.0_1.2.0.1 K5.3.7.0
    S7-PCT V2.3 V02.03.00.00_01.18.00.01 V2.3.0.0
    S7-SCL V5.3 + SP6 K05.03.06.00_01.05.00.01 K5.3.6.0
    STEP 7 V5.5 + SP2 + HF1 K5.5.2.1_8.1.0.1 K5.5.2.1
    Mein Code:
    Code:
            Aktuell_Adresse := (BYTE_TO_INT(STATUS.BYTE_3_BYTE_JOB_Number)-1)*2400;      // Wert 1 speichern
            t_real := DWORD_TO_DINT(DATA.BYTE_02_MESSWERT_01)*korr_fact/100;
            daten_db.dd[Aktuell_Adresse] := REAL_TO_DWORD(t_real) ; // 1. Wert
    Wenn jetzt meine "Job_nummer" die 15 erreicht macht es "puff" und die sps (416-F) stoppt.
    Das Problem ist das laut Anleitung die indize als INT übergeben werden muss.
    Bei mir die variable "Aktuell_Adresse".
    Sobald der Wert von "Aktuell_Adresse" die 32767 überschreitet passt die Adressierung des Datenbausteins nicht mehr.

    Ich hoffe jetzt ist es ein bisschen verständlicher.

    Hier noch das Dokument von Siemens:
    SCL_d.jpg

    Gruß Tom
    Last edited by Thomas.Scheuerer; 27.05.2015 at 23:00.

  4. #34
    Join Date
    22.03.2007
    Location
    Detmold (im Lipperland)
    Posts
    12,140
    Danke
    411
    Erhielt 2,492 Danke für 2,071 Beiträge

    Default

    Hallo,
    2 Fragen dazu :
    - kann/darf der Datenbaustein bei einer 400er so groß werden ?
    - warum arbeitest du nicht mit einem Array (of REAL) an Stelle dieser Indiziererei ?

    Gruß
    Larry

  5. #35
    Join Date
    23.03.2015
    Location
    Dortmund
    Posts
    15
    Danke
    10
    Erhielt 0 Danke für 0 Beiträge

    Default

    Warum 1001 Felder?
    Ein Wert pro Sekunde X 3 Minuten ergibt 180 oder lasse ich da etwas außer acht?
    kaum macht man's richtig schon funktioniert es

  6. #36
    Join Date
    22.06.2009
    Location
    Sassnitz
    Posts
    13,451
    Danke
    1,086
    Erhielt 3,962 Danke für 3,201 Beiträge

    Default

    Quote Originally Posted by Thomas.Scheuerer View Post
    Wenn jetzt meine "Job_nummer" die 15 erreicht macht es "puff" und die sps (416-F) stoppt.
    Das Problem ist das laut Anleitung die indize als INT übergeben werden muss.
    Wenn es denn tatsächlich mit dieser vorsintflutlichen Indiziererei sein muß:

    Die SCL-Hilfe zum indizierten Zugriff auf Datenbausteine bzw. Speicherbereiche ist veraltet. Der Index darf auch DINT sein - dann kann man auch auf Adressen > DBD32767 zugreifen.

    Deklariere Aktuell_Adresse als DINT und berechne in DINT, dann crasht es nicht mehr:
    Code:
            Aktuell_Adresse := (BYTE_TO_INT(STATUS.BYTE_3_BYTE_JOB_Number)-1) * DINT#2400;      // Wert 1 speichern
            t_real := DWORD_TO_DINT(DATA.BYTE_02_MESSWERT_01)*korr_fact/100.0; //REAL-Berechnung explizit/deutlicher angeben!
            daten_db.dd[Aktuell_Adresse] := REAL_TO_DWORD(t_real) ; // 1. Wert
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  7. #37
    Join Date
    23.02.2015
    Posts
    3
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    OK, vielen Dank.
    werde ich Testen.

    Ich gib dann Meldung.

    Gruß Tom

Similar Threads

  1. Replies: 5
    Last Post: 24.10.2013, 09:37
  2. Wago 750 Messwerte in Array schreiben
    By emsbootsmann in forum Sonstige Steuerungen
    Replies: 14
    Last Post: 21.10.2012, 15:30
  3. Daten in einen DB schreiben
    By Stefan_01 in forum Programmierstrategien
    Replies: 9
    Last Post: 01.10.2008, 06:15
  4. Inhalt eines DB in einen DB Schreiben
    By nonguru in forum Simatic
    Replies: 3
    Last Post: 15.08.2008, 17:04
  5. Replies: 5
    Last Post: 21.06.2007, 16:04

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
  •