Problem bei SCL

dentech

Level-1
Beiträge
577
Reaktionspunkte
39
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

ich möchte in ein ARRAY die RET_VAL Ausgabe des SFC64(TIME_TCK) schreiben, bekomme aber immer nen ungültigen Datentyp. Was mache ich falsch?

Code:
FUNCTION FC200: VOID
VAR_TEMP
Takt:
ARRAY[0..9] OF DINT;
END_VAR
TIME_TCK(RET_VAL:=Takt[0]); // TIME
END_FUNCTION
 
Überarbeitet aber nicht getestet:
Code:
FUNCTION FC200: VOID
VAR_TEMP
Takt: ARRAY[0..9] OF [B][COLOR=#ff0000]TIME[/COLOR][/B];
END_VAR
[B][COLOR=#ff0000] Takt[0] := TIME_TCK(); // TIME[/COLOR][/B]
END_FUNCTION
 
Dann hast Du die Änderung in der Variablendeklaration nicht beachtet.

Ich habe das Array von DINT auf Time umgestellt. Entweder Du macht diese Änderung auch oder du baust noch etwas um z.B. so:

Takt[0] := TIME_TO_DINT(TIME_TCK());
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

habe das jetzt so vervollständigt:

Code:
FUNCTION FC200: VOIDVAR_TEMP
Systemzeit_1 : DINT;
Systemzeit_2 : DINT;
Diff_Systemzeit: DINT;
Test : DINT;
Zaehler : INT;   
END_VAR
IF "SPS Daten".Takt.Takt_Start THEN;
    Systemzeit_1 := TIME_TO_DINT(TIME_TCK());                       //Systemzeit_1 einlesen
END_IF;


IF "SPS Daten".Takt.Takt_Ende THEN;
    Systemzeit_2 := TIME_TO_DINT(TIME_TCK());                       //Systemzeit_2 einlesen
END_IF;


             IF Systemzeit_2 > Systemzeit_1 & "SPS Daten".Takt.Takt_Ende=False & "SPS Daten".Takt.Takt_Start=False THEN;                                                                                           
                    Diff_Systemzeit := Systemzeit_2 - Systemzeit_1;                                                        
                    "SPS Daten".Takt.Takt[0] := Diff_Systemzeit;
                         
            END_IF;


END_FUNCTION


Aber die Zeiten passen auf einmal nicht mehr, bekomme zwischendurch eine negative Differenz.
 
Aber die Zeiten passen auf einmal nicht mehr, bekomme zwischendurch eine negative Differenz.

Naja das ist klar da Du Variante B gewählt hast Du hättest das Array vielleicht lieber doch auf TIME umgeändert -> siehe Variablendeklaration in meiner ersten Antwort. ---> Das rote TIME



Time ist eine positive ganzzahl die, die ms wiederspiegelt. DINT geht eben auch ins negative.
 
habe ich jetzt mal gemacht, aber wieso bekomme ich eine Zeit von 6 Tagen, der müsste doch bei jedem MRES wieder bei 0 anfangen oder?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn ich das richtig verstehe, willst du die Systemzeit als Timer verwenden.

Bedenke, dass die Systemzeit nur bis 2^31 geht und dann wieder bei 0 anfängt. du musst den Überlauf beachten.
 
mit statischen Variablen funzt das soweit, ich habe nur noch das Problem das mein Zähler von aussen zwar hochgezählt wird, aber in dem FB nicht ankommt.

Code:
FUNCTION_Block FB200
VAR
    Systemzeit_1 : DINT;
    Systemzeit_2 : DINT;
END_VAR    
VAR_INPUT
    Zaehler :INT;
END_VAR
IF "SPS Daten".Takt.Takt_Start THEN;
    Systemzeit_1 := TIME_TO_DINT(TIME_TCK());                       //Systemzeit_1 einlesen         
END_IF;
IF "SPS Daten".Takt.Takt_Ende THEN;
    Systemzeit_2 := TIME_TO_DINT(TIME_TCK());                       //Systemzeit_2 einlesen
END_IF;
             IF  Systemzeit_2 > Systemzeit_1 & "SPS Daten".Takt.Takt_Ende=False & "SPS Daten".Takt.Takt_Start=False THEN;
                                                                                                      
                   "SPS Daten".Takt.Takt[Zaehler] := Systemzeit_2 - Systemzeit_1;                                                        
                    
            END_IF;
END_FUNCTION_Block
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Schon einmal daran gedacht, programmieren zu lernen und nicht die Lösungen im Netz zu finden?

Grundlagen muss man auch beim abschreiben wissen.
Und sei versichert, an den Universitäten ist auch dieses Forum inzwischen bekannt.


bike
 
Schon einmal daran gedacht, programmieren zu lernen und nicht die Lösungen im Netz zu finden?

Grundlagen muss man auch beim abschreiben wissen.
Und sei versichert, an den Universitäten ist auch dieses Forum inzwischen bekannt.


bike

bike du bist oftmals so verpeilt und schreibst Dinge, die niemand wissen will.

Ich denke vielen hier fehlen da einfach nur die Worte.

Konstruktive Lösungsfindung in diesem Forum scheint nicht deine Stärke zu sein.

Das geht mir dermaßen auf die Eier, dass ich es nun endlich mal loswerden muss.

Mir ist völlig klar, das es dich nicht interressiert und du im gleichen besserwisserischem Stil weitermachen wirst.
Sei es drum...
 
bike du bist oftmals so verpeilt und schreibst Dinge, die niemand wissen will.

Ich denke vielen hier fehlen da einfach nur die Worte.

Konstruktive Lösungsfindung in diesem Forum scheint nicht deine Stärke zu sein.

Das geht mir dermaßen auf die Eier, dass ich es nun endlich mal loswerden muss.

Mir ist völlig klar, das es dich nicht interressiert und du im gleichen besserwisserischem Stil weitermachen wirst.
Sei es drum...

Mich interessiert fast alles.
Wenn jemand sinnvoll nach Lösungen fragt, bekommt der immer eine Antwort oder zumindest sinnvolle Hinweise.
Doch immer zu schreiben das geht nicht und nicht erklären was gemacht wurde, um das Problem selbst zu lösen, das ist einfach nur dumm.

Was willst du wissen, damit ich dir sinnvoll helfen kann? :rolleyes:

Ist es wirklich so schwer selbst zuerst versuchen und dann fragen?

Wenn ich lese, ich gehe dir auf ein Nichts, dann stört es eher weniger. :p


bike
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Was soll der Quatsch, ich suche doch nur nach einer Lösung und bin schon ganz schön weit gekommen wie ich finde. Wenn du keine Lust hast mir zu helfen dann lass es halt.

PS: Ich bin an keiner Uni
 
Was soll der Quatsch, ich suche doch nur nach einer Lösung und bin schon ganz schön weit gekommen wie ich finde. Wenn du keine Lust hast mir zu helfen dann lass es halt.

PS: Ich bin an keiner Uni

Stimmt, doch wenn dir Zotos schon die Löschung schreibt und du falsch abschreibst? :confused:
Und wenn dir der Unterschied zwischen temp und statisch nicht klar ist, sollte es doch auch in deinem Interesse sein, dies zu verstehen.
Daher der Hinweis zuerst Grundlagen verstehen und dann anfangen zu programmieren.


bike
 
Frag mal den Perfaktionist und sucht euch professionelle Hilfe. Evtl bekommt ihe Mengenrabatt. Vielleicht tuts auch eine Delphintherapie.

*lg*
 
Frag mal den Perfaktionist und sucht euch professionelle Hilfe. Evtl bekommt ihe Mengenrabatt. Vielleicht tuts auch eine Delphintherapie.

*lg*

Wollte ich ja, doch der hat gesagt, normale müssen alles selber zahlen.:)
Aber du hast scheinbar deine Behandlung unterbrochen, denn du weißt doch, es gibt nur einen Papst, außer denen die denke sie sind es.

Also ruhig Brauner.


bike
 
Zurück
Oben