TIA Buch Empfehlung SCL Einsteiger im TIA Portal

Viruuz

Level-1
Beiträge
10
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Tag liebes Mitglieder,

ich benötige eine gute Buchempfehlung welches sich ausschließlich mit SCL im TIA Portal beschäftigt.
Es gibt zwar einige Empfehlungen hier im Forum, leider sind diese allerdings schon recht alt. So um die 2015 rum.
Ein aktuelles und idealerweise hat damit schon jemand Erfahrung gesammelt.

Vielen Dank für eure Vorschläge.

LG
Viruuz
 
Hallo,
also ich hab das Buch Automatisieren mit Simatic S7-1500 von Hans Berger, dort wird auch SCL behandelt.
Nutze dieses Buch auch als Nachschlagwerk immer wieder, finde ich persönlich nicht so schlecht. Hat halt einen stolzen Preis (um die 80€), hat mir aber tatsächlich das eine oder andere mal geholfen.
Hatte auch die beiden Vorgänger KOP/FUP Simatic S7-300 und AWL/SCL Simatic S7-300 auch diese dienten mir mehr als Nachschlagwerk immer wieder mal.
Ein direktes Buch was SCL alleine Behandelt hab ich so jetzt nicht.
Man findet zwar auf Amazon eines, wie gut dieses ist schwer zu sagen.

Ansonsten vielleicht auch direkt bei Siemens auf der Homepage schauen und die aktuelle Doku von TIA Portal dir runterladen.

Weiß auch nicht genau was du dir von diesem Buch erwartest?.

Gruß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Weiß auch nicht genau was du dir von diesem Buch erwartest?.

Also im Prinzip eines welches für absolute Neulinge geeignet ist aber auch den Erfahrenen nicht langweilt.
Mit Übungsaufgaben und Beispielen. Ich versuche von deinem Buch mal eine Leseprobe zu ergattern. Kannst du mir zufällig sagen zu wie viel Prozent sich das Buch mit SCL beschäftigt? Ich besitze bereits einige Bücher die sich allgemein mit Step 7 beschäftigen.
 
Naja, da SCL eher in Richtung Hochsprache geht kannst du dir eigentlich auch Aufgaben für Hochsprachen nehmen.

SCL ist jetzt nicht sooo verschieden zum programmieren mit den herkömmlichen Programmiersprachen. Wo sich SCL/ST klar unterscheided ist, dass du bevorzugt mit Arrays arbeitest und Schlaufen viel einfacher programmiert sind als in den anderen Programmiersprachen. Und natürlich die Typenkonvertierung, die ist auch angenehmer gestaltet.

