For- Schleife mit Arrays

CNC840D

Level-2
Beiträge
161
Reaktionspunkte
10
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebe Codesys - Gemeinde,

ich bin gerade dabei in Codesys einzusteigen ...davor habe ich schon fast 20 Jahre S7 auf dem Buckel
und stell mich gerade wahrscheinlich etwas doof an.

Ich Versuche gerade einen Array mit dem Wert der laufvariable auszufüllen, der Wert von i wird aber immer in das erste Element des Arrays eingetragen,
mit SCL vom BigS funktioniert der Code einwandfrei.

Ich arbeite gerade mit Codesys V2.3 in Verbindung mit Bosch Indralogic und versuche den Baustein zu simulieren mit dem Simulator

Könntet Ihr mir ein bisschen auf die Sprünge helfen hab echt ein Brett vorm Kopf.

Vielen Dank

FUNCTION_BLOCK Indirekt

VAR_INPUT
Start:BOOL;​
END_VAR

VAR
FM :BOOL;​
FP :BOOL;​
Daten :ARRAY [0..100] OF INT;​
END_VAR

VAR_TEMP
i :INT;​
END_VAR

(*Flanke Start*)
FM:=Start AND NOT FP;​
FP:=Start;​

(*Array ausfüllen*)
IF FM THEN​
FOR i:= 0 TO 100 BY 1 DO​
Daten:=i;

END_FOR;​
END_IF;​
 
Hallo,

der Code muss so funktionieren wenn du ein Array willst, dass den Inhalte 0,1,2,3... hat. Wenn ich dich richtig verstanden habe hast du nur im ersten Element einen Wert?

Die Variable FM kannst du dir sparen. Ändert zwar nicht an der Funktion aber ist etwas kompakter:

IF Start AND NOT FP THEN
FOR i := 0,...

END_FOR;
END_IF;
FP := Start;
 
Hi
Bin mir nicht sicher aber ist i in var-temp gut aufgehoben ?
Muss die nicht auch nach var ?
Sorry, ich setze Temp selten ein ...
LG
Shrimps
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Shrimps:
Nein ... mit der Laufvariablen (i) ist das schon korrekt so. Die würde ich auch immer im TEMP anlegen.

@TE:
Änder doch mal deine Flanke wie von excelite vorgeschlagen.
Aber wie auch schon geschrieben : der Code sollte so funktionieren (wie gewünscht).
Was passiert denn außerhalb des Baustein noch so ?
 
30-10-2015 14-17-06.jpg.... hab die Flanke mal geändert ...alllerdings ohne Erfolg
Ausserhalb des Bausteins passiert eigentlich nichts...hab ihn nur im PLC_PRG aufgerufen als Instanz (siehe Screenshot)
 
sehr merkwürdig,... in so einem Fall würde ich:

a) Alles bereinigen, neu übersetzen,...
b) mit einem Breakpoint Zeile für Zeile durchlaufen und das Programm bewerten
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Beobachte mal Array-Werte im Programm nach der FOR-Schleife:
Code:
[COLOR="#A9A9A9"]...
    END_FOR;
END_IF;
FP:=Start;[/COLOR]

[B]i:=Daten[0] + Daten[1] + Daten[99] + Daten[100];[/B]

Du könntest auch mal das IF.. deaktivieren und die FOR-Schleife immer ausführen.

Harald
 
30-10-2015 16-36-41.jpg

...hab die Anweisung von PN/DP mal hinten angehängt sieht dann wie im Screenshot aus.
Das ganze ist irgendwie mysteriös.
Kann jemand von euch mal versuchen wie das ganze sich in der Simulation verhält??
 
Zuviel Werbung?
-> Hier kostenlos registrieren
...sowas hab ich mir fast schon gedacht :-(
Ich hab jetzt mal das Ganze ins PLC_PRG direkt geschrieben ...ohne Veränderung.....kann man vielleicht im Simulator was falsch einstellen oder hab ich die falschen Variablen verwendet??
 
Eine Idee habe ich noch. Die Simulation ist eigentlich nur eine Krücke man kann zwar Kleinigkeiten testen aber mehrere Tasks kann das Ding normalerweise nicht. Ich nutze das wirklich nur für Kleinigkeiten (... sowas was du da eigentlich machen willst). Was immer wieder zu großen Problemen führt ist wenn man mit der PLC_PRG arbeitet und diese trotzdem in einer Task aufruft. PLC_PRG wird normalerweise implizit aufgerufen wenn man diese dennoch in einer Task anhängt kann es Probleme geben. Ich nutze deshalb nie den Standardnamen PLC_PRG, sondern PRC_MAIN oder so ähnlich und hänge diese explizit in der Taskverwaltung an.

Ich weiß nicht ob dein Bosch IndraPLC auch eine SoftSPS mitliefert. Die meisten Hersteller bieten die als 2h Demo Version an. Super für Tests da das dann auf einer "echten" PLC läuft und nicht nur in der IDE. Schau mal nach ob evtl. eine SoftPLC installiert wurde dann starte die, ändere dein Zielsystem und lasse es darauf laufen. Falls nichts installiert ist kannst du das von der 3S Seite runterladen (evtl. mit Registrierung,...). Dann kannst du nochmal testen.

Bei mir heißt die Verknüpfung: CoDeSys SP PLCWinNT V2.4
 
Hallo excelite,

der letzte Tipp hats gebracht....hab die Soft SPS eine CNC- Steuerung der Bosch MTX, die sowieso mal später das Ziel meines Projekts wird angewählt, und siehe da es funktioniert.
Danke das Ihr soviel Geduld mit mir hattet :)
Ich hoffe ich muss euch nicht allzu oft belästigen.

Viele Grüße
 
Zurück
Oben