Double Cooll??

ekitsip

Level-1
Beiträge
10
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Warum bekomme ich die Meldung?
Irgentwie arbeitet ein SPS anders wie beim Assembler oder C?

Lampe_1:=TRUE;

WHILE Eingang_1=1 DO
Neustart:=Neustart;
END_WHILE;

Lampe_1:=FALSE;

Wo finde ich eine Beschreibung wie ich sowas realisieren kan?
Für eine Antwort waehre ich sehr dankbar!
 
Du solltest Dir erstmal grundlegende Literatur zum Thema SPS besorgen.
Schleifen können nämlich ganz schnell zum "Absturz" (Stichwort: Zykluszeitüberschreitung) führen.
Was soll das Programm denn machen? Wofür ist die Schleife?

Eine SPS führt ein Programm meist nicht eimal aus, sondern zyklisch immer wieder und kann nicht warten.

Von irgendwas mit Internetzugang gesendet.
 
Zuletzt bearbeitet:
Der wichtigste Unterschied:
- das Assembler-Programm soll nicht zum Ende kommen
- das SPS-Programm soll zügig zum Ende kommen, um dann vom Neuen zu starten. Zwischen Ende und Neustart des Programms werden die (Prozessabbilder der) Aus- und Eingänge aktualisiert.


Dein obiger Code verhindert, dass das Programm zum Ende kommt.
Und zwar, weil Dein Eingang nie aktualisiert werden kann und damit nie einen anderen Zustand bekommt.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Verstanden! Wie bei Ereignissgesteuerte Programmierung!
Danke!

Nein.

Ein SPS Programm ist nicht ereignisgesteuert. Es durchläuft einen festen Zyklus.
  1. Einlesen des Prozesseingangsabbildes (kurz lesen der Eingangssignale aus der Hardware)
  2. Abarbeitung des Programms von Anfang bis Ende
  3. Schreiben des Prozessausgangsabbildes (Ausgangsdaten deines Programms werden an die Hardwareausgänge geschickt)
  4. ->Schritt 1 usw. usf.

Wenn du dein Programm mit einer Schleife, oder sonstigen Algorithmen blockierst, gibt es in der Regel einen Fehler (Zykluszeitüberschreitung). Deswegen sind Schleifen in SPS Programmen immer etwas mit Vorsicht zu genießen.
Während dein Programm läuft bekommt es keine Änderungen an den Eingängen der Hardware mit und ändert auch keine Hardware-Ausgänge. Das passiert erst beim lesen/schreiben der Prozessabbilder.
 
Zuletzt bearbeitet:
Die Schleife ist dummi, mein problem ist dass ein Ausgang welche auf AN gesetz ist in einem Programm nicht mehr ausgeschaltet werden kan ohne die Fehlermeldung zu bekommen.
Wie kan ist eine eingeschaltete Ausgang reseten?
Langsam bin ich mit fast allen Funktionen und Timer,Counter,Impuls usw. durch, aber eine eingeschalteten Ausgang schaffe ich nicht ohne fehlermeldung zu zu reseten.
Soll ich ein Buch "PLC prgrammierung für DUMMIS" suchen? Ich kan mich wahrschaeinlich mein Assembler und C,C++ angewőhnheieten nicht loslassen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Da Du weder angibst, welche Hardware Du benutzen willst, noch, welches Programmiersystem, und außerdem nicht klar ist, was Du vor hast kann man Dir nur mit Pseudokode antworten:
Code:
If TimerAbgelaufen then begin
  StatischesBit := Not StatischesBit;
  TimerNeustarten;
end;
Ausgang := StatischesBit;
Dieser Kode ergibt ein periodisch ein- und ausschaltendes Signal am Ausgang.
Gruß
Erich
 
Zuletzt bearbeitet:
Es geht schon! Ich haette noch eine Frage, Warum geht etwas im Programm bei simulation und nicht im PLC?

IF Input_1 THEN
B0:=TRUE; (* B0 ist das Hilfrelay zum halten *)
END_IF;
OUT_T(B0, TC1, 100);
IF TS1 THEN
B0:=FALSE;
END_IF;
Lampe_1:=B0;

Es gibt ein TRUE aus dirkt nach dem Impuls an Input_1 und bleibt 10Sec lang an.
Haettest Du zeit hierfür eine Antwort zu geben?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Erst einmal wiederhole ich meine Bitte an Dich:
Bitte nutze für Deine Code-Schnipsel die Code-Tags [CODE]...[/CODE], um diesen (z.B. durch Einrückungen) besser lesbar zu machen.
Die Tags kannst Du auch mit dem letzten Icon (#) der 2. Icon-Reihe erzeugen.
Ist wirklich mühsam, Deine Ergüsse so zu lesen.
;)


Ich haette noch eine Frage, Warum geht etwas im Programm bei simulation und nicht im PLC?
Weil eine Simulation nun mal keine 100%ige Realität ist.
:p


Es gibt ein TRUE aus dirkt nach dem Impuls an Input_1 und bleibt 10Sec lang an.
Welches Programmiersystem verwendest Du eigentlich?
Und wenn das passiert, was hattest Du erwartet/gewollt?
 
Die ist eine FX3U Steuerung (nicht original, sondern aus China).
Das Programm ist GXW2 (Stucturiertes Text)

Das Programmchen sollte bei Impult an Input_1 die Lampe_1 einschalten und 10 Sec lang an lassen.
B0 haelt den Zustrand nach einem Impuls an Input_1 "TRUE" um das Timer anzusteuern bis es endlich
den Zaehlerstand (TS1) erreicht.
 
Hier das Programmchen als CODE (#) eingegeben.

Code:
IF Input_1 THEN
    B0:=TRUE;
END_IF;

OUT_T(B0, TC1, 100);

IF TS1 THEN
    B0:=FALSE;
END_IF;

OUT(B0,Lampe_1);   ( *oder Lampe_1:=B0 *)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Keine Ahnung, wie bei dieser Steuerung die Timer funktionieren.

Ich vermute mal, das TC1 der Timer bzw. dessen Nummer ist? Müsste es dann nicht:
Code:
IF Input_1 THEN
    B0:=TRUE;
END_IF;

OUT_T(B0, TC1, 100);

IF [B][U][COLOR="#FF8C00"]TC1[/COLOR][/U][/B] THEN
    B0:=FALSE;
END_IF;

OUT(B0,Lampe_1);   ( *oder Lampe_1:=B0 *)
Bei TIA z.B. wird an diesen Stellen der Ausgang des Timers abgefragt, also TC1.Q.
 
Ne, TS1 ist schon richtig.

langt eigentlich.

Wenn die Simu läuft dann sollte es auch auf der PLC gehen. In/Out richtig eingestellt, Timer, etc.?

Wo genau hakt es denn wenn Du online bist und im Monitor schaust?
 
Zurück
Oben