CoDeSys und TIA haben beide eine sehr gute Hilfefunktion die dir mit den Basics helfen. Abgesehen davon ein kurzer Abriss:

  • := : Das Doppelpunkt-Gleich wird in SCL zur Zuweisung von Variablen genutzt. Variable die einen Wert erhalten soll zu vorderst, gefolgt vom := und dahinter deine Vergleiche. Oft gesehener Anfängerfehler: um einer Bool-Variable in Abhängigkeit eines Vergleichs einen Wert zuzuweisen wird kein IF gebraucht (siehe unten). Einfach boolVariable1 := (intVariable2 = Wert); und schon hast du auf deiner Variable ein TRUE oder FALSE wenn die Variable2 dem definierten Wert entspricht.
  • ; : Das berühmt-berüchtigte Semikolon. Programmierer von Hochsprachen (ausser Python und ein paar anderen) haben schon graue Haare gekriegt weil sie irgendwo ein Semikolon vergessen haben. Das Semikolon wird verwendet, um in SCL eine Zeile oder Funktion (meistens ist das das gleiche da man schönheitshalber nur eine Funktion pro Zeile hat) abzuschliessen. Wird nicht an allen stellen benötigt, aber TIA meckert zuverlässig beim Tippen wenn du ein Semikolon vergessen hast.
  • = >= <= <>: Die Operatoren die dir in SCL zur Verfügung stehen sind zahlreich. Hier am besten die Hilfefunktion konsultieren. Übrigends: Operatoren und Zuweisung lassen sich bedingt verbinden. Anstatt intVariable1 := intVariable 1 + 1; macht man einfach intVariable1 += 1; und schon hat man eine Zuweisung, welche auf die Variable den Wert 1 addiert (funktioniert nicht in TIA13, TIA14 weiss ich nicht).
  • IF ... ELSIF ... ELSE ... END_IF; : Der Name ist Programm. Einfache Bedingte ausführung von Code. Kann mehr oder weniger 1 zu 1 mit Wenn-Dann-Sonst aus Excel verglichen werden. Code innerhalb der Bedingungen wird nur ausgeführt wenn die Bedingung erfüllt ist. Dazu hilfreich...
  • AND OR NOT: Boolsche Logik wie du sie auch aus anderen Programmiersprachen kennst. Mehrere Bedingungen (z.B. für ein IF) lassen sich damit miteinander verknüpfen. Good to know: auch hier können mehrere Wertvergleiche über (intVariable1 = Wert) AND boolVariable; aneinandergereiht werden.
  • CASE ... OF ... ELSE ... END_CASE; : Dies ist eine klassiche Switch-Funktion. Ein CASE arbeitet auf Basis einer Variable und führt Code aus wenn die Variable einem zuvor definierten Wert entspricht. Trifft keiner der definierten Werte zu, kann über ELSE Code ausgeführt werden der diesen Fall abfängt. Hiermit kann ich zum Beispiel recht einfach unterschiedliche Funktionen aufrufen je nach dem welchen Wert meine Variable hat (wenn ich z.B. Zustandsabhängig anderen Code ausführen will) ohne dass ich dafür mehrere IFs brauche. Eignet sich ebenfalls HER-VOR-RAGENST für Schrittketten!
  • WHILE ... DO ... END_WHILE; : Die While-Schlaufe macht wie IF ihren Namen alle Ehre. While heisst ja bekanntlich im Englischen "Während", und genau so lässt sich die Funktion auch intepretieren. Während eine Bedingung erfüllt oder nicht erfüllt ist wird der Code innerhalb der Schlaufe ausgeführt. Damit lässt sich übrigends (wie mit jeder Schlaufe) sehr praktisch die CPU abschiessen wenn man die Bedingung nicht richtig definiert hat. Dann rattert sich die CPU zu Tode bis eine Zykluszeitüberschreitung auftritt. Tipp: Die Bedingung für die While Schlaufe fehlersicher machen. Zum Beispiel WHILE (intVariable 1 <= Wert) DO intVariable1 += 1; END_WHILE; womit die Schlaufe so lange ausgeführt wird wie die Variable kleiner als der Wert ist. Damit ist abgesichert dass die Schleife auch beendet wird wenn z.B. mehr als 1 auf die Variable addiert wird (also <= an statt = verwenden).
  • FOR ... TO ... BY ... DO ... END_FOR; : Die FOR Schlaufe ist eine abgewandelte Form der While-Schlaufe. Diese Art der Schlaufe eignet sich speziell gut zum Abarbeiten von Arrays. Man definiert eine Variable, die man als Zähler verwenden will, gibt an bis wie weit die Variable inkrementiert werden soll, gibt an um wieviel die Variable inkrementiert werden soll (wenn nichts angegeben um 1) und definiert, was in jedem Schritt ausgeführt werden soll. Damit lässt sich hervorragend eine Funktion programmieren, welche vom ersten bis zum letzten Eintrag eines Arrays durchrattert und bei jedem Eintrag etwas ausführt. Dies würde dann z.B. wie folgt aussehen: FOR i := 0 TO 99 BY 1 DO code END_FOR; Dieser Schlaufe würde von 0 bis 99 in einerschritten durchlaufen und jedes Mal den Code-Teil ausführen. Dazu passend wäre ein Array[0..99] of Struct wobei die Variable i direkt als Index verwendet werden kann.
  • REPEAT ... UNTIL ... END_REPEAT; Frag mich nicht wofür man diese Schlaufe benötigt. Ich habe bisher noch keine Anwendung dafür gefunden. Eigentlich wie eine While, nur dass man hier die Bedingung an den Schluss setzt, das heisst die Abbruchbedingung wird NACH dem abarbeiten der Schlaufe ausgeführt. Dies bedeutet, dass die Schlaufe immer min. 1 Mal ausgeführt wird.
  • EXIT : Hiermit kann eine Schlaufe frühzeitig verlassen werden. Sehr nützlich wenn du z.B. innerhalb der Schlaufe auf einen Fehler triffst und die Schlaufe nicht noch zu Ende laufen lassen willst.

