Hinweise zur Dokumentation

Diese Beschreibung wendet sich ausschließlich an ausgebildetes Fachpersonal der Steuerungs- und Automatisierungstechnik, das mit den geltenden nationalen Normen vertraut ist.
Zur Installation und Inbetriebnahme der Komponenten ist die Beachtung der nachfolgenden Hinweise und Erklärungen unbedingt notwendig.

Das Fachpersonal hat sicherzustellen, dass die Anwendung bzw. der Einsatz der beschriebenen Produkte alle Sicherheitsanforderungen, einschließlich sämtlicher anwendbaren Gesetze, Vorschriften, Bestimmungen und Normen erfüllt.

Disclaimer

Diese Dokumentation wurde sorgfältig erstellt. Die beschriebenen Produkte werden jedoch ständig weiter entwickelt.
Deshalb ist die Dokumentation nicht in jedem Fall vollständig auf die Übereinstimmung mit den beschriebenen Leistungsdaten, Normen oder sonstigen Merkmalen geprüft.
Falls sie technische oder redaktionelle Fehler enthält, behalten wir uns das Recht vor, Änderungen jederzeit und ohne Ankündigung vorzunehmen.
Aus den Angaben, Abbildungen und Beschreibungen in dieser Dokumentation können keine Ansprüche auf Änderung bereits gelieferter Produkte geltend gemacht werden.

Marken

Beckhoff®, TwinCAT®, EtherCAT®, Safety over EtherCAT®, TwinSAFE®, XFC® und XTS® sind eingetragene und lizenzierte Marken der Beckhoff Automation GmbH.
Die Verwendung anderer in dieser Dokumentation enthaltenen Marken oder Kennzeichen durch Dritte kann zu einer Verletzung von Rechten der Inhaber der entsprechenden Bezeichnungen führen.

Patente

Die EtherCAT Technologie ist patentrechtlich geschützt, insbesondere durch folgende Anmeldungen und Patente:
EP1590927, EP1789857, DE102004044764, DE102007017835
mit den entsprechenden Anmeldungen und Eintragungen in verschiedenen anderen Ländern.

Die TwinCAT Technologie ist patentrechtlich geschützt, insbesondere durch folgende Anmeldungen und Patente:
EP0851348, US6167425 mit den entsprechenden Anmeldungen und Eintragungen in verschiedenen anderen Ländern.

Copyright

© Beckhoff Automation GmbH & Co. KG, Deutschland.
Weitergabe sowie Vervielfältigung dieses Dokuments, Verwertung und Mitteilung seines Inhalts sind verboten, soweit nicht ausdrücklich gestattet.
Zuwiderhandlungen verpflichten zu Schadenersatz. Alle Rechte für den Fall der Patent-, Gebrauchsmuster- oder Geschmacksmustereintragung vorbehalten.


TwinCAT SMS/SMTP Server - Übersicht

TS6350 | TwinCAT SMS/SMTP Server

Übersicht

SMS Server:

