# [ ADSREAD ] Erste Schritte in ADS



## caret (24 Februar 2010)

Mache meine ersten Schritte mit ADS und würde dazu gerne mittels des ADSREAD FBs von einer CX1020 Daten aus einer BC9000 lesen. Ich rufe dazu in der CX1020 meinen ADSREAD Funktionsbaustein namens fb_adsread wie folgt auf:


```
fb_adsread(NETID:='192.168.0.1.1.1',
    PORT:=800,
    IDXGRP:=16#F020,
    IDXOFFS:=0,
    LEN:=1,
    DESTADDR:=ADR(%MB0),
    READ:=TRUE,
    TMOUT:=T#3s
);
```
Leider vergebens, denn ich bekomme einen Fehler fb_adsread.ERRID=7 zurück. Jetzt finde ich im InfoSys weder eine Beschreibung was mir das sagen soll, noch was ich falsch mache. (BTW: Fehercodetabellen finde ich generell im InfoSys kaum welche. Gibt die Beckhoff nicht raus, oder gucke ich nur falsch?)
AmsID ist korrekt (Via KS2000 geprüft und angepingt), IdxGrp zum lesen des Eingänge des SPS-Prozessabbilds sollte laut Doku ebenfalls korrekt sein und IdxOffs sowieso. 
Via KS2000 Hab ich die AMS-Routingtabelle der BC9000 geleert, damit nach Doku alle Verbindungen angenommen werden. Muss ich im Systemmanager bei der CX1020 für die AMS Kommunikation was einstellen?

EDIT: Port 800 ist laut Doku "SPS Laufzeitsystem der Buscontroller BCxxxx" und sollte demnach ebenfalls korrekt sein.


----------



## Controllfreak (24 Februar 2010)

wichtig ist das in den Routing Einstellungen (System-Manager) der ADS Partner bekannt ist


----------



## caret (24 Februar 2010)

Hm, schon mal ein Hinweis.

Allerdings wenn ich versuche die BC9000 mittels des "Broadcast Search" des Add Route Dialogs im Systemmanager einzutragen, so wird die BC9000 nicht gefunden. Wenn ich die BC ins Projekt aufnehme, d.h. ein Virtuel-Ethernet Gerät hinzufüge, kann ich die BC9000 über den Box Scan aber durchaus finden. Damit wird dann auch die AMS Route zur BC eingetragen. ABER: Des Systemmanager wechselt nicht mehr in den RUN-Mode. Fehlermeldung: Sending ams command >> Init4\IO: Download Terminal Discription: Terminal discription for BC9000 (BC9000-0000) >> AdsWarning: 7 (0x7, NoString) << failed!
Die magische 7 schon wieder.  :sad:


----------



## caret (24 Februar 2010)

Das ist schon etwas "strange". Hab mal ne BC9050 aus dem Schrank geholt und das ganze noch mal wie mit der BC9000 durchgespielt. Im Systemmanager kann ich nun die AMS-Route zur BC9050 zwar setzen, aber ADSREAD wirft nun einen anderen Fehler, nämlich fb_adsread.ERRID=16#330B0712 was mir auch nichts sagt.


----------



## Controllfreak (24 Februar 2010)

Ist dein BC 9050 im Run?
Wenn ich die Global Error Codes richtig deute, könnte die Fehlermeldermeldung "Server is in invalid state" lauten


----------



## caret (25 Februar 2010)

Controllfreak schrieb:


> Ist dein BC 9050 im Run?
> Wenn ich die Global Error Codes richtig deute, könnte die Fehlermeldermeldung "Server is in invalid state" lauten



Jep, das war der Fehler. Danke für den Tipp. Meine BC9050 war nicht im RUN. Da hatte ich gar nicht dran gedacht, da ich davon ausging die ADS Kommunikation würde vom "Betriebssystem" des Controllers abgewickelt unabhängig von meinem Steuerungsprozess. Sei es drum. Kommunikation via ADS zwischen CX1020 und BC9050 funktioniert nun in beide Richtungen.
Mein Problem mit der BC9050 war, dass im Infosys steht für die BC9xxx Modelle verwende man die TCAdsBC.lb6 für ADS Kommunikation. Das habe ich auch getan, konnte dann aber das Projekt nicht auf die BC9050 übertragen (Kommunikationsfehler). Jetzt hab ich festgestellt, dass ich nicht die TCAdsBC.lb6, sondern die TcBaseBCxx50.lbx brauche. Mit der funktioniert es dann auch. Auch wenn der FB nun zwar nicht mehr ADSREAD sondern FW_AdsRead heisst. Aber was solls.

Das wichtigste für mich ist eigentlich woher ich die Übersicht mit den Fehlercodes bekomme. Ohne die bin aufgeschmissen. Ich find die im InfoSys einfach nicht. ADS mit der BC9000 funktioniert nämlich immer noch nicht. ERRID=6.


----------



## Controllfreak (25 Februar 2010)

Suche einfach "ADS Return Codes" im infosys

Gruß

Jürgen


----------



## caret (25 Februar 2010)

Controllfreak schrieb:


> Suche einfach "ADS Return Codes" im infosys



Ein doppeltes Danke. Genau das was ich gesucht hab,

<ironie>Eigentlich ganz logisch, das man die Tabelle unter TwinCat SMS/SMTP Server findet.</ironie>

EDIT: Jetzt klappt es auch mit der BC9000.


----------



## redseadiver28 (25 Februar 2010)

Hallo zusammen,

bei mir steht auc gerade ein Projekt an, bei dem 2 SPSen Daten austauschen sollen. Mein Ansatz ist allerdings, das mit Netzwerkvariablen zu machen. Welche Pro u. Contra gibt es hier gegenüber der ADS-Kommunikation?


lg


----------



## Controllfreak (25 Februar 2010)

Netzwerkvariablen ist CoDeSys Welt.
ADS ist Beckhoff-Welt

vom Handling finde ich Netzwerkvariablen einfacher


----------



## redseadiver28 (25 Februar 2010)

naja, 

ok ich verwende beckhoff und kenne Netzwerkvars. Finde auch, dass diese recht einfach zu händeln sind. Bei ADS-Kommunikation ist halt viel selber zu schreiben.

lg


----------



## caret (25 Februar 2010)

Hm, also Netzwerkvariablen kennt Beckhoff auch. Allerdings nur in beliebigen Kombinationen von  Steuerungen des Typs CX und PC. Insbesondere bleibt also bei Kleinsteuerungen vom Typ BC nur ADS Kommunikation.
Netzwerkvariablen sind sicherlich einfach im Umgang aber unperformant. Nicht das ADS jetzt unendlich viel Speed auf der Leitung machen würd, aber bei meinen Tests gings mit ADS etwas schneller.


----------