Ich denke damit habe ich einen Abriss über das wichtigste gemacht. Alles weitere findest du in der Hilfefunktion und in den Standardbibliotheken. Die oben genannten Funktionen sind soweit ich weiss bei allen Herstellern gleich, alles weitere kann herstellerabhängig sein.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Das "STEP7-Workbook für S/-1200/1500" von Torsten Weiß und Matthias Habermann ist recht gut.
Es beinhaltet auch PLC-Lab, mit welchem dann die Übungen aus dem Buch getestet werden können. Vorausgesetzt, dass PLC-Sim installiert ist.

Zudem nutze ich dann noch "SPS-Programmierung mit SCL im TIA-Portal" von Karl Schmitt.
Das ist aber für totale SPS-Anfänger etwas unübersichtlich, wie ich finde.
 
Naja, da SCL eher in Richtung Hochsprache geht kannst du dir eigentlich auch Aufgaben für Hochsprachen nehmen.

SCL ist jetzt nicht sooo verschieden zum programmieren mit den herkömmlichen Programmiersprachen. Wo sich SCL/ST klar unterscheided ist, dass du bevorzugt mit Arrays arbeitest und Schlaufen viel einfacher programmiert sind als in den anderen Programmiersprachen. Und natürlich die Typenkonvertierung, die ist auch angenehmer gestaltet.

