moin zusammen,
ich hab 9 Bilddateien (von 1 bis 9) zu verfügung , das program soll aufm laufwerk( Adresse im Stringvariable) zugreifen und prüfen ob die dateien existiern oder nicht (mittels SysfileLib) , falls ja ..soll er das bild aufrufen..ansonsten prüft er auf dem nächsten usw..
mein Programm sieht so aus :
IFFehler=FALSETHENbEnable:=False;<span style="color: #FF0000"> eingang der Funktion zurücksetzen</span>B:=B+1;<span style="color: #FF0000"> >>>>>B erhöht sich um eins </span>Bilddarstellen:=True; <span style="color: #00BF00"> Bild wird hier dargestellt</span>ELSEB:=B+1; <span style="color: #408000">guckt auf dem nächsten</span>END_IF
END_IF
allerdings funktionniert mein programm nicht der zähler erhöht sich nur auf 2 und bleibt stehen und die funktion SysFileAsync setzt sich irgendwie nicht zurück ??
Kann mir bitte jemanden helfen und die programmierung überprüfen ?? ist das richtig so ?
Danke im voraus !
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Anonymous
-
2011-01-29
Originally created by: blackenslaver666
Hi.
Du beschreibst nur die lokale Var "bEnable", diese wird aber nicht an die FUN als Eingangsparameter übergeben. An die FUN übergibst du statisch TRUE, das kann dann nicht funktionieren. Einfach nochmal die FUN aufrufen mit "bEnable := FALSE", dann sollte das gehen.
Warum dein Zähler nur auf B=2 inkrementiert wird mir anhand des Codes aber nicht ersichtlich. Du kannst ja mal in der Taskkonfig die entsprechende Task als "DebugTask festlegen" und dann das Programm im Einzelschrittmodus Zeile für Zeile abarbeiten. So findet sich idR jeder Fehler.
Gruß
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
]danke erstmal für den tipp , Ich habe es probiert , funktionniert trotzdem nicht :
ich habe hier mal ein screenshot für euch im anhang .
ich kann den eingang immernoch nicht zurücksetzen !
irgenwas stimmt hier nicht ?? vllt ein laufzeit problem ? kann mir jemandne helfen ...
Danke im voraus ^!
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Anonymous
-
2011-01-31
Originally created by: blackenslaver666
Hättest du die Debug-Task mal versucht hättest du ein LZ-Problem feststellen können.
Zu deinem Code:
Jetzt ist klar warum B nur auf 2 inkrementiert: Du durchläuft die IF-Anweisung nur 1x und setzt danach "weiter" auf FALSE.
Zu dem Rücksetzproblem des Eingangs:
Du rufst du FB(?) VOR der IF-Anweisung auf, d.h. in der Schleife setzt du erst "bEnable" auf TRUE und im nächsten Durchlauf wird der FB auch abgearbeitet. In diesem Fall wird aber die IF-Anweisung nicht mehr durchlaufen, d.h. der FB bleibt enabled.
Deinen Code kannst du mal so modifizieren:
IF weiter
THEN
IF NOT bEnable THEN
B:=B +1; ( Zähler inkrementieren wenn Dateizugriff nicht aktiv )
END_IF
bEnable:= TRUE;( Datei öffnen )
IF InstSysFileOpenAsync.bDone THEN ( Datei gelesen )
bEnable:= FALSE;( Dateihandling beenden )
weiter := FALSE;
END_IF
END_IF
moin zusammen,
ich hab 9 Bilddateien (von 1 bis 9) zu verfügung , das program soll aufm laufwerk( Adresse im Stringvariable) zugreifen und prüfen ob die dateien existiern oder nicht (mittels SysfileLib) , falls ja ..soll er das bild aufrufen..ansonsten prüft er auf dem nächsten usw..
mein Programm sieht so aus :
IF (weiter = TRUE ) AND (B < 10)
THEN
B:=Bildnummer; >> B=1 z.b
InstSysFileOpenAsync(bEnable:=True , stFileName:=Stringadresse , stMode:='r' , bError=>Fehler );
END_IF
allerdings funktionniert mein programm nicht der zähler erhöht sich nur auf 2 und bleibt stehen und die funktion SysFileAsync setzt sich irgendwie nicht zurück ??
Kann mir bitte jemanden helfen und die programmierung überprüfen ?? ist das richtig so ?
Danke im voraus !
Originally created by: blackenslaver666
Hi.
Du beschreibst nur die lokale Var "bEnable", diese wird aber nicht an die FUN als Eingangsparameter übergeben. An die FUN übergibst du statisch TRUE, das kann dann nicht funktionieren. Einfach nochmal die FUN aufrufen mit "bEnable := FALSE", dann sollte das gehen.
Warum dein Zähler nur auf B=2 inkrementiert wird mir anhand des Codes aber nicht ersichtlich. Du kannst ja mal in der Taskkonfig die entsprechende Task als "DebugTask festlegen" und dann das Programm im Einzelschrittmodus Zeile für Zeile abarbeiten. So findet sich idR jeder Fehler.
Gruß
]danke erstmal für den tipp , Ich habe es probiert , funktionniert trotzdem nicht :
ich habe hier mal ein screenshot für euch im anhang .
ich kann den eingang immernoch nicht zurücksetzen !
irgenwas stimmt hier nicht ?? vllt ein laufzeit problem ? kann mir jemandne helfen ...
Danke im voraus ^!
Originally created by: blackenslaver666
Hättest du die Debug-Task mal versucht hättest du ein LZ-Problem feststellen können.
Zu deinem Code:
Jetzt ist klar warum B nur auf 2 inkrementiert: Du durchläuft die IF-Anweisung nur 1x und setzt danach "weiter" auf FALSE.
Zu dem Rücksetzproblem des Eingangs:
Du rufst du FB(?) VOR der IF-Anweisung auf, d.h. in der Schleife setzt du erst "bEnable" auf TRUE und im nächsten Durchlauf wird der FB auch abgearbeitet. In diesem Fall wird aber die IF-Anweisung nicht mehr durchlaufen, d.h. der FB bleibt enabled.
Deinen Code kannst du mal so modifizieren:
IF weiter
THEN
IF NOT bEnable THEN
B:=B +1; ( Zähler inkrementieren wenn Dateizugriff nicht aktiv )
END_IF
bEnable:= TRUE;( Datei öffnen )
IF InstSysFileOpenAsync.bDone THEN ( Datei gelesen )
bEnable:= FALSE;( Dateihandling beenden )
weiter := FALSE;
END_IF
END_IF
( Datei öffnen )
InstSysFileOpenAsync(bEnable:=bEnable , stFileName:=Stringadresse , stMode:='r' , bError=>Fehler );
jo es hat geklappt ! ich bin halt nur anfänger mit CoDesSys
Danke nochmal für die unterstützung !
Originally created by: blackenslaver666
Jeder fängt mal klein an, aber man sollte trotzdem hilfreiche Tipps ausprobieren. Man lernt immer irgendwie dazu.
Viel Spass noch!