# ADS READ -> target port not found -> ADS Server not started



## onikos (7 April 2014)

Hallo zusammen,

Nach langem suchen habe ich mein Programm aufs Wesentliche gekürzt. Was überbleibt ist ein ADS READ Baustein.

Ich habe eine CX 5010 auf dem Schreibtisch mit meinem Laptop über Ethernet verbunden.


```
ADSREAD(
	NETID:= '192.168.1.57.1.1', 
	PORT:= port, 
	IDXGRP:= 16#4020, 
	IDXOFFS:= 100, 
	LEN:= SIZEOF(read2), 
	DESTADDR:= ADR(read2), 
	READ:= messen, 
	TMOUT:= T#1S, 
	BUSY=> BUSY, 
	ERR=> err, 
	ERRID=> errid);
```


Ich bekomme eine Fehlermeldung mit der ID 6.

Laut Webseite http://infosys.beckhoff.com/english...1033/tcadscommon/html/ads_returncodes.htm&id=

Die Fehlermeldung ist target port not found. Möglicherweise ADS Server not started.

Nun meine Frage. Wo kann ich sehen ob dieser Server gestartet ist? oder wo kann ich diesen Service starten?

Vielen Dank im Voraus!

Niko


----------



## MasterOhh (7 April 2014)

Das Programm läuft auf deinem Lappi und du willst von der CX5010 lesen? 
Das Programm läuft auf deiner CX 5010 und du willst von deinem Lappi lesen?
Das Programm läuft irgendwo drauf und du willst irgendwas von irgendwoher lesen?

Läuft auf dem Ziel von dem du lesen willst ein Programm? (Ist die Runtime in RUN?)


----------



## onikos (7 April 2014)

Das Programm läuft auf meinem Laptop und ich möchte eine Variable von meiner CX lesen.
CX und Laptop sind in Runtime.

Für alle die den gleichen Fehler haben, ich habe den Server bei mir unter C:\TwinCAT\3.1\System\TCsysui.exe neu gestartet.
Jetzt bekomme ich einen Timeout fehler. 1861.
Ich habe in der Firewall die beiden Ports aus der Doku hinzugefügt.
Ich habe den Timer auf 5s hochgesetzt und auch neu gestartet aber das hat alles nichts gebracht.


Ich möchte jetzt die ADS Routes der Sender und Empfänger prüfen.
Wie kann ich das tun? 


edit: Ich werde es mit den SPS, die wir haben, ausprobieren. Ich denke es liegt am Laptop. 

Beste Grüße
Niko


----------



## onikos (8 April 2014)

Hallo,
Ich habe jetzt zwei SPS miteinander verbunden.

Nun bekomme ich die Fehlermeldung 7.


7target machine not found, Missing ADS routes

Was kann ich tun? Hat jemand eine Idee?

Cheers,
Niko


----------



## MasterOhh (8 April 2014)

Hast du die Routen denn im AMS-Router eingetragen?


----------



## onikos (8 April 2014)

Hallo, 
gute Idee.
das habe ich jetzt getan. Jetzt bekomme ich die Fehlermeldung 1861.


1861timeout elapsedCheck ADS routes of sender and receiver and your firewall setting



Die Firewall Einstellungen habe ich hinzugefügt. :?


----------



## onikos (9 April 2014)

Für alle die das gleiche Problem haben:

Port kontrollieren, bei mir war es 851. Ich dachte es wäre immer 801, da es so in einer Anleitung stand.

Und bei der SPS einloggen die den Wert liest und eine ROUTE zu dem Ziel einstellen. Die Route findet ihr unter System -> Routes.

Danke für eure Antworten, Bis zum nächsten Mal 
Niko


----------



## onikos (22 April 2014)

Hallo,
Was ist die beste Art und Weise den ADS Baustein aufzurufen?


```
IF read=TRUE THEN 	read:=FALSE;
ELSIF read=FALSE THEN
 	read:= TRUE;
END_IF




 ADSREAD4(
	NETID:= '192.168.1.50.1.1', 
	PORT:= 851, 
	IDXGRP:= gvl.IDXGRP_byte, 
	IDXOFFS:= 2, // shuttle position
	LEN:= SIZEOF(gvl.Shuttle_at_Station), 
	DESTADDR:= ADR(gvl.Shuttle_at_Station), 
	READ:= read, 
	TMOUT:= T#2S, 
	BUSY=> busy, 
	ERR=> err_read, 
	ERRID=> errid
);
```

oder


```
ADSREAD4(
	NETID:= '192.168.1.50.1.1', 
	PORT:= 851, 
	IDXGRP:= gvl.IDXGRP_byte, 
	IDXOFFS:= 2, // shuttle position
	LEN:= SIZEOF(gvl.Shuttle_at_Station), 
	DESTADDR:= ADR(gvl.Shuttle_at_Station), 
	READ:= true, 
	TMOUT:= T#2S, 
	BUSY=> busy, 
	ERR=> err_read, 
	ERRID=> errid
);
```

ich habe zur Zeit mit dem 2. Beispiel das Problem, dass ich irgendwie nur einmal einmal lesen/schreiben kann. Als ob ich den FB irgendwie zurücksetzten müsste.
Das 1. Beispiel macht den Code irgendwie unschön.

Wie sichert ihr ab, dass der Wert auch gelesen wurde? 

If busy = 0 then ???

Vielen Dank!

Niko


----------



## uncle_tom (22 April 2014)

Vielleicht solltest du dir erstmal die Beschreibung zu den ADS-Bausteinen durchlesen - vor allem die Beschreibung der Schnittstelle (Inputs, Outputs).
Dann würden sich mit Sicherheit deine 2 Fragen von selber klären.

Der Read-Eingang arbeitet Flankensensitiv. Wenn du den dauernd auf TRUE setzt, dann funktioniert das freilich nur 1x.
Du solltest auf den Read-Eingang einen Trigger (Taktgeber, etc.) auflegen - den Takt dann halt so schnell wie nötig, aber nicht zu schnell einstellen.
Die ADS-Bausteine werden u.U. über mehrere Zyklen abgearbeitet - solange der Baustein auf Busy ist, nimmt er keinen neuen Auftrag an.

Über die Ausgangsvariablen Busy und ERR sowie ERRID kannst du die Kommunikation überwachen.
Wenn Baustein nicht mehr Busy (Flankenabfrage) und kein Error, dann war die Kommunikation erfolgreich.


----------



## onikos (27 April 2014)

Hallo,

Vielen Dank für deine Antwort.

Sollte ich es also so einbinden? 


```
read_trigger:=true;


 ADSREAD4(
	NETID:= '192.168.1.50.1.1', 
	PORT:= 851, 
	IDXGRP:= gvl.IDXGRP_byte, 
	IDXOFFS:= 2, // shuttle position
	LEN:= SIZEOF(gvl.Shuttle_at_Station), 
	DESTADDR:= ADR(gvl.Shuttle_at_Station), 
	READ:= read_trigger, 
	TMOUT:= T#2S, 
	BUSY=> busy, 
	ERR=> err_read, 
	ERRID=> errid
);

read_trigger:= false;


IF busy = false and err_read = false THEN 	

................


END_IF
```

Oder wie mache ich das am besten?

Grüße
Niko


----------



## Daet (28 April 2014)

Hallo

So wie du das löst, wird bei jedem Zyklus "read_trigger" auf true und wieder auf false gesetzt.
Besser wäre z.B.:

IF busy = false and err_read = false THEN 
     read_trigger := true;
ELSE
     read_trigger := false;
END_IF

Gruss Daet


----------