CoDeSys und TIA haben beide eine sehr gute Hilfefunktion die dir mit den Basics helfen. Abgesehen davon ein kurzer Abriss:

  • := : Das Doppelpunkt-Gleich wird in SCL zur Zuweisung von Variablen genutzt. Variable die einen Wert erhalten soll zu vorderst, gefolgt vom := und dahinter deine Vergleiche. Oft gesehener Anfängerfehler: um einer Bool-Variable in Abhängigkeit eines Vergleichs einen Wert zuzuweisen wird kein IF gebraucht (siehe unten). Einfach boolVariable1 := (intVariable2 = Wert); und schon hast du auf deiner Variable ein TRUE oder FALSE wenn die Variable2 dem definierten Wert entspricht.
  • ; : Das berühmt-berüchtigte Semikolon. Programmierer von Hochsprachen (ausser Python und ein paar anderen) haben schon graue Haare gekriegt weil sie irgendwo ein Semikolon vergessen haben. Das Semikolon wird verwendet, um in SCL eine Zeile oder Funktion (meistens ist das das gleiche da man schönheitshalber nur eine Funktion pro Zeile hat) abzuschliessen. Wird nicht an allen stellen benötigt, aber TIA meckert zuverlässig beim Tippen wenn du ein Semikolon vergessen hast.
  • = >= <= <>: Die Operatoren die dir in SCL zur Verfügung stehen sind zahlreich. Hier am besten die Hilfefunktion konsultieren. Übrigends: Operatoren und Zuweisung lassen sich bedingt verbinden. Anstatt intVariable1 := intVariable 1 + 1; macht man einfach intVariable1 += 1; und schon hat man eine Zuweisung, welche auf die Variable den Wert 1 addiert (funktioniert nicht in TIA13, TIA14 weiss ich nicht).
  • IF ... ELSIF ... ELSE ... END_IF; : Der Name ist Programm. Einfache Bedingte ausführung von Code. Kann mehr oder weniger 1 zu 1 mit Wenn-Dann-Sonst aus Excel verglichen werden. Code innerhalb der Bedingungen wird nur ausgeführt wenn die Bedingung erfüllt ist. Dazu hilfreich...
  • AND OR NOT: Boolsche Logik wie du sie auch aus anderen Programmiersprachen kennst. Mehrere Bedingungen (z.B. für ein IF) lassen sich damit miteinander verknüpfen. Good to know: auch hier können mehrere Wertvergleiche über (intVariable1 = Wert) AND boolVariable; aneinandergereiht werden.
  • CASE ... OF ... ELSE ... END_CASE; : Dies ist eine klassiche Switch-Funktion. Ein CASE arbeitet auf Basis einer Variable und führt Code aus wenn die Variable einem zuvor definierten Wert entspricht. Trifft keiner der definierten Werte zu, kann über ELSE Code ausgeführt werden der diesen Fall abfängt. Hiermit kann ich zum Beispiel recht einfach unterschiedliche Funktionen aufrufen je nach dem welchen Wert meine Variable hat (wenn ich z.B. Zustandsabhängig anderen Code ausführen will) ohne dass ich dafür mehrere IFs brauche.
  • WHILE ... DO ... END_WHILE; : Die While-Schlaufe macht wie IF ihren Namen alle Ehre. While heisst ja bekanntlich im Englischen "Während", und genau so lässt sich die Funktion auch intepretieren. Während eine Bedingung erfüllt oder nicht erfüllt ist wird der Code innerhalb der Schlaufe ausgeführt. Damit lässt sich übrigends (wie mit jeder Schlaufe) sehr praktisch die CPU abschiessen wenn man die Bedingung nicht richtig definiert hat. Dann rattert sich die CPU zu Tode bis eine Zykluszeitüberschreitung auftritt. Tipp: Die Bedingung für die While Schlaufe fehlersicher machen. Zum Beispiel WHILE (intVariable 1 <= Wert) DO intVariable1 += 1; END_WHILE; womit die Schlaufe so lange ausgeführt wird wie die Variable kleiner als der Wert ist. Damit ist abgesichert dass die Schleife auch beendet wird wenn z.B. mehr als 1 auf die Variable addiert wird (also <= an statt = verwenden).
  • FOR ... TO ... BY ... DO ... END_FOR; : Die FOR Schlaufe ist eine abgewandelte Form der While-Schlaufe. Diese Art der Schlaufe eignet sich speziell gut zum Abarbeiten von Arrays. Man definiert eine Variable, die man als Zähler verwenden will, gibt an bis wie weit die Variable inkrementiert werden soll, gibt an um wieviel die Variable inkrementiert werden soll (wenn nichts angegeben um 1) und definiert, was in jedem Schritt ausgeführt werden soll. Damit lässt sich hervorragend eine Funktion programmieren, welche vom ersten bis zum letzten Eintrag eines Arrays durchrattert und bei jedem Eintrag etwas ausführt. Dies würde dann z.B. wie folgt aussehen: FOR i := 0 TO 99 BY 1 DO code END_FOR; Dieser Schlaufe würde von 0 bis 99 in einerschritten durchlaufen und jedes Mal den Code-Teil ausführen. Dazu passend wäre ein Array[0..99] of Struct wobei die Variable i direkt als Index verwendet werden kann.
  • REPEAT ... UNTIL ... END_REPEAT; Frag mich nicht wofür man diese Schlaufe benötigt. Ich habe bisher noch keine Anwendung dafür gefunden. Eigentlich wie eine While, nur dass man hier die Bedingung an den Schluss setzt, das heisst die Abbruchbedingung wird NACH dem abarbeiten der Schlaufe ausgeführt. Dies bedeutet, dass die Schlaufe immer min. 1 Mal ausgeführt wird.
  • EXIT : Hiermit kann eine Schlaufe frühzeitig verlassen werden. Sehr nützlich wenn du z.B. innerhalb der Schlaufe auf einen Fehler triffst und die Schlaufe nicht noch zu Ende laufen lassen willst.

