-> Hier kostenlos registrieren
Hallo! Ich beschäftige mich seit geraumer Zeit mit der Messwerterfassung auf der Wago 750-849. Da der Speicherplatz auf der SPS nicht ausreicht, wollte ich nun in geeigneten Abständen meine Daten per FTP verschicken. Das gelingt mir auch soweit... Ich möchte nun eine Abfrage integrieren, die VOR dem versenden der Datei prüft, ob schon eine Datei XYZ auf dem Server vorhanden ist. In der Bibliothek "WagoLibFtp" habe ich die Funktion gefunden.
Leider hab ich es nicht geschafft diese richtig zu implementieren. Ich habe mich am Beispielcode von Wago orientiert und versucht zusätzlich die "Action STATUS" einzubinden. In der Variable bError erscheint die Fehlermeldung "FTP_INVALID_PARM".
Code:
Action STATUS:
This action returns the status of the entity defined by 'PATH'. The status information is returned in 'BUFFER', with a maximum length of 'BUFF_SIZE'.
An error is returned if the entity in 'PATH' does not exist.
Leider hab ich es nicht geschafft diese richtig zu implementieren. Ich habe mich am Beispielcode von Wago orientiert und versucht zusätzlich die "Action STATUS" einzubinden. In der Variable bError erscheint die Fehlermeldung "FTP_INVALID_PARM".
Code:
VAR_INPUT
filename_source: STRING; (* Quelldatei *)
filename_destination: STRING; (* Zieldatei *)
send: BOOL; (* lokale Datei an Server verschicken (anschließend in 'file_write' löschen) *)
ftpServer_ip_adr: ARRAY[1..4] OF BYTE; (* ftp-Server-IP-Adresse *)
username: STRING; (* Username für Login *)
password: STRING; (* Passwort für Login *)
END_VAR
VAR_OUTPUT
file_send: BOOL; (* Datei erfolgreich verschickt *)
bError: FTP_ret; (* Fehlerprotokoll *)
END_VAR
VAR
test:BOOL;
buffer:DWORD;
state: INT := 1;
f1: FTP_CLIENT; (* zum Versenden der Datei *)
i: INT;
END_VAR
Code:
IF send THEN
f1(); (* Instanz vom FB 'FTP_CLIENT *)
CASE state OF
1: (* setzen der Ziel-IP-Adresse *)
f1.EN := TRUE;
FOR i:=1 TO 4 DO
f1.HOST_IP[i] := ftpServer_ip_adr[i];
END_FOR
f1.PORT_NUM := 21; (* Port für ftp = 21 *)
f1.OPEN; (* stellt Verbindung zum Server her *)
IF f1.ENO THEN
IF f1.ERROR=0 THEN
f1.EN := FALSE;
state := 10;
ELSE
bError := f1.ERROR;
state := 30;
END_IF
END_IF
10: (* login, öffnet den angegebenen account auf dem Server *)
f1.LOGIN(EN := TRUE, USERNAME := username, PASSWORD := password);
IF f1.ENO THEN
IF f1.ERROR=0 THEN
f1.EN := FALSE;
state := 11;
ELSE
bError := f1.ERROR;
state := 30;
END_IF
END_IF
11: (* datei prüfen *)
f1.STATUS(EN := TRUE, PATH:='E:\Downloads\Modul1.csv');
IF f1.ENO THEN
IF f1.ERROR=0 THEN
f1.EN := FALSE;
f1.BUFF_SIZE:=300;
buffer:=f1.BUFFER;
state := 30;
ELSE
bError := f1.ERROR;
state := 30;
END_IF
END_IF
20: (*Nicht verwendet! datei-transfer von lpath nach rpath *)
f1.PUT(EN := TRUE, rpath := filename_destination, lpath := filename_source);
IF f1.ENO THEN
IF f1.ERROR=0 THEN
f1.EN := FALSE;
state := 30;
ELSE
bError := f1.ERROR;
state := 30;
END_IF
END_IF
30: (* schließt die Verbindung zwischen Server und Client *)
f1.CLOSE(EN := TRUE);
IF f1.ENO THEN
IF f1.ERROR=0 THEN
f1.EN := FALSE;
state := 1;
file_send := TRUE;
ELSE
bError := f1.ERROR;
END_IF
END_IF
40:; (*waiting for new command*)
END_CASE
ELSE (*Im Fehlerfall wird die FTP-Verbindung zurückgesetz t*)
f1.EN := FALSE;
state := 1;
file_send := FALSE;
END_IF