Mailversand mit WagoLibMail02

Wühlmaus
2010-10-29
2010-12-31
  • Wühlmaus - 2010-10-29

    Hallo,

    ich habe mit einer Wago 750-841 eine Steuerung für mein Schwimmbad implementiert. Um auch unterwegs über den aktuellen Status des Pools informiert zu sein, möchte ich mir regelmäßig (z.B. 2x täglich) eine Email mit den wichtigsten Parametern von der SPS schicken lassen. Dazu habe ich mir die WagoLibMail02.lib nebst 5 Beispielprojekten und Application Note heruntergeladen. Aber irgendwie stehe ich auf dem Schlauch, da die AN gnadenlos unverständlich ist und die Beispiele nicht durchgängig in ST geschrieben sind. Von den anderen 61131-3 Varianten habe ich leider keinen Schimmer.

    Gibt es zum Einstieg in dieses Thema irgendwo ein brauchbares Tutorial/Beispielprojekt auf ST-Basis ? Der Postausgangsserver meines Mailproviders (http://www.domainbox.de) verwendet SMTP und verlangt eine Authentifizierung mit Username und Passwort (aber nicht SPA).

    Vielen Dank

     
  • Wühlmaus - 2010-10-30

    Also gut, ich sehe ja ein, dass eine sooo allgemeine Frage den Experten nur ein müdes Gähnen entlocken kann. Inzwischen habe ich selbst noch etwas geforscht und kann mein Problem nun wie folgt einengen.

    In der Wago Application Note für WagoLibMail02.lib habe ich mir mal das Beispiel 04 rausgepickt, weil es mir das, was ich vorhabe, am ehesten zu versprechen scheint. Den dortigen Aufruf des Mail Client habe ich für meine Zwecke wie folgt abgeändert (vertrauliche Infos sind mit #### unkenntlich gemacht):

    MailHandler                                      (* eine Instanz des Fnktionsblocks MAIL_ESMTP_Client *)
       (
       sSMTPserver := '###.###.###.###' ,                   (* habe ich durch PING auf vom Provider mitgeteilte URL (mail.#####.de) ermittelt
       tTimeOut := T#30s ,
       eOperationMode := MAIL_SMTP_AUTH ,
       sPop3Server := '###.###.##.###' ,                    (* identisch mit SMTP Server       *)
       sUsername := '######@#######.de' ,      (* meine vollständige Email-Adresse (will der Email-Provider so als Username haben)   *)
       sPassWord := '###########' ,                    (* mein Passwort für das Email Account         *)
       sFrom := 'Poolboy (Wago 750-841)' ,
       sTo := '#######@#########.de' ,          (* eine andere Mailbox derselben domain     *)
       sSubject := 'Poolboy Status Report' ,
       sMessage := 'hier sollte der Message Body kommen ... ' ,
       xSend := SendMailNow,
       ) ;
    

    Bei der Ausführung des Auftrages lieferte MailHandler.sStatus nacheinander folgende Strings zurück:

    'Try to connect with SMTP server'
    'Connection established, waiting for "Mailserver Greetings"'
    '220 area-##.server-home.net ESMTP MailEnable Service, Version: 4.14-- ready at 10/30/10 12:49:48$R$N'
    '250-area-##.server-home.net [###.###.###.###], this server offers 4 extensions$R$N250-AUTH LOGIN$R$N250-SIZE 52428800$R$N250-HELP$R$N250 AUTH=LOGIN$R$N'
    '501 Your domain does not seem to be valid. Could not find MX record for your domain.$R$N'
    

    "area-##.server-home.net" ist in der Tat der Server meines Email-Providers, den ich z.B. bei der Administrierung von WebSpace und Postfächern adressieren muss, aber warum findet man mich dort nicht ? (sUserName und sPassWord habe ich jedenfalls genau so eingegeben, wie ich sie z.B. auch in MS Outlook mir Erfolg verwende.)

    Passt evtl. die von mir konfigurierte SMTP Extension zu keiner der vier angebotenen Extensions ?

    In der Application Note steht, man solle den DNS Server der Wago (steht bisher auf 0.0.0.0) konfigurieren. Wie soll das gehen ? Mein Internet Provider Telekom arbeitet - so viel ich weiß - nicht mit festen Adressen. in der Fritzbox als DSL-Modem/Router lässt sich jedenfalls keine DNS Serveradresse eingeben. Allerdings habe ich dem dortigen Logfile entnommen, welche DNS-Serveradressen momentan verwendet werden. Diese in die Wago eingetragen - ändert aber am obigen kläglichen Scheitern rein gar nichts.

     
  • gravieren - 2010-10-31

    Hi

    sSMTPserver := '###.###.###.###' , (* habe ich durch PING auf vom Provider mitgeteilte URL (mail.#####.de) ermittelt

    Fehlt hier die abschliessende Kommentar " *) "

    Oder ist es nur ein Kopierfehler.

    sSMTPserver := '###.###.###.###' ,
    sPop3Server := '###.###.##.###' ,

    Hier sollte ein Domainname stehen ?

    Benutze doch mal WireShark, um zu sehen was rausgesendet wird.

     
  • Wühlmaus - 2010-10-31

    Hallo,

    danke für die Antwort.

    gravieren hat geschrieben:
    Fehlt hier die abschliessende Kommentar " *) "
    Oder ist es nur ein Kopierfehler.
    Ja, Fehler steckt nur im Forumsbeitrag, nicht im Code. Aber der "human compiler" hat's sofort gemerkt...

    Mein eigentliches Problem hat sich halbwegs in Luft aufgelöst, nachdem ich noch zwei Fehler in der Emailadressen korrigiert habe (sTo: simpler Tippfehler; sFrom: Ich hatte hierfür einen Klartext-Namen 'Poolboy (Wago 750-841)' definiert, Programm erwartet aber ebenfalls Email-Adresse). Da soll man bei den gelieferten Fehlermeldungen erstmal drauf kommen... Der Emailversand funktioniert nun problemlos.

    Aaaaaber:

    gravieren hat geschrieben:
    sSMTPserver := '###.###.###.###' ,
    sPop3Server := '###.###.##.###' ,
    Hier sollte ein Domainname stehen ?

    Dies ist in der Tat ein noch offenes Problem. In der Wago (unter TCP/IP-Einstellungen) war bisher keine DNS Serveradresse eingetragen, klar dass es dann nur mit expliziten IP-Adressen geht. Wenn ich die DNS Serveradressen meines Internet Service Providers (DTAG) eingebe, die auch die Fritzbox momentan nutzt (dort nicht explizit einstellbar, aber zu sehen in ihrem Logfile), funktioniert's nicht. Was muss ich also wo einstellen, um mit solchen logischen Domainnames arbeiten zu können, um die Verbindung nicht zu verlieren, wenn der Email-Provider seine Email-Server mal auf eine andere physikalische IP-Adresse umzieht ?

    gravieren hat geschrieben:
    Benutze doch mal WireShark, um zu sehen was rausgesendet wird.
    Danke für den Tipp, werde ich mir mal anschauen.

     
  • gravieren - 2010-10-31

    Hi

    Zitat:
    Dies ist in der Tat ein noch offenes Problem. In der Wago (unter TCP/IP-Einstellungen) war bisher keine DNS Serveradresse eingetragen, klar dass es dann nur mit expliziten IP-Adressen geht. Wenn ich die DNS Serveradressen meines Internet Service Providers (DTAG) eingebe, die auch die Fritzbox momentan nutzt (dort nicht explizit einstellbar, aber zu sehen in ihrem Logfile), funktioniert's nicht. Was muss ich also wo einstellen, um mit solchen logischen Domainnames arbeiten zu können, um die Verbindung nicht zu verlieren, wenn der Email-Provider seine Email-Server mal auf eine andere physikalische IP-Adresse umzieht ?

    Schau doch mal unter http://www.oscat.de

    Irgendwie gibt es da eine Funktion für die DNS.
    (Network-Library)

    Also Domain --> IP-Adresse

    Die Funktion heisst DNS_CLIENT

    Um die IP-Adresse in einen String zu wandeln gibt es die Funktion IP4_To_STRING

    Wago wird sehr gut unterstützt.

    Du jedoch auch aune Frage im Forum stellen. http://www.oscat.de/community/index.php/board,16.0.html m

     
  • Wühlmaus - 2010-10-31

    gravieren hat geschrieben:
    Schau doch mal unter http://www.oscat.de
    Irgendwie gibt es da eine Funktion für die DNS. (Network-Library) Also Domain --> IP-Adresse
    Ja, wenn ich anders nicht weiter komme, werde ich das mal tun, auch wenn ich damit erst wieder ein ganz neues Fass aufmachen muss.

    Aber gibt es denn wirklich gar keine Lösung von Wago/CodeSys dafür, sozusagen mit Bordmitteln ?

     
  • gravieren - 2010-10-31

    Hi

    Du kannst auch den Domainnamen angeben.

    Siehe Beispiel 3

    Dein Router sollte den DNS-Namen auflösen können.

    CMD deines Rechners aufrufen.

    Ping web.de

    Du erhältst die IP-Adresse von WEB.DE (213.165.64.75)

    Tracert 213.165.64.75

    Nun sicht du die Routen .

    Welchen Router hast du ?

     
  • Wühlmaus - 2010-11-01

    gravieren hat geschrieben:
    Welchen Router hast du ?
    Fritz!box 7170

    gravieren hat geschrieben:
    Dein Router sollte den DNS-Namen auflösen können.
    Das kann er offensichtlich. Wenn er nach der Zwangstrennung die DSL-Verbindung neu aufsetzt, schreibt er die IP-Adressen zweier DNS Server in sein Logfile. Die Adressen bezieht er offensichtlich dynamisch vom ISP, da entsprechende Einstellungen in der Fritzbox fehlen. Konsistent damit finde ich bei den FAQs meines ISP (Deutsche Telekom):
    Zitat:
    Bei der Einwahl werden automatisch zwei DNS-Server über das PPP-Protokoll zugewiesen. Dadurch wird sichergestellt, dass Ihnen immer ein DNS-Server zur Verfügung steht, auch wenn einzelne Server einmal ausfallen sollten.
    Bei meinem an die Fritzbox ebenfalls angeschlossenen Laptop ist folgerichtig für die TCP/IP-Verbindung des LANs "DNS Serveradresse automatisch beziehen" konfiguriert. Genau diese Einstellmöglichkeit scheint mir an der Wago aber zu fehlen - da kann man nur eine DNS Adresse eintragen (und zwar in Form einer IP Adresse, kein Domainnamen)

    gravieren hat geschrieben:
    Ping web.de
    Du erhältst die IP-Adresse von WEB.DE (213.165.64.75)
    Tracert 213.165.64.75
    Nun sicht du die Routen .

    Für WEB.DE erhalte ich:

    Routenverfolgung zu web.de [213.165.64.75] ber maximal 30 Abschnitte:
      1     1 ms     *        1 ms  fritz.box [192.168.178.1] 
      2    50 ms     *       49 ms  217.0.116.37 
      3    50 ms     *       51 ms  217.0.66.162 
      4    56 ms    56 ms   103 ms  ka-eb1-i.KA.DE.NET.DTAG.DE [62.154.74.38] 
      5    55 ms    55 ms     *     dtag.bb-c.bs.kae.de.oneandone.net [80.156.160.54] 
      6    57 ms    55 ms    57 ms  ae-3.gw-distg-b.bs.ka.oneandone.net [212.227.121.215] 
      7    56 ms    54 ms     *     web.de [213.165.64.75] 
      8    54 ms    56 ms     *     web.de [213.165.64.75] 
      9    54 ms    54 ms     *     web.de [213.165.64.75] 
     10    56 ms    55 ms     *     web.de [213.165.64.75] 
     11    54 ms    54 ms     *     web.de [213.165.64.75] 
     12    56 ms    54 ms     *     web.de [213.165.64.75] 
     13    55 ms    55 ms     *     web.de [213.165.64.75] 
     14    56 ms    56 ms     *     web.de [213.165.64.75] 
     15    55 ms    55 ms     *     web.de [213.165.64.75] 
     16    57 ms    55 ms     *     web.de [213.165.64.75] 
     17    55 ms    56 ms     *     web.de [213.165.64.75] 
     18    56 ms    56 ms     *     web.de [213.165.64.75] 
     19    54 ms    54 ms     *     web.de [213.165.64.75] 
     20    55 ms    54 ms     *     web.de [213.165.64.75] 
     21    54 ms    56 ms    54 ms  web.de [213.165.64.75] 
    Ablaufverfolgung beendet.
    
    ```Für meinen Internet Provider DTAG erhalte ich:
    

    Routenverfolgung zu dtag.com [77.67.87.24] ber maximal 30 Abschnitte:
      1     1 ms             1 ms  fritz.box [192.168.178.1]
      2    50 ms     
           50 ms  217.0.116.37
      3    50 ms            53 ms  217.0.66.170
      4    52 ms     
           52 ms  f-ed3-i.F.DE.NET.DTAG.DE [62.154.14.198]
      5    51 ms     *       50 ms  194.25.211.134
      6   141 ms   140 ms   141 ms  so-1-1-0.was11.ip4.tinet.net [213.200.82.197]
      7   141 ms   141 ms   141 ms  77.67.87.24
    Ablaufverfolgung beendet.

    ```Für meine Post-Ein/Ausgangsserver erhalte ich:

    Routenverfolgung zu mail.grauel-online.de [77.236.97.110] ber maximal 30 Abschnitte:
      1     1 ms     *        1 ms  fritz.box [192.168.178.1] 
      2    50 ms     *       51 ms  217.0.116.37 
      3    52 ms     *       51 ms  217.0.66.166 
      4    52 ms     *       51 ms  f-ea5-i.F.DE.NET.DTAG.DE [62.154.16.165] 
      5    55 ms    54 ms     *     te-4-4.car2.Frankfurt1.Level3.net [4.68.110.253] 
      6    68 ms    56 ms    68 ms  vlan89.csw3.Frankfurt1.Level3.net [4.68.23.190] 
      7    57 ms    56 ms     *     ae-82-82.ebr2.Frankfurt1.Level3.net [4.69.140.25] 
      8    57 ms     *       56 ms  ae-46-46.ebr1.Dusseldorf1.Level3.net [4.69.143.169] 
      9    56 ms    55 ms     *     ae-11-51.car1.Dusseldorf1.Level3.net [4.69.139.2] 
     10    57 ms    57 ms    56 ms  212.162.17.58 
     11    58 ms    58 ms    58 ms  area-30.server-home.net [77.236.97.110] 
    Ablaufverfolgung beendet.
    

    Hmmmmh ... und was fange ich mit alledem jetzt an ?

    Nochmal: mein Hauptproblem scheint nach wie vor zu sein, dass ich in der Wago keine Einstellung "DNS Server-Adresse automatisch beziehen" finde, obwohl die Fritzbox das ja erwiesenermaßen bedienen könnte. Eine feste DNS IP-Adresse kann jedenfalls nicht die Lösung sein, da DTAG die Server Adressen anscheinend flexibel hält. Und eine DNS Server Domainnamen kann ich weder bei DTAG ermitteln noch könnte ich ihn - wenn ich ihn hätte - in der WAGO einstellen.

     
  • Matze001 - 2010-11-01

    Hallo,

    eigtl. kannst du deine Fritzbox als DNS-Server in die SPS eintragen, so klappt es bei mir auf jeden Fall.

    Versuch das mal und berichte!

    MfG

    Marcel

     
  • gravieren - 2010-11-01

    Matze001 hat geschrieben:
    eigtl. kannst du deine Fritzbox als DNS-Server in die SPS eintragen, so klappt es bei mir auf jeden Fall.
    Versuch das mal und berichte!

    Ja, stimmt.

    Logge dich mal in die Web-Administration ein.

     
  • Matze001 - 2010-11-01

    Das ist ja grad der Sinn des Routers.

    Er ist das Gateway für alle Rechner im Netzwerk.
    Er sammelt alles aus dem Netzwerk und schickt es nach Außen, und bekommt Daten von Außen und verteilt es an das Netzwerk.

    Wenn das nicht hilft nimm mal 8.8.8.8 als DNS Server. Der ist von Google und hat immer die gleiche IP!

    MfG

    Marcel

     
  • Wühlmaus - 2010-11-01

    Wahnsinn - jetzt läuft's, auch wenn SMTP- und Postausgangsserver nur mit ihrem Domainnamen angegeben sind !

    Vielen Dank für die geduldige Hilfestellung !!!

    Für mich zur Erinnerung und für alle, die's auch brauchen können, hier der letzte Stand meiner Einstellungen:

    Auf der Wago 750-841, Menü TCP/IP:

    IP-Address:             192.XXX.XXX.XXX          (* die [feste] IP-Adresse der Wago 750-841 im LAN *)   
    Subnet Mask:            255.255.255.0   
    Gateway:                192.XXX.XXX.1            (* die (feste) Adresse des Routers (Fritzbox) im LAN *)
    Hostname:                  
    Domain name:    
    DNS-Server1:            192.XXX.XXX.1            (* Identisch mit Gateway *)    
    DNS-Server2:            0.0.0.0    
    (S)NTP-Server           0.0.0.0
    SNTP Update Time        0   
    

    Aufrufparameter des Mailhandlers MAIL_ESMTP_Client in WagoLibMail02.lib:

    MailHandler                                      (* eine Instanz des Funktionsblocks MAIL_ESMTP_Client *)
       (
       sSMTPserver := 'mail.XXXXXX.de' ,             (* Postausgangsserver (SMTP) von DomainBox.de; XXXXXX.de ist die Domain meiner Email-Adressen *)
       tTimeOut := T#30s ,
       eOperationMode := MAIL_SMTP_AUTH ,            (* gewünschte Extension des SMTP (so will's Domainbox haben)       *)
       sPop3Server :=  'mail.XXXXXX.de' ,            (* Posteingangsserver (POP3) ; bei DomainBox identisch mit SMTP-Server Adresse *)
       sUsername := 'XXXXXX@XXXXXX.de' ,             (* Benutzername für Email-Account; bei DomainBox komplette Email-Adresse                     *)
       sPassWord := 'XXXXXXXXXXXXXX' ,               (* Password dafür                                                    *)
       sFrom := 'XXXXXX@XXXXXXX.de' ,                (* Email-Adresse, die die Wago als Absender verwenden soll (kein Klartextname wie 'Willy Wühlmaus')  *)
       sTo := 'XXXXXX@XXXXXX.de' ,                   (* Empfänger der zu versendenden Email                              *)
       sSubject := BetreffZeile ,                    (* Betreffzeile der zu versenden Email (max. 255 Zeichen)               *)
       sMessage := EmailBody ,                       (* Textbody der zu versenden Email (max. 255 Zeichen --- leider !!!)    *)
       xSend := SendMailNow,                         (* positive Flanke triggert Versenden                                 *)
       ) ;
    

    Jetzt bin ich natürlich begehrlich geworden: Was trage ich in der Wago bei

    (S)NTP-Server           0.0.0.0
    SNTP Update Time        0   
    

    ein, um meine Echtzeituhr automisch gestellt zu bekommen ? Die gestrige Umstellung auf Winterzeit hat die Guteste nämlich komplett verpennt, und auch sonst läuft sie 1 bis 2 min. pro Monat davon...

     
  • Wühlmaus - 2010-11-02

    gravieren hat geschrieben:
    Suche dir einen aus.
    http://timeserver.verschdl.de/
    Hab's mit ptbtime1.ptb.de [192.53.103.108] versucht. Obwohl der auf PING antwortet, setzt er meine RTC nicht (Intervall ist auf 300 s gesetzt).

    Allerdings fehlt mir jetzt die Zeit, das mit allen bekannten Zeitservern durchzudeklinieren.

    Oder muss ich im Steuerungsprogramm auch noch irgendwas dafür tun ?

    gravieren hat geschrieben:
    Google ist dein Freund.
    Na ja, das kann man so oder so sehen... Können wir uns auf "Großer Bruder" einigen ?

     
  • gravieren - 2010-11-02

    Wühlmaus hat geschrieben:
    mit ptbtime1.ptb.de [192.53.103.108] versucht. Obwohl der auf PING antwortet, setzt er meine RTC nicht (Intervall ist auf 300 s gesetzt).
    Allerdings fehlt mir jetzt die Zeit, das mit allen bekannten Zeitservern durchzudeklinieren.

    Wo ist dein "großer Bruder"

    Siehe hier:
    http://www.wago.com/cps/rde/xchg/SID-99 ... u-3862.htm

    Thema:
    Sommer-/Winterzeitumstellung im Ethernet Controller 750-841
    bei Verwendung des SNTP-Protokolls, ZIP-Datei

    Gruß Karl

     
  • Wühlmaus - 2010-11-02

    Hallo Karl, (schön, dass du jetzt einen Namen hast )

    vielen Dank. Das hat geholfen - die Freischaltung von Port 123 für SNTP hatte gefehlt.

    Und wenn ich mal ganz viel Langeweile habe, implementiere ich auch noch die automatische Sommerzeitumstellung, aber da habe ich ja noch Zeit bis Ende März...

     
  • Wühlmaus - 2010-12-30

    Ich schon wieder ...

    Nachdem mit den zuvor erörterten Lösungen der Mailversand von der WAGO 750-841 nun zuverlässig funktioniert, wollte ich nun ein Attachment mit Daten hinzufügen. Ziel: die tägliche Statusmail mit History-Daten der letzten 24 h versehen, um sie offline auswerten (z.B. Zeitverläufe grafisch anzeigen) zu können.

    Zwei Wege führten nicht zum Ziel:
    1. zu übermittelnde Daten in eine Datei geschrieben und dann versucht, diese als Attachment an die Statusmail anzuhängen, indem ich den Aufruf des MAIL_ESMTP_Client um "sAttachmentFileName := 'TagesDaten.dat'" ergänzte. Ergebnis: Es wird zwar eine Datei mit dem gewünschten Namen angehängt, diese ist aber leer. Wenn ich hingegen in der CoDeSys-Umgebung die Datei manuell herunterlade (Online > Datei aus Steuerung laden), ist die Datei komplett. Leider ist manuelles Herunterladen keine Option für meine Anwendung.

    1. Statt wie zuvor die Daten über den Dateinamen anzusprechen, habe ich die Daten mit folgenden Parametern im MAIL_ESMTP_Client Aufruf spezifiziert
      ptAttachment := ADR(History.LongHistory) ,
      diAttachmentLength := SIZEOF(History.LongHistory) ,
      wobei LongHistory ein Array vom Typ HistoryElement ist, den ich zuvor als Datentyp definiert habe (mittels STRUCT). History ist das Programm (Typ PRG), in dem das Array definiert ist. Ergebnis: an die Email wird gar nichts angehängt.

    Versuche mit Verringerung des Datenvolumens auf wenige Bytes oder Verlagern des Arrays (VAR RETAIN) brachten auch keine Verbesserung.

    Was also mache ich jetzt schon wieder falsch ?

     
  • gravieren - 2010-12-30

    Wühlmaus hat geschrieben:
    Ich schon wieder ...

    Du schon wieder

    Wühlmaus hat geschrieben:
    1. zu übermittelnde Daten in eine Datei geschrieben und dann versucht, diese als Attachment an die Statusmail anzuhängen, indem ich den Aufruf des MAIL_ESMTP_Client um "sAttachmentFileName := 'TagesDaten.dat'" ergänzte. Ergebnis: Es wird zwar eine Datei mit dem gewünschten Namen angehängt, diese ist aber leer. Wenn ich hingegen in der CoDeSys-Umgebung die Datei manuell herunterlade (Online > Datei aus Steuerung laden), ist die Datei komplett. Leider ist manuelles Herunterladen keine Option für meine Anwendung.

    Hast du diese Datei geschlossen ? (fclose-befehl)

    Ansonsten kann KEIN Lesezugriff einer 2.ten Instanz erfolgreich sein.

    Wühlmaus hat geschrieben:
    2. Statt wie zuvor die Daten über den Dateinamen anzusprechen, habe ich die Daten mit folgenden Parametern im MAIL_ESMTP_Client Aufruf spezifiziert
    ptAttachment := ADR(History.LongHistory) ,
    diAttachmentLength := SIZEOF(History.LongHistory) ,
    wobei LongHistory ein Array vom Typ HistoryElement ist, den ich zuvor als Datentyp definiert habe (mittels STRUCT). History ist das Programm (Typ PRG), in dem das Array definiert ist. Ergebnis: an die Email wird gar nichts angehängt.
    Versuche mit Verringerung des Datenvolumens auf wenige Bytes oder Verlagern des Arrays (VAR RETAIN) brachten auch keine Verbesserung.
    Was also mache ich jetzt schon wieder falsch ?

    Ich denke, du kannst NUR eine Datei versenden.

    Mach doch mal einen Test.

    Schreibe eine Datei per FTP in deine Steuerung.
    Gib nun diesen Dateinamen an zum versenden.
    (Hiermit kannst du sicherstellen, dass die Datei von deinem SPS-Programm NICHT gesperrt wird)
    (Z.b.für das schreiben geöffnet ist)

    Wenn das klappt, rühre dich wieder.

     
  • Wühlmaus - 2010-12-30

    gravieren hat geschrieben:
    Hast du diese Datei geschlossen ? (fclose-befehl)
    Ansonsten kann KEIN Lesezugriff einer 2.ten Instanz erfolgreich sein.

    Ja.

    Hier der Code, der das File schreiben soll (WriteFile wird testweise durch einen Button in der Visu aktiviert):

    IF WriteFile THEN
       FileID:=SysFileOpen (FileName:='TagesDaten.dat', Mode:= 'w') ;              (* Rückgabewert 1 *)
       ByteCnt := SysFileWrite (File:=FileID, Buffer:=ADR(ShortHistory),SIZEOF(ShortHistory));    (* 7296 - könnte passen *)
       FileStatus := SysFileClose (File:= FileID);     (* TRUE, heißt angeblich "alles OK" *)
    END_IF
    

    Nachdem ich das jetzt nochmal probiert habe, lässt sich diese Datei auch manuell nicht mehr runterladen. (Dienstnummer: 49, Fehlernummer 80, aber die CoDeSys Hilfe kennt beide Begriffe nicht - tolle "Hilfe").

    Auch vorheriges Löschen des zu schreibenden Files bringt nichts (sollte eigentlich nicht nötig sein). "Alles bereinigen" bringt auch nichts. Jetzt suche ich noch nach dem Menüpunkt "Alles in die Tonne treten", und dann weiß ich was ich tue.

    gravieren hat geschrieben:
    Ich denke, du kannst NUR eine Datei versenden.

    Hmmm... warum bietet die WagoLibMail_02 dann die Alternative mit Pointer und Länge ? Aber egal, Datei wäre mir ja auch recht - nur gehen sollte es halt ...

    gravieren hat geschrieben:
    Mach doch mal einen Test.
    Schreibe eine Datei per FTP in deine Steuerung.
    Gib nun diesen Dateinamen an zum versenden.
    (Hiermit kannst du sicherstellen, dass die Datei von deinem SPS-Programm NICHT gesperrt wird)
    (Z.b.für das schreiben geöffnet ist)
    Wenn das klappt, rühre dich wieder.

    Ich weiß jetzt nicht recht wie das mit FTP geht - hab's mal mit dem Befehl "Online > Datei in Steuerung laden" probiert, unter anderem Namen. Das Hochladen geht, aber das Verschicken dieser Datei unter neuem namen schlägt fehl (leeres Attachment).

    Irgendwie scheine ich hier in ein schwarzes Loch zwischen CoDeSys und Wago gefallen zu sein.

     
  • gravieren - 2010-12-30

    Wühlmaus hat geschrieben:
    Ich weiß jetzt nicht recht wie das mit FTP geht

    Siehe hier geht es zur FTP-Hilfestellung:
    http://www.magnia.de/index.php?option=c ... &Itemid=44

    P.S.: Das mit der Datei erzeugen durch das PLC-Programm sollten wir etwas veschieben.

    Der Code hierfür ist nicht recht geeignet
    Das File-Schreiben werden wir erst später anschauen.
    (Kurze info hierzu; Flankensteuerung, State-Maschine)

    Gruß Karl

     
  • Wühlmaus - 2010-12-31

    Hallo Karl,

    gravieren hat geschrieben:
    Siehe hier geht es zur FTP-Hilfestellung:
    http://www.magnia.de/index.php?option=c ... &Itemid=44
    Vielen Dank für die Anleitung. Habe jetzt also meine Testdatei (kurzer Text, erzeugt im Windows Editor) per FTP hochgeladen, im PLC-Browser auch gefunden und dann per Email verschickt - gleiches Ergebnis: an der Email hängt ein leeres File mit dem richtigen Namen, aber der Länge 117 Bytes (so angezeigt in MS Outlook) bzw. 0 KB (so angezeigt im Windows Browser).

    Wie mir der Befehl "fds" des PLC-Browsers verrät, habe ich auf der Wago nicht mehr so schrecklich viel Speicherplatz (mit der nur 24 Byte langen Testdatei im Bauch sind es knapp 20 KB). Kann das ein Problem sein ?

    Das gleiche Ergebnis erhalte ich übrigens, wenn ich die Testdatei auf der Wago lösche und dann die Email versende. Das heisst, es wird beim Versenden gar nicht ernsthaft versucht, eine Datei zu finden und dranzuhängen, sondern die leere Dateihülle wird automatisch drangeklatscht, egal ob die spezifizierte Datei da ist oder nicht.

     
  • gravieren - 2010-12-31

    Hi

    Hast du den Dateinamen richtig angegeben ?

    Was sagt die Anleitung hierzu ?

    Die Neueste LIB von Wago wirst du ja schon verwenden ?

     
  • Wühlmaus - 2010-12-31

    gravieren hat geschrieben:
    Hast du den Dateinamen richtig angegeben ?
    Ja

    gravieren hat geschrieben:
    Was sagt die Anleitung hierzu ?
    Nix. Habe noch die Schreibweisen "alles klein" (wie Beispiel in Anleitung) und "alles groß" (wie's der PLC-Browser anzeigt) probiert => wieder nix.

    gravieren hat geschrieben:
    Die Neueste LIB von Wago wirst du ja schon verwenden ?
    Ja. Was neueres als WagoLibMail_02 finde ich bei Wago nicht.

    dann wünsche ich mal gutes Rutschen !

     
  • Wühlmaus - 2010-12-31

    Heijeijeijeijei !!!

    Jetzt habe ich in Beispiel 2 zur WagoLibMail_02 doch noch ein Beispiel fürs Versenden eines Attachments gefunden. Da stellt sich dann heraus, dass ich einfach zu logisch gedacht hatte. Habe gemeint, entweder man hat ein File vorliegen und gibt dann nur dessen Namen an oder man gibt direkt den Speicherbereich an, den man verschicken will (siehe die zwei vermeintlichen Alternativen in meinem Eingangsposting), dann könne man sich den Filenamen sparen.

    Nein, man braucht (also Gurt und Hosenträger). Die Daten müssen in einem Buffer stehen, der mit ptAttachment und diAttachmentLength spezifiziert wird. sAttachmentFileName braucht man zusätzlich - aber nicht um auf ein fixfertiges, nur noch anzuhängendes File zu verweisen, sondern lediglich um dem beim Aufruf des Mailhandlers sozusagen "on the fly" erzeugten Attachment einen Namen zu geben.

    Also Pappnase auf und ab ins Getümmel !

     

Log in to post a comment.