Ich denke damit habe ich einen Abriss über das wichtigste gemacht. Alles weitere findest du in der Hilfefunktion und in den Standardbibliotheken. Die oben genannten Funktionen sind soweit ich weiss bei allen Herstellern gleich, alles weitere kann herstellerabhängig sein.

Gute Erklärung!
Erweitern möchte ich noch die Benutzung der Case-Anweisung.
Damit lassen sie prima Schrittketten erzeugen!
 
Danke, hab ich so weit angepasst als dass ich die Schrittkette erwähnt habe. Case lässt sich hier schwieriger darstellen da ein CASE auf einer Zeile fast unleserlich ist.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
WHILE ... DO ... END_WHILE; : Die While-Schlaufe macht wie IF ihren Namen alle Ehre. While heisst ja bekanntlich im Englischen "Während",
ich benutze lieber die Übersetzung "SOLANGE" die Bedingung erfüllt ist, führe den folgenden Code aus...
wie Du ja auch selbst noch schreibst:

...END_WHILE; womit die Schlaufe so lange ausgeführt wird, wie...


REPEAT ... UNTIL ... END_REPEAT; Frag mich nicht wofür man diese Schlaufe benötigt. Ich habe bisher noch keine Anwendung dafür gefunden. Eigentlich wie eine While, nur dass man hier die Bedingung an den Schluss setzt, das heisst die Abbruchbedingung wird NACH dem abarbeiten der Schlaufe ausgeführt. Dies bedeutet, dass die Schlaufe immer min. 1 Mal ausgeführt wird.
Genau deshalb habe ich sie mal bei meinem Übungsprojekt "4 gewinnt" eingesetzt. Der Code sollte min. 1x ausgeführt werden.
(Leider scheint der entsprechende Thread von ca. 2012 mittlerweile verloren gegangen zu sein, denn ich kann ihn mit der Suche nicht mehr auffinden.)


Insgesamt lässt sich festhalten:
WHILE und REPEAT werden normalerweise verwendet, wenn die Anzahl der Schleifendurchläufe beim Programmieren noch nicht wirklich feststeht. REPEAT wird mindestens 1x ausgeführt, während WHILE ggf. komplett übersprungen werden kann.
FOR wird in der Regel für eine feststehende (max.) Anzahl an Durchläufen genutzt. Kann aber bei Bedarf mit EXIT vorzeitig abgebrochen werden.

Fast immer sind die Schleifen-Varianten durch entsprechend angepasste Bedingungen gegeneinander austauschbar, wodurch sich IMHO die überwiegende Verwendung von FOR durchgesetzt hat.
 
Kann ich so weit bestätigen (das mit der überwiegenden verwendung von FOR). In den meisten Fällen benutze ich die FOR-Schleife, weil die WHILE-Schleife für mich eine eher limitierte Benutzung hat. For allem im SPS-Bereich.

Und das mit dem einmaligen Durchlauf erreichst du auch bei einer WHILE-Schlaufe. Die Abbruchbedingung muss ja immer innerhalb der Schlaufe beschaltet werden. Wenn du also innerhalb der Schlaufe die Abbruchbedingung setzt hast du auch einen einmaligen Durchlauf. Vorausgesetzt natürlich die Bedingung wurde nicht schon ausserhalb gesetzt.
 
