in Datei schreiben TwinCat 3

rafox

Level-1
Beiträge
7
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebe Gemeinde,

ich habe mir den FAQ zum schreiben in Dateien angeschaut, werde aber nicht schlau daraus.

Ich möchte bei Programmaufruf eine Datei anlegen lassen, die am besten automatisch durchnummeriert wird, sollte sie schon vorhanden sein. am Ende jedes Zyklus sollen ein paar messwerte (schon geordnet in einem Array) mit Zeitstempel an die schon aufgenommenen Messwerte unten rangepappt werden.

nun habe ich in der Hilfe folgendes gefunden:

http://infosys.beckhoff.com/index.p...system/html/tcplclibsys_fileio_example.htm&id



fbFileOpen( bExecute := FALSE );
fbFileOpen( sNetId := destNetId,
sPathName := destFileName,
nMode := FOPEN_MODEWRITE,
ePath := PATH_GENERIC,
tTimeout := tAdsTimeout,
bExecute := TRUE );

fbFileWrite( bExecute := FALSE );
fbFileWrite( sNetId:=DestNetId,
hFile:=hDestFile,
pWriteBuff:= ADR(buffRead),
cbWriteLen:= cbReadLength,
bExecute:=TRUE,
tTimeout:=tAdsTimeOut );

fbFileClose( bExecute := FALSE );
fbFileClose( sNetId:=destNetId,
hFile:=hDestFile,
bExecute:=TRUE,
tTimeout:=tAdsTimeOut );

Ich verstehe nicht welche daten jetzt in die destfile geschrieben werden? und was hat es mit sNetId und hFile auf sich? muss ich die wie im beispiel die outputs


fbFileOpen( bExecute := FALSE );
IF ( NOT fbFileOpen.bBusy ) THEN
IF ( fbFileOpen.bError ) THEN
nErrId := fbFileOpen.nErrId;
bError := TRUE;
Step := 50;
ELSE
hDestFile := fbFileOpen.hFile;
Step := Step + 1;
END_IF END_IF

mit berücksichtigen oder kann man das weglassen? gibt es nirgendwo ein einfaches beispiel oder eine ausführlich kommentierte beispielversion?


über hilfe wäre ich wirklich sehr dankbar!
 
Zuletzt bearbeitet:
Hallo rafox,

eigentlich ist das gar nicht so schwierig.

Wie du schon selbst durch deine Baustein beschrieben hast, benötigst du minimal 3 Stück:
- FB_FileOpen
- FB_FileWrite / FB_FileRead
- FB_FileClose

Der FB_FileOpen legt dir
a) eine Datei an
b) hängt an eine existierende etwas an
c) überschreibt eine existierende
definiert durch nMode
Zurück bekommst du durch diesen Baustein ein Handle -eine Art Zeiger, wo die Datei im Speicher liegt.
Durch die NetId könntest du dem Baustein sagen, dass er die Datei nicht auf deiner lokalen Steuerung sondern auf einer anderen TwinCAT Maschine anlegen soll.

Jeder weitere Baustein führt seine Operationen dann unter Nutzung dieses Handles aus.
Das hat den Vorteil, dass du ein sehr komfortables FileHandling schreiben kannst, mit nur einem FileRead/FileWrite, der jeweils das individuelle Handle der geöffneten Datei bekommt.

Wenn alle Operationen abgeschlossen sind, wird die Datei wieder geschlossen (FB_FileClose) - ebenfalls durch Übergabe des Handles.

Vorsicht jedoch: man stößt damit Windows-APIs an. Man kann nicht genau sagen, wann sie beendet werden bzw. tatsächlich auf die ms genau, wann sie ausgegführt werden.

Ggf. habe ich noch ein kleines Beispiel mit Schrittkette.

Aber vielleicht hilft das ja schon.

Gruß,
mac203
 
Zuviel Werbung?
-> Hier kostenlos registrieren
hallo,

danke erstmal!

wie gesagt über beispielcode würde ich mich wirklich sehr freuen! wenn du mir etwas schicken könntest würde mir das sicher sehr helfen.

ich sehe nicht welche daten nun in dem oben geposteten code in die datei geschrieben werden etc. naja ich probier mal noch etwas rum.
 
fbFileWrite( bExecute := FALSE );
fbFileWrite( sNetId:=DestNetId,
hFile:=hDestFile,
pWriteBuff:= ADR(buffRead),
cbWriteLen:= cbReadLength,
bExecute:=TRUE,
tTimeout:=tAdsTimeOut );

Ich verstehe nicht welche daten jetzt in die destfile geschrieben werden
es werden die Daten an der Schnittstelle "pWriteBuff" geschrieben. Wo ist denn dein Problem genau?
das "hFile" gibst du einfach vom fbFileOpen an die anderen (Write,Close) weiter.

EDIT: "bExecute" benötigt eine pos. Flanke
 
Zurück
Oben