# Beckhoff BC9000 - wie per ADS erreichen?



## Joy (26 Oktober 2005)

Hallo!

Ich programmiere die Steuerung einer Solaranlage mit Hilfe einer Beckhoff BC9000 SPS.
Es geht dabei nur darum, mehrere Temperaturen (Analog In) zu vergleichen, und dann wenn nötig eine Pumpe oder ein Umlenkventil zu schalten (Digital Out).
Bis vor kurzem lief das eigentliche Programm in einer Visual  Basic Software, die per ADS auf eine Soft SPS in TwinCat zugriff, die über Ethernet mit dem BC "sprach".

Jetzt habe ich mit ein paar Zeilen Code die "Logik" in die Sprache der SPS übertragen (ST), und dieses Programm läuft nun autark ohne PC in direkt in der Steuerung.

Mein Plan war, dass ich Teile des VB Programms weiterverwenden könnte, um per ADS Temperaturen aus der Steuerung zu holen. Die sollen geloggt werden. Es sollte auch möglich sein, Pumpe / Ventil manuell zu schalten.

Nach dem "Umzug" habe ich jedoch bemerkt, dass der ADS Port auf der "Hardware SPS" nicht offen ist, im Gegensatz zur SoftSPS.

Kann mir jemand weiterhelfen?
Was muss ich tun, damit ich die SPS genau so per ADS ansprechen kann wie die SoftSPS?

Vielen Dank im Voraus!
Johannes


----------



## Zottel (27 Oktober 2005)

Joy schrieb:
			
		

> Hallo!
> 
> Jetzt habe ich mit ein paar Zeilen Code die "Logik" in die Sprache der SPS übertragen (ST), und dieses Programm läuft nun autark ohne PC in direkt in der Steuerung.
> 
> Mein Plan war, dass ich Teile des VB Programms weiterverwenden könnte, um per ADS Temperaturen aus der Steuerung zu holen. Die sollen geloggt werden. Es sollte auch möglich sein, Pumpe / Ventil manuell zu schalten.


Soll es denn weiter in VB, also unter Windows laufen? Da komme ich jetzt etwas durcheinander, weil du mir in der privaten Mail von "BC und Linux" schreibst und libADS haben wolltest, wo ja bisher keine keine Windows-Version existiert.
Ansonsten hat auch Beckhoff eine Bibliothek im Angebot, um eigene Anwendungen über ADS kommunizieren zu lassen.


> Nach dem "Umzug" habe ich jedoch bemerkt, dass der ADS Port auf der "Hardware SPS" nicht offen ist, im Gegensatz zur SoftSPS.


"Der Port" ist hier etwas verwirrend meinst du den Port 48898? Das ist der *TCP* port, auf dem das ADS-Protokoll abgewickelt wird. Einfacher Test unter linux: telnet <IP vom BC> 48898 versucht, eine Telnet-Verbindung dazu aufzubauen. Wenn ein Gerät auf diesem Port hört, wird die Sitzung erstmal angenommen, sonst gibt's "connection refused".
Verwirrend deshalb, weil ADS noch sogenannte "AMS-Ports" kennt. Wenn ich das auf Anhieb richtig sehe setze ich bei einer ähnlichen Anwendung den "lokalen" AMS-Port (also des PC) auf 300 und spreche den AMS-Port 800 des BC an.
Dann gibts noch die "Indexgruppen", die sagen was man lesen oder schreiben will, Eingänge,Ausgänge, Merker...
Habe in meiner Software:
#define igrInputs 0xf020
#define igrOutputs 0xf030
#define igrMarkers 0x4020
#define igrRWDB 0x4040
#define igrTest 0x9001
Darüber hinaus gibt es noch AMS-NetIDs. Das ist eigenlich immer IP-Adresse erweitert um .1.1 . Mit AMS-Routing habe ich keine Erfahrungen.



> Kann mir jemand weiterhelfen?


Mal sehen.


> Was muss ich tun, damit ich die SPS genau so per ADS ansprechen kann wie die SoftSPS?


Gar keine Ahnung. Habe noch nie mit einer Beckhoff SoftSPS gesprochen.
[/quote]


----------



## Joy (27 Oktober 2005)

Hallo!
Vielen Dank für deine Mühe bisher!


			
				Zottel schrieb:
			
		

> Soll es denn weiter in VB, also unter Windows laufen? Da komme ich jetzt etwas durcheinander, weil du mir in der privaten Mail von "BC und Linux" schreibst und libADS haben wolltest, wo ja bisher keine keine Windows-Version existiert.
> Ansonsten hat auch Beckhoff eine Bibliothek im Angebot, um eigene Anwendungen über ADS kommunizieren zu lassen.


Für den ersten Schritt würde es mir reichen, wenn es per Windows Applikation funktioniert. Da habe ich ja bereits eine gebaut, und weiß, dass die ADS Kommunikation klappt.
Wenn ich von Windows aus per ADS drauf komme, dann würde ich gerne die Linux Version probieren, als zweite Ausbaustufe.


			
				Zottel schrieb:
			
		

> "Der Port" ist hier etwas verwirrend meinst du den Port 48898? Das ist der *TCP* port, auf dem das ADS-Protokoll abgewickelt wird. Einfacher Test unter linux: telnet <IP vom BC> 48898 versucht, eine Telnet-Verbindung dazu aufzubauen. Wenn ein Gerät auf diesem Port hört, wird die Sitzung erstmal angenommen, sonst gibt's "connection refused".
> Verwirrend deshalb, weil ADS noch sogenannte "AMS-Ports" kennt. Wenn ich das auf Anhieb richtig sehe setze ich bei einer ähnlichen Anwendung den "lokalen" AMS-Port (also des PC) auf 300 und spreche den AMS-Port 800 des BC an.
> Dann gibts noch die "Indexgruppen", die sagen was man lesen oder schreiben will, Eingänge,Ausgänge, Merker...
> Habe in meiner Software:
> ...


Ich habe die Bibliothek PlcAds.lb6 dazugeladen, nun ist Port 48898 offen.
Kannst du mir sagen, was ich nun weiter tun muss? Was hat es mit den Indexgruppen in deiner Konfiguration auf sich?
In Computerkreisen bekommt man immer gesagt RTFM, nur leider finde ich dazu nirgends Dokumentation.

Vielen Dank!
Johannes


----------



## Zottel (27 Oktober 2005)

Joy schrieb:
			
		

> Hallo!
> Für den ersten Schritt würde es mir reichen, wenn es per Windows Applikation funktioniert. Da habe ich ja bereits eine gebaut, und weiß, dass die ADS Kommunikation klappt.


Sorry, Windows kannst du ja nur mit Original-Beckhoff-Software gemacht haben. Die habe ich noch nie benutzt, abgesehen vom Programmieren mit TwinCat.


> Wenn ich von Windows aus per ADS drauf komme, dann würde ich gerne die Linux Version probieren, als zweite Ausbaustufe.
> 
> Ich habe die Bibliothek PlcAds.lb6 dazugeladen, nun ist Port 48898 offen.


Höchst seltsam. Der Port muß schon "offen" sein, um eine BC überhaupt mit TwinCat zu programmieren, dachte ich.


> Kannst du mir sagen, was ich nun weiter tun muss? Was hat es mit den Indexgruppen in deiner Konfiguration auf sich?


Nein, nicht mehr als ich geschrieben habe. Keine Ahnung wie das API von Beckhoff aussieht, das du ja benutzt haben muß. kann dir nur sagen, daß wenn du libADS benutzt, du die Indexgruppe als 2. Parameter bei ADSreadBytes angeben mußt und damit unterschieden wird, ob du Ein-, Ausgänge, Merker usw. liest.



> In Computerkreisen bekommt man immer gesagt RTFM


I *read* TF Beckhoff Manuals, um libADS zu implementieren. 95% stand drin, die anderen 5 fand ich durch Probieren. Gut möglich, daß auch 100% drinstehen und ich habe 5 übersehen oder nicht verstanden und lieber durch Probieren rausgefunden.


----------



## Anonymous (27 Oktober 2005)

Zottel schrieb:
			
		

> Höchst seltsam. Der Port muß schon "offen" sein, um eine BC überhaupt mit TwinCat zu programmieren, dachte ich.


Mit TwinCAT mache ich eigentlich gar nichts, ich habe einen Rechner per seriellem Kabel angeschlossen, und darüber programmiere ich die SPS. Dazu benutze ich "PLC Control", welches bei TwinCAT dabei ist.
Nachdem ich die PlcAds.lib geladen habe, sieht die nmap Ausgabe so aus:

```
Starting nmap 3.81 ( [url]http://www.insecure.org/nmap/[/url] ) at 2005-10-27 22:18 CEST
Interesting ports on 192.168.1.15:
(The 65533 ports scanned but not shown below are in state: closed)
PORT      STATE SERVICE
502/tcp   open  asa-appl-proto
48898/tcp open  unknown

Nmap finished: 1 IP address (1 host up) scanned in 342.837 seconds
[code]
Kannst du mir mal die Liste der Libs geben, die du in der PLC noch eingebunden hast? Vielleicht hilft mir das weiter ...

Danke!
Johannes
```


----------



## Zottel (27 Oktober 2005)

Anonymous schrieb:
			
		

> Mit TwinCAT mache ich eigentlich gar nichts, ich habe einen Rechner per seriellem Kabel angeschlossen, und darüber programmiere ich die SPS. Dazu benutze ich "PLC Control", welches bei TwinCAT dabei ist.


Serielles Kabel habe ich noch nie benutzt. Habe bis jetzt 4 oder 5 BC9000 eingesetzt. Habe das Progemm in PLC Control erstellt, wobei man irgendwie das Ding vorher in "System Control???System Manager???" oder so was einfügen muß. Ehrlich gesagt, ich habe nie den ganz "straighten" Weg gefunden, sondern immer das erste funktionierende Projekt unter neuen Namen kopiert.  


> PORT      STATE SERVICE
> 502/tcp   open  asa-appl-proto
> 48898/tcp open  unknown


Und vorher?


> Kannst du mir mal die Liste der Libs geben, die du in der PLC noch eingebunden hast? Vielleicht hilft mir das weiter ...


Ja: gar keine, bzw. eine (das muß ich am Arbeitsplatz nachsehen), die ich brauchte, um die Systemzeit vom BC zu lesen (im SPS-Programm, nicht über ADS).

Danke!
Johannes[/quote]


----------



## Joy (27 Oktober 2005)

Ohne serielles Kabel gibt es wahrscheinlich nur den Weg über den System Manager.
Bevor die PlcAds.lib geladen war, war nur Port 502 offen.
Aber: Eigentlich kann doch Modbus alles, was ADS auch kann, oder?
Also bräuchte ich ja nur einen weg, wie ich per Modbus TCP dort ein paar Werte lesen / schreiben kann. Dazu habe ich Jamod gefunden, leider reichen meine Java Skills dazu nicht aus. Aber ich werde mich mal dran versuchen, C++ "spreche" ich einigermaßen, so ein Unterschied ist Java ja dann nicht. Und außerdem will ich ja wirklich triviale Sachen machen.

Meinst du denn, das klappt mit Modbus? Hast du damit Erfahrung?

Johannes

Edit: http://jamod.sourceforge.net/development/tcp_master_howto.html - Das hier sieht ganz gut aus. Ich werde es bei Gelegenheit mal ausprobieren.


----------



## Zottel (27 Oktober 2005)

Joy schrieb:
			
		

> Bevor die PlcAds.lib geladen war, war nur Port 502 offen.


Begreif ich jetzt nicht. Möglicherweise gibt es da etws, daß, wenn das Ding (der BC) in eine übergeordnete Konfiguration eingebunden wird, ihm was runtergeladen oder freigeschaltet oder aktiviert wird.


> Aber: Eigentlich kann doch Modbus alles, was ADS auch kann, oder?


Bei weitem nicht. Ich habe mit Modbus angefangen. Aber alle Werte, die man über Modbus austauschen will, muß man irgendwie als Ein-/Ausgänge der SPS deklarieren. Und es sind nicht viele. 10, 12 oder 20 Worte oder Doppelworte oder so. Hab's vergessen. Sonst hätte ich nie eine ADS-Anbindung geschrieben. Darüber hinaus kann man dem BC über ADS sagen, daß er die Initiative ergreift und ein Paket sendet, wenn sich Daten ändern. (in libADS ist glaube ich, drin, daß man ihm das sagen kann). Die Pakete kommen dann über UDP und libADS hat keine Möglichkeit, sie auszuwerten:-(
Jamod habe ich auch mal angetestet aber nicht weiter verwendet. Es gibt da noch eine Anbindung von jamod an meine Visualisierung Visual...
Wenn ich mehr Zeit hätte, würde ich ein paar Dinge zusammenstellen...


----------



## Joy (27 Oktober 2005)

Zottel schrieb:
			
		

> Joy schrieb:
> 
> 
> 
> ...


Ja, wenn nur die Bibliothek STANDARD geladen ist, dann ist nur Port 502 offen. Anscheinend baut man mehr Funktionalität durch das dazuladen der Libs ein.
Ich dachte halt, dass ADS Bestandteil der BC9000 "Firmware" ist, hat der sowas überhaupt? Oder ist das mit PLC Control erzeugte Programm alles, was darin läuft?


			
				Zottel schrieb:
			
		

> Joy schrieb:
> 
> 
> 
> ...


Okay, dann werde ich doch versuchen, das ADS zum Fliegen zu kriegen.
Irgendwo in diesen Libs muss das versteckt sein.
Da gibt es aber auch so was wie TcIpUtilities, vielleicht kann man damit einen einfachen TCP Socket bauen? Mal sehen, irgendwie werde ich diese blöden Daten doch da raus bekommen


----------

