Einstieg in Beckhoff ADS

entenhausen_dd

Level-1
Beiträge
50
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi Leute,

also hier ein neuer Thread zu folgendem Thema.
Ich möchte gerne meine Beckhoff CX5010-1111 von extern aus steuern können.
Ich habe gelesen das geht über Visual Basic und .Net in Verbindung mit ADS. Hat da jemand ein Beispiel dafür um einen Taster aus der Kommandozeile zu betätigen. Das würde mir riesig helfen.
 
Hallo,

also wie die Implementrierung unter Visual Basic aussieht, kann ich dir nicht sagen. Ich programmiere nur in C++.
Ich bilde in meinen C++-Programmen immer die Funktion einer SPS nach. D.h. ich lese zunächst das PAE ein (das sind eben irgendwelche Eingänge, Merker, usw.) Dann folgt die eigentliche Programmbearbeitung. Zum Schluss schreibe ich dann das PAA, gebe also die VKE's auf die Ausgänge oder Merker. Um das ganze unkompliziert hinzukriegen, habe ich die Funktionen für ADS, die es von Beckhoff ja gibt in eine Klasse verpackt. Diese Klasse (CEingabeausgabe) definiert für die Datentypen bool, int, float, und long folgende Methoden:
- Zustand von der Hardware einlesen
- Get- und Set-Methoden
- Zustand auf Hardware ausgeben

Man kann die Funktionen natürlich auch verwenden, ohne sie zusammen in eine Klasse zu verpacken. Das ist im folgenden Programm z.B. bei den Funktionen zum Öffnen und Schließen des ADS-Ports der Fall.

Hier mal ein Beispielprogramm

void main()
{


//Ether-CAT - Variablen
long nErr, nPort;
AmsAddr Addr;
PAmsAddr pAddr = &Addr;

//Benutzervariablen
CEingabeausgabe Eingang00;
CEingabeausgabe Eingang01;
CEingabeausgabe Ausgang00;
CEingabeausgabe Ausgang01;
CEingabeausgabe Analogeingang1;
CEingabeausgabe Analogausgang1;
CEingabeausgabe Analogeingang2;
CEingabeausgabe Analogausgang2;


//Schleife, die das ständige Wiederholen des Programms sicherstellt
while (1 == 1)
{

// Open communication port on the ADS router
nPort = AdsPortOpen();
nErr = AdsGetLocalAddress(pAddr);
if (nErr) cerr << "Error: AdsGetLocalAddress: " << nErr << '\n';
pAddr->port = AMSPORT_R0_PLC_RTS1;

//PAE einlesen
Eingang00.ADSEinganglesenbool(pAddr, 0xF021, 0x190, 0x1);
Eingang01.ADSEinganglesenbool(pAddr, 0xF021, 0x191, 0x1);
Analogeingang1.ADSEinganglesenint(pAddr, 0xF020, 0x64, 0x2);
Analogeingang2.ADSEinganglesenint(pAddr, 0xF020, 0x66, 0x2);

//Hier muss die Programmlogik hin!

//PAA schreiben
Ausgang00.ADSAusgangschreibenbool(pAddr, 0xF031, 0x194, 0x1, Ausgang00.Getboolwert() );
Analogausgang1.ADSAusgangschreibenint(pAddr, 0xF030, 0x78, 0x2, Analogausgang1.Getintwert() );



// Close the communication port
nErr = AdsPortClose();
if (nErr) cerr << "Error: AdsPortClose: " << nErr << '\n';



}

 
Hallo,

also wie die Implementrierung unter Visual Basic aussieht, kann ich dir nicht sagen. Ich programmiere nur in C++.
Ich bilde in meinen C++-Programmen immer die Funktion einer SPS nach. D.h. ich lese zunächst das PAE ein (das sind eben irgendwelche Eingänge, Merker, usw.) Dann folgt die eigentliche Programmbearbeitung. Zum Schluss schreibe ich dann das PAA, gebe also die VKE's auf die Ausgänge oder Merker. Um das ganze unkompliziert hinzukriegen, habe ich die Funktionen für ADS, die es von Beckhoff ja gibt in eine Klasse verpackt. Diese Klasse (CEingabeausgabe) definiert für die Datentypen bool, int, float, und long folgende Methoden:
- Zustand von der Hardware einlesen
- Get- und Set-Methoden
- Zustand auf Hardware ausgeben

Man kann die Funktionen natürlich auch verwenden, ohne sie zusammen in eine Klasse zu verpacken. Das ist im folgenden Programm z.B. bei den Funktionen zum Öffnen und Schließen des ADS-Ports der Fall.

Hier mal ein Beispielprogramm

void main()
{


//Ether-CAT - Variablen
long nErr, nPort;
AmsAddr Addr;
PAmsAddr pAddr = &Addr;

//Benutzervariablen
CEingabeausgabe Eingang00;
CEingabeausgabe Eingang01;
CEingabeausgabe Ausgang00;
CEingabeausgabe Ausgang01;
CEingabeausgabe Analogeingang1;
CEingabeausgabe Analogausgang1;
CEingabeausgabe Analogeingang2;
CEingabeausgabe Analogausgang2;


//Schleife, die das ständige Wiederholen des Programms sicherstellt
while (1 == 1)
{

// Open communication port on the ADS router
nPort = AdsPortOpen();
nErr = AdsGetLocalAddress(pAddr);
if (nErr) cerr << "Error: AdsGetLocalAddress: " << nErr << '\n';
pAddr->port = AMSPORT_R0_PLC_RTS1;

//PAE einlesen
Eingang00.ADSEinganglesenbool(pAddr, 0xF021, 0x190, 0x1);
Eingang01.ADSEinganglesenbool(pAddr, 0xF021, 0x191, 0x1);
Analogeingang1.ADSEinganglesenint(pAddr, 0xF020, 0x64, 0x2);
Analogeingang2.ADSEinganglesenint(pAddr, 0xF020, 0x66, 0x2);

//Hier muss die Programmlogik hin!

//PAA schreiben
Ausgang00.ADSAusgangschreibenbool(pAddr, 0xF031, 0x194, 0x1, Ausgang00.Getboolwert() );
Analogausgang1.ADSAusgangschreibenint(pAddr, 0xF030, 0x78, 0x2, Analogausgang1.Getintwert() );



// Close the communication port
nErr = AdsPortClose();
if (nErr) cerr << "Error: AdsPortClose: " << nErr << '\n';



}

Hallo Diesla,

kannst du mir für dein Beispielprojekt evtl. das ganze Visual Studio Projekt zukommen lassen. Das Problem, so viel Erfahrung habe ich noch nicht mit Visual Studio. Vielleicht hast du auch ein Beispielprojekt wo du über die Kommandozeile einen bestimmten Taster ansprichst den du dann aktivierst (das gleiche als wenn man auf einen Taster draufdrück und auch als Unterschied diesen mal lange betätigt)
Danke dir
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

entschuldige bitte, habe die letzten Wochen nicht mehr in's Forum geschaut. Wenn's dir noch was nutzt, kann ich dir morgen, wenn ich wieder am richtigen Rechner bin was schicken.
 
Wenn du auf die Beckhoff-PLC mit einem Browser (Javascript) zugreifen willst, hätte ich auch was.
 
Zuletzt bearbeitet:
Hallo Leute,

bin für jede Hilfe dankbar. Wenn jemand Beispiele für mich hat, nur her damit (evtl. auch ne kleine Hilfe wär net schlecht ;))
Damit ihr den Hintergrund versteht:
Möchte über Sprachsteuerung mein Licht steuern.
Das heißt:
Sprachsoftware auf Windows -> Befehlseingabe der Sprache gibt in Windows irgendein Kommando an die Beckhoff das z.B. das Licht einschaltet, dimmt, oder irgendwas.
Sollte dies nur in Visual Basic gehen, dann wär mir ein Beispiel sehr recht. Eine kleine Hilfe noch dazu wie ich Visual Basic mit der Beckhoff verbinde wär auch net schlecht.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Zugriff per JavaScript

Hallo,

ich könnte noch ein paar Anfänger- Tips gebrauchen.

Ich hab das Beispiel ADS mit JavaScript jetzt auf meinen CX zum Laufen gebracht.

[FONT=&quot]http://infosys.beckhoff.com/content/1031/tcsample_webservice/html/webservice_samplejs.html?id=10643[/FONT]

Er kriegt die Verbindung hin und ruft Daten ab. Allerdings liegt die HTML Seite und die JavaScript - Datei momentan auf dem CX.

Ich hatte die Hoffnung, dass ich die beiden Dateien bzw. später die gesamte Homepage auf meinem Datenserver im Netzwerk bereitstellen kann (QNAP TS 109). Von da aus will ich dann mit allen Rechnern im Netzwerk, Android - Handys und natürlich dem IPAD auf die Visualisierung surfen.

Aber: Vom Datenserver ruft die Seite keine Daten ab. Ich bin davon ausgegangen, dass JavaScript Clientseitig arbeitet und der Datenserver für die Bereitstellung nichts können muss.

Was mache ich falsch? Lässt sich das Problem lösen?

Gruß

Ingo
 
Du machst nichts falsch, es ist sogar alles in bester Ordnung. Ich hab dir auf deine Frage im SPS@Home-Forum was geschrieben. Für Android und Ipad hätte ich auch noch einen Tipp. Du musst dich nur entscheiden, in welchem Forum es weiter gehen soll.
 
Zurück
Oben