SMTP Baustein Network Lib Fehler

Begonnen von klaus1, 11. Mai 2011, 22:00:13

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 3 Gäste betrachten dieses Thema.

klaus1

Hallo!

Bekomme immer Fehler bei folgender Verwendung von SMTP_CLIENT in Beckhoff (Twincat):
ERROR_T = 2
ERROR_C = 16777216

Kann mir jemand erklären wie ich hier zum exakten Fehlertext komme?
Danke,
Klaus

peewit

#1
zuerst schaust du beim baustein smtp_client
dort steht

ERROR_T = 2   ist ein fehler beim SMTP Steuerkanal
ERROR_C findest du beim baustein IP_CONTROL


16777216 = 0x01000000 (immer als hex-wert betrachten !!)

das würde bedeuten das beim verbindungsversuch zum SMTP-Server (Email Server) der verbindungsaufbau nicht klappt
allerdings mit dem fehler 0x01 was ansich nicht logisch ist, da hier eine tcp und keine udp verbindung aufgebaut wird.


jetzt ist es schwierig zu erraten was du denn nun gemacht oder nicht gemacht hast !

hast du denn im ordner "demo" schon das demoprogramm "SMTP_CLIENT_DEMO" ausprobiert ?

kannst du eventuell dein test-programm posten
(email-zugangsdaten kannst du ja mit xxxx ersetzen)


klaus1

Ich habe den Twincat TCP/IP Server lokal an meinem Notebook installiert. dadurch die TcpIp.lib inkludiert im Projekt.
Auf der Seite der SPS (CX9001) ist kein Tcp/IP Server installiert. Ist dieser dort auch nötig?
Als DNS habe ich den DNS Server eingetragen den ich auch lokal bei mir am Notebook vom DHCP bekomme. (IP vom Router).
Gezwungen wurde ich, den Parameter FILES anzugeben, habe ich mit einem Leerstring gemacht.

peewit

tcp/ip server: den musst du auf jedenfalls auf deiner sps installieren
es reicht nicht die lib dem compiler vor die nase zu halten

damit wird auf der sps ein dienst (server) installiert, der diese funktionalitäten erst ermöglicht


klaus1

Das bedeutet lokal am Notebook unter WinXP wo meine Programmierumgebung läuft. (um TcpIp.lib einbinden zu können).
Und dann auf der SPS die TCP/IP Server CE Version damit auch die Steuerung weis was zu tun ist?

danke,

peewit

also meines wissens nur das paket für tcp/ip-server für sps, jedoch wird alles andere automatisch mitinstalliert

klaus1

so nun habe ich den TCP/IP Server unter CE installiert. dann neu gestartet. und folgendes Bsp. Programm probiert:

PROGRAM EMailAlerts
VAR
SMTP_CLIENT: SMTP_CLIENT;
smtp_activate: BOOL;
smtp_timeout: TIME := T#30s;
smtp_busy: BOOL;
smtp_done: BOOL;
smtp_dti: DT;
smtp_dti_offset: INT := 60;
smtp_server: STRING := '97xx85:meinKennwort@mail.gmx.net';
smtp_mailfrom: STRING := 'klaus.xxxxx@gmx.at;Station_01';
smtp_mailto: STRING(STRING_LENGTH) := 'klaus.xxxxx@gmx.at';
smtp_subject: STRING :=  'Das Garagentor wurde soeben geöffnet.';
smtp_body: STRING(STRING_LENGTH) := 'Das ist der Email-Text';
smtp_files: STRING(STRING_LENGTH) := '';
smtp_error_t: BYTE;
smtp_error_c: DWORD;
END_VAR

// PROGRAMMTEIL
SMTP_CLIENT.ACTIVATE := _i_b_EGBuero_Button_ob;
SMTP_CLIENT(SERVER := smtp_server, MAILFROM := smtp_mailfrom, MAILTO := smtp_mailto, SUBJECT := smtp_subject, BODY := smtp_body, FILES := smtp_files, DNS_IP4 := IP4_DECODE('10.0.0.138'));
          smtp_error_c := SMTP_CLIENT.ERROR_C;
smtp_error_t := SMTP_CLIENT.ERROR_T;



Fehler:
ERROR_T = 2
ERROR_C = FF00

peewit

der fehler bedeutet das
bei der kommunikation mit dem smtp-server beim datenempfang zu einen timeout kommt

