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
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)
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.
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
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,
also meines wissens nur das paket für tcp/ip-server für sps, jedoch wird alles andere automatisch mitinstalliert
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
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..
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.
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]
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
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]
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]
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.
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 ?
Hallo,
Hab jetzt einen Taster am Active dran. wenn ich den kurz drück, dann sehe ich jetzt über HUB und Wireshark die DNS Abfrage:
35 0.529362 10.0.0.100 195.3.96.67 DNS Standard query A mail.gmx.net
und den response:
120 3.453888 195.3.96.67 10.0.0.100 DNS Standard query response A 213.165.64.20 A 213.165.64.21
das wars dann aber auch schon wieder.
es folgt sonst kein Datentransfer...
Soeben gelöst:
- Umlaute im Betreff und Body entfernt
- Server direkt über IP von mail.gmx.net angegeben.
jetzt klappts!
Danke für den netten und schnellen Support.
PS: SSL Connections klappen leider nicht:
Meldung vom SMTP: smtp must issue a starttls command first
was ich noch bemerkt habe:
- geht mein Modem mal längere Zeit Offline und später wieder online, so habe ich einen FF00000 fehler am Baustein stehen den ich nur durch Restart der Steuerung wegbekomme...
muss man im Fehlerfall doch was manuell zurücksetzen?
Danke,
Klaus
du musst manuell gar nichts machen
der fehler bedeutet das der verbindungsaufbau (vermutlich tcp-verbindung) nicht erfolgreich war bzw. timeout fehler kam.
an welcher stelle nun aber das eigentliche problem liegt, ist mir noch nicht klar..
es kann auch sein das der tcp-server (beckhoff) die tote tcp-verbindung nicht bemerkt, bzw, der interne verbindungstimeout sehr lange braucht
um die tote verbindung zu eliminieren
wir schliessen jedoch normalerweise immer nach einen timeout den socket
ich werde mal das ausprobieren.....
kannst du deine testbedingungen mal näher beschreiben
welchen baustein nutzt du
wann fällt die verbindung aus
etc...
Ich verwendet nur die SMTP Sende Routine der Network Lib.
Was ich bemerkt habe:
Wenn ich im SMTP_CLIENT Baustein im IP_C einen Error anstehen habe, und danach dem TIME_RESET kurz einen Pos. Boolean gebe, dann klappt wieder alles.
(Im Debug Modus manuell den BOOLEAN setzen).
Hätte das so probiert:
IF smtp_client.IP_C.ERROR <> 0 THEN
SMTP_CLIENT.IP_C.TIME_RESET := TRUE;
END_IF
Fehlermeldung Twincat:
Operanden von 'ST', 'STN', 'S','R' müssen Variable mit Schreibzugriff sein. (Tritt genau in der Zeile auf wo ich das ganze auf TRUE setze.
Bitte um Hilfe.
danke,
Klaus
hallo
ganz verstanden habe ich es noch nicht ....
es wäre immer gut , zu beschreiben
was wann wie passiert ist
und bekommst du eine fehlermeldung, wenn ja welche
machst du den reset online über smtp.ip_c.time_reset ?
den code was du probiert hast, wohin schreibst du den ?
ist das innerhalb es smtp_client oder ausserhalb
(sieht aus wie von aussen )
wenn es ausserhalb ist, dann wird dein problem sein, das die bausteinkapselung dir keinen
schreibzugriff von aussen gewährt !
mir ist noch nicht klar, wodurch bei dir das ausgelöst wird
ist es eine ausfallende routerverbindung, oder was anderes ?
zum testen ist im anhang die networb.lib 1.20 (wird bald freigegeben)
du habe ich bezüglich timeout probleme etwas verändert
ob es dein problem löst kann ich noch nicht sagen
[gelöscht durch Administrator]
oben genannter code von mir wird online gemacht über smtp.ip_c.time_reset auf TRUE setzen. genau
Der Code von oben hängt direkt in meiner Routine drinnen wo ich auch SMTP anwende. d.h. von außen!
Du hast recht, die Bausteinkapselung gibt mir keinen Schreibzugriff.
Ausgelöst wird der Fehler dadurch, wenn mein Router offline geht, und nicht von selbst wieder online kommt. (Muss den Router öfters resetten).
Wird in der "offline" Phase ein Mail versandt, kommt es zu dem Fehler, der nach Online Beginn nicht wieder behoben werden kann.
Die Lib werde ich demnächst testen.
Danke,
Klaus
lib getestet! Meine probleme sind weg. Danke!
Hallo,
habe auch mal das Demo "SMTP_CLIENT_DEMO" aus der beckhoff_network_120.lib versucht.
Bei direkter Angabe des Email-Servers über die IP gehts,
bei Angabe des Email-Servers über Text "mail.gmx.net" gibts Fehler FF00,
Hat jemand von euch nee Idee, wo man noch was einstellen muß?
Eine weitere Frage ist: Muß man eigentlich für die Network-Bausteine bestimmte Ports freigeben?
Noch eine Frage: Wo wird den folgender Parameter definiert "STRING_LENGTH"?
[gelöscht durch Administrator]
hallo
1. du verwendest network.lib 1.20
2. du verwendest das original demo programm "SMTP_CLIENT_DEMO"
3. du hast bei parameter DNS_IP4 einen echten dns-server angegeben
4. du hast bei den sps-settings eine korrekte gateway adresse angegeben
wenn die direkte ip geht, und sonst nicht , dann gibt es ein problem mit dem dns-server
was wird dort dem baustein übergeben ?
dem demo dns-ip4 wird bei dir zu 99% nicht funktionieren
bei fehler bitte immer
"error_t" und "error_c" mit angeben, sonst kann man den genauen fehler nicht feststellen
Hallo peewit,
1.-4. sind das jetzt Fragen oder Feststellungen?
Zitatbei fehler bitte immer
"error_t" und "error_c" mit angeben, sonst kann man den genauen fehler nicht feststellen
=> hab ich doch, siehe Bild!!!
hallo
Zitatwenn die direkte ip geht, und sonst nicht , dann gibt es ein problem mit dem dns-server
=> Wo kann ich den bestimmte Einstellungen kontrollieren?
Zitatwas wird dort dem baustein übergeben ?
=> Wo?
Zitatdem demo dns-ip4 wird bei dir zu 99% nicht funktionieren
=> Warum?
hallo
error_t , error_c , das habe ich übersehen das bedeutet das an dieser ip-adresse kein dns-server ist, der antwortet
das kann eine sinnlose ip-adresse sein, aber auch ein nicht vorhandene oder falsche gateway adresse
beim smtp_client musst du beim parameter DNS_IP4 die adresse des dns_servers angeben das kann meistens die adresse des routers sein, oder du nimmst z.b. 8.8.8.8
(google-dns)
die gatewayadresse musst du bei den netzwerkeinstellungen eintragen (setup der sps) bzw. wenn du dhcp oder bootp nutzt kannst du das damit machen, ansonsten manuell einstellen
die demo dns_ip4 ist wahrscheinlich auf 192.168.0.1 (fritzbox router im lan) eingestellt, was (unglücklich gewählt ist) das solltest du auf deinen dns_server anpassen
Hallo,
Zitatdie demo dns_ip4 ist wahrscheinlich auf 192.168.0.1 (fritzbox router im lan) eingestellt, was (unglücklich gewählt ist) das solltest du auf deinen dns_server anpassen
=> Wer ist eigentlich mein dns_server, nicht die FritzBox?
Danke für die Antworten
nicht alle haben eine fritzbox als router, somit ist es nicht optimal wenn im demo programm kein allgemein gültiger dns_server
angegeben ist
wenn du eine fritzbox hast, und die router-adresse ebenfalls 192.168.178.1 ist, dann solltest du auch damit kein problem haben
Wie kann ich die Priorität auf "HOCH" einstellen ? Gibts dazu möglichkeiten?
danke,
priorität hoch ?
von was
und warum willst du das einstellen
Moin,
ich denke er meinte die Priorität der Email damit ein rotes Ausrufezeichen im Outlook o.ä. erscheint.
ich denke das diese priorisierung kein bestandteil der smtp basis ist
momentan ist mir nicht klar durch was man das mitteilen kann
hier müssten wir mal untersuchungen anstellen , wie das funktioniert ....
Habe das nur eben Überlfogen:
http://office.microsoft.com/de-at/outlook-help/hervorheben-wichtiger-e-mail-nachrichten-mit-prioritatskennzeichen-HA001192162.aspx
Denke mal kann an den Clients einstellen das PRIO"hoch" in einen bestimmten Ordner kommt und das dann den User signalisiert er muss das lesen!
Eigentlich NonSense!
Hallo!
Ich habe auch das Problem, dass ich nur mails versenden kann, wenn ich die IP-Adresse von mail.gmx.net-Server angebe (z.B. 213.165.64.20). Bei Verwendung des Namens "mail.gmx.net" bekomme ich die Fehlermeldungen ERROR_T=1 und ERROR_C=FF00
Ich habe den google.dns ( 8.8.8.8 ) als DNS_IP4 eingetragen. Ich habe testweise auch auf der Beckhoff CX diesen DNS angegeben und konnte dann von der CX problemlos mail.gmx.net pingen. Dann müsste die IP doch eigentlich auch aus der SPS-Runtime heraus richtig aufgelöst werden, oder?
lG
so pauschal ist es schwierig hier zu antworten
1. der fehler bedeutet das keine korrekte antwort empfangen bzw erkannt wurde !
2. welche programmiersoftware/sps-hardware verwendest du
3. welche lib versionen verwendest du (basic , network version)
4. welche netzwerkeinstellungen werden seitens der sps verwendet
5. was ist dein internetzugang, und wie angebunden
6. stelle ein kleines testprogramm online, bei dem es nicht funktioniert, dann kann ich damit testen
optional könntest du dein testprogramm auf eine DNS_CLIENT Abfrage reduzieren
denn das sollte eigentlich auch schon nicht funktionieren
7. optimal wäre noch ein wireshark mitschnitt vom datenverkehr
ad 2.) ich verwende TwinCAT mit einer CX9001
ad 3.) OSCATBasic v.3.33 / OSCATNetwork 1.21
ad 4.) SPS hat fixe IP-Adresse und Gateway eingetragen (testweise auch 8.8.8.8 als DNS)
ad 5.) SPS hängt auf einem UMTS-Router
ad 6.) Testprogramm muss ich nicht hochladen, da ich das selbe Verhalten auch mit der SMTP_CLIENT_DEMO habe
aus dem DNS_CLIENT FB bin ich irgendwie nicht schlau geworden. Ich habe ihn getestet, allerdings bekomme ich kein Ergebnis - weder DONE wird true noch ändert sich der ERROR-Zustand
ad 7.) kann ich derzeit nicht anbieten, da ich keinen HUB zur Verfügung habe
An den Einstellungen des Routers kann es auch nicht liegen, da ich mit den selben Einstellungen (Fixe IP, Gateway, DNS 8.8.8.8 ) von meinem Laptop über diesen Router mittels Outlook und den selben SMTP-Einstellungen Mails absetzen kann.
hallo
den dns_client baustein musst du mit einer ip_control instanz verbinden , ansonsten passiert gar nichts
(der smtp-baustein hat diesen schon includiert)
probeweise kannst du mal als smtp-server z.b. "www.oscat.de" nehmen
man kann zumindest sehen ob dann dieser dns-namen aufgelöst werden kann
dann sollte auch eine andere fehlermeldung austauchen
alternativ könntest du noch andere udp_client bausteine probieren
wie z.b. SNTP_Client, un zu sehen ob es ein prinzipielles problem seitens udp telegrammen gibt.
ansonsten sind keine neuen informationen dabei, damit ich die unmittelbar noch tips geben kann
habe den DNS_CLIENT Baustein jetzt richtig mit dem IP_CONTROL verwendet un bekomme die selbe Fehlermeldung FF00.
Daher brachte auch die Änderung des SMTP-Server Namens wieder die selbe Fehlermeldung.
Was ich nicht verstehe ist, dass direkt unter WinCE auf der CX die DNS-Namen richtig aufgelöst werden --> es funktioniert z.B. auch der Aufruf aus dem Internet-Explorer.
das sind zwei paare schuhe
die sps kann zb ohne die nachträgliche installation der tcp-server ce bibliothek überhaupt nicht auf das netzwerk zugreifen
dadurch ist hier noch eine zusätzliche abstraktionsschicht vorhanden
dns abfrage wird beim ping , explorer etc vom betriebssystem übernommen
in unserem fall machen wir die komplette dns-abfrage nur über die sps (baustein dns_client)
und nutzen keinen code vom betriebssystem !
hier sind wiederum zwei völlig verschiedene programme am arbeiten
was du aber machen könntest ist das du als dns-server deinen arbeits-pc angibst, und diesen dann wireshark laufen lässt
dann müsstest du zumindest die dns-anfrage sehen
wenn nicht, dann gibt es ein schwerwiegendes problem, das gar nichts nach aussen gelangt
hallo,
nach längerer zeit habe ich mich jetzt wieder mit der dns_client geschichte beschäftigt. inzwischen habe ich mit den ip-adressen gearbeitet.
habe jetzt als test mal die ip-adresse meines arbeits-pcs als dns-adresse angegeben (10.10.100.66) und in wireshark mitgeschnitten.
wie man im anhang sehen kann, scheint als source-adresse 192.168.0.1 auf.
der beckhoff cx9001 hat ja 2 netzwerk-controller. der 1. controller hat die ip-adresse 10.10.100.1, auf welchem auch die generelle daten-kommunikation abläuft. der 2. controller hat eben die 192.168.0.1, welcher aber nur für die ethercat-kommunikation dienen sollte. aus irgendeinem grund versucht der dns_client die abfrage über den 2. controller durchführen zu wollen, was natürlich nicht funktioniert - aufgrund des ip-ranges wäre es normalerweise logisch, dass der controller 1 verwendet wird.
wenn ich statt des domain-namens die ip eingebe, kommt vom nachfolgenden baustein (in diesem fall http_get) der aufruf auch richtigerweise von 10.10.100.1!
kann man das verhalten irgendwie beeinflussen?
lG
Roland
[gelöscht durch Administrator]
hallo
habe ich dich richtig verstanden
die dns abfrage per udp-protokoll auf zielport 53 wird über netzwerk-controller 2 durchgeführt
die http abfrage per http-protokoll auf ziel port 80 wird über netzwerk-controller 1 durchgeführt
(zumindest der quell-ip nach , dürfte es so sein)
genau so sieht es aus!
die ethernet kommunikation läuft über den installierten TCP/IP Connection Server
ich habe schon vielleicht mögliche ursache und lösung entdeckt
gib mir zeit bis zum wochenende dann kann ich dir eventuell eine test-version geben.....
super - wäre sehr dankbar für eine lösung!
gibts schon irgendwas neues zu meinem problem mit dem dns_client?
lG
Roland
hallo
du musst die im anhang befindlichen elemente in deine oscat_network lib importieren
danach gibt es in der bibliothek unter globalen variablen neue einträge
sLocalHost : STRING(15) := ''; (* Die lokale IP-Adresse des Sockets als String (z.B.: '172.33.5.1'). Für den Default-Netzwerkadapter kann auch ein Leerstring angegeben werden *)
du musst bevor die die ethernet bausteine benutzt bzw. aufrufst bei der globalen variable "sLocalHost" deinen Netzwerkadapter angeben, den du zwingend benutzen möchtest.
am einfachsten ist, wenn du in deinem anwenderprogramm an erster stelle folgende zeile einfügst (natürlich mit deiner gewünschten Adresse)
sLocalHost := '192.168.0.1'
da ich keine steuerung mit zwei netzwerk-karten habe, habe ich es noch nicht testen können
probiere es aus, und gib bitte bescheid, wie deine ergebnisse ausgefallen sind
[gelöscht durch Administrator]
hallo peewit,
habe die änderungen grade ausprobiert --> ES FUNKTIONIERT!
vielen dank für die rasche erledigung!
lG
hallo
freut mich das dein problem beseitigt ist
dieser patch wird in der nächsten beckhoff-network-release fix integriert sein
und es wird einen hinweis in der network-dokumentation geben