hat jemand vieleicht ein bischen Zeit für mich?

ich habe versucht, den Topicname zu verändern, damit der nicht sofort im Spamfilter...leide geht das nicht...
ich kann das Problem irgendwie nicht lösen, brache Hilfe.
vielen vielen Dank im Voraus!
MFG,
rose
 
Du hast da einen richtigen Zykluszeitkiller geschrieben, X Schleifen mit 1000-den Durchläufen machen jede CPU zur Schnecke. Wenn du auf Beobachten gehst, erhöht sich der Zykluszeitbedarf des Bausteins und wird an die projektierte Obergrenze stoßen. Mind. 2 Möglichkeiten hast du:

1. die Schnelle und Schlechte :twisted: : In der Hardwarekonfig die Überwachungszeit hochsetzen.
2. die Bessere und Schwierige: Nur 20-100 Schleifendurchläufe, dann raus aus dem Zyklus, die erreichte "Schleifenposition" zwischenspeichern und beim nächsten Einlaufen in den FC dort weitermachen. Wenn das Ende erreicht ist, fängst du wieder von vorne an. Dadurch wird das Programm allerdings nicht gerade übersichtlicher, deshalb solltest du erklärende Kommentare einfügen und nach Möglichkeit überflüssige Dinge weglassen oder verkürzen.

Ich hab dein Programm nur überflogen, mir fehlt der "Sinn" dahinter, also die Erklärung, Wozu und Warum das Ganze.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also wenn Du meine ehrliche Meinung hören willst, müsste ich bei der Programmierweise SCL eigentlich verbieten, da dieses Programm am eigentlichen Zweck von SCL völlig vorbeischießt.
Dies ließe sich (wesentlich einfacher) auch mit AWL lösen.

1. Eine FOR-Schleife, um 1000 Bytes auf 0 zu setzen ist eine Frechheit.
Hier gibts den schönen SFC21 "FILL", mit dem man einen ganzen Speicherbereich auf einen definierten Wert setzen kann --> ist garantiert schneller

2. Warum FOR-Schleifen mit BY 4, dass anschließend Doppelwortweise auf Byte-Adresse zugegriffen werden kann?
Daten im DB einfach als ARRAY[1..250] OF DINT deklarieren - in SCL-Programm dann symbolisch ansprechen.
z.B.
a := "DB_Fehler".Fehlerindex[DB_Ind];

3. DX auf 0 und 1 abfragen --> wozu gibts TRUE und FALSE ????
Macht das Programm sicher leserlicher............

4. a-11*10000.0 ?????? wo liegt der Unterschied zu a-1.1e6 ???

5. über die Übersichtlichkeit (Einrückungen usw) möchte ich gar kein Wort verlieren................



Aber zur Sache:
Was tut dieses Programm? Ich erkenne keinen Unterschied zu einem 40-Zeilen AWL-Programm..

mfg
Maxl
 
Hallo,
Rose schrieb:
IF DB900.DW36 = 0 THEN
//Wenn kein Sammelfehler
m := 0;
n := 0;
FEHLER_ANZAHL := 0;
DB_INDEX := 0;
a := 0;
c := 0;
l := 0;
k := 0;
DB_IND := 0;
Dieser Quatsch ist bereits ein paar Zeilen vorher genauso initialisiert worden (und übrigens, das war schon genauso überflüssig).
Der Rest ist übelster Spaghetticode, ab in den Papierkorb...
Wenn Du irgendeine Ahnung hast, was dieser Code als Ergebnis liefern soll, dann besser selber neu schreiben, aber dann ordentlich formatieren und kommentieren, sonst weisst Du im nächsten Jahr selber nicht mehr, was Du da geschrieben hast. :)

Gruss
Question_mark
 
Hallo,
Question_mark schrieb:
(und übrigens, das war schon genauso überflüssig).
Dazu muss ich noch mal ergänzen :
Ich habe bei dieser Äusserung mal vorausgesetzt, dass SCL wie jeder andere vernünftige Compiler diese lokalen Variablen mit "0" vorbesetzt.
Wer es besser weiss, darf mich gerne korrigieren.

Gruss
Question_mark
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Question_mark schrieb:
Hallo,

Dazu muss ich noch mal ergänzen :
Ich habe bei dieser Äusserung mal vorausgesetzt, dass SCL wie jeder andere vernünftige Compiler diese lokalen Variablen mit "0" vorbesetzt.
Wer es besser weiss, darf mich gerne korrigieren.

Gruss
Question_mark

In PASCAL werden Variablen normalerweise NICHT automatisch initialisiert, d.h. ihr Wert ist beim Programmstart undefiniert.
 
Zu Maxl:

1.ich habe gestern versucht, die SFC21"FILL" in SCL umzusetzen, aber hat es nicht geklappt. ist das überhaupt möglich?

2. ich habe nicht viel Ahnung in SCL, danke für deine Tips, ich kann mal probieren.

3. in eine andere FC wird alle bit durchgeprüft, ob es gesetzt oder nicht gesetzt ist.

4. ich denke mal, es soll gleich sein..

5. ja, ich denke auch, das Programm ist irgendwie nicht so übersichtlich ist...

mit AWL reicht es in 40 Zeilen? das wäre cool..

mfg
Maxl[/quote]
 
Hallo,
argv_user schrieb:
In PASCAL werden Variablen normalerweise NICHT automatisch initialisiert, d.h. ihr Wert ist beim Programmstart undefiniert.
Was Pascal und die meisten anderen Compiler betrifft, hat argv_user natürlich recht. Ich war da bereits in Gedanken bei einem anderen System... :oops:
Zumindest die von mir zitierten Zeilen sind überflüssigerweise doppelt initialisiert worden. Und die meisten der Initialisierungen sind auch überflüssig, da bei Ihnen bei der Erstbearbeitung im weiteren Programmverlauf eine explizite Zuweisung erfolgt.

Gruss
Question_mark
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Rose schrieb:
Danke für euch! ich habe gestern erfolgreich das Programm verbessert, danke für eure Tips und Hilfe!

Eine Bitte:
Dadurch, dass Du Deinen origionalen Beitrag verändert hast, und den originalen Code herausgenommen hast, ist der komplette Beitrag aus dem Zusammenhang gerissen worden - Sprich: kein Mensch versteht, worüber wir diskutiert haben
Also:
Lieber neue Antwort in den Thread schreiben und nicht die alte herauslöschen

thx

mfg
Maxl
 
Maxl schrieb:
Eine Bitte:
Dadurch, dass Du Deinen origionalen Beitrag verändert hast, und den originalen Code herausgenommen hast, ist der komplette Beitrag aus dem Zusammenhang gerissen worden - Sprich: kein Mensch versteht, worüber wir diskutiert haben
Also:
Lieber neue Antwort in den Thread schreiben und nicht die alte herauslöschen

thx

mfg
Maxl

es tut mir leid, da habe ich nicht gedacht... nächster mal passe ich es auf.
 
Zurück
Oben