Und das mit dem einmaligen Durchlauf erreichst du auch bei einer WHILE-Schlaufe. Die Abbruchbedingung muss ja immer innerhalb der Schlaufe beschaltet werden. Wenn du also innerhalb der Schlaufe die Abbruchbedingung setzt hast du auch einen einmaligen Durchlauf. Vorausgesetzt natürlich die Bedingung wurde nicht schon ausserhalb gesetzt.
Ja, natürlich:
Fast immer sind die Schleifen-Varianten durch entsprechend angepasste Bedingungen gegeneinander austauschbar...
Der Unterschied: Mit REPEAT hatte ich nur genau eine Prüfung auf Wiederholung am Ende (je)des Schleifendurchlaufs.
Mit WHILE/FOR hätte ich eine Prüfung am Beginn (je)des Durchlaufs und eine weitere Prüfung auf Abbruch/Nicht-Wiederholung der Schleife.
Und genau dies ist für mich die Antwort auf Deine "Frage":
Frag mich nicht wofür man diese Schlaufe benötigt.
Man spart im Vergleich zu WHILE die Ausführung (oder gar Programmierung) einer Schleifenprüfung, wenn man sowieso mindestens einen Durchlauf benötigt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich würde sogar soweit gehen zu sagen: die REPEAT-Schleife ist die "Mutter" aller Schleifen. WHILE- und FOR-Schleifen sind nur mit allerlei komfortablen Extras aufgeblasene Varianten der REPEAT-Schleife. Man kann Programme auch nur mit REPEAT-Schleifen strukturieren, muss sich dann "lediglich" die Abbruchbedingungen und die Schleifenzählerverwaltung an den richtigen Stellen selber programmieren.

Harald
 
Ich würde sogar soweit gehen zu sagen: die REPEAT-Schleife ist die "Mutter" aller Schleifen. WHILE- und FOR-Schleifen sind nur mit allerlei komfortablen Extras aufgeblasene Varianten der REPEAT-Schleife. Man kann Programme auch nur mit REPEAT-Schleifen strukturieren, muss sich dann "lediglich" die Abbruchbedingungen und die Schleifenzählerverwaltung an den richtigen Stellen selber programmieren.

Ich dachte immer die "Mutter" aller Schleifen wäre:
Code:
LOOP:
    
    LD        var1
    ADD        var2
    ST        var3


    LD        var4
    JMPC    LOOP

:p

Aber ja, ich sehe da Parallelen zur REPEAT. ^^
 
Obwohl immer wieder hier im Forum behauptet wird, dass sie nicht existiert, die "Mutter aller Schleifen" ist die "If-Schleife", wie diese Fortran-Beispiele belegen

Code:
      PROGRAM BSP
    
      INTEGER I
   
      I=0
  
 10   IF(I .LT. 5) THEN
        WRITE (*,*) I
        I = I + 1
        GOTO 10
      END IF  
C  Die Zahlen 0 bis 4 werden ausgegeben
 
      END

Code:
      PROGRAM BSP
    
      INTEGER I
  
      I=6
  
 10   CONTINUE
        WRITE (*,*) I
        I = I + 1
      IF (I .LT. 5) GOTO 10  
C  Die Zahl 6 wird ausgegeben
 
      END
Gruß
Erich
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich dachte immer die "Mutter" aller Schleifen wäre:
Code:
LOOP:
    
    LD        var1
    ADD        var2
    ST        var3


    LD        var4
    JMPC    LOOP
Sorry, Deine "Mutter aller Schleifen" sieht verdächtig nach "Mutter aller EndlosSchleifen" aus!
Das C in JMPC sieht zwar nach bedingtem (conditional) Sprung aus, aber welches Kriterium wertet er aus? Vergleicht der JMPC denn auch Akku1 mit Akku2 ... oder welche Bedingung wird abgefragt? var4 wird in der Schleife nirgends verändert!? ;)
 
Sorry, Deine "Mutter aller Schleifen" sieht verdächtig nach "Mutter aller EndlosSchleifen" aus!
Das C in JMPC sieht zwar nach bedingtem (conditional) Sprung aus, aber welches Kriterium wertet er aus? Vergleicht der JMPC denn auch Akku1 mit Akku2 ... oder welche Bedingung wird abgefragt? var4 wird in der Schleife nirgends verändert!? ;)

Ich gebe zu, dass ich den Code jetzt nicht zu 100% fertig gedacht habe sondern damit lediglich ein Beispiel machen wollte. :ROFLMAO:
 
Obwohl immer wieder hier im Forum behauptet wird, dass sie nicht existiert, die "Mutter aller Schleifen" ist die "If-Schleife" ...
Die Voraussetzung, nicht endlose Schleifen zu programmieren, ist definitiv ein bedingter Sprung.
Aber einen bedingten Sprung (z.B. IF) kann man auch für andere Zwecke einsetzen.
Konstrukte im Stile von FOR, WHILE, REPEAT - oder wie auch immer sie in den verschiedenen Sprachen heissen mögen - (die einen bedingten Sprung enthalten) sind für nichts anderes zu gebrauchen als ProgrammSchleifen.
So gesehen gibt es durchaus "IF-Schleifen" oder auch nicht [SUP]1)[/SUP].
Aber der Begriff "IF-Schleife" wurde in diesem Forum auch schon dort angewendet, wo es gar nicht um Schleifen (wiederholtes Ausführen derselben BefehlsFolge) ging. In solchen Fällen wurde schonmal mit der Aussage "existiert nicht" (über-[SUP]1)[/SUP])reagiert.
Ist in Wahrheit vielleicht die zyklische Programmierung in der SPS-Welt die Urgrossmutter aller (Endlos-)Schleifen? ;)

PS:
[SUP]1) [/SUP]Sprachabhängig ist die IF-Abfrage gar nicht für Schleifen einsetzbar, wenn nämlich damit nicht zu einer zurückliegenden ProgrammStelle gesprungen werden kann (kein Sprung nach ZeilenNr oder Label möglich).
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hier mal eines der wenigen Besipiele einer While Schleife:

Code:
Position_mod_120:= p_ist_grad;
WHILE Position_mod_120 > 120.0 -0.5 do
Position_mod_120-=120.0; 
END_WHILE;

Hier wird eine Modulo-Funktion einer Ist-Postion errechnet. Es handelt sich um eine Rundtisch-Anwendung. Die IST-Position liegt in Gradzahlen von 0-360° vor.
Mich interessieren jedoch nur die 120° Stufen und wo sich der Tisch hier befindet.
Die 0.5 sind eine zulässige Ungenauigkeit.
 
Hier mal eines der wenigen Besipiele einer While Schleife: ...
Was willst Du uns damit sagen, statix?
- Dass es nur ganz wenige Fälle gibt, in denen Du eine While-Schleife zweckmässiger findest, als eine Repeat- oder For-Schleife?
- Dass Du eine Schleife für gerechtfertigt hältst, wenn sie maximal 3-mal durchlaufen wird und somit die Rechenzeit nicht gefährlich aufblähen kann?
Ich verstehe nicht so ganz, worauf Du hinaus willst.
Dass eine Division nichts anderes ist, als ein wiederholtes Subtrahieren des Divisors, bis der Betrag des Restes kleiner als der Betrag des Divisors wird, das ist eigentlich keine neue Erkenntnis.
Warum wählst Du als LösungsWeg eine Schleife? Weil MOD für REAL-Zahlen nicht verfügbar ist?
Könnte die Notwendigkeit Deiner "zulässigen Ungenauigkeit" daher rühren, dass Du durch die Verwendung von REAL-Zahlen mit deren "Ungenauigkeiten" zu kämpfen hast?
 
Zurück
Oben