DennisBerger
Level-2
- Beiträge
- 437
- Reaktionspunkte
- 61
L "DB_links_Kurve".links_Index_Kurve
L 900
<=I
A "DB_links_Verwaltung".links_Pruefung_laeuft
JCN AAAA
L "DB_links_Kurve".links_Index_Kurve
L 4
*I
ITD
SLD 3
T #index
LAR1 #index
OPN "DB_links_Kurve"
L #links_Pruefdruck_Ist
T DBD [ AR1 , P#0.0 ]
L #links_Tiefdruck_Ist
T DBD [ AR1 , P#3600.0 ]
L #links_Leckdruck_Ist
T DBD [ AR1 , P#7200.0 ]
A "DB_links_Verwaltung".links_Pruefung_laeuft
JCN AAAA
L "DB_links_Kurve".links_Index_Kurve
L 1
+I
T "DB_links_Kurve".links_Index_Kurve
L "DB_rechts_Kurve".rechts_Index_Kurve
L 900
<=I
A "DB_rechts_Verwaltung".rechts_Pruefung_laeuft
JCN AAAA
L "DB_rechts_Kurve".rechts_Index_Kurve
L 4
*I
ITD
SLD 3
T #index
LAR1 #index
OPN "DB_rechts_Kurve"
L #rechts_Pruefdruck_Ist
T DBD [ AR1 , P#0.0 ]
L #rechts_Tiefdruck_Ist
T DBD [ AR1 , P#3600.0 ]
L #rechts_Leckdruck_Ist
T DBD [ AR1 , P#7200.0 ]
A "DB_rechts_Verwaltung".rechts_Pruefung_laeuft
JCN AAAA
L "DB_rechts_Kurve".rechts_Index_Kurve
L 1
+I
T "DB_rechts_Kurve".rechts_Index_Kurve
Da wirst Du wohl nach dem Baustein-Kopieren und -Anpassen noch irgendwo einen Fehler drin haben? Wir sehen ja nicht den ganzen Code... Du müsstest uns schon den ganzen Code von FB19 und FB25 zeigen.das gleiche gibt es dann im FB_rechte_Kurve
(...)
den obigen Code habe ich aus einer anderen Anlage mit nur einer Prüfseite so übernommen
Ja, "fehlt mir die Zeit" ist meistens das Argument, daß 30 Jahre alter Code über 3 Steuerungsfamilien nahezu unverändert übernommen wird, inklusive der Fehler... und niemand versteht den Code...SCL kann ich das leider aufgrund mangelnden Kenntnissen nicht umsetzen..
auch fehlt mir die Zeit dazu..
Wozu Eure Programmierer in Jahrzehnten "keine Zeit" hatten, soll hier jemand richtigen Code "aus dem Ärmel schütteln"?dachte hier hat jemand ne Lösung die mit dem o.g. Code geht..
IF #rechts_Index_Kurve < 900 AND "DB_rechts_Verwaltung".rechts_Pruefung_laeuft THEN
#rechts_Prufdruck_Speicher[#rechts_Index_Kurve] := #rechts_Pruefdruck_Ist;
#rechts_Tiefdruck_Speicher[#rechts_Index_Kurve] := #rechts_Tiefdruck_Ist;
#rechts_Leckdruck_Speicher[#rechts_Index_Kurve] := #rechts_Leckdruck_Ist;
#rechts_Index_Kurve += 1;
END_IF;
Die Ursache des Fehlers liegt vermutlich nicht in dem in Beitrag #1 gezeigten Code. Da sehe ich nur die Fehler, daß der Index auf <= 900 geprüft wird: <=I ist falsch, es muß <I lauten. (Und irgendwo muß der Index mal auf 0 gesetzt werden, das hast Du uns nicht gezeigt.)Die Variablenwerte stimmen.. funktioniert ja auch solange nur eine Seite der Prüfung läuft also (linke Kurve oder rechte Kurve daten sammelt)
In SCL braucht man auf solche Details nicht achten.Leider kann ich keine arrays größer 10000 machen, dann meckert nämlich Tia (offset zu gross)
sonst hätte ich die linke seite von 0.0. bis 7200
und die rechte seite zb ab 10840 gestartet.
siehe:
Anhang anzeigen 70481
In FB darf der Inhalt des AR2 nicht verändert werden, besonders wenn man nicht weiß, was man tut.die linken Werte in AR1 und die rechte Seite in AR2 speichern geht nicht oder?
ich vermute mal es liegt daran, dass Werte im gleichen Adressspeicher AR1 und P#adresse liegen , beide FBs gleichzeitig aufgerufen werden durch OB35 und somit willkürlich gespeichert werden.
Selbstverständlich werden die Bausteine nacheinander abgearbeitet. Bausteine können gar nicht gleichzeitig abgearbeitet werden. Auch nicht im OB35. Bausteine können sich gegenseitig unterbrechen, aber auch da kommen sich die Werte in AR1 nicht in die Quere.wie arbeitet Siemens die Bausteine aus dem OB 35 ab? einen nach dem anderen
also OB35 -> FB_rechts_Kurve -> FB_links_Kurve?
so hab ich es doch im kopf, oder bin ich falsch?
Oder gleichzeitig bzw parallel?
OB35 -------- FB_links_Kurve
I
------ FB_rechts_Kurve
Anhang anzeigen 70484
wenn nacheinander dürft es ja kein Problem mit dem AR1 geben oder?
Solange der Kopier-Code von Beitrag #1 erst nach den Netzwerken mit dem Laden der Meßwerte in die TEMP-Variablen ausgeführt wird, dürfen die Variablen in TEMP liegen und Deine Änderung dürfte keinen Einfluß haben. Oder wird bei Dir erst aus TEMP in die Arrays kopiert und erst danach die Messwerte nach TEMP kopiert? Das würde erklären, wenn im FB25 (linke Kurve) die Daten der rechten Kurve geschrieben werden. Die Lösung in dem Fall ist aber nicht, die Variablen von TEMP nach Static zu verschieben, sondern die Abarbeitungsreihenfolge der Codeteile zu ändern. (der Code der ganzen Bausteine wäre interessant)Ich habe oben die 3 Variablen von Temp auf Static geändert, nun scheint es zu gehen?
vorher:
Anhang anzeigen 70483
nachher:
Anhang anzeigen 70482
kann das schon der Fehler gewesen sein, dass die 3 Variablen als temp abgelegt waren?
O "DB_rechts_Verwaltung".Standard_Takt[1]
JCN AAAB
L 0.0
T #Null_real
CALL FILL
ptr_type:=Variant
BVAL :=#Null_real
RET_VAL :=#Ret_Val_SFC
BLK :="DB_rechts_Kurve".rechts_Prufdruk_Speicher
O "DB_rechts_Verwaltung".Standard_Takt[1]
CALL FILL
ptr_type:=Variant
BVAL :=#Null_real
RET_VAL :=#Ret_Val_SFC
BLK :="DB_rechts_Kurve".rechts_Tiefdruck_Speicher
O "DB_rechts_Verwaltung".Standard_Takt[1]
CALL FILL
ptr_type:=Variant
BVAL :=#Null_real
RET_VAL :=#Ret_Val_SFC
BLK :="DB_rechts_Kurve".rechts_Leckdruck_Speicher
AAAB: NOP 0
Solange der Kopier-Code von Beitrag #1 erst nach den Netzwerken mit dem Laden der Meßwerte in die TEMP-Variablen ausgeführt wird, dürfen die Variablen in TEMP liegen und Deine Änderung dürfte keinen Einfluß haben. Oder wird bei Dir erst aus TEMP in die Arrays kopiert und erst danach die Messwerte nach TEMP kopiert?
die arrays sind im db ganz oben, die Reihenfolge passt, standard zugriff ist vorhanden, keine multiinstanz.Wegen der uralten indirekten Adressierung der Absolut-Adressen der Arrays im IDB dürfen vor den Arrays keine anderen Variablen eingefügt werden, die Arrays dürfen sich nicht verschieben. Die DB müssen Standard-Zugriff haben und dürfen nicht als Multiinstanz verwendet werden. Solange der gezeigte AWL-Code verwendet wird.
warum muss es <I sein und nicht <=I?Da sehe ich nur die Fehler, daß der Index auf <= 900 geprüft wird: <=I ist falsch, es muß <I lauten.
warum muss es <I sein und nicht <=I?Da sehe ich nur die Fehler, daß der Index auf <= 900 geprüft wird: <=I ist falsch, es muß <I lauten.
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?