Der TwinCAT SMS Server dient zum Verschicken von SMS Nachrichten mit TwinCAT über ein GSM Modem.
Das Produkt besteht aus zwei Hauptkomponenten:

  1. TwinCAT SPS Bibliotheken: SMS / SMS BC (ermöglichen das Versenden der SMS-Nachrichten direkt aus der SPS)
  2. TwinCAT ADS Gerät: SMS COM Server (ermöglicht das Versenden der SMS-Nachrichten über ADS (z.B. aus einer Visual Basic Applikation)

SMTP Server:

Der TwinCAT SMTP Server dient zum Verschicken von E-Mail Nachrichten mit TwinCAT über ADS. Eine ausführliche Dokumentation finden Sie hier.


Übersicht

Der TwinCAT SMS Server dient zum Verschicken von SMS Nachrichten mit TwinCAT über ein GSM Modem.
Das Produkt besteht aus zwei Hauptkomponenten:

  1. TwinCAT SPS Bibliotheken: SMS / SMS BC (ermöglichen das Versenden der SMS-Nachrichten direkt aus der SPS)
  2. TwinCAT ADS Gerät: SMS COM Server (ermöglicht das Versenden der SMS-Nachrichten über ADS (z.B. aus einer Visual Basic Applikation))


SMS Bibliothek: Übersicht

TS6350 | TwinCAT SMS/SMTP Server

Übersicht

Die TwinCAT SMS Bibliotheken enthalten einen Baustein zum Verschicken von SMS Nachrichten direkt aus der SPS. Die SMS Bibliothek basiert auf der 'Serial Communication'-Bibliothek. Damit ist es möglich, die serielle Schnittstelle des PCs und die serielle Klemme (KL6xxx) gleichartig anzusprechen. Nähre Informationen dazu befinden sich in der Dokumentation zur 'Serial Communication' Bibliothek.

Produkteigenschaften:

  • Versenden einer SMS über ein GSM Modem direkt aus der TwinCAT SPS
  • Das GSM Modem kann über ein serielles Datenkabel an die serielle Schnittstelle des TwinCAT PC's oder an die seriellen Klemmen KL6xxx angeschlossen werden
  • Versenden von SMS Nachrichten bis zu 160 Zeichen
  • Verfügbar für PC und BC (Bus Controller)

Systemvoraussetzungen:

  • Installiertes TwinCAT System: Installationslevel: TwinCAT PLC oder höher
  • TwinCAT SPS-Laufzeitsystem auf dem PC oder BC
  • Ein geeignetes GSM Modem mit Datenkabel

Unterstützten Geräte:

  • Westermo GS-01 (Kommunikationsparameter: 9600 Baud, 8 Datenbits, kein Paritätsbit, ein Stopbit)
  • Siemens S35i (Kommunikationsparameter: 19200 Baud, 8 Datenbits, kein Paritätsbit, ein Stopbit)
  • Nokia 6210 (Kommunikationsparameter: 19200 Baud, 8 Datenbits, kein Paritätsbit, ein Stopbit)
  • Maestro 100 (Kommunikationsparameter: 9600 Baud, 8 Datenbits, kein Paritätsbit, ein Stopbit)

Folgende SPS-Bibliotheken werden während der Installation in den ..\TwinCAT\PLC\LIB-Ordner hineinkopiert:

  • TcPlcSMS.Lib (SMS-Bibliothek für das PC-Laufzeitsystem)
  • TcPlcSMSBC.lb6 (SMS-Bibliothek für das BC-Laufzeitsystem)
  • COMlib.lib, COMlibBC5B.lb6, COMlibBCext.lb6, ChrAsc.Lib und ChrAsc.obj (Serial Communication Bibliothek für PC und BC)
  • COMlibV2.lib, COMlibV2lb6 (Serial Communication Bibliothek für PC und BC v2.0 ). Nur TwinCAT SMS Server v2.0 und höher!


SendSMS

TS6350 | TwinCAT SMS/SMTP Server

FUNCTION_BLOCK SendSMS

Mit dem Funktionsbaustein SendSMS wird eine SMS über ein angeschlossenes GSM Modem verschickt. Der Funktionsbaustein basiert auf der 'Serial Communcation' Bibliothek.

Da der Baustein nur über die ComBuffer Struktur der 'Serial Communcation' Bibliothek kommuniziert ist er instanziierbar und auf jede Art von serieller Schnittstelle anwendbar.

VAR_INPUT

Send             : BOOL;
Number          : String;
Text            : String(160);

Send: Über eine positive Flanke an diesem Eingang wird der Baustein aktiviert.

Number: Anzuwählende Telefonnummer im nationalen Format (z.B.: 0170123456)

Text: Die zu verschickende SMS Nachricht

VAR_OUTPUT

Busy             : BOOL;
Error           : INT;

Busy: Bei der steigenden Flanke des Send Eingangs wird dieser Ausgang gesetzt und bleibt gesetzt, bis die SMS and das Modem übermittelt wurde oder ein Fehler aufgetreten ist.

Error: Sollte ein Fehler bei der Übertragung der SMS auftreten, wird der Busy Ausgang zurückgesetzt und am Error Ausgang liegt ein Fehlercode an.

Fehlercode | Bedeutung | Ursache
0 | Kein Fehler | Die SMS wurde erflogreich übertragen.
1 | Keine Kommunikation zum Modem möglich. | Ist die Klemme korrekt konfiguriert? Wird die passende ComLib Bibliothek verwendet?
2 | Modem meldet Fehler beim Konfigurieren. | Ist ein kompatibles GSM Modem angeschlossen?
3 | Modem kann SMS nicht verschicken. | Ist die SIM Karte in Ordnung? Kann die Karte ohne Eingabe der PIN verwendet werden? Hat das Modem eine Verbindung zum Netzt? Ist ein kompatibles Modem angeschlossen?
4 | Kommunikationsfehler. | Ist die richtige Übertragungsgeschwindigkeit eingestellt?

VAR_IN_OUT

RXbuffer         : ComBuffer;
TXbuffer                : ComBuffer;

RXbuffer: Struktur für die Kommunikation mit der seriellen Schnittstelle. Ein schnittstellenspezifischer Baustein der 'Serial Communcation' Bibliothek füllt diesen Buffer mit den Daten der Schnittstelle.

TXbuffer: Struktur für die Kommunikation mit der seriellen Schnittstelle. Ein schnittstellenspezifischer Baustein der 'Serial Communcation' Bibliothek überträgt die Daten dieses Buffers an die Schnittstelle.

Diese Strukturen und ihre Verwendung sind in der Dokumentation der 'Serial Communcation' Bibliothek näher beschrieben. Der SendSMS Baustein wird dabei wie ein SendString oder ReceiveString Baustein angeschlossen.

Entwicklungsumgebung | Zielplattform | Einzubindende SPS-Bibliotheken
TwinCAT v2.7.0 und höher | PC (i386) | TcPlcSMS.Lib, ChrAsc.Lib, COMLib.Lib, Standard.Lib, PlcHelper.Lib
TwinCAT v2.8.0 und höher | PC (i386) | TcPlcSMS.Lib, ChrAsc.Lib, COMLib.Lib, TcSystem.Lib, ( Standard.Lib; TcBase.Lib; werden automatisch eingebunden )
TwinCAT v2.7.0 und höher | BCxxxx (165) | TcPlcSMSBC.Lb6, Standard.Lb6, PlcHelperBC.Lb6, ChrAsc.Lb6, COMLibBC5B.Lb6


Get_TcPlcSMS_Version

TS6350 | TwinCAT SMS/SMTP Server

FUNCTION Get_TcPlcSMS_Version

Mit dieser Funktion können Versionsinformationen der SPS-Bibliothek ausgelesen werden.

FUNCTION Get_TcPlcSMS_Version: STRING(20)

VAR_INPUT

bGet : BOOL;

bGet: Dieser Parameter hat für die Funktionsausführung keine Bedeutung und kann beliebig gesetzt werden.

Der Rückgabeparameter ist ein String (z.B.: "2.000.000" ).

Entwicklungsumgebung | Zielplattform | Einzubindende SPS-Bibliotheken
TwinCAT v2.7.0 und höher | PC (i386) | TcPlcSMS.Lib, ChrAsc.Lib, COMLib.Lib, Standard.Lib, PlcHelper.Lib
TwinCAT v2.8.0 und höher | PC (i386) | TcPlcSMS.Lib, ChrAsc.Lib, COMLib.Lib, TcSystem.Lib, ( Standard.Lib; TcBase.Lib; werden automatisch eingebunden )


Get_TcPlcSMSBC_Version

TS6350 | TwinCAT SMS/SMTP Server

FUNCTION Get_TcPlsSMSBC_Version

Mit dieser Funktion können Versionsinformationen der SPS-Bibliothek ausgelesen werden.

FUNCTION Get_TcPlcSMSBC_Version: STRING(20)

VAR_INPUT

bGet : BOOL;

bGet: Dieser Parameter hat für die Funktionsausführung keine Bedeutung und kann beliebig gesetzt werden.

Der Rückgabeparameter ist ein String (z.B.: "2.000.000" ).

Entwicklungsumgebung | Zielplattform | Einzubindende SPS-Bibliotheken
TwinCAT v2.7.0 und höher | BCxxxx (165) | TcPlcSMSBC.Lb6, Standard.Lb6, PlcHelperBC.Lb6, ChrAsc.Lb6, COMLibBC5B.Lb6


Verschicken einer SMS mit Funktionsbaustein auf PC über die serielle Schnittstelle des PCs

Quelltext: TcPlcSMSPCTest.exe (nicht vergessen die Telefonnummer zu ändern)

Aufgabe

Einfaches Programm, das mit dem SMS Funktionsbaustein auf einem PC eine SMS über dessen serielle Schnittstelle verschickt.

Beschreibung

Wie in der Dokumentation zur 'Serial Communication' Bibliothek beschreiben, wird in einer schnellen Task die serielle Schnittstelle bedient, während das verschicken der SMS Nachricht in einer langsameren Task erfolgt.

Mit der steigenden Flanke des Send Eingangs wird das Verschicken initiiert. An der Busy Variablen ist zu erkennen, wann die SMS Nachricht an das Modem übertragen wurde.

Konfiguration im System Manager

Für die Ansteuerung der seriellen Schnittstelle muss diese im Systemmanager als E/A Gerät eingefügt werden. Die Schnittstelle muss für den KL6xx1 Betrieb mit 64 Datenbytes konfiguriert werden. Die Eingänge und Ausgänge des COM Port Geräts müssen dann mit den Variablen des SPS Programms (SerInData und SerOutData) verbunden werden.

Implementation des Programms in der langsamen Task zum Verschicken der SMS

Implementation des Programms in der schnellen Task zum Bedienen der seriellen Schnittstelle

Globale Variablen

Task Konfiguration


Verschicken einer SMS mit Funktionsbaustein auf BC über KL6001

Quelltext: TcPlcSMSBCTest.exe (nicht vergessen die Telefonnummer zu ändern)

Aufgabe

Einfaches Programm, das mit der dem SMS Funktionsbaustein auf einem BC9000 eine SMS über die serielle Klemme KL6001 verschickt.

Beschreibung

Die serielle Schnittstelle wird zunächst mit dem KL6Init Baustein initialisiert.

Danach kann mit der steigenden Flanke Send Eingangs das Verschicken initiiert werden.

Implementation


SMS COM Server: Übersicht

TS6350 | TwinCAT SMS/SMTP Server

Übersicht

TwinCAT ADS Gerät: SMS COM Server ist ein Software Treiber, der SMS Nachrichten über ein GSM Modem verschicken kann. Der SMS COM Server kann, da es sich um einen reinen Software Treiber handelt, als virtuelles Feldgerät (Automation Device) beschrieben werden. Er stellt daher für andere Kommunikationspartner (z.B. SPS oder Visual Basic Programme) eine Beckhoff ADS (Automation Device Specification) Schnittstelle zur Verfügung. Die Verwendung von ADS standardisiert den Zugriff auf das TwinCAT SMS Gerät und reiht es in die Gruppe der verfügbaren virtuellen Feldgeräte ein.

Produkteigenschaften:

  • Implementation als NT COM Service.
  • Ein SPS Programm ist nicht erforderlich.
  • Implementation als Beckhoff ADS Gerät mit der ADS Port Nummer 10400.
  • Wird zusammen mit TwinCAT gestartet und gestoppt.
  • Nach der Installation muss die COM Port Verbindung mit dem SMS COM Server Konfigurator konfiguriert werden.
  • Das GSM Modem muss über ein serielles Datenkabel an die serielle Schnittstelle des TwinCAT PC's angeschlossen werden.
  • Verschicken von SMS Nachrichten bis zu 160 Zeichen.
  • 50 SMS Demoversion: Wenn bei der Installation kein gültiger Lizenzschlüssel eingegeben wurde, wird nur eine Test Version installiert. Diese hat den vollen Funktionsumfang, ist jedoch auf 50 Nachrichten begrenzt.

Systemvoraussetzungen:

  • Installiertes TwinCAT System, Installationslevel: TwinCAT CP oder höher.
  • Ein geeignetes GSM Modem mit Datenkabel.

Unterstützten Geräte:

  • Westermo GS-01 (COM Parameter: 9600,N,8,1)
  • Siemens S35i (COM Parameter: 19200,N,8,1)
  • Nokia 6210 (COM Parameter: 19200,N,8,1)
  • Maestro 100 (COM Parameter: 9600,N,8,1)

Folgende Dateien werden während der Installation in den ..\TwinCAT\SMS-Ordner hineinkopiert:

  • TcSmsSrv.exe (TwinCAT ADS Gerät: SMS COM Server).
  • TcSmsSrvCfg.exe (SMS COM Server Konfigurator. Programm zum Konfigurieren des SMS COM Servers).
  • SmsSrvTest.exe (Visual Basic Test-Applikation zum Verschicken der SMS Nachrichten).
  • TcSmsSrvSetup.txt (Informationen zur Installation und Konfiguration)


Konfiguration

Für die Konfiguration des SMS COM Servers wird der TwinCAT SMS Server Konfigurator verwendet. Mit dem Konfigurator kann die verwendete serielle Schnittstelle und die zu verwendenden Kommunikationsparameter eingestellt werden.
Auch das Protokollieren in eine Log-Datei wird mit dem Konfigurator aktiviert.

Ein verbundenes GSM Modem ist für die Konfiguration nicht erforderlich. Sie können also die Konfiguration vornehmen, bevor Sie das Gerät in Betrieb nehmen. Die Konfigurationsdaten werden in der Datei Default.tps im ..\TwinCAT Ordner gespeichert. Die Konfiguration kann also mit dieser Datei gesichert oder auf einen Zielrechner kopiert werden.

1. Nach der Installation und vor der eigentlichen Konfiguration muss der SMS COM Server einmalig als TwinCAT Gerät registriert werden. Das TwinCAT System muss sich dafür im Stop-Zustand befinden (rotes Icon). In der Kommandozeile geben Sie folgendes ein und bestätigen mit Return:

C:\TwinCAT\SMS\TcSmsSrv.exe /RegTcServer

2. Jetzt können Sie die eigentliche Konfiguration vornehmen. Zu beachten ist, dass für die Verwendung des Konfigurators das TwinCAT System ebenfalls gestoppt sein muss. Starten Sie die TcSmsSrvCfg.exe

Auswahl der seriellen Schnittstelle

In der 'COM Port' Auswahlbox muss die Schnittstelle eingestellt werden an der das GSM Modem angeschlossen ist.

Konfigurieren der Kommunikationsparameter

Die Kommunikationsparameter der seriellen Schnittstelle müssen entsprechend der Herstellerangaben des GSM Modems eingestellt werden.
In den meisten Fällen sollte die Standard Einstellung '19200,n,8,1' ausreichen (Device configuration string syntax).

Einschalten der Log Funktion

Um genauere Fehler Informationen zu bekommen oder um ein Protokoll der verschickten Nachrichten zu erhalten, kann die Log-Funktion eingeschaltet werden.
Bei eingeschalteter Log- Funktion wird im ..\TwinCAT- oder im ..\Windows\System32-Verzechniss eine Datei 'TcSmsSrvLog.xml' erstellt, in der alle verschickten Nachrichten und alle Fehler protokolliert werden.

Verschicken einer Test SMS

Um herauszufinden ob alles richtig eingerichtet ist, sollte eine Test SMS verschickt werden. Eine einfache Möglichkeit ist die Verwendung des Visual Basic Beispiel Programms.


Übersicht

Der TwinCAT SMS Server ist ein Software Treiber, der SMS Nachrichten über ein angeschlossenes GSM Modem verschicken kann. Er stellt daher für andere Kommunikationspartner (z.B. SPS - oder Visual Basic Programme) eine Beckhoff ADS (Automation Device Specification) Schnittstelle zur Verfügung. Die Verwendung von ADS standardisiert den Zugriff auf das TwinCAT SMS Gerät und reiht es in die Gruppe der verfügbaren virtuellen Feldgeräte ein.

Die READ und WRITE Operationen auf der Schnittstelle erfolgen, wie durch ADS festegelegt, über zwei Zahlen: Der Index-Group und dem Index-Offset.
Auf den nächsten Seiten wird die ADS-Schnittstelle des SMS Servers hinsichtlich der Gruppen- und Offsetindizes genauer beschrieben.

Spezifikationen "Index-Group" der SPS

Die zwei globalen Bereiche eines ADS-Gerätes werden für den SMS Server in den Index-Groups wie folgt abgebildet:

Index-Group (0x = hex) | Index Group Beschreibung
0x00003000 | Konfigurationsbereich
0x00004000 | Bereich für SMS Dienste


"Index-Group/Offset" Spezifikation für TwinCAT SMS Server Dienste

Dieser Abschnitt beschreibt ADS-Dienste zum Versenden von SMS Nachrichten mit dem TwinCAT SMS Server.

Index Group | Index Offset | Zugriff | Datentyp | Phys. Einheit | Definitions- Bereich | Beschreibung | Anmerkung
0x00004000 | 0x00000001 | W | UINT8[n] | Zeichenkette | Nullterminierte Zeichenkette | Die XML Zeichenkette beschreibt den Inhalt und das Ziel der SMS Nachricht. |


"Index-Group/Offset" Spezifikation für TwinCAT SMS Server Konfiguration

Dieser Abschnitt beschreibt ADS-Dienste zur Konfiguration des TwinCAT SMS Servers.

Index Group | Index Offset | Zugriff | Datentyp | Phys. Einheit | Definitions- Bereich | Beschreibung | Anmerkung
0x00003000 | 0x00000001 | W | UINT8 | 1 | 0/1 | Log-Datei ein- / ausschalten (1 = Log-Datei wird geschrieben) |


Sende SMS

Dieser ADS Dienst verschickt eine SMS an ein oder mehrere Empfänger.

Verwenden Sie hierfür den ADS-Dienst "AdsWriteReq".

Name | Beschreibung
ADS Port | 10400
IndexGroup | 0x00004000
IndexOffset | 0x00000001
cbLength | Länge der XML Zeichenkette inklusive der terminierenden Null.
pWriteData | XML Zeichenkette mit folgendem Aufbau: <Msg> <Targets><Target><No>Ziel</No></Target></Targets> <Body><![CDATA[Nachricht]]></Body> </Msg>
<No>Ziel</No> | Die Zeichenfolge <No>Ziel</No> kann für das versenden an mehrere Empfänger wiederholt werden.
Ziel | Ziel ist die anzuwählende Nummer. Sie kann entweder national oder international angegeben werden. Nationale Nummern haben eine führende 0 wie z.B.: 0170111111. Internationale Nummern beginnen mit einem + Zeichen gefolgt vom der Länderkennung wie z.B.: +49170111111.
Nachricht | Nachricht ist der zu verschickende Text. Die Nachricht darf nicht mehr als 80 Zeichen haben!

Beispiel für die XML Zeichenkette:

<Msg>
<Targets><Target><No>0170111111</No><No>0170222222</No></Target></Targets>

<Body><![CDATA[Hallo, dies ist eine
SMS]]></Body>
</Msg>


ADS Return Codes

Error codes: 0x000..., 0x500..., 0x700..., 0x1000..., 0x274C...

Global Error Codes

Hex | Dec | Description | Possible Causes | Solution
0x0 | 0 | no error |  |
0x1 | 1 | Internal error |  |
0x2 | 2 | No Rtime |  |
0x3 | 3 | Allocation locked memory error |  |
0x4 | 4 | Insert mailbox error | No ADS mailbox was available to process this message. | Reduce the number of ADS calls (e.g ADS-Sum commands or Max Delay Parameter)
0x5 | 5 | Wrong receive HMSG |  |
0x6 | 6 | target port not found | ADS Server not started |
0x7 | 7 | target machine not found | Missing ADS routes |
0x8 | 8 | Unknown command ID |  |
0x9 | 9 | Bad task ID |  |
0xA | 10 | No IO |  |
0xB | 11 | Unknown ADS command |  |
0xC | 12 | Win 32 error |  |
0xD | 13 | Port not connected |  |
0xE | 14 | Invalid ADS length |  |
0xF | 15 | Invalid ADS Net ID |  |
0x10 | 16 | Low Installation level |  |
0x11 | 17 | No debug available |  |
0x12 | 18 | Port disabled |  |
0x13 | 19 | Port already connected |  |
0x14 | 20 | ADS Sync Win32 error |  |
0x15 | 21 | ADS Sync Timeout |  |
0x16 | 22 | ADS Sync AMS error |  |
0x17 | 23 | ADS Sync no index map |  |
0x18 | 24 | Invalid ADS port |  |
0x19 | 25 | No memory |  |
0x1A | 26 | TCP send error |  |
0x1B | 27 | Host unreachable |  |
0x1C | 28 | Invalid AMS fragment |  |

Router Error Codes

Hex | Dec | Description | Possible Causes | Solution
0x500 | 1280 | ROUTERERR_NOLOCKEDMEMORY | No locked memory can be allocated |
0x501 | 1281 | ROUTERERR_RESIZEMEMORY | The size of the router memory could not be changed |
0x502 | 1282 | ROUTERERR_MAILBOXFULL | The mailbox has reached the maximum number of possible messages. The current sent message was rejected | Check the connection between the communication partners
0x503 | 1283 | ROUTERERR_DEBUGBOXFULL | The mailbox has reached the maximum number of possible messages. The sent message will not be displayed in the debug monitor | Check the connection to the debug monitor
0x504 | 1284 | ROUTERERR_UNKNOWNPORTTYPE | The port type is unknown |
0x505 | 1285 | ROUTERERR_NOTINITIALIZED | Router is not initialised |
0x506 | 1286 | ROUTERERR_PORTALREADYINUSE | The desired port number is already assigned |
0x507 | 1287 | ROUTERERR_NOTREGISTERED | Port not registered |
0x508 | 1288 | ROUTERERR_NOMOREQUEUES | The maximum number of Ports reached |
0x509 | 1289 | ROUTERERR_INVALIDPORT | The port is invalid. |
0x50A | 1290 | ROUTERERR_NOTACTIVATED | TwinCAT Router not active |
0x50B | 1291 | ROUTERERR_FRAGMENTBOXFULL |  |
0x50C | 1292 | ROUTERERR_FRAGMENTTIMEOUT |  |
0x50D | 1293 | ROUTERERR_TOBEREMOVED |  |

General ADS Error Codes

Hex | Dec | Description | Possible Causes | Solution
0x700 | 1792 | error class <device error> |  |
0x701 | 1793 | Service is not supported by server |  |
0x702 | 1794 | invalid index group |  |
0x703 | 1795 | invalid index offset |  |
0x704 | 1796 | reading/writing not permitted |  |
0x705 | 1797 | parameter size not correct |  |
0x706 | 1798 | invalid parameter value(s) |  |
0x707 | 1799 | device is not in a ready state |  |
0x708 | 1800 | device is busy |  |
0x709 | 1801 | invalid context (must be in Windows) |  |
0x70A | 1802 | out of memory |  |
0x70B | 1803 | invalid parameter value(s) |  |
0x70C | 1804 | not found (files, ...) |  |
0x70D | 1805 | syntax error in command or file |  |
0x70E | 1806 | objects do not match |  |
0x70F | 1807 | object already exists |  |
0x710 | 1808 | symbol not found |  |
0x711 | 1809 | symbol version invalid | Onlinechange | Release handle and get a new one
0x712 | 1810 | server is in invalid state |  |
0x713 | 1811 | AdsTransMode not supported |  |
0x714 | 1812 | Notification handle is invalid | Onlinechange | Release handle and get a new one
0x715 | 1813 | Notification client not registered |  |
0x716 | 1814 | no more notification handles |  |
0x717 | 1815 | size for watch too big |  |
0x718 | 1816 | device not initialized |  |
0x719 | 1817 | device has a timeout |  |
0x71A | 1818 | query interface failed |  |
0x71B | 1819 | wrong interface required |  |
0x71C | 1820 | class ID is invalid |  |
0x71D | 1821 | object ID is invalid |  |
0x71E | 1822 | request is pending |  |
0x71F | 1823 | request is aborted |  |
0x720 | 1824 | signal warning |  |
0x721 | 1825 | invalid array index |  |
0x722 | 1826 | symbol not active | Onlinechange | Release handle and get a new one
0x723 | 1827 | access denied |  |
0x724 | 1828 | missing license |  | Activate license for TwinCAT 3 function
0x72c | 1836 | exception occured during system start |  | Check each device transistions
0x740 | 1856 | Error class <client error> |  |
0x741 | 1857 | invalid parameter at service |  |
0x742 | 1858 | polling list is empty |  |
0x743 | 1859 | var connection already in use |  |
0x744 | 1860 | invoke ID in use |  |
0x745 | 1861 | timeout elapsed |  | Check ADS routes of sender and receiver and your firewall setting
0x746 | 1862 | error in win32 subsystem |  |
0x747 | 1863 | Invalid client timeout value |  |
0x748 | 1864 | ads-port not opened |  |
0x750 | 1872 | internal error in ads sync |  |
0x751 | 1873 | hash table overflow |  |
0x752 | 1874 | key not found in hash |  |
0x753 | 1875 | no more symbols in cache |  |
0x754 | 1876 | invalid response received |  |
0x755 | 1877 | sync port is locked |  |

RTime Error Codes

Hex | Dec | Description | Possible Causes
0x1000 | 4096 | RTERR_INTERNAL | Internal fatal error in the TwinCAT real-time system
0x1001 | 4097 | RTERR_BADTIMERPERIODS | Timer value not vaild
0x1002 | 4098 | RTERR_INVALIDTASKPTR | Task pointer has the invalid value ZERO
0x1003 | 4099 | RTERR_INVALIDSTACKPTR | Task stack pointer has the invalid value ZERO
0x1004 | 4100 | RTERR_PRIOEXISTS | The demand task priority is already assigned
0x1005 | 4101 | RTERR_NOMORETCB | No more free TCB (Task Control Block) available. Maximum number of TCBs is 64
0x1006 | 4102 | RTERR_NOMORESEMAS | No more free semaphores available. Maximum number of semaphores is 64
0x1007 | 4103 | RTERR_NOMOREQUEUES | No more free queue available. Maximum number of queue is 64
0x1008 | 4104 | TwinCAT reserved. |
0x1009 | 4105 | TwinCAT reserved. |
0x100A | 4106 | TwinCAT reserved. |
0x100B | 4107 | TwinCAT reserved. |
0x100C | 4108 | TwinCAT reserved. |
0x100D | 4109 | RTERR_EXTIRQALREADYDEF | An external synchronisation interrupt is already applied
0x100E | 4110 | RTERR_EXTIRQNOTDEF | No external synchronsiation interrupt applied
0x100F | 4111 | RTERR_EXTIRQINSTALLFAILED | The apply of the external synchronisation interrupt failed
0x1010 | 4112 | RTERR_IRQLNOTLESSOREQUAL | Call of a service function in the wrong context
0x1017 | 4119 | RTERR_VMXNOTSUPPORTED | Intel VT-x extension is not supported.
0x1018 | 4120 | RTERR_VMXDISABLED | Intel VT-x extension is not enabled in BIOS.
0x1019 | 4121 | RTERR_VMXCONTROLSMISSING | Missing feature in Intel VT-x extension.
0x101A | 4122 | RTERR_VMXENABLEFAILS | Enabling Intel VT-x fails.

TCP Winsock Error Codes

Hex | Dec | Description | Possible Causes | Solution
0x274c | 10060 | A socket operation was attempted to an unreachable host | Host unreachable | Check network connection via ping
0x274d | 10061 | A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond. | Host unreachable | Check network connection via ping
0x2751 | 10065 | No connection could be made because the target machine actively refused it |  |
 |  | Further Winsock error codes: Win32 Error Codes |  |


SMS verschicken mit Visual Basic

Quelltext: TcSmsSrvVbTest.exe

Aufgabe

Einfaches Visual Basic Programm zum Verschicken einer SMS.

Beschreibung

In diesem Beispiel wird mit dem ADS-OCX eine ADS Verbindung zum TwinCAT SMS Server aufgebaut. In einem Formular kann der SMS Text und die Telefonnummer angegeben werden. Die Nachricht wird dann auf Knopfdruck verschickt.

Formular

Die Eingabefelder haben die Namen ebText und ebNumber und der Knopf hat den Namen btSend.

Auf das Formular muss zusätzlich das ADS-OCX gezogen werden. Genauere Information dazu finden Sie in der Dokumentation des ADS-OCXes.

Visual Basic Programm

Option Explicit

Private Sub Form_Load()
    ' port of the TwinCAT SMS server
    AdsOCX1.AdsAmsServerPort = 10400
End Sub

Private Sub btSend_Click()
    On Error GoTo ERRORHANDLER
    Dim message As String

    ' create the XML message
    message = "<Msg><Targets><Target><No>" & _
        ebNumber & _
        "</No></Target></Targets><Body><![CDATA[" & _
        ebText & _
        "]]></Body></Msg>"

    AdsOCX1.AdsSyncWriteStringReq &H4000, 1, LenB(message), message

    Exit Sub
ERRORHANDLER:
    MsgBox "Error " & Err.Number & ": " & Err.Description
End Sub


SMS Funktionsbaustein in ST

Quelltext: TcSmsSrvStTest.exe

Aufgabe

Einfacher Funktionsbaustein zum Verschicken einer SMS.

Beschreibung

Die Nachricht und die anzuwählende Telefonnummer soll über Eingänge anzugeben sein.

Die Steigende Flanke des SEND Eingangs soll das Verschicken initiieren.

Aufruf des SMS Funktionsbausteins

Implementation

Für den ADS Baustein muss die Bibliothek PlcSystem.lib eingebunden werden.

Deklaration der Variablen

ST Kode des Funktionsbausteins


Fehlersuche

Falls das Verschicken einer SMS mit dem SendSMS Funktionsbaustein oder über den SMS COM Server nicht funktioniert, kann das verschiedene Gründe haben:

  • keine Verbindung zum GSM Modem
  • Verwendung eines nicht unterstützten GSM Modems
  • falsche Rufnummer
  • falsches GSM-Netz
  • PIN erforderlich (die SIM Karte darf nicht mit einer PIN geschützt sein)
  • nicht initialisierte serielle Klemme (KL6Init aufrufen)
  • Fehlerhafter Aufruf des ADS Dienstes

Um diese Fehler zu finden gibt es verschiedene Hilfsmittel:

Log Datei verwenden

Mit dem SMS COM Server Konfigurator können Sie das Protokollieren in eine Log-Datei aktivieren. Danach werden alle verschickten Nachrichten und Fehler in die Datei TcSmsSrvCfg.xml geschrieben.

NT Event Log überprüfen

Fehler bei der Versendung von Nachrichten werden zusätzlich immer im NT Event Log protokolliert. Das Event Log erreichen Sie über das TwinCAT Icon in der Taskleiste.

ADS Fehlermeldungen auswerten

Falls der Aufruf einer ADS Funktion fehlschlägt, wird der Fehler im Rückgabewert der Funktion codiert. Eine Liste dieser Fehlercodes finden Sie unter ADS Return Codes.

Konfiguration der Klemme

Die serielle Klemme kann auf verschiedene Arten konfiguriert werden. Unterschiedlich konfigurierte Klemmen werden zum Teil auch unterschiedlich im Prozessabbild abgebildet (3 Byte / 5 Byte Klemme, Advanced / Standard). Dabei ist zu beachten, dass die 'Serial Communication' Bibliothek zu der Konfiguration der Klemme passen muss. Siehe auch Dokumentation zur KL6xxx und Dokumentation der ComLib:

Wichtig ist auch die Übertragungsgeschwindigkeit der Klemme auf das verwendete Modem abzustimmen.

Verschicken einer Test SMS

Um herauszufinden, ob der Fehler im ADS Aufruf oder in der Konfiguration des SMS COM Servers liegt, können Sie mit dem Visual Basic Beispiel Programm einfach eine Test SMS verschicken.

Verschicken einer Test SMS mit einem Handy

Um herauszufinden, ob die SIM Karte korrekt konfiguriert ist, können Sie siein ein handelsübliches Handy stecken und damit eine SMS verschicken. Dabei darf es nicht erforderlich sein, eine PIN Nummer einzugeben.

Netzauswahl beim Westermo GS-01

Für die verschiedenen Netze in Europa und den USA gibt es verschiedene Varianten des GS-01. Die Lampe an der Vorderseite des Modems zeigt an, ob ein Netz verfügbar ist. Wenn die Lampe blinkt, hat das Modem Verbindung zu einem Netz. Wenn die Lampe dauernd leuchtet, sollte das Westermo Handbuch zur Fehlersuche verwendet werden.


Serielles Kabel für KL6001

Ein Kabel zwischen GSM Modem und der serielle Klemme KL6001 sollte folgende Anschlussbelegung haben. Bei Verwendung eines Adapterkabels kann die Belegung eventuell unterschiedlich sein. Beim Nokia Handy ist oft noch eine Brücke zwischen Pin 4 und Pin 9 (DSR und DTR) der SUB-D Buchse erforderlich.

Das hier beschriebene Kabel verwendet Hardware Handshake (RTS / CTS). Es wurde mit dem Westermo GS-01 und dem Siemens S53i getestet.

Anschluss | 9 polige SUB-D Buchse | KL6001
RxD | 2 | 5
TxD | 3 | 1
GND | 5 | 3
RTS | 7 | 2
CTS | 8 | 6


7 Bit default alphabet

TS6350 | TwinCAT SMS/SMTP Server

7 Bit GSM default alphabet coding

Der TwinCAT SMS Server codiert und versendet die SMS-Nachrichten nach dem 7 Bit Standard-Alphabet. Die Sonder- oder nicht druckbaren ASCII-Zeichen (0x00..0x31) werden aber nicht automatisch in die entsprechenden 7-bit Codes konvertiert. Um diese Zeichen versenden zu können muss der SMS-String vorher entsprechend der unterstehenden Tabelle formatiert werden.

Beispiel:

Eine SMS mit folgendem Text soll aus der SPS gesendet werden:

'Total: 100.89€, SmsSrv@Beckhoff.com'

Der SPS-String muss folgendes Format haben:

'Total: 100.89$1B$65, SmsSrv$80Beckhoff.com'

7 bit default GSM alphabet as specified by GSM 03.38. |  | 8 bit ANSI alphabet
Character | Character name | Hex | Dec | TwinCAT PLC string constant
@ | COMMERCIAL AT | 0x00 | 0 | $80 or every other number >= 0x80H
£ | POUND SIGN | 0x01 | 1 | $01
$ | DOLLAR SIGN | 0x02 | 2 | $02
¥ | YEN SIGN | 0x03 | 3 | $03
è | LATIN SMALL LETTER E WITH GRAVE | 0x04 | 4 | $04
é | LATIN SMALL LETTER E WITH ACUTE | 0x05 | 5 | $05
ù | LATIN SMALL LETTER U WITH GRAVE | 0x06 | 6 | $06
ì | LATIN SMALL LETTER I WITH GRAVE | 0x07 | 7 | $07
ò | LATIN SMALL LETTER O WITH GRAVE | 0x08 | 8 | $08
Ç | LATIN CAPITAL LETTER C WITH CEDILLA | 0x09 | 9 | $09
 | LINE FEED | 0x0A | 10 | $0A or $N
Ø | LATIN CAPITAL LETTER O WITH STROKE | 0x0B | 11 | $0B
ø | LATIN SMALL LETTER O WITH STROKE | 0x0C | 12 | $0C
 | CARRIAGE RETURN | 0x0D | 13 | $0D or $R
Å | LATIN CAPITAL LETTER A WITH RING ABOVE | 0x0E | 14 | $0E
å | LATIN SMALL LETTER A WITH RING ABOVE | 0x0F | 15 | $0F
Δ | GREEK CAPITAL LETTER DELTA | 0x10 | 16 | $10
_ | LOW LINE | 0x11 | 17 | $11
Φ | GREEK CAPITAL LETTER PHI | 0x12 | 18 | $12
Γ | GREEK CAPITAL LETTER GAMMA | 0x13 | 19 | $13
Λ | GREEK CAPITAL LETTER LAMBDA | 0x14 | 20 | $14
Ω | GREEK CAPITAL LETTER OMEGA | 0x15 | 21 | $15
Π | GREEK CAPITAL LETTER PI | 0x16 | 22 | $16
Ψ | GREEK CAPITAL LETTER PSI | 0x17 | 23 | $17
Σ | GREEK CAPITAL LETTER SIGMA | 0x18 | 24 | $18
Θ | GREEK CAPITAL LETTER THETA | 0x19 | 25 | $19
Ξ | GREEK CAPITAL LETTER XI | 0x1A | 26 | $1A
 | ESCAPE TO EXTENSION TABLE | 0x1B | 27 | $1B
 | FORM FEED | 0x1B 0x0A | 27 10 | $1B$0A
^ | CIRCUMFLEX ACCENT | 0x1B 0x14 | 27 20 | $1B$14
{ | LEFT CURLY BRACKET | 0x1B 0x28 | 27 40 | $1B$28
} | RIGHT CURLY BRACKET | 0x1B 0x29 | 27 41 | $1B$29
\ | REVERSE SOLIDUS (BACKSLASH) | 0x1B 0x2F | 27 47 | $1B$2F
[ | LEFT SQUARE BRACKET | 0x1B 0x3C | 27 60 | $1B$3C
~ | TILDE | 0x1B 0x3D | 27 61 | $1B$3D
] | RIGHT SQUARE BRACKET | 0x1B 0x3E | 27 62 | $1B$3E
| | VERTICAL BAR | 0x1B 0x40 | 27 64 | $1B$40
€ | EURO SIGN | 0x1B 0x65 | 27 101 | $1B$65
Æ | LATIN CAPITAL LETTER AE | 0x1C | 28 | $1C
æ | LATIN SMALL LETTER AE | 0x1D | 29 | $1D
ß | LATIN SMALL LETTER SHARP S (German) | 0x1E | 30 | $1E
É | LATIN CAPITAL LETTER E WITH ACUTE | 0x1F | 31 | $1F
 | SPACE | 0x20 | 32 | $20 or ' '
! | EXCLAMATION MARK | 0x21 | 33 | !
" | QUOTATION MARK | 0x22 | 34 | "
# | NUMBER SIGN | 0x23 | 35 | #
¤ | CURRENCY SIGN | 0x24 | 36 | $24 or $$
% | PERCENT SIGN | 0x25 | 37 | %
& | AMPERSAND | 0x26 | 38 | &
' | APOSTROPHE | 0x27 | 39 | $27 or $'
( | LEFT PARENTHESIS | 0x28 | 40 | (
) | RIGHT PARENTHESIS | 0x29 | 41 | )
* | ASTERISK | 0x2A | 42 | *
+ | PLUS SIGN | 0x2B | 43 | +
, | COMMA | 0x2C | 44 | ,
- | HYPHEN-MINUS | 0x2D | 45 | -
. | FULL STOP | 0x2E | 46 | .
/ | SOLIDUS (SLASH) | 0x2F | 47 | /
0 | DIGIT ZERO | 0x30 | 48 | 0
1 | DIGIT ONE | 0x31 | 49 | 1
2 | DIGIT TWO | 0x32 | 50 | 2
3 | DIGIT THREE | 0x33 | 51 | 3
4 | DIGIT FOUR | 0x34 | 52 | 4
5 | DIGIT FIVE | 0x35 | 53 | 5
6 | DIGIT SIX | 0x36 | 54 | 6
7 | DIGIT SEVEN | 0x37 | 55 | 7
8 | DIGIT EIGHT | 0x38 | 56 | 8
9 | DIGIT NINE | 0x39 | 57 | 9
: | COLON | 0x3A | 58 | :
; | SEMICOLON | 0x3B | 59 | ;
< | LESS-THAN SIGN | 0x3C | 60 | <
= | EQUALS SIGN | 0x3D | 61 | =
> | GREATER-THAN SIGN | 0x3E | 62 | >
? | QUESTION MARK | 0x3F | 63 | ?
¡ | INVERTED EXCLAMATION MARK | 0x40 | 64 | $40
A | LATIN CAPITAL LETTER A | 0x41 | 65 | A
B | LATIN CAPITAL LETTER B | 0x42 | 66 | B
C | LATIN CAPITAL LETTER C | 0x43 | 67 | C
D | LATIN CAPITAL LETTER D | 0x44 | 68 | D
E | LATIN CAPITAL LETTER E | 0x45 | 69 | E
F | LATIN CAPITAL LETTER F | 0x46 | 70 | F
G | LATIN CAPITAL LETTER G | 0x47 | 71 | G
H | LATIN CAPITAL LETTER H | 0x48 | 72 | H
I | LATIN CAPITAL LETTER I | 0x49 | 73 | I
J | LATIN CAPITAL LETTER J | 0x4A | 74 | J
K | LATIN CAPITAL LETTER K | 0x4B | 75 | K
L | LATIN CAPITAL LETTER L | 0x4C | 76 | L
M | LATIN CAPITAL LETTER M | 0x4D | 77 | M
N | LATIN CAPITAL LETTER N | 0x4E | 78 | N
O | LATIN CAPITAL LETTER O | 0x4F | 79 | O
P | LATIN CAPITAL LETTER P | 0x50 | 80 | P
Q | LATIN CAPITAL LETTER Q | 0x51 | 81 | Q
R | LATIN CAPITAL LETTER R | 0x52 | 82 | R
S | LATIN CAPITAL LETTER S | 0x53 | 83 | S
T | LATIN CAPITAL LETTER T | 0x54 | 84 | T
U | LATIN CAPITAL LETTER U | 0x55 | 85 | U
V | LATIN CAPITAL LETTER V | 0x56 | 86 | V
W | LATIN CAPITAL LETTER W | 0x57 | 87 | W
X | LATIN CAPITAL LETTER X | 0x58 | 88 | X
Y | LATIN CAPITAL LETTER Y | 0x59 | 89 | Y
Z | LATIN CAPITAL LETTER Z | 0x5A | 90 | Z
Ä | LATIN CAPITAL LETTER A WITH DIAERESIS | 0x5B | 91 | $5B
Ö | LATIN CAPITAL LETTER O WITH DIAERESIS | 0x5C | 92 | $5C
Ñ | LATIN CAPITAL LETTER N WITH TILDE | 0x5D | 93 | $5D
Ü | LATIN CAPITAL LETTER U WITH DIAERESIS | 0x5E | 94 | $5E
§ | SECTION SIGN | 0x5F | 95 | $5F
¿ | INVERTED QUESTION MARK | 0x60 | 96 | $60
a | LATIN SMALL LETTER A | 0x61 | 97 | a
b | LATIN SMALL LETTER B | 0x62 | 98 | b
c | LATIN SMALL LETTER C | 0x63 | 99 | c
d | LATIN SMALL LETTER D | 0x64 | 100 | d
e | LATIN SMALL LETTER E | 0x65 | 101 | e
f | LATIN SMALL LETTER F | 0x66 | 102 | f
g | LATIN SMALL LETTER G | 0x67 | 103 | g
h | LATIN SMALL LETTER H | 0x68 | 104 | h
i | LATIN SMALL LETTER I | 0x69 | 105 | i
j | LATIN SMALL LETTER J | 0x6A | 106 | j
k | LATIN SMALL LETTER K | 0x6B | 107 | k
l | LATIN SMALL LETTER L | 0x6C | 108 | l
m | LATIN SMALL LETTER M | 0x6D | 109 | m
n | LATIN SMALL LETTER N | 0x6E | 110 | n
o | LATIN SMALL LETTER O | 0x6F | 111 | o
p | LATIN SMALL LETTER P | 0x70 | 112 | p
q | LATIN SMALL LETTER Q | 0x71 | 113 | q
r | LATIN SMALL LETTER R | 0x72 | 114 | r
s | LATIN SMALL LETTER S | 0x73 | 115 | s
t | LATIN SMALL LETTER T | 0x74 | 116 | t
u | LATIN SMALL LETTER U | 0x75 | 117 | u
v | LATIN SMALL LETTER V | 0x76 | 118 | v
w | LATIN SMALL LETTER W | 0x77 | 119 | w
x | LATIN SMALL LETTER X | 0x78 | 120 | x
y | LATIN SMALL LETTER Y | 0x79 | 121 | y
z | LATIN SMALL LETTER Z | 0x7A | 122 | z
ä | LATIN SMALL LETTER A WITH DIAERESIS | 0x7B | 123 | $7B
ö | LATIN SMALL LETTER O WITH DIAERESIS | 0x7C | 124 | $7C
ñ | LATIN SMALL LETTER N WITH TILDE | 0x7D | 125 | $7D
ü | LATIN SMALL LETTER U WITH DIAERESIS | 0x7E | 126 | $7E
à | LATIN SMALL LETTER A WITH GRAVE | 0x7F | 127 | $7F


Device control string

TS6350 | TwinCAT SMS/SMTP Server

Device control string syntax

The device-control string uses the syntax of the mode command. The string must have the same form as the mode command's command-line arguments. For further information on mode command syntax, refer to the end-user documentation for your operating system.

Syntax

          mode
          com
          m[:]
[baud=b] [parity=p]
[data=d] [stop=s]
[to={on|off}]
[xon={on|off}]
[odsr={on|off}]
[octs={on|off}]
[dtr={on|off|hs}]
[rts={on|off|hs|tg}]
[idsr={on|off}]

Parameters

com m[:]
Specifies the number of the asynchronous-communications (COM) port.
baud= b
Specifies the transmission rate in bits per second. The following table lists valid abbreviations for b and its related rate.
Value | Rate
11 | 110 baud
15 | 150 baud
30 | 300 baud
60 | 600 baud
12 | 1200 baud
24 | 2400 baud
48 | 4800 baud
96 | 9600 baud
19 | 19,200 baud
parity= p
Specifies how the system uses the parity bit to check for transmission errors. The following table lists valid p values. The default value is e. Not all computers support the values m and s.
Value | Description
n | none
e | even
o | odd
m | mark
s | space
data= d
Specifies the number of data bits in a character. Valid values for d are in the range 5 through 8. The default value is 7. Not all computers support the values 5 and 6.
stop= s
Specifies the number of stop bits that define the end of a character: 1, 1.5, or 2. If the baud rate is 110, the default value is 2. Otherwise, the default value is 1. Not all computers support the value 1.5.
to={on|off}
Specifies whether infinite time-out processing is on or off. The default is off.
xon={on|off}
Specifies whether the xon or xoff protocol for data-flow control is on or off.
odsr={on|off}
Specifies whether output handshaking that uses the Data Set Ready (DSR) circuit is on or off.
octs={on|off}
Specifies whether output handshaking that uses the Clear To Send (CTS) circuit is on or off.
dtr={on|off|hs}
Specifies whether the Data Terminal Ready (DTR) circuit is on or off, or set to handshake.
rts={on|off|hs|tg}
Specifies whether the Request To Send (RTS) circuit is set to on, off, handshake, or toggle.
idsr={on|off}
Specifies whether the DSR circuit sensitivity is on or off.

Remarks:

  • For a string such as 96,n,8,1 or any other older-form mode string that doesn't end with an x or a p:

    fInX, fOutX, fOutXDsrFlow, and fOutXCtsFlow are all set to FALSE

    fDtrControl is set to DTR_CONTROL_ENABLE

    fRtsControl is set to RTS_CONTROL_ENABLE

  • For a string such as 96,n,8,1,x or any other older-form mode string that ends with an x:

    fInX and fOutX are both set to TRUE

    fOutXDsrFlow and fOutXCtsFlow are both set to FALSE

    fDtrControl is set to DTR_CONTROL_ENABLE

    fRtsControl is set to RTS_CONTROL_ENABLE

  • For a string such as 96,n,8,1,p or any other older-form mode string that ends with a p:

    fInX and fOutX are both set to FALSE

    fOutXDsrFlow and fOutXCtsFlow are both set to TRUE

    fDtrControl is set to DTR_CONTROL_HANDSHAKE

    fRtsControl is set to RTS_CONTROL_HANDSHAKE


SmtpSrv Overview

TS6350 | TwinCAT SMS/SMTP Server CE

Übersicht

Mit dem TwinCAT SMTP Server können Emails direkt aus der SPS versendet werden. Dazu wird mit abgeschlossener Installation ein entsprechender Server zusammen mit TwinCAT gestartet. Der Server wird über ADS aus der SPS heraus angesprochen. Mehrere Bausteine stehen für den Versand von Emails in der SPS zur Verfügung:

- FB_Smtp

- FB_SmtpV2

- FB_SmtpAttach

- FB_SmtpFull

- FB_SmtpV3

- FB_SmtpV3_Full

Verschlüsselung:

Der TC SMTP Server unterstützt die Verschlüsselungsmethoden via Secure Socket Layer (SSL) oder STARTTLS ab Version 1.0.14.


SmtpSrv FB_Smtp

TS6350 | TwinCAT SMS/SMTP Server CE

Konfiguration

Ab der Version 1.0.14 des TC Smtp Servers wird eine XML-basierende Konfiguration verwendet. Die TcSmtpConfig.xml befindet sich im Installationsverzeichnis des Supplements.

<TcSmtpConfig>
        <!-- EnableLogFile: 0 (Disabled), 1 (Enabled), 2 (Verbose) -->
        <EnableLogFile>0</EnableLogFile>
        <!-- LogSize: in Byte, 0 = use Default -->
        <LogSize>0</LogSize>
        <!-- Authentication: 0 (NONE), 1 (AUTO), 2 (LOGIN), 3 (NTLM), 4 (PLAIN) -->
        <Authentication>1</Authentication>
        <!-- Port: 0 (use default ports) -->
        <Port>0</Port>
        <!-- ContentEncoding: 0 (7BIT), 1 (8BIT), 2 (BINARY), 3 (BASE64), 4 (QUOTED_PRINTABLE) -->
        <ContentEncoding>0</ContentEncoding>
        <!-- Timeout for the socket connection -->
        <Timeout>8000</Timeout>
        <!-- Charset for the message content -->
        <Charset>iso-8859-1</Charset>
</TcSmtpConfig>

Hinweis zur XML Konfigurationdatei (ab Version 1.0.14)

EnableLogFile: Aktiviert das Logging. Bitte nur für Diagnosezwecke aktivieren.

Authentication: Auswahl der Authentifizierungsmethode.

Port: Option 0 verwendet die Standardports für den Mailversand.

ContentEncoding: Definiert das Entschlüsseln des Inhaltes .

Timeout: Timeout zum Mailversand in ms.

Charset: Definiert die Zeichenkodierung.

Hinweis zur Registry Konfiguration (Version < 1.0.14)

Log-File aktivieren:

Der TwinCAT SMTP Server erzeugt eine Logdatei unter "\TwinCAT\SMS SMTP", wenn folgenden Eintrag in der Registry gesetzt wurde.

Registry path: HKEY_LOCAL_MACHINE\SOFTWARE\Beckhoff\TwinCAT SMS / SMTP Server

DWORD: EnableLogFile = 1


SmtpSrv FB_Smtp

TS6350 | TwinCAT SMS/SMTP Server CE

FUNCTION_BLOCK FB_Smtp

Der Baustein schickt per ADS einen Bytestream an ein ADS-Remotegerät. Auf dem ADS-Remotegerät muss der TwinCAT ADS Smtp Service laufen um den Bytestream entgegen zu nehmen und zu einer Email zu verarbeiten. Nach der Bytesteam-Verarbeitung wird dann die E-Mail versendet.
Zu beachten ist, dass der SMTP-Server keine Passwort-Überprüfung unterstützt, da der TwinCAT ADS Smtp Service sich nicht per Passwort-Überprüfung am Server anmeldet.

VAR_INPUT

VAR_INPUT
        sNetId          : T_AmsNetID;     (* AmsNetID *)
        sSmtpServer     : T_MaxString;    (* Smtp-Server address (IP or Name) *)
        sFrom           : T_MaxString;    (* Sender string *)
        sTo             : T_MaxString;    (* To recipient string *)
        sCc             : T_MaxString;    (* Cc recipient string *)
        sBcc            : T_MaxString;    (* Bcc recipient string *)
        sSubject                : T_MaxString;    (* Subject string *)
        pMessage                : DWORD;             (* Pointer to the message *)
        cbMessage               : UDINT;             (* Messagelenght to send *)
        bExecute                : BOOL;
        tTimeout                : TIME := T#20s;
END_VAR

sNetId: AmsNetID worauf der TwinCAT Mail Servers läuft.

sSmtpServer: Name oder IP des Smtp-Servers.

sFrom: Ein String der die Emailadresse des Absenders enthält. Es muss ein Absender angegeben werden. Der String ist auf 255 Zeichen begrenzt.

sTo: Ein String der die Emailadressen der Empfänger beinhaltet. Es können mehrere Adressen angegeben werden, diese müssen dann mit einem Semikolon getrennt werden. Es muss mindestens ein Empfänger angegeben werden. Der String ist auf 255 Zeichen begrenzt.

sCc: Ein String mit einer E-Mail Adresse eines weiteren Empfängers (Cc=Carbon Copy). Es kann auch ein Leerstring angegeben werden. Eine Kopie der E-Mail wird an diesen Empfänger gesendet. Die E-Mail Adresse dieses Empfängers wird bei anderen Empfängern sichtbar. Es dürfen auch mehrere Empfängeradressen getrennt durch Semikolons angegeben werden. Der String ist auf 255 Zeichen begrenzt.

sBcc: Ein String mit einer E-Mail Adresse eines weiteren Empfängers (Bcc=Blind Carbon Copy). Es kann auch ein Leerstring angegeben werden. Eine Kopie der E-Mail wird an diese\n Empfänger gesendet. Die E-Mail Adresse dieses Empfängers wird bei anderen Empfängern nicht sichtbar. Es dürfen auch mehrere Empfängeradressen getrennt durch Semikolons angegeben werden. Der String ist auf 255 Zeichen begrenzt.

sSubject: Ein String mit dem Betreff der E-Mail. Die E-Mail kann auch ohne Betreff versendet werden. Sie bekommt dann automatisch den Namen vom versendenden Computer in den Betreff eingetragen (z.B. "Mail send from: CX_00762C"). Der String für den Betreff ist auf 255 Zeichen begrenzt.

pMessage: Die Adresse (Pointer) eines nullterminierten Strings mit dem E-Mail Text. Die E-Mail kann auch ohne Bodytext versendet werden, sie bekommt dann automatisch einen kleinen Satz mit dem Sendedatum und Uhrzeit eingetragen (z.B. "Mail send at: Thu, 23 Mar 2006 02:31:44 -0800"). Die Adresse des Strings kann mit dem ADR-Operator ermittelt werden.

cbMessage: Die Länge des E-Mail Textes. Die Länge kann durch den LEN-Operator ermittelt werden.

bExecute: Eine steigende Flanke an diesem Eingang aktiviert den Funktionsbaustein.

tTimeout: Maximale Zeit, die bei der Ausführung des Befehls nicht überschritten werden darf.

VAR_OUTPUT

VAR_OUTPUT
        bBusy   : BOOL;
        bError  : BOOL;
        nErrId  : UDINT;
END_VAR

bBusy: Dieser Ausgang bleibt solange auf TRUE, bis der Baustein eine Befehlsanforderung ausführt, längstens aber für die Dauer der an dem tTimeOut-Eingang angelegten Zeit.

bError: Dieser Ausgang wird auf TRUE geschaltet, wenn bei der Ausführung eines Befehls ein Fehler aufgetreten ist. Der befehlsspezifische Fehlercode ist in iErrorId enthalten.

nErrId: Enthält den befehlsspezifischen Fehlercode des zuletzt ausgeführten Befehls (siehe Tabelle).

Hinweise:

- Stellen sie sicher, dass sie innerhalb des byte-Arrays keine \0 Stellen haben, da die Message dort abgebrochen wird.
- Die maximale Anzahl der Zeichen, die in einer Message verwendet werden dürfen, ist 510.725 - für From, To, Cc, Bcc und Subject stehen 1275 Zeichen zur Verfügung.

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.8.0 und höher |  | TcSmtp.lib


SmtpSrv FB_SmtpV2

TS6350 | TwinCAT SMS/SMTP Server CE

FUNCTION_BLOCK FB_SmtpV2

Der Baustein sendet einen Datenstrom zu einem entfernten ADS Gerät via ADS. Der TwinCAT ADS SMTP Service muss auf dem entfernten ADS Gerät laufen, so dass der Datenstrom empfangen und in eine eMail verarbeitet werden kann. Sobald der Datenstrom verarbeitet wurde, wird die eMail versendet.

VAR_INPUT

 VAR_INPUT
 sNetId          : T_AmsNetID;   (* AmsNetID *)
 sSmtpServer     : T_MaxString;  (* Smtp Server addres ( IP or Name) *)
 sUsername       : T_MaxString;  (* Smtp Username *)
 sPassword       : T_MaxString;  (* Smtp Password *)
 nAuth           : UDINT;        (* Smtp Auth Type *)
 sFrom           : T_MaxString;  (* Sender string *)
 sTo             : T_MaxString;  (* To recipient string *)
 sCc             : T_MaxString;  (* Cc recipient string *)
 sBcc            : T_MaxString;  (* Bcc recipient string *)
 sSubject        : T_MaxString;  (* Subject string *)
 pMessage        : DWORD;           (* Pointer to the message *)
 cbMessage       : UDINT;           (* Message lenght in byte to send *)
 bExecute        : BOOL;
 tTimeout        : TIME := T#20s;
END_VAR

sNetId: AmsNetID auf dem der TwinCAT SMS Server läuft.

sSmtpServer: Name oder IP des SMTP Servers.

sUsername: Benutzername des SMTP Servers.

sPassword: Passwort für den SMTP Server.

nAuth: Smtp Auth Type:
0 = AUTH NONE
1 = RESERVED
2 = AUTH LOGIN
3 = AUTH NTLM
4 = AUTH PLAIN

sFrom: Ein String, der die eMail Adresse des Absenders enthält. Der Absender muss festgelegt werden. Der String ist auf 255 Zeichen limitiert.

sTo: Ein String, der die eMail Adresse des Empfängers enthält. Mindestens ein Empfänger muss eingetragen werden. Es ist aber auch möglich mehrere Adressen einzutragen. Diese müssen per Simicolon getrennt werden. Der String ist auf 255 Zeichen limitiert.

sCc: Ein String, der die eMail Adresse von weiteren Empfängern enthält (cc=carbon copy). Es ist möglich mehrere Adressen von Empfängern einzutragen, diese müssen dann durch ein Simicolon getrennt werden. Der String kann aber auch leer bleiben. Dem/den Empfänger(n) wird eine Kopie der eMail zugeschickt. Die eMail Adresse des Empfängers ist für andere Empfänger sichtbar. Der String ist auf 255 Zeichen limitiert.

sBcc: Ein String der die eMail Adressen von weiteren Empfängern enthält (Bcc = blind carbon copy). Es ist möglich mehrere Adressen von Empfängern einzutragen, diese müssen dann durch ein Simicolon getrennt werden. Der String kann aber auch leer bleiben. Dem/den Empfänger(n) wird eine Kopie der eMail zugeschickt. Die eMail Adresse der Empfänger ist für andere Empfänger nicht sichtbar. Der String ist auf 255 Zeichen limitiert.

sSubject: Dieser String enthält den Betreff der eMail. Falls die eMail ohne Betreff gesendet wird, wird automatisch der Computername des Absenders in die Betreffzeile geschrieben (z.B. "eMail gesendet von: CX_00762C"). Der String der Betreffzeile ist auf 255 Zeichen limitiert.

pMessage: Dieser Parameter gibt die Adresse des Strings, welcher den Nachrichtentext enthält, an.Falls die eMail ohne Text gesendet wird, wird automatisch das Datum und die Uhrzeit eingesetzt (z.B. "Mail send at Thu, 23 Mar 2006 02:31:44 -0800"). Die Adresse des Strings kann mit dem ADR Operator festgelegt werden.

cbMessage: Länge des eMail Textes. Die Länge kann durch den LEN Operator festgelegt werden.

bExecute: Der Funktionsbaustein wird durch eine steigende Flanke an dieser Eingangsvariablen aktiviert.

tTimeout: Die maximale, erlaubte Zeit, um einen Befehl auszuführen.

VAR_OUTPUT

 VAR_OUTPUT
        bBusy   : BOOL;
        bError  : BOOL;
        nErrId  : UDINT;
END_VAR

bBusy: Die Ausgangsvariable bleibt TRUE, bis der Block einen Befehl ausgeführt hat, allerdings nur bis zum Ablauf von tTimeOut.

bError : Die Ausgangsvariable wird auf TRUE umgeschaltet sobald ein Fehler bei der Ausführung des Befehls auftaucht. Der Befehls-spezifische Fehler ist in iErrorId enthalten.

nErrId: Beinhaltet den befehlsspezifischen Fehler Code des zuletzt ausgeführten Befehls (siehe Tabelle).

Hinweise:

- Stellen Sie sicher, dass Sie \o nicht innerhalb der Byte-Anordnung verwenden, ansonsten wird die Nachricht gestoppt.
- Die maximale Anzahl von Zeichen in einer Nachricht beträgt 510.725 - insgesamt haben Sie 1275 Zeichen für From, To, Cc, Bcc and Subject.

Entwicklungsumgebung | Zielsystem | Einzubindende SPS Bibliotheken
TwinCAT v2.8.0 und höher |  | TcSmtp.lib

Beispiel in ST:

PROGRAM MAIN
VAR
        FB_SmtpV2               : FB_SmtpV2;
        bSend           : BOOL;
        bBusy           : BOOL;
        bError          : BOOL;
        nErrID          : UDINT;
        sServer         : STRING := 'smtpmail.mustermann.com';
        sMsg            : STRING := 'TcSmtpSrv is working properly';
        sSubject                : STRING := 'TcSmtp Service Test';
        sUser           : STRING := 'username';
        sPassword               : STRING := 'password';
        sFrom           : STRING := 'm.mustermann@mustermann.com';
        sTo             : STRING := 'm.muster@muster.com';
        nAuth           : INT := 2;
END_VAR

FB_SmtpV2 (     sNetId          := '',
                sSmtpServer     := sServer,
                sUsername               := sUser,
                sPassword               := sPassword,
                nAuth           := nAuth,
                sFrom           := sFrom,
                sTo             := sTo,
                sSubject                := sSubject,
                pMessage                := ADR(sMsg) ,
                cbMessage               := LEN(sMsg)+1,
                bExecute                := bSend,
                tTimeout                := t#20s,
                bBusy           => bBusy,
                bError          => bError,
                nErrId          => nErrID);


SmtpSrv FB_SmtpAttach

TS6350 | TwinCAT SMS/SMTP Server CE

FUNCTION_BLOCK FB_SmtpAttach

Der Baustein sendet einen Datenstrom zu einem entfernten ADS Gerät via ADS. Der TwinCAT ADS SMTP Service muss auf dem entfernten ADS Gerät laufen, so dass der Datenstrom empfangen und in eine eMail verarbeitet werden kann. Sobald der Datenstrom verarbeitet wurde, wird die eMail versendet.

VAR_INPUT

VAR_INPUT
        sNetId          : T_AmsNetID;           (* AmsNetID *)
        sSmtpServer     : T_MaxString;          (* Smtp Server addres ( IP or Name) *)
        sUsername       : T_MaxString;          (* Smtp Username *)
        sPassword       : T_MaxString;          (* Smtp Password *)
        nAuth           : UDINT;                (* Smtp Auth Type*)
        sFrom           : T_MaxString;          (* Sender string *)
        sTo             : T_MaxString;          (* To recipient string *)
        sCc             : T_MaxString;          (* Cc recipient string *)
        sBcc            : T_MaxString;          (* Bcc recipient string *)
        sSubject        : T_MaxString;          (* Subject string *)
        pMessage        : DWORD;                   (* Pointer to the message *)
        cbMessage       : UDINT;                   (* Messagelenght in byte to send *)
        sAttachments    : ARRAY [0..32] OF STRING;
        bExecute        : BOOL;
        tTimeout        : TIME := T#20s;
END_VAR

sNetId: AmsNetID auf dem der TwinCAT SMS Server läuft.

sSmtpServer: Name oder IP des SMTP Servers.

sUsername: Benutzername des SMTP Servers.

sPassword: Passwort für den SMTP Server.

nAuth: Smtp Auth Type:
0 = AUTH NONE
1 = RESERVED
2 = AUTH LOGIN
3 = AUTH NTLM
4 = AUTH PLAIN

sFrom: Ein String, der die eMail Adresse des Absenders enthält. Der Absender muss festgelegt werden. Der String ist auf 255 Zeichen limitiert.

sTo: Ein String, der die eMail Adresse des Empfängers enthält. Mindestens ein Empfänger muss eingetragen werden. Es ist aber auch möglich mehrere Adressen einzutragen. Diese müssen per Simicolon getrennt werden. Der String ist auf 255 Zeichen limitiert.

sCc: Ein String, der die eMail Adresse von weiteren Empfängern enthält (cc=carbon copy). Es ist möglich mehrere Adressen von Empfängern einzutragen, diese müssen dann durch ein Simicolon getrennt werden. Der String kann aber auch leer bleiben. Dem/den Empfänger(n) wird eine Kopie der eMail zugeschickt. Die eMail Adresse des Empfängers ist für andere Empfänger sichtbar. Der String ist auf 255 Zeichen limitiert.

sBcc: Ein String der die eMail Adressen von weiteren Empfängern enthält (Bcc = blind carbon copy). Es ist möglich mehrere Adressen von Empfängern einzutragen, diese müssen dann durch ein Simicolon getrennt werden. Der String kann aber auch leer bleiben. Dem/den Empfänger(n) wird eine Kopie der eMail zugeschickt. Die eMail Adresse der Empfänger ist für andere Empfänger nicht sichtbar. Der String ist auf 255 Zeichen limitiert.

sSubject: Dieser String enthält den Betreff der eMail. Falls die eMail ohne Betreff gesendet wird, wird automatisch der Computername des Absenders in die Betreffzeile geschrieben (z.B. "eMail gesendet von: CX_00762C"). Der String der Betreffzeile ist auf 255 Zeichen limitiert.

pMessage: Dieser Parameter gibt die Adresse des Strings, welcher den Nachrichtentext enthält, an. Falls die eMail ohne Text gesendet wird, wird automatisch das Datum und die Uhrzeit eingesetzt (z.B. "Mail send at Thu, 23 Mar 2006 02:31:44 -0800"). Die Adresse des Strings kann mit dem ADR Operator festgelegt werden.

cbMessage: Länge des eMail Textes. Die Länge kann durch den LEN Operator festgelegt werden.

bExecute: Der Funktionsbaustein wird durch eine steigende Flanke an dieser Eingangsvariablen aktiviert.

sAttachments: Auflistung von Dateinamen

tTimeout: Die maximale, erlaubte Zeit, um einen Befehl auszuführen.

VAR_OUTPUT

 VAR_OUTPUT
        bBusy   : BOOL;
        bError  : BOOL;
        nErrId  : UDINT;
END_VAR

bBusy: Die Ausgangsvariable bleibt TRUE, bis der Block einen Befehl ausgeführt hat, allerdings nur bis zum Ablauf von tTimeOut.

bError : Die Ausgangsvariable wird auf TRUE umgeschaltet sobald ein Fehler bei der Ausführung des Befehls auftaucht. Der Befehls-spezifische Fehler ist in iErrorId enthalten.

nErrId: Beinhaltet den befehlsspezifischen Fehler Code des zuletzt ausgeführten Befehls (siehe Tabelle).

Hinweise:

- Stellen Sie sicher, dass Sie \o nicht innerhalb der Byte-Anordnung verwenden, ansonsten wird die Nachricht gestoppt.
- Die maximale Anzahl von Zeichen in einer Nachricht beträgt 510.725 - insgesamt haben Sie 1275 Zeichen für From, To, Cc, Bcc and Subject.

Entwicklungsumgebung | Zielsystem | Einzubindende SPS Bibliotheken
TwinCAT v2.8.0 und höher |  | TcSmtp.lib


SmtpSrv FB_SmtpFull

TS6350 | TwinCAT SMS/SMTP Server CE

FUNCTION_BLOCK FB_SmtpFull

Dieser Funktionsbaustein kommuniziert über ADS mit dem TwinCAT SMTP Server. Er bietet sehr umfangreiche Mail-Funktionalitäten, wie zum Beispiel die Priorisierung von Emails aus der SPS heraus. Im Detail werden die einzelnen Parameter in dieser Dokumentation erläutert.

VAR_INPUT

 VAR_INPUT
        sNetId                  : T_AmsNetID;           (* AmsNetID *)
        sSmtpServer             : T_MaxString;          (* Smtp Server addres ( IP or Name) *)
        sUsername                       : T_MaxString;          (* Smtp Username *)
        sPassword                       : T_MaxString;          (* Smtp Password *)
        nAuth                   : UDINT;                   (* Smtp Auth Type*)
        sFrom                   : T_MaxString;          (* Sender stzring *)
        sTo                     : T_MaxString;          (* To recipient string *)
        sCc                     : T_MaxString;          (* Cc recipient string *)
        sBcc                    : T_MaxString;          (* Bcc recipient string *)
        sDispositionNotification : T_MaxString;          (* Disposition notification recipent string *)
        sReturnReceipt           : T_MaxString;          (* Return recipent string *)
        nPriority                       : UDINT;                   (* Priority value *)
        nSensitivity            : UDINT;             (* Sensitivity value *)
        nPort                   : UDINT;             (* Communication port *)
        nContentType            : UDINT;             (* Content type *)
        sSubject                        : T_MaxString;          (* Subject string *)
        pMessage                        : DWORD;                   (* Pointer to the message *)
        cbMessage                       : UDINT;                   (* Messagelenght in byte to send *)
        sAttachments            : ARRAY [0..32] OF STRING;    (* Different attachments *)
        bExecute                        : BOOL;                    (* Trigger flag *)
        tTimeout                        : TIME := T#20s;              (* Communication timeout *)
END_VAR

sNetId: AmsNetID, auf dem der TwinCAT SMTP Server läuft.

sSmtpServer: Name oder IP des SMTP Servers

sUsername: Benutzername des SMTP Servers

sPassword: Passwort für den SMTP Server.

nAuth: Smtp Auth Type:
0 = AUTH NONE
1 = RESERVED
2 = AUTH LOGIN
3 = AUTH NTLM
4 = AUTH PLAIN

sFrom: Ein String, der die eMail Adresse des Absenders enthält. Der Absender muss festgelegt werden. Der String ist auf 255 Zeichen limitiert.

sTo: Ein String, der die eMail Adresse des Empfängers enthält. Mindestens ein Empfänger muss eingetragen werden. Es ist aber auch möglich mehrere Adressen einzutragen. Diese müssen per Semicolon getrennt werden. Der String ist auf 255 Zeichen limitiert.

sCc: Ein String, der die eMail Adresse von weiteren Empfängern enthält (cc=carbon copy). Es ist möglich mehrere Adressen von Empfängern einzutragen, diese müssen dann durch ein Semicolon getrennt werden. Der String kann aber auch leer bleiben. Dem/den Empfänger(n) wird eine Kopie der eMail zugeschickt. Die eMail Adresse des Empfängers ist für andere Empfänger sichtbar. Der String ist auf 255 Zeichen limitiert.

sBcc: Ein String der die eMail Adressen von weiteren Empfängern enthält (Bcc = blind carbon copy). Es ist möglich mehrere Adressen von Empfängern einzutragen, diese müssen dann durch ein Semicolon getrennt werden. Der String kann aber auch leer bleiben. Dem/den Empfänger(n) wird eine Kopie der eMail zugeschickt. Die eMail Adresse der Empfänger ist für andere Empfänger nicht sichtbar. Der String ist auf 255 Zeichen limitiert.

sDispositionNotification: Die hier angegebene Mail-Adresse, erhält eine Lesebestätigung der Empfänger von sTo und sCc. Voraussetzung dafür ist jedoch, dass diese auch von den Empfängern gesendet wird.

sReturnReceipt: An die hier angegebene Mail-Adresse wird eine Übertragungsbestätigung der gesendeten Mail geschickt.

nPriority: Mit diesem Parameter können Sie die Priorität der Mail einstellen:
1 = Highest
2 = not used
3 = Normal
4 = not used
5 = Lowest

nSensitivity: Mit diesem Parameter können Sie die Vertraulichkeit der Nachricht einstellen:
0 = Private
1 = Personal
2 = Normal
3 = Confidential

nPort: Hier können Sie den Kommunikations-Port auswählen. Sollten Sie keinen eigenen Port eintragen, so wird auf den Default-Port 25 zurückgegriffen.

nContentType: Durch diesen Parameter ist es möglich beispielsweise HTML-Code, welcher per Pointer (pMessage) und Größe (cbMessage) einer Stringvariablen dem Baustein übergeben wird, in der eMail lesbar zu machen.

sSubject: Dieser String enthält den Betreff der eMail. Falls die eMail ohne Betreff gesendet wird, wird automatisch der Computername des Absenders in die Betreffzeile geschrieben (z.B. "eMail gesendet von: CX_00762C"). Der String der Betreffzeile ist auf 255 Zeichen limitiert.

pMessage: Dieser Parameter gibt die Adresse des Strings, welcher den Nachrichtentext enthält, an. Falls die eMail ohne Text gesendet wird, wird automatisch das Datum und die Uhrzeit eingesetzt (z.B. "Mail send at Thu, 23 Mar 2006 02:31:44 -0800"). Die Adresse des Strings kann mit dem ADR Operator ermittelt werden.

cbMessage: Länge des eMail Textes. Die Länge kann durch den LEN Operator festgelegt werden.

bExecute: Der Funktionsbaustein wird durch eine steigende Flanke an dieser Eingangsvariablen aktiviert.

sAttachments: Auflistung von Dateinamen

tTimeout: Die erlaubte, maximale Zeit, um einen Befehl auszuführen.

VAR_OUTPUT

      VAR_OUTPUT
        bBusy   : BOOL;
        bError  : BOOL;
        nErrId  : UDINT;
END_VAR

bBusy: Der Output bleibt TRUE, bis der Block einen Befehl ausgeführt hat, allerdings nur bis zum Ablauf von tTimeOut.

bError : Der Output wird auf TRUE umgeschaltet sobald ein Fehler bei der Ausführung des Befehls auftaucht. Der Befehls-spezifische Fehler ist in iErrorId enthalten.

nErrId: Beinhaltet den befehlsspezifischen Fehler Code des zuletzt ausgeführten Befehls (siehe Tabelle).

Hinweise:

- Stellen Sie sicher, dass Sie \o nicht innerhalb der Byte-Anordnung verwenden, ansonsten wird die Nachricht gestoppt.
- Die maximale Anzahl von Zeichen in einer Nachricht beträgt 510.725 - insgesamt haben Sie 1275 Zeichen für From, To, Cc, Bcc and Subject.

Development environment | Target system type | PLC libraries to be linked
TwinCAT v2.10.0 and above |  | TcSmtp.lib


SmtpSrv FB_SmtpV2

TS6350 | TwinCAT SMS/SMTP Server CE

FUNCTION_BLOCK FB_SmtpV3

Der Block sendet einen Bytestream zu einem entfernten ADS Gerät. Der TwinCAT ADS Smtp Dient muss auf dem Zielsystem laufen, damit der Stream entgegengenommen und als Email verschickt wird.

VAR_INPUT

 VAR_INPUT
        sNetId          : T_AmsNetID;   (* AmsNetID *)
        sSmtpServer     : T_MaxString;  (* Smtp Server addres ( IP or Name) *)
        sUsername               : T_MaxString;  (* Smtp Username *)
        sPassword               : T_MaxString;  (* Smtp Password *)
        nEncryption             : UDINT;           (* 0=NONE, 1=STARTTLS, 2=SSL *)
        sFrom           : T_MaxString;  (* Sender string *)
        sTo             : T_MaxString;  (* To recipient string *)
        sCc             : T_MaxString;  (* Cc recipient string *)
        sBcc            : T_MaxString;  (* Bcc recipient string *)
        sSubject                : T_MaxString;  (* Subject string *)
        pMessage                : DWORD;           (* Pointer to the message *)
        cbMessage               : UDINT;           (* Messagelenght in byte to send *)
        bExecute                : BOOL;
        tTimeout                : TIME := T#20s;
END_VAR

sNetId: AmsNetID on desTwinCAT Smtp server.

sSmtpServer: Name oder IP des Smtp server.

sUsername: Username für den Smtp Server.

sPassword: Password für den Smtp Server.

nEncryption: Smtp Verschlüsselungstyp:
0 = keine Verschlüsselung
1 = STARTTLS
2 = SSL

sFrom: Ein String, der die eMail Adresse des Absenders enthält. Der Absender muss festgelegt werden. Der String ist auf 255 Zeichen limitiert.

sTo: Ein String, der die eMail Adresse des Empfängers enthält. Mindestens ein Empfänger muss eingetragen werden. Es ist aber auch möglich mehrere Adressen einzutragen. Diese müssen per Simicolon getrennt werden. Der String ist auf 255 Zeichen limitiert.

sCc: Ein String, der die eMail Adresse von weiteren Empfängern enthält (cc=carbon copy). Es ist möglich mehrere Adressen von Empfängern einzutragen, diese müssen dann durch ein Simicolon getrennt werden. Der String kann aber auch leer bleiben. Dem/den Empfänger(n) wird eine Kopie der eMail zugeschickt. Die eMail Adresse des Empfängers ist für andere Empfänger sichtbar. Der String ist auf 255 Zeichen limitiert.

sBcc: Ein String der die eMail Adressen von weiteren Empfängern enthält (Bcc = blind carbon copy). Es ist möglich mehrere Adressen von Empfängern einzutragen, diese müssen dann durch ein Simicolon getrennt werden. Der String kann aber auch leer bleiben. Dem/den Empfänger(n) wird eine Kopie der eMail zugeschickt. Die eMail Adresse der Empfänger ist für andere Empfänger nicht sichtbar. Der String ist auf 255 Zeichen limitiert.

sSubject: Dieser String enthält den Betreff der eMail. Falls die eMail ohne Betreff gesendet wird, wird automatisch der Computername des Absenders in die Betreffzeile geschrieben (z.B. "eMail gesendet von: CX_00762C"). Der String der Betreffzeile ist auf 255 Zeichen limitiert.

pMessage: Dieser Parameter gibt die Adresse des Strings, welcher den Nachrichtentext enthält, an.Falls die eMail ohne Text gesendet wird, wird automatisch das Datum und die Uhrzeit eingesetzt (z.B. "Mail send at Thu, 23 Mar 2006 02:31:44 -0800"). Die Adresse des Strings kann mit dem ADR Operator festgelegt werden.

cbMessage: Länge des eMail Textes. Die Länge kann durch den LEN Operator festgelegt werden.

bExecute: Der Funktionsbaustein wird durch eine steigende Flanke an dieser Eingangsvariablen aktiviert.

tTimeout: Die maximale, erlaubte Zeit, um einen Befehl auszuführen.

VAR_OUTPUT

 VAR_OUTPUT
        bBusy   : BOOL;
        bError  : BOOL;
        nErrId  : UDINT;
END_VAR

bBusy: Die Ausgangsvariable bleibt TRUE, bis der Block einen Befehl ausgeführt hat, allerdings nur bis zum Ablauf von tTimeOut.

bError : Die Ausgangsvariable wird auf TRUE umgeschaltet sobald ein Fehler bei der Ausführung des Befehls auftaucht. Der Befehls-spezifische Fehler ist in nErrId enthalten.

nErrId: Beinhaltet den befehlsspezifischen Fehler Code des zuletzt ausgeführten Befehls (siehe Tabelle).

Hinweise:

- Stellen Sie sicher, dass Sie \o nicht innerhalb der Byte-Anordnung verwenden, ansonsten wird die Nachricht gestoppt.
- Die maximale Anzahl von Zeichen in einer Nachricht beträgt 510.725 - insgesamt haben Sie 1275 Zeichen für From, To, Cc, Bcc and Subject.

Development environment | Target system type | PLC libraries to be linked
TwinCAT v2.8.0 und größer |  | TcSmtp.lib


SmtpSrv FB_SmtpFull

TS6350 | TwinCAT SMS/SMTP Server CE

FUNCTION_BLOCK FB_SmtpV3_Full

Dieser Funktionsbaustein kommuniziert über ADS mit dem TwinCAT SMTP Server. Er bietet sehr umfangreiche Mail-Funktionalitäten, wie zum Beispiel die Priorisierung von Emails aus der SPS heraus. Im Detail werden die einzelnen Parameter in dieser Dokumentation erläutert.

VAR_INPUT

VAR_INPUT
        sNetId                  : T_AmsNetID;           (* AmsNetID *)
        sSmtpServer             : T_MaxString;          (* Smtp Server addres ( IP or Name) *)
        sUsername               : T_MaxString;          (* Smtp Username *)
        sPassword               : T_MaxString;          (* Smtp Password *)
        nEncryption             : UDINT;                (* 0=NONE, 1=TLS, 2=SSL*)
        sFrom                   : T_MaxString;          (* Sender string *)
        sTo                     : T_MaxString;          (* To recipient string *)
        sCc                     : T_MaxString;          (* Cc recipient string *)
        sBcc                    : T_MaxString;          (* Bcc recipient string *)
        sDispositionNotification: T_MaxString;           (* Disposition notification recipent string *)
        sReturnReceipt           : T_MaxString;          (* Return recipent string *)
        nPriority                       : UDINT;                   (* Priority value *)
        nSensitivity            : UDINT;             (* Sensitivity value *)
        nPort                   : UDINT;             (* Communication port *)
        nContentType            : UDINT;             (* Content type *)
        sSubject                        : T_MaxString;          (* Subject string *)
        pMessage                        : DWORD;                   (* Pointer to the message *)
        cbMessage                       : UDINT;                   (* Messagelenght in byte to send *)
        sAttachments            : ARRAY [0..32] OF STRING;    (* Different attachments *)
        bExecute                        : BOOL;                    (* Trigger flag *)
        tTimeout                        : TIME := T#20s;              (* Communication timeout *)
END_VAR

sNetId: AmsNetID, auf dem der TwinCAT SMTP Server läuft.

sSmtpServer: Name oder IP des SMTP Servers

sUsername: Benutzername des SMTP Servers

sPassword: Passwort für den SMTP Server.

nEncryption: Smtp Verschlüsselungstyp:
0 = NONE
1 = STARTTLS
2 = SSL

sFrom: Ein String, der die eMail Adresse des Absenders enthält. Der Absender muss festgelegt werden. Der String ist auf 255 Zeichen limitiert.

sTo: Ein String, der die eMail Adresse des Empfängers enthält. Mindestens ein Empfänger muss eingetragen werden. Es ist aber auch möglich mehrere Adressen einzutragen. Diese müssen per Semicolon getrennt werden. Der String ist auf 255 Zeichen limitiert.

sCc: Ein String, der die eMail Adresse von weiteren Empfängern enthält (cc=carbon copy). Es ist möglich mehrere Adressen von Empfängern einzutragen, diese müssen dann durch ein Semicolon getrennt werden. Der String kann aber auch leer bleiben. Dem/den Empfänger(n) wird eine Kopie der eMail zugeschickt. Die eMail Adresse des Empfängers ist für andere Empfänger sichtbar. Der String ist auf 255 Zeichen limitiert.

sBcc: Ein String der die eMail Adressen von weiteren Empfängern enthält (Bcc = blind carbon copy). Es ist möglich mehrere Adressen von Empfängern einzutragen, diese müssen dann durch ein Semicolon getrennt werden. Der String kann aber auch leer bleiben. Dem/den Empfänger(n) wird eine Kopie der eMail zugeschickt. Die eMail Adresse der Empfänger ist für andere Empfänger nicht sichtbar. Der String ist auf 255 Zeichen limitiert.

sDispositionNotification: Die hier angegebene Mail-Adresse, erhält eine Lesebestätigung der Empfänger von sTo und sCc. Voraussetzung dafür ist jedoch, dass diese auch von den Empfängern gesendet wird.

sReturnReceipt: An die hier angegebene Mail-Adresse wird eine Übertragungsbestätigung der gesendeten Mail geschickt.

nPriority: Mit diesem Parameter können Sie die Priorität der Mail einstellen:
1 = Highest
2 = not used
3 = Normal
4 = not used
5 = Lowest

nSensitivity: Mit diesem Parameter können Sie die Vertraulichkeit der Nachricht einstellen:
0 = Private
1 = Personal
2 = Normal
3 = Confidential

nPort: Hier können Sie den Kommunikations-Port auswählen. Sollten Sie keinen eigenen Port eintragen, so wird auf den Default-Port 25 zurückgegriffen.

nContentType: Durch diesen Parameter ist es möglich beispielsweise HTML-Code, welcher per Pointer (pMessage) und Größe (cbMessage) einer Stringvariablen dem Baustein übergeben wird, in der eMail lesbar zu machen.

sSubject: Dieser String enthält den Betreff der eMail. Falls die eMail ohne Betreff gesendet wird, wird automatisch der Computername des Absenders in die Betreffzeile geschrieben (z.B. "eMail gesendet von: CX_00762C"). Der String der Betreffzeile ist auf 255 Zeichen limitiert.

pMessage: Dieser Parameter gibt die Adresse des Strings, welcher den Nachrichtentext enthält, an. Falls die eMail ohne Text gesendet wird, wird automatisch das Datum und die Uhrzeit eingesetzt (z.B. "Mail send at Thu, 23 Mar 2006 02:31:44 -0800"). Die Adresse des Strings kann mit dem ADR Operator ermittelt werden.

cbMessage: Länge des eMail Textes. Die Länge kann durch den LEN Operator festgelegt werden.

bExecute: Der Funktionsbaustein wird durch eine steigende Flanke an dieser Eingangsvariablen aktiviert.

sAttachments: Auflistung von Dateinamen

tTimeout: Die erlaubte, maximale Zeit, um einen Befehl auszuführen.

VAR_OUTPUT

 VAR_OUTPUT
        bBusy   : BOOL;
        bError  : BOOL;
        nErrId  : UDINT;
END_VAR

bBusy: Der Output bleibt TRUE, bis der Block einen Befehl ausgeführt hat, allerdings nur bis zum Ablauf von tTimeOut.

bError : Der Output wird auf TRUE umgeschaltet sobald ein Fehler bei der Ausführung des Befehls auftaucht. Der Befehls-spezifische Fehler ist in iErrorId enthalten.

nErrId: Beinhaltet den befehlsspezifischen Fehler Code des zuletzt ausgeführten Befehls (siehe Tabelle).

Hinweise:

- Stellen Sie sicher, dass Sie \o nicht innerhalb der Byte-Anordnung verwenden, ansonsten wird die Nachricht gestoppt.
- Die maximale Anzahl von Zeichen in einer Nachricht beträgt 510.725 - insgesamt haben Sie 1275 Zeichen für From, To, Cc, Bcc and Subject.

Development environment | Target system type | PLC libraries to be linked
TwinCAT v2.10. and above |  | TcSmtp.lib


SmtpSrv How to

TS6350 | TwinCAT SMS/SMTP Server

How to - Best practice

In diesem Bereich werden häufige Anforderungen und deren Lösung aufgezeigt, um Ihnen die Arbeit mit TwinCAT SMTP zu erleichtern.

Versenden von Anhängen

Verwenden Sie den Baustein FB_SmtpV3_Full und übergeben den Dateipfad am Eingang sAttachments.

Hinweis: Beachten Sie die unterschiedlichen Pfadangaben von Windows und Windows CE

Windows:

sAttachments: ARRAY [0..32] OF STRING := 'C:\Data.csv', 'C:\Config.xml';

Windows CE:

sAttachments: ARRAY [0..32] OF STRING := '\Hard Disk\Data.csv', '\Hard Disk\Config.xml';

Mails verschlüsseln

Verwenden Sie den Baustein FB_SmtpV3 oder FB_SmtpV3_Full und aktivieren den Verschlüsselung über den Eingang nEncryption.

0 = NONE

1 = STARTTLS

2 = SSL

Mehr als ein Empfänger angeben

Verwenden Sie den Baustein FB_SmtpV3 oder FB_SmtpV3_Full und trennen mehrerer Empfänger (To, Cc, Bcc) mit einem Komma.

sTo:= 'service@customer.com, support@integrator.com';

Mails mit dem CX9000 versenden

Der CX9000 wird nur mit einem LF-Image (Low-Footprint) ausgeliefert. Dieses wird nur bis zur Version 1.0.13 unterstützt.

Troubleshoot

Bitte lesen Sie unseren Troubleshoot-Artikel.


SmtpSrv Sample SmtpFull

 html>
TS6350 | TwinCAT SMS/SMTP Server

Beispiel: Mailversand aus der SPS

Anhand einer steigender Flanke an bStart wird eine Mail versendet.

Download

Hinweis: Die Mailadressen und die Daten des SMTP Servers müssen vorher angepasst werden.

Programmvariablen

PROGRAM MAIN
VAR
    fbSendMail: FB_SmtpV3;
    sMessage: STRING := 'Hello Beckhoff';
    bStart: BOOL;
    bBusy: BOOL;
    bError: BOOL;
    nErrId: UDINT;
    nMails: UINT;
END_VAR

Programm-code

fbSendMail(sNetId:= '',
    sSmtpServer:= 'mail.company.com',
    sUsername:= '',
    sPassword:= '',
    nEncryption:= 0,
    sFrom:= 'machine@company.com',
    sTo:= 'service@customer.com',
    sSubject:= 'Mail sent via TwinCAT SMTP',
    pMessage:= ADR(sMessage),
    cbMessage:= SIZEOF(sMessage),
    bExecute:= bStart,
    bBusy=> bBusy,
    bError=> bError,
    nErrId=> nErrId);

IF NOT bError AND NOT bBusy AND bStart THEN
    bStart := FALSE;
END_IF

Development environment | Target system | PLC libraries to include
TwinCAT v2.10.0 or higher with (x86) | x86 or ARM | TcSmtp.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib will be included automatically )


