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

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

Thema: Datenspeicherungs Schleife

  1. #1
    Registriert seit
    22.10.2012
    Beiträge
    80
    Danke
    8
    Erhielt 5 Danke für 4 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Software:
    Tia V12.1 SP1
    WinCC Basic Version V12 SP1

    Harware:
    S7 1215c DCDCDC + 4*15bit AI

    Nun der nächste Knackpunkt.

    Ich muss währen ich den Weg mit einem Zylinder verfahre alle 0,2 mm, zwei zusätzliche werte erfassen und speichern. Mein Plan war dies in SCL zu realisieren.
    sprich alle 0,2 mm die über einen AI gemessen werden, die anderen zei werte erfassen und in einen DB schreiben.

    Da ich jedoch in SCL nicht sehr geübt bin und seit gestern daran sitze und probiere, währe ich dankbar wenn mir jemand bestätigen könnte das es in SCL die beste Lösung ist.
    Zitieren Zitieren Datenspeicherungs Schleife  

  2. Folgender Benutzer sagt Danke zu ihoffiwerdbaldtechniker für den nützlichen Beitrag:

    rnoserriley (25.04.2014)

  3. #2
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.618
    Danke
    775
    Erhielt 646 Danke für 492 Beiträge

    Standard

    Zitat Zitat von ihoffiwerdbaldtechniker Beitrag anzeigen
    Da ich jedoch in SCL nicht sehr geübt bin und seit gestern daran sitze und probiere, währe ich dankbar wenn mir jemand bestätigen könnte das es in SCL die beste Lösung ist.
    Bestätigt!

    mfG Re*vordenPointerUsern*né

  4. Folgender Benutzer sagt Danke zu vollmi für den nützlichen Beitrag:

    rnoserriley (25.04.2014)

  5. #3
    Registriert seit
    22.10.2012
    Beiträge
    80
    Danke
    8
    Erhielt 5 Danke für 4 Beiträge

    Standard


    Das ermutigt mich .... Danke
    Ich werd es mal weiterhin Probieren, Fragen kommen dann später.
    Gruß

  6. Folgender Benutzer sagt Danke zu ihoffiwerdbaldtechniker für den nützlichen Beitrag:

    rnoserriley (25.04.2014)

  7. #4
    Registriert seit
    29.03.2004
    Beiträge
    5.731
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Seitdem man auch in FUP/KOP Arrays mit variablen Index ansprechen kann, sind viele Dinge aber auch problemlos in diesen Sprachen umsetzbar.

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

    rnoserriley (25.04.2014)

  9. #5
    Registriert seit
    22.10.2012
    Beiträge
    80
    Danke
    8
    Erhielt 5 Danke für 4 Beiträge

    Standard

    So nunkommen die Fragen:
    Also ichhabe den Datenübertragungsbaustein in SCL geschrieben.
    kurz zur Übersicht: ich habe einen Hydraulikzylinder den ichunterschiedlich weit verfahre: min 50 mm bis max 300 mm bei etwa 100mm/min.Nach dem ausfahren fährt er direkt wieder ein.
    DieserBaustein dient lediglich dazu die Analogwerte während des Ausfahrens in einenDB zu schreiben.


    Hier werdenalle parameter genullt da der Zylinder die ersten 30 mm ohne messung verfährt:

    IF #IN_Weg <= 30.0 THEN
    #Naechster_schritt:= 30.0;
    #Naechster_schritt_merker := 0;
    #Nr_daten := 0;
    #Nr_daten_merker := 0;
    END_IF;


    ab hier sollen die Daten mitgeschriben werdenbis der sollwert des Zylinders erreicht ist:

    IF
    #IN_Weg <= #IN_Weg_sollwert
    THEN
    IF
    #IN_Weg >= #Naechster_schritt
    THEN
    #Naechster_schritt := #Naechster_schritt +0.2;
    #Nr_daten := #Nr_daten + 1;
    "Messparameter".WEG_DATEN[#Nr_daten] := #IN_Weg;
    "Messparameter".DRUCKMESSPLATTE_DATEN[ #Nr_daten ] :=#IN_Druckmessplatte;
    "Messparameter".OELDRUCK_DATEN[#Nr_daten] := #IN_Oeldruck;
    END_IF;
    END_IF;


    Und ab hier entsteht das Problem:
    diese Schleife dient dazu die Restlichen Array [1500] Feldermit 0.0 aufzufüllen. Sprich wenn derZylinder den sollwert erreicht hat hält dieser und fährt zurück. Während deszurückfahrens sollen die restlichen Array felder genullt werden um anschließenausgelesen zu werden.

    IF
    #IN_Weg > #IN_Weg_sollwert
    THEN
    WHILE #Nr_daten < 1501 DO
    #Naechster_schritt := #Naechster_schritt + 0.2;
    #Nr_daten := #Nr_daten + 1;
    "Messparameter".WEG_DATEN[#Nr_daten] := 0.0;
    "Messparameter".DRUCKMESSPLATTE_DATEN[ #Nr_daten ] := 0.0;
    "Messparameter".OELDRUCK_DATEN[#Nr_daten] := 0.0;

    END_WHILE;
    END_IF;

    In demMoment wo die schleife die Arrays nullt, geht meine Steuerung kurz auf memoryerror, fängt sich dann aber wieder. die Zykluszeit beträgt hier kurz ca. 60ms.

    Den OnlineFehler ist Folgender:


    Temporärer CPU-Fehler: Bereichslängenfehler in FB 2
    betrifft OB 1 Ausführung
    Schreibzugriff DB-Bereich
    fehlerhafte Adresse, Operand ignoriert
    Bearbeitung wirdfortgesetzt (keine OB-Bearbeitung)

    |> HW_ID= 52
    interne Adressierungsdetails: Caddr=16#00000198, Bereich: DB7 , Adr: 144096


    Nun meineFrage: kann ich den Fehler Irgendwie abfangen ? gibts da einen Baustein ?
    oder gibtseine bessere Möglichkeit die Arrayfelder zu nullen ?

    bin um jedenRat dankbar

    Gruß

  10. Folgender Benutzer sagt Danke zu ihoffiwerdbaldtechniker für den nützlichen Beitrag:

    rnoserriley (25.04.2014)

  11. #6
    Registriert seit
    29.10.2010
    Beiträge
    549
    Danke
    57
    Erhielt 39 Danke für 37 Beiträge

    Standard

    Hi,

    60ms für einen Zyklus sind ganz schön viel, du solltest das dann auf mehrere Zyklen verteilen.
    Alles geht, außer nem Känguru das hüpft.

    Tschö dentech

  12. #7
    Registriert seit
    30.01.2004
    Ort
    Erfurt
    Beiträge
    961
    Danke
    42
    Erhielt 109 Danke für 87 Beiträge

    Standard

    Zitat Zitat von ihoffiwerdbaldtechniker Beitrag anzeigen
    Und ab hier entsteht das Problem:
    diese Schleife dient dazu die Restlichen Array [1500] Feldermit 0.0 aufzufüllen. Sprich wenn derZylinder den sollwert erreicht hat hält dieser und fährt zurück. Während deszurückfahrens sollen die restlichen Array felder genullt werden um anschließenausgelesen zu werden.

    IF
    #IN_Weg > #IN_Weg_sollwert
    THEN
    WHILE #Nr_daten < 1501 DO
    #Naechster_schritt := #Naechster_schritt + 0.2;
    #Nr_daten := #Nr_daten + 1;
    "Messparameter".WEG_DATEN[#Nr_daten] := 0.0;
    "Messparameter".DRUCKMESSPLATTE_DATEN[ #Nr_daten ] := 0.0;
    "Messparameter".OELDRUCK_DATEN[#Nr_daten] := 0.0;

    END_WHILE;
    END_IF;
    eine minimale Änderung, nämlich:
    WHILE #Nr_daten < 1500 DO
    sollte das Problem vermutlich beheben - ich denke die erste Zelle des Arrays hat den Index 0 und nicht 1?
    __
    Mit freundlichem Gruß Peter

    ...Wir sind Alle Zeitreisende. Die überwiegende Mehrzahl schafft allerdings täglich nur einen Tag.... (Jasper Fforde: "In einem andern Buch")

  13. #8
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.710
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    Hallo,
    die 60 ms bei einem Reset sehe ich nicht als problematisch an, da sie ja nur in einem Zyklus entstehen in dem keine weitere relevante Aktion stattfindet.

    Dein Fehler besagt nach meiner Meinung, dass versucht wurde ein Array-Element zu indexieren, das es nicht gibt. Vielleicht wäre hier der komplette Code (mit den Deklarationen) mal interessant.
    Was mir persönlich nicht so gut gefällt ist der Einsatz der WHILE-Schleife. Wenn man den Anfang (#Nr_daten +1) und das Ende (1500) einer Schleife kennt halte ich FOR ... TO für die bessere Lösung. Dann würdest du vielleicht auch den Fehler nicht bekommen ...

    Gruß
    Larry

  14. #9
    Registriert seit
    22.10.2012
    Beiträge
    80
    Danke
    8
    Erhielt 5 Danke für 4 Beiträge

    Standard

    Morgen,
    also mal Danke für die Tipps.
    ich werde jetzt jetzt ma in Betrieb fahren und weiter testen.

    Hier mal ein Bild von den Deklarationen:
    Unbenannt1.jpg

    und hier das Bild vom Dazugehörigen DB:
    Unbenannt2.jpg

    Der gesamte SCL code ist oben schon rein kopiert. mehr ist das nicht.

    Also ich habe ja 1501 Arrays von 0 bis 1500.
    also Müsste das ja passen.


    Ich werde mal die Zykluszeit Hochstellen und eine andere Schleife einbauen,
    Vieleicht sollte ich dem SCL CODE eine Startbedinung geben.

    Spricht

    if startmerker := true
    than

    ( scl code )

    if end

  15. #10
    Registriert seit
    30.01.2004
    Ort
    Erfurt
    Beiträge
    961
    Danke
    42
    Erhielt 109 Danke für 87 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    der Index sollte passen, dein problem ist das hier:

    #Nr_daten := #Nr_daten + 1; kommt einfach zu früh

    erst Werte schreiben dann inkrementieren....

    Und der Tip mit For-To statt While ist gut!
    Geändert von PeterEF (25.04.2014 um 10:25 Uhr) Grund: Rechtschreibung
    __
    Mit freundlichem Gruß Peter

    ...Wir sind Alle Zeitreisende. Die überwiegende Mehrzahl schafft allerdings täglich nur einen Tag.... (Jasper Fforde: "In einem andern Buch")

Ähnliche Themen

  1. Step 7 Unterschied zwischen IF- Schleife und While-Schleife
    Von Vokal12 im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 29.10.2013, 22:52
  2. While Schleife in ST
    Von Snooky im Forum CODESYS und IEC61131
    Antworten: 6
    Letzter Beitrag: 30.11.2010, 21:50
  3. for-Schleife
    Von fai004 im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 26.04.2009, 19:14
  4. FOR Schleife
    Von dietere im Forum Sonstige Steuerungen
    Antworten: 1
    Letzter Beitrag: 19.01.2008, 02:36
  5. For Schleife in VB 6
    Von godi im Forum Hochsprachen - OPC
    Antworten: 8
    Letzter Beitrag: 14.06.2007, 10:03

Lesezeichen

Berechtigungen

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