Wago 750-841 und Insys GPRS 5.0 Ethernet

RonnyF
2009-10-28
2009-11-27
  • RonnyF - 2009-10-28

    Hallo,

    ich zeichne mit der Wago Messdaten in einer Textdatei auf und möchte diese dann über einen Router auf einen FTP-Server senden. Dies funktioniert auch problemlos mit einem herkömmlichen Router.

    In der Endkonfiguration steht aber kein leitungsgebundenes Internet zur Verfügung. Um trotzdem die Daten verschicken zu können möchte ich das GPRS 5.0 Ethernet von Insys verwenden.

    Wenn ich nun Daten über GPRS an den FTP versenden möchte, wird zwar die Textdatei auf dem FTP erstellt, allerdings mit 0 Byte.

    Ein Datentransfer mit Filezilla über das GPRS Modem ist allerdings problemslos möglich.

    Worin liegt der Fehler, dass die Daten nicht richitg versendet werden? Hat schon jmd mal diese Kombination getestet?

    Gruß

    Ronny

     
  • RonnyF - 2009-10-29

    Hallo,

    ich glaube es könnte an der Timeout-Zeit liegen. Nutze das Programm von Wago. Wo ist in dem Programmteil die Timeout-Zeit definiert?

    Programm:

    PROGRAM file_send_read

    (*---------------------------------------------------------------------------------------

    WAGO Kontakttechnik GmbH Hansastr. 27 32423 Minden(Westf.)

    Tel. +49571/887-0 Fax. +49571/887-0

    Project: IEC1131

    Function: An example how to use WagoLibFTP

    Description:

    Date: 26.01.2006

    ------------------------------------------------------------------------------------------*)

    VAR_INPUT

    filename_source: STRING;                    (* Quelldatei *)
    
    filename_destination: STRING;               (* Zieldatei *)
    
    send: BOOL;                                 (* lokale Datei an Server verschicken (anschließend in 'file_write' löschen) *)
    
    read: BOOL;                                 (* auslesen der Datei vom Server, lokal speichern *)
    
    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 *)
    
    file_read: BOOL;                        (* Datei erfolgreich gelesen und lokal abgespeichert *)
    
    bError: FTP_ret;                        (* Fehlerprotokoll *)
    

    END_VAR

    VAR

    state: INT := 1;
    
    f1: FTP_CLIENT;                     (* zum Versenden der Datei *)
    
    i: INT;
    

    END_VAR


    IF (send OR read) 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;
    
    
    
                    IF send THEN
    
                        state := 20;
    
                    ELSIF read THEN
    
                        state := 25;
    
                    END_IF
    
    
    
                ELSE
    
                    bError := f1.ERROR;
    
                    state := 30;
    
                END_IF
    
            END_IF
    
    
    
        20:                                         (* 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
    
    
    
        25:                                         (* datei-empfang von rpath nach lpath *)
    
            f1.GET(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 := 40;
    
    
    
                    IF send THEN
    
                        file_send := TRUE;
    
                    ELSIF read THEN
    
                        file_read := TRUE;
    
                    END_IF
    
    
    
                ELSE
    
                    bError := f1.ERROR;
    
                    state := 30;
    
                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;
    
    file_read := FALSE;
    

    END_IF

    Gruß

    Ronny

     
  • RonnyF - 2009-10-30

    Hallo,

    der Wago Support schrieb mir, dass man den Timeout nicht ändern kann. Man gab mir den Hinweis die wagoLibEthernet_01.lib zu verwenden. Ist damit ein Datenversand zu einem FTP-Server möglich? Ich glaube die Bibliothek ist nur für ein Netzwerk geeignet oder und nicht zum Datenaustausch über eine GPRS-Verbindung?

    Gruß

    Ronny

     
  • RonnyF - 2009-11-05

    Hallo,

    der Wago-Support hat mir folgende Bibliothek empfohlen: FTP_Client_01.lib.

    Damit funktioniert der Versand. Allerdings kann ich nur einen Textdefinieren, welcher dann in der Textdatei auf dem FTP eingetragen wird. Wie versende ich die Messwerte, welche schon in einer Textdatei auf der Wago gespeichert sind?

    Stelle ist im Quellcode markiert.

    Quellcode:

    ( call the FTP-Client each cycle )

    oFtp(sIPaddress:= sFtpServer,

     wPortNumber:= 21,
    
     wOpcode:= wOpcode, (* 0=PUT(write), 1=GET(read) *)
    
     sUser:= sFtpUser,
    
     sPass:= sFtpPwd,
    
     sFileName:= sFileName,
    
     ptSendData:= ADR(sFileContent),  (* ADR(abSendData) *)
    
     diSendCount:= diSendCount,
    
     sOwnIPaddress:= sLocalIp,
    
     xExecute:= xFtpStart,
    
     aReceiveBuffer:= abRecBuffer,
    
     diReceiveCount:= diRecCount,
    
     xConnected=> xConnected,
    
     diStatus=> diResult,
    
     sStatus=> sStatus);
    

    CASE wState OF

    0:  (*Idle mode, wait for something to do *)
    
        IF xStartTransfer THEN (* hand *)
    
            wState:=10;
    
        END_IF
    
    
    
    10: (* Prepare filename *)
    
        sFileName := datei_send;
    
        wState := 20;
    
    
    
    20: (* Prepare file content and start transmission *)
    

    sFileContent := CONCAT('ActualCount := ','test' ); ??? WIE DEN INHALT AUS DER GESPEICHERTEN TEXTDATEI VERSENDEN ???

        diSendCount := LEN(sFileContent);
    
        xFtpStart := TRUE;
    
        wState := 30;
    
    
    
    30: (* Wait until job is done *)
    
        IF xFtpStart = FALSE THEN
    
            IF diResult = 0 THEN
    
                uiSuccessfulTransfers := uiSuccessfulTransfers +1;
    
            ELSE
    
                uiFailingTransfers := uiFailingTransfers +1;
    
            END_IF
    
            xStartTransfer := FALSE;
    
            wState:=0;
    
        END_IF
    

    END_CASE

    Gruß

    Ronny

     
  • alex-shwed - 2009-11-16

    RonnyF hat geschrieben:
    ...
    der Wago-Support hat mir folgende Bibliothek empfohlen: FTP_Client_01.lib.
    ...

    Wo kann ich diese Bibliothek finden?

     
  • cmoeller - 2009-11-27

    Hallo,

    in diesem Thread scheinen drei Fragen unbeantwortet:

    1.) Warum funktioniert die "WagoLibFtp.lib" nicht über eine GPRS-Verbindung?

    2.) Wie kann ich beliebige Daten mit der Bibliothek "FTP_Client_01.lib" versenden?

    3.) Wo bekomme ich die Bibliothek "FTP_Client_01.lib"?

    zu1: Warum funktioniert die "WagoLibFtp.lib" nicht über eine GPRS-Verbindung?

    Die "WagoLibFtp.lib" arbeitet im "passive Mode", das bedeutet:

    Für den Datentransfer wird eine zweite TCP-Verbindung vom FTP-Server zum FTP-Client aufgebaut(oder eben nicht).

    Da die GPRS-Provider typisch private IP-Adressen vergeben, ist der FTP-Client nicht erreichbar und der Dateitransfer schlägt fehl.

    Abhilfe bringt die Bibliothek "FTP_Client_01.lib" die im "active Mode" arbeitet. Im "active Mode" werden Kommandos und Daten über die gleiche Verbindung gesendet.

    zu2: Wie kann ich beliebige Daten mit der Bibliothek "FTP_Client_01.lib" versenden?

    Die zu übertragenden Daten werden mit dem Funktionsbaustein Eingang "ptSendData" bekannt gegeben.

    Der Baustein erwartet hier die Speicheradresse wo die zu sendenden Daten sich befinden. Der Datentyp spielt erstmal keine Rolle.

    Wichtig ist das mit dem Eingang "diSendCount" festgelegt wird wie viele BYTE's gesendet werden sollen.

    Soll eine Datei aus dem Filesystem versendet werden, verwendest du die SysLibFile um den Dateiinhalt in ein lokales abByteArray zu laden den FTP Baustein rufst du dann mit "ptSendData := ADR(abByteArray);" auf.

    Da du aber die Datei selbst erzeugst hast erwarte ich hier keine Probleme.

    Du könntest sogar soweit gehen, das du zuerst probierst den Dateiinhalt per FTP zu übertragen und nur dann eine Datei im Filesystem erzeugst wenn der FTP-Transfer fehlschlägt(Das Flash würde sich darüber freuen).

    zu3: Wo bekomme ich die Bibliothek "FTP_Client_01.lib"?

    mal beim WAGO support nachfragen.

     

Log in to post a comment.