SmtpSrv Sample SmtpFull

TS6350 | TwinCAT SMS/SMTP Server

Beispiel: Versenden von Mails in HTML

Mit dem FB_SmtpV3Full stehen sehr umfangreiche Email Funktionalitäten für die SPS zur Verfügung. Es wird unter anderem der Email-Text in HTML Code übergeben, was ganz neue Möglichkeiten der Formatierung bietet. So können sehr leicht aktuelle Messwert o.ä. in einer strukturierten Form übertragen werden.

Download

Hinweis: Die Mailadressen und die Daten des SMTP Servers müssen vorher angepasst werden.

Programm-Variablen

PROGRAM MAIN
VAR
    fbSmtpFull: FB_SmtpV3_Full;
    sMessage_HTML: STRING := '<!DOCTYPE html><html><body><p>Sent by TwinCAT SMTP</p></body></html>';
    bStart: BOOL;
    bBusy: BOOL;
    bError: BOOL;
    nErrId: UDINT;
END_VAR

Programm-Code

fbSmtpFull(
    sNetId:= '',
    sSmtpServer:= 'mail.company.com',
    sUsername:= '',
    sPassword:= '',
    nEncryption:= 0,
    sFrom:= 'machine@company.com',
    sTo:= 'service@customer.com',
    nContentType:= 2,
    sSubject:= 'Email from your Beckhoff PLC',
    pMessage:= ADR(sMessage_HTML),
    cbMessage:= SIZEOF(sMessage_HTML),
    bExecute:= bStart,
    bBusy=> bBusy,
    bError=> bError,
    nErrId=> nErrId);

