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

onikos

Level-1
Beiträge
44
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
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.

Code:
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
 
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?)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
Zuletzt bearbeitet:
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
 
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 :ROFLMAO:
Niko
 
Hallo,
Was ist die beste Art und Weise den ADS Baustein aufzurufen?

Code:
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

Code:
 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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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.
 
Hallo,

Vielen Dank für deine Antwort.

Sollte ich es also so einbinden?

Code:
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
 
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
 
Zuletzt bearbeitet:
Zurück
Oben