hast du nun das beispiel-programm in der network.lib\demo\smtp_client_demo ausprobiert
ich habe es genau zu diesen zweck gemacht, um systemprobleme von anwender fehler unterscheiden zu können
dieses beispiel-programm ist voll funktionsfähig

du musst dort nur die ip des dns-server anpassen, ansonsten sollte es ohne fehler durchlaufen !

solange das nicht funktioniert, kann dein eigenen programm sowieso nicht funktionieren


noch dazu sind solche code-schnippsel immer mit vorsicht zu geniessen, da es immer viele andere ursachen haben kann....

so wie ein nicht installierte tcp/ip server auf ce
da kann man lange ein problem im code suchen, wenn dann aber ganz andere fehler gemacht wurden

eine wirkliche fehlereingrenzung kann man dann nur machen, wenn man im code sich gut auskennt, oder man macht einen wireshark (etherreal) mitschnitt zur analyse, denn hier kann man 100% erkennen wo was nicht funktioniert..

klaus1

und wie kann ich auf meiner CX9000 das ganze testen? hab das ganze haus dran hängen. (alles in ST).
Hätte mal versucht SMTP_CLIENT_DEMO(); aus dem Main zu starten. hier kann ich keine Werte wie DNS oder so ändern.
mein beispiel ist exakt nachprogrammiert in ST.

peewit

so ich habe dein testprogramm genommen , habe den oscat-test email-account benutzt und die dns-adresse angepasst
und es hat funktioniert !

siehe anhang
SMTP_CLIENT.DONE = TRUE ohne Error !


[gelöscht durch Administrator]

klaus1

gut. dann fass ich mal zusammen was ich bisher gemacht habe:
Ich habe von der Beckhoff Seite den TCP / IP Server für WinCE runtergeladen und installiert.
Das File unter C:\Twincat\CE\TCPIP am WinCE Rechner installiert:
TcTCPIPSvrCe.ARMV4I.CAB

Habs direkt auf \HardDisk\TCPIPServer installiert.
Nach dem Neustart des CE Rechners (CX9000). dann unter \Hard Disk\System eine TcpIpServer.exe lt. Doku sollte diese ja automatisch beim Start ab sofort mitgestartet werden.
Kann ich das irgendwie überprüfen?

Mein WinCE Rechner hängt am Router mit IP 10.0.0.100. Router IP: 10.0.0.138.
Als DNS habe ich daher 10.0.0.138 genommen, da dieser Router auch als DHCP im Einsatz ist, und zugleich ein Modem ist.

Vielleicht hat jemand eine Idee was hier schief läuft.
Danke,
Klaus

peewit

das routing kannst du zumindest mal relativ einfach testen

auf deinem ce-gerät öffnest du die "cmd" shell
und machst einen ping test auf einen internet-server

www.gmx.de. = IP 213.165.64.74

siehe bild


[gelöscht durch Administrator]

peewit

tcp/ip server installation prüfen

gehe auf dem ce-gerät auf "control-panel" -> remove programm
dann bekommst du ein fenster mit installieren programmen



[gelöscht durch Administrator]

klaus1

Hallo,

Danke für die Tipps.
Beides getestet => Beides positiv verlaufen.
Kann es sein, dass ich einen falschen DNS Server verwende? Hätte mal den vom Provider probiert. klappt auch nicht.

Ethereal hab ich am Notebook sogar installiert. aber Wird schwierig zwischen CX9000 und Router reinzuklinken. außer mit ARP spoofing könnts klappen.

peewit

#14
laut fehlermeldung gibt es ja probleme bei der kommunikation mit dem mail-server
also mit einer tcp-verbindung

die dns-abfrage(udp-datenverkehr) dürfte funktionieren
du kannst ja mal in den baustein im status reinschauen ob beim dns_client eine sinnvolle dns-ip-adresse
als ergebnis zurückkommt..

wenn ja, dann solltest du mal einen dns-server aus dem internet benutzen (nicht den lokalen router als dns-server)
wenn das dann nicht mehr geht, dann gibts probleme beim gateway bzw. beim routen


tja das einfachste wäre halt etherreal, dann würden wir gleich sehen was da wirklich passiert
hast du keinen alten hub irgendwo rumliegen, oder switch mit port-spiegelung, oder eine fritzbox als router ?