IF NOT bError AND NOT bBusy AND bStart THEN
    bStart := FALSE;
END_IF


SmtpSrv Overview

TS6350 | TwinCAT SMS/SMTP Server

Troubleshooting

The following list provides some basic help in case any errors should occur and should be read before contacting our support department.
1. Check if one of the PLC function blocks returns an errorcode:
SMTP Error codes
2. Activate the logging option in the TcSmtpConfig.xml
Enable verbose logging by setting the EnableLogFile = 2 and restart TwinCAT. The log file will be generate in \TwinCAT\Functions\TF6350-SMS-SMTP .
3. Check SMTP Connection via Telnet
Use a telnet client (e.g PuTTY), try to connect to SMTP port (default 25) of the mail server and send a HELO command
220 mail.company.com Microsoft ESMTP MAIL Service ready
HELO
250 mail.company.com Hello [192.168.0.123]
The mail server should reply with your IP.

Should the troubleshooting checklist does not help, please contact our support department and provide the following information:
General system information
  • What kind of hardware is being used on the computer running TF6350 SMS/SMTP?
  • Beckhoff IPC or Embedded PC: Which product number does the PC have?
  • Which Operating System image version is currently installed on that computer?
Product-related system information
  • Which version of TF6350 SMS/STMP is being used?
  • Which function blocks of the Tc2_SMTP library are being used in the PLC program?
  • Which SMTP Server is being used?
  • Please provide the SMTP logfile (see 2. of the troubleshooting list)

