# TwinCAT3 - Fehlermeldung "Ads Error 0x745 : Timeout has elapsed"



## Roland Rumpelmann (5 September 2018)

Guten Tag,

zurzeit beschäftige ich mich mit der Erstellung einer Oberfläche zur Visualisierung von Stückzahl einer Maschine.
Diese sollen auf einen separaten Display angezeigt werden.
Dies löse ich mit C#.
Die Maschine besitzt einer Beckhoff-Steuerung.

Mittels ADS-Client stelle ich die Verbindung zwischen der Maschine und meinem Programm her.
Dies klappt soweit auch ganz gut, das Programm läuft und die entsprechenden Stückzahlen werden in einem angezeigt.

Hier der entsprechende Code für die Verbindung zur Maschine und für die automatische Aktualisierung:​

```
[LEFT][COLOR=#222222][FONT=Verdana]        private void btnVerbindungBeckhoffSPS_Click_1(object sender, EventArgs e)[/FONT][/COLOR]
[COLOR=#222222][FONT=Verdana]        {[/FONT][/COLOR]
[COLOR=#222222][FONT=Verdana]            timer1.Start();[/FONT][/COLOR]
[COLOR=#222222][FONT=Verdana]            #region Verbindung der Maschine 324 mit der SPS(Stückzahl)[/FONT][/COLOR]
[COLOR=#222222][FONT=Verdana]            _tcClient324 = new TcAdsClient();[/FONT][/COLOR]
[COLOR=#222222][FONT=Verdana]            _tcClient324.Connect(_amsAddress324, 851);[/FONT][/COLOR]
[COLOR=#222222][FONT=Verdana]            _binReader324 = new BinaryReader(_dataStream324);[/FONT][/COLOR]
[COLOR=#222222][FONT=Verdana]            _hStückzahl324 = (_tcClient324.AddDeviceNotification("Variable", _dataStream324, 0, 4, AdsTransMode.OnChange, 10, 0, null));[/FONT][/COLOR]
[COLOR=#222222][FONT=Verdana]            _tcClient324.AdsNotification += new AdsNotificationEventHandler(adsClient_OnNotification324);[/FONT][/COLOR]
[COLOR=#222222][FONT=Verdana]            checkBoxVerbindungSPS.Checked = _tcClient324.IsConnected ? true : false;[/FONT][/COLOR][/LEFT]
```


```
[LEFT][COLOR=#222222][FONT=Verdana] private void adsClient_OnNotification324(object sender, AdsNotificationEventArgs e)[/FONT][/COLOR]
[COLOR=#222222][FONT=Verdana]        {[/FONT][/COLOR]

[COLOR=#222222][FONT=Verdana]                    e.DataStream.Position = e.Offset;[/FONT][/COLOR]
[COLOR=#222222][FONT=Verdana]                    _hStückzahl324 = _binReader324.ReadUInt16();[/FONT][/COLOR]
[COLOR=#222222][FONT=Verdana]                    nIstStückzahlSchicht324.Text = _hStückzahl324.ToString();[/FONT][/COLOR]
[COLOR=#222222][FONT=Verdana]         }[/FONT][/COLOR][/LEFT]
```
Leider bekommt mein Programm nicht mit, wenn sich die Maschine aus- und wieder einschaltet.
Des Weiteren bekomme ich die Fehlermeldung
 "Ads Error 0x745 : Timeout has elapsed", wenn ich versuche die Verbindung aufzubauen, die Maschine jedoch ausgeschaltet ist.

Gibt es für diese Fehlermeldung eine "schmale" Lösung, ohne etwas in der Steuerung zu ändern?

Gruß Roland!​


----------



## Guga (6 September 2018)

Um den Timeout kommst du nicht rum. Wenn das Gerät nicht da ist antwortet es eben nicht... Ich wüsste nicht wie du aus einem totem System eine Antwort herausbekommen willst.

Du kannst einen Neustart erkennen. Auf ADS-Ebene ist es ein Ads-Read auf der PLC mit Indexgruppe 0xF008 (ADSIGRP_SYM_VERSION). Der Wert inkrementiert um eins wenn das System neu startet.
Auf .Net Ebene müsste es "AdsConnection.AdsSymbolVersionChanged" sein.

Guga


----------



## Roland Rumpelmann (6 September 2018)

Danke erstmal für deine Antwort!

Hättest du eine Art Beispiel, wie ich den Befehl am besten einbinden könnte?

Im Infosys gibt es auch eine Möglichkeit Statusänderungen einer SPS zu erkennen.
https://infosys.beckhoff.com/index....incat.ads.sample08.htm&id=6737592039376271077

Versuche mich momentan damit etwas auseinander zusetzten.


----------