Please provide an exact description of the environment in which the product TF6350 SMS/SMTP is being used

  • Where is the computer running TF6350 SMS/SMTP located?
  • Where is the SMTP-Server located? (Local network, Internet)
  • Which encryption is in use? (NON, STARTTLS, SSL)
  • What are the IP settings of the Mail-Server and the computer running TF6350 SMS/SMTP? (IP address, subnet mask, Ports)


SmtpSrv ErrorCodes

TS6350 | TwinCAT SMS/SMTP Server CE

Fehlercodes

Diese Liste gibt mögliche Fehlercodes für das Supplementprodukt TwinCAT SMTP Server an. Sollten Sie einen Fehlercode bekommen, welchen Sie nicht in der Liste finden, dann schauen Sie bitte in den ADS Return Codes oder in der Liste der WinSockErrorCodes nach.

Fehlercode (hex) | Fehlercode (dec) | Beschreibung
< 0x8000 | < 32778 | ADS return code
0x800A | 32778 | Not connected
0x800B | 32779 | Sender expected
0x800C | 32780 | Recipients expected
0x800D | 32781 | Send FROM command failed
0x800E | 32782 | Send DATA command failed
0x800F | 32783 | Send mail header failed
0x8010 | 32784 | Send mail body failed
0x8011 | 32785 | Send "end of mail indicator" failed
0x8012 | 32786 | Send "RCPT" command failed
0x8013 | 32787 | Server Response got no username request
0x8014 | 32788 | Server Response got no password request
0x8015 | 32789 | Unable to create socket connection
0x8016 | 32790 | Authentication type not supported by smtp server
0x8017 | 32791 | Wrong username or password
0x8018 | 32792 | Not supported
0x8019 | 32793 | Invalid hostname
0x801A | 32794 | Unable to send attachment
0x801B | 32795 | File not found
0x801C | 32796 | Invalid Version (New SMTP Server with old SMTP PLC library)
0x801D | 32797 | Unable to connect (Connection error => sometimes wrong port or wrong server)
0x801E | 32798 | Unable to create socket
0x801F | 32799 | WSA startup failed
0x8020 | 32800 | Invalid hostname
0x8021 | 32801 | Unecpected response from server
0x8022 | 32802 | Error while receiving data
0x8023 | 32803 | No supported authentication methods found
0x8024 | 32804 | Invalid parameter
0x80A0 | 32928 | Security interface not found
0x80A1 | 32929 | Unable to call security interface
0x80A2 | 32930 | Security initialization failed
0x80A4 | 32932 | Unable to create credentials
0x80A5 | 32933 | SSL-handshake failed
0x80A6 | 32934 | Invalid server credentials
0x80A7 | 32935 | Unable to verify server
0x80A8 | 32936 | Unable to encrypt message
0x80A9 | 32937 | Unable to decrypt message

In älteren Versionen des Servers (< 1.0.14) können außerdem folgende Fehler auftreten:

Fehlercode (hex) | Fehlercode (dec) | Beschreibung
0x000A | 10 | Not connected
0x000B | 11 | Sender expected
0x000C | 12 | Recipients expected
0x000D | 13 | Send FROM command failed
0x000E | 14 | Send DATA command failed
0x000F | 15 | Send mail header failed
0x0010 | 16 | Send mail body failed
0x0011 | 17 | Send "end of mail indicator" failed
0x0012 | 18 | Send "RCPT" command failed
0x0064 | 100 | General error
0x0065 | 101 | Invalid parameter
0x0066 | 102 | Funtion not loaded
0x0067 | 103 | Dll not loaded
0x0068 | 104 | TcSmtpDll.dll cannot load. Check the installation from the TcSmtpDll.dll.
0x80D3 | 211 | System status, or system help reply
0x80D6 | 214 | Help message [Information on how to use the receiver or the meaning of a particular non-standard command; this reply is useful only to the human user]
0x80FB | 251 | User not local; will forward to <forward-path>
0x8163 | 354 | Start mail input; end with <CRLF>.<CRLF>
0x81A5 | 421 | <domain> Service not available, closing transmission channel [This may be a reply to any command if the service knows it must shut down]
0x81C2 | 450 | Requested mail action not taken: mailbox unavailable [E.g., mailbox busy]
0x81C3 | 451 | Requested action aborted: error in processing
0x81C4 | 452 | Requested action not taken: insufficient system storage
0x81F4 | 500 | Syntax error, command unrecognized [This may include errors such as command line too long]
0x81F5 | 501 | Syntax error in parameters or arguments.
0x81F6 | 502 | Command not implemented.
0x81F7 | 503 | Bad sequence of commands.
0x8504 | 504 | Command parameter not implemented
0x8226 | 550 | Requested action not taken: mailbox unavailable [E.g., mailbox not found, no access]
0x8227 | 551 | User not local; please try <forward-path>
0x8228 | 552 | Requested mail action aborted: exceeded storage allocation
0x8229 | 553 | Requested action not taken: mailbox name not allowed [E.g., mailbox syntax incorrect]
0x8224 | 554 | Transaction failed


TwinCAT SMS/SMTP Server - Übersicht

TS6350 | TwinCAT SMS/SMTP Server CE

Windows Socket Fehler Codes

Die folgende Liste beschreibt die möglichen Fehler Codes, die durch die WSAGetLastError Funktion zurückkommen könnten. Die Fehler sind in alphabetischer Reihenfolge, nach Fehler-Makros sortiert, aufgelistet. Einige Fehler Codes, die in Winsock2.h definiert sind, sind nicht zurückgekommen - diese sind nicht in der Liste enthalten.

Rückgabewert Beschreibung
WSAEINTR10004
Interrupted function call.
blocking operation was interrupted by a call to WSACancelBlockingCall.
WSAEACCES
10013
Permission denied.
An attempt was made to access a socket in a way forbidden by its access permissions. An example is using a broadcast address for sendto without broadcast permission being set using setsockopt(SO_BROADCAST).

Another possible reason for the WSAEACCES error is that when the bind function is called (on Windows NT 4 SP4 or later), another application, service, or kernel mode driver is bound to the same address with exclusive access. Such exclusive access is a new feature of Windows NT 4 SP4 and later, and is implemented by using the SO_EXCLUSIVEADDRUSE option.
WSAEFAULT
10014
Bad address.
The system detected an invalid pointer address in attempting to use a pointer argument of a call. This error occurs if an application passes an invalid pointer value, or if the length of the buffer is too small. For instance, if the length of an argument, which is a sockaddr structure, is smaller than the sizeof(sockaddr).
WSAEINVAL
10022
Invalid argument.
Some invalid argument was supplied (for example, specifying an invalid level to the setsockopt function). In some instances, it also refers to the current state of the socket—for instance, calling accept on a socket that is not listening.
WSAEMFILE
10024
Too many open files.
Too many open sockets. Each implementation may have a maximum number of socket handles available, either globally, per process, or per thread.
WSAEWOULDBLOCK
10035
Resource temporarily unavailable.
This error is returned from operations on nonblocking sockets that cannot be completed immediately, for example recv when no data is queued to be read from the socket. It is a nonfatal error, and the operation should be retried later. It is normal for WSAEWOULDBLOCK to be reported as the result from calling connect on a nonblocking SOCK_STREAM socket, since some time must elapse for the connection to be established.
WSAEINPROGRESS
10036
Operation now in progress.
A blocking operation is currently executing. Windows Sockets only allows a single blocking operation—per- task or thread—to be outstanding, and if any other function call is made (whether or not it references that or any other socket) the function fails with the WSAEINPROGRESS error.
WSAEALREADY
10037
Operation already in progress.
An operation was attempted on a nonblocking socket with an operation already in progress—that is, calling connect a second time on a nonblocking socket that is already connecting, or canceling an asynchronous request (WSAAsyncGetXbyY) that has already been canceled or completed.
WSAENOTSOCK
10038
Socket operation on nonsocket.
An operation was attempted on something that is not a socket. Either the socket handle parameter did not reference a valid socket, or for select, a member of an fd_set was not valid.
WSAEDESTADDRREQ
10039
Destination address required.
A required address was omitted from an operation on a socket. For example, this error is returned if sendto is called with the remote address of ADDR_ANY.
WSAEMSGSIZE
10040
Message too long.
A message sent on a datagram socket was larger than the internal message buffer or some other network limit, or the buffer used to receive a datagram was smaller than the datagram itself.
WSAEPROTOTYPE
10041
Protocol wrong type for socket.
A protocol was specified in the socket function call that does not support the semantics of the socket type requested. For example, the ARPA Internet UDP protocol cannot be specified with a socket type of SOCK_STREAM.
WSAENOPROTOOPT
10042
Bad protocol option.
An unknown, invalid or unsupported option or level was specified in a getsockopt or setsockopt call.
WSAEPROTONOSUPPORT
10043
Protocol not supported.
The requested protocol has not been configured into the system, or no implementation for it exists. For example, a socket call requests a SOCK_DGRAM socket, but specifies a stream protocol.
WSAESOCKTNOSUPPORT
10044
Socket type not supported.
The support for the specified socket type does not exist in this address family. For example, the optional type SOCK_RAW might be selected in a socket call, and the implementation does not support SOCK_RAW sockets at all.
WSAEOPNOTSUPP
10045
Operation not supported.
The attempted operation is not supported for the type of object referenced. Usually this occurs when a socket descriptor to a socket that cannot support this operation is trying to accept a connection on a datagram socket.
WSAEPFNOSUPPORT
10046
Protocol family not supported.
The protocol family has not been configured into the system or no implementation for it exists. This message has a slightly different meaning from WSAEAFNOSUPPORT. However, it is interchangeable in most cases, and all Windows Sockets functions that return one of these messages also specify WSAEAFNOSUPPORT.
WSAEAFNOSUPPORT
10047
Address family not supported by protocol family.
An address incompatible with the requested protocol was used. All sockets are created with an associated address family (that is, AF_INET for Internet Protocols) and a generic protocol type (that is, SOCK_STREAM). This error is returned if an incorrect protocol is explicitly requested in the socket call, or if an address of the wrong family is used for a socket, for example, in sendto.
WSAEADDRINUSE
10048
Address already in use.
Typically, only one usage of each socket address (protocol/IP address/port) is permitted. This error occurs if an application attempts to bind a socket to an IP address/port that has already been used for an existing socket, or a socket that was not closed properly, or one that is still in the process of closing. For server applications that need to bind multiple sockets to the same port number, consider using setsockopt (SO_REUSEADDR). Client applications usually need not call bind at all— connect chooses an unused port automatically. When bind is called with a wildcard address (involving ADDR_ANY), a WSAEADDRINUSE error could be delayed until the specific address is committed. This could happen with a call to another function later, including connect, listen, WSAConnect, or WSAJoinLeaf.
WSAEADDRNOTAVAIL
10049
Cannot assign requested address.
The requested address is not valid in its context. This normally results from an attempt to bind to an address that is not valid for the local computer. This can also result from connect, sendto, WSAConnect, WSAJoinLeaf, or WSASendTo when the remote address or port is not valid for a remote computer (for example, address or port 0).
WSAENETDOWN
10050
Network is down.
A socket operation encountered a dead network. This could indicate a serious failure of the network system (that is, the protocol stack that the Windows Sockets DLL runs over), the network interface, or the local network itself.
WSAENETUNREACH
10051
Network is unreachable.
A socket operation was attempted to an unreachable network. This usually means the local software knows no route to reach the remote host.
WSAENETRESET
10052
Network dropped connection on reset.
The connection has been broken due to keep-alive activity detecting a failure while the operation was in progress. It can also be returned by setsockopt if an attempt is made to set SO_KEEPALIVE on a connection that has already failed.
WSAECONNABORTED
10053
Software caused connection abort.
An established connection was aborted by the software in your host computer, possibly due to a data transmission time-out or protocol error.
WSAECONNRESET
10054
Connection reset by peer.
An existing connection was forcibly closed by the remote host. This normally results if the peer application on the remote host is suddenly stopped, the host is rebooted, the host or remote network interface is disabled, or the remote host uses a hard close (see setsockopt for more information on the SO_LINGER option on the remote socket). This error may also result if a connection was broken due to keep-alive activity detecting a failure while one or more operations are in progress. Operations that were in progress fail with WSAENETRESET. Subsequent operations fail with WSAECONNRESET.
WSAENOBUFS
10055
No buffer space available.
An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full.
WSAEISCONN
10056
Socket is already connected.
A connect request was made on an already-connected socket. Some implementations also return this error if sendto is called on a connected SOCK_DGRAM socket (for SOCK_STREAM sockets, the to parameter in sendto is ignored) although other implementations treat this as a legal occurrence.
WSAENOTCONN
10057
Socket is not connected.
A request to send or receive data was disallowed because the socket is not connected and (when sending on a datagram socket using sendto) no address was supplied. Any other type of operation might also return this error—for example, setsockopt setting SO_KEEPALIVE if the connection has been reset.
WSAESHUTDOWN
10058
Cannot send after socket shutdown.
A request to send or receive data was disallowed because the socket had already been shut down in that direction with a previous shutdown call. By calling shutdown a partial close of a socket is requested, which is a signal that sending or receiving, or both have been discontinued.
WSAETIMEDOUT
10060
Connection timed out.
A connection attempt failed because the connected party did not properly respond after a period of time, or the established connection failed because the connected host has failed to respond.
WSAECONNREFUSED
10061
Connection refused.
No connection could be made because the target computer actively refused it. This usually results from trying to connect to a service that is inactive on the foreign host—that is, one with no server application running.
WSAEHOSTDOWN
10064
Host is down.
A socket operation failed because the destination host is down. A socket operation encountered a dead host. Networking activity on the local host has not been initiated. These conditions are more likely to be indicated by the error WSAETIMEDOUT.
WSAEHOSTUNREACH
10065
No route to host.
A socket operation was attempted to an unreachable host. See WSAENETUNREACH.
WSAEPROCLIM
10067
Too many processes.
A Windows Sockets implementation may have a limit on the number of applications that can use it simultaneously.WSAStartup may fail with this error if the limit has been reached.
WSASYSNOTREADY
10091
Network subsystem is unavailable.
This error is returned by WSAStartup if the Windows Sockets implementation cannot function at this time because the underlying system it uses to provide network services is currently unavailable. Users should check:
  • That the appropriate Windows Sockets DLL file is in the current path.
  • That they are not trying to use more than one Windows Sockets implementation simultaneously. If there is more than one Winsock DLL on your system, be sure the first one in the path is appropriate for the network subsystem currently loaded.
  • The Windows Sockets implementation documentation to be sure all necessary components are currently installed and configured correctly.
WSAVERNOTSUPPORTED
10092
Winsock.dll version out of range.
The current Windows Sockets implementation does not support the Windows Sockets specification version requested by the application. Check that no old Windows Sockets DLL files are being accessed.
WSANOTINITIALISED
10093
Successful WSAStartup not yet performed.
Either the application has not called WSAStartup or WSAStartup failed. The application may be accessing a socket that the current active task does not own (that is, trying to share a socket between tasks), or WSACleanup has been called too many times.
WSAEDISCON
10101
Graceful shutdown in progress.
Returned by WSARecv and WSARecvFrom to indicate that the remote party has initiated a graceful shutdown sequence.
WSATYPE_NOT_FOUND
10109
Class type not found.
The specified class was not found.
WSAHOST_NOT_FOUND
11001
Host not found.
No such host is known. The name is not an official host name or alias, or it cannot be found in the database(s) being queried. This error may also be returned for protocol and service queries, and means that the specified name could not be found in the relevant database.
WSATRY_AGAIN
11002
Nonauthoritative host not found.
This is usually a temporary error during host name resolution and means that the local server did not receive a response from an authoritative server. A retry at some time later may be successful.
WSANO_RECOVERY
11003
This is a nonrecoverable error.
This indicates that some sort of nonrecoverable error occurred during a database lookup. This may be because the database files (for example, BSD-compatible HOSTS, SERVICES, or PROTOCOLS files) could not be found, or a DNS request was returned by the server with a severe error.
WSANO_DATA
11004
Valid name, no data record of requested type.
The requested name is valid and was found in the database, but it does not have the correct associated data being resolved for. The usual example for this is a host name-to-address translation attempt (using gethostbyname or WSAAsyncGetHostByName) which uses the DNS (Domain Name Server). An MX record is returned but no A record—indicating the host itself exists, but is not directly reachable.
WSA_INVALID_HANDLE
OS dependent
Specified event object handle is invalid.
An application attempts to use an event object, but the specified handle is not valid.
WSA_INVALID_PARAMETER
OS dependent
One or more parameters are invalid.
An application used a Windows Sockets function which directly maps to a Windows function. The Windows function is indicating a problem with one or more parameters.
WSA_IO_INCOMPLETE
OS dependent
Overlapped I/O event object not in signaled state.
The application has tried to determine the status of an overlapped operation which is not yet completed. Applications that use WSAGetOverlappedResult (with the fWait flag set to FALSE) in a polling mode to determine when an overlapped operation has completed, get this error code until the operation is complete.
WSA_IO_PENDING
OS dependent 		Overlapped operations will complete later.
The application has initiated an overlapped operation that cannot be completed immediately. A completion indication will be given later when the operation has been completed.
WSA_NOT_ENOUGH_MEMORY
OS dependent
Insufficient memory available.
An application used a Windows Sockets function that directly maps to a Windows function. The Windows function is indicating a lack of required memory resources.
WSA_OPERATION_ABORTED
OS dependent
Overlapped operation aborted.
An overlapped operation was canceled due to the closure of the socket, or the execution of the SIO_FLUSH command in WSAIoctl.
WSAINVALIDPROCTABLE
OS dependent
Invalid procedure table from service provider.
A service provider returned a bogus procedure table to Ws2_32.dll. (This is usually caused by one or more of the function pointers being null.)
WSAINVALIDPROVIDER
OS dependent
Invalid service provider version number.
A service provider returned a version number other than 2.0.
WSAPROVIDERFAILEDINIT
OS dependent
Unable to initialize a service provider.
Either a service provider's DLL could not be loaded (LoadLibrary failed) or the provider's WSPStartup/NSPStartup function failed.
WSASYSCALLFAILURE OS dependent
System call failure.
Generic error code, returned under various conditions.

Returned when a system call that should never fail does fail. For example, if a call to WaitForMultipleEvents fails or one of the registry functions fails trying to manipulate the protocol/namespace catalogs.

Returned when a provider does not return SUCCESS and does not provide an extended error code. Can indicate a service provider implementation error.


TwinCAT PLC Library: SMTP

TwinCAT SMS/SMTP Server

TwinCAT ADS SMTP Service

Der TwinCAT ADS SMTP Service wird über den Port "18000" IndexGroup "1" und IndexOffset "100" angesprochen. Damit der TwinCAT ADS SMTP Service eine E-Mail versendet, muss ihm zunächst ein passender Bytestream übergeben werden. Die PLC Bausteine in der TcSmtp.lib arbeiten mit solchen Bytestreams. Die Struktur des Bytestreams beinhaltet unter anderem Informationen zu Länge des Senders und Länge der Nachricht, welche später benutzt werden um eine E-Mail zu bilden.

Beispiele für die Struktur im FB_Smtp und FB_SmtpV2 mit anschließender Kommunikation zum Service:

TYPE ST_SendSmtp :
STRUCT
    lenFrom		: UDINT;
    lenTo		: UDINT;
    lenCC		: UDINT;
    lenBcc		: UDINT;
    lenSubject	: UDINT;
    lenMessage	: UDINT;
    (* data *)
    sFrom		: T_MaxString;
    sTo		: T_MaxString;
    sCc		: T_MaxString;
    sBcc		: T_MaxString;
    sSubject		: T_MaxString;
    sMessage		: ARRAY[0..99999] OF BYTE;
END_STRUCT
END_TYPE

TYPE ST_SendSmtpV2 :
STRUCT
    lenFrom		: UDINT;
    lenTo		: UDINT;
    lenCC		: UDINT;
    lenBcc		: UDINT;
    lenSubject	: UDINT;
    lenMessage	: UDINT;
    lenSmtpServer	: UDINT;
    lenUsername	: UDINT;
    lenPassword	: UDINT;
    (* data *)
    nVersion		: UDINT;
    sFrom		: T_MaxString;
    sTo		: T_MaxString;
    sCc		: T_MaxString;
    sBcc		: T_MaxString;
    sSubject		: T_MaxString;
    sSmtpServer	: T_MaxString;
    sUsername		: T_MaxString;
    sPassword		: T_MaxString;
    sMessage		: ARRAY[0..99999] OF BYTE;
END_STRUCT
END_TYPE

Nach dem Absetzen des ADSWrite Befehls in der PLC, nimmt der TwinCAT ADS SMTP Service diesen Bytestream entgegen und wandelt ihn zunächst zu einer C++ konformen (Byteformat)Struktur um.

Byte Struktur im TwinCAT ADS SMTP Service

#pragma pack(push, 1)

typedef struct TSendHead
{
    ULONG lenFrom;
    ULONG lenTo;
    ULONG lenCc;
    ULONG lenBcc;
    ULONG lenSubject;
    ULONG lenMessage;
    ULONG lenSmtpServer;
}SendHead;

typedef struct TSendSmtp
{
    SendHead	head;
    BYTE	data[ANYSIZE_ARRAY];
}SendSmtp;

typedef SendSmtp* PSendSmtp;

typedef struct TSendHeadV2
{
    ULONG lenFrom;
    ULONG lenTo;
    ULONG lenCc;
    ULONG lenBcc;
    ULONG lenSubject;
    ULONG lenMessage;
    ULONG lenSmtpServer;
    ULONG lenUsername;
    ULONG lenPassword;
}SendHeadV2;

typedef struct TSendSmtpV2
{
    SendHeadV2	head;
    BYTE		data[ANYSIZE_ARRAY];
}SendSmtpV2;

#pragma pack(pop)