Variablen schreiben und lesen aus TwinCat3-Projekt

patzer103040

Level-1
Beiträge
4
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo allerseits,

das Betriebssystem, das auf meinem Rechner läuft, ist Windows7, und ich habe eine Virtuelle Maschine, auf der ich WinXp starten kann. Sowohl unter Windows7 als auch unter virtuellem WindowsXP ist jeweils TwinCat3 installiert.

Unter virtuellem WinXp starte ich TwinCat3 XAE. Danach lade ich ein Projekt in TwinCat3, unter dem noch keine Variablen definiert wurde. Danach klicke ich mit der rechten Maustaste auf den TwinCat Config Modus in der Desktop-Leiste und gehe auf System -> Start. Damit ist eine Runtime-Environment von TwinCat3 gestartet. Die LAN-Verbindung im virtuellem WinXp hat die IP-Adresse 192.168.1.1.

In Windows 7 starte ich ebenfalls TwinCat3 XAE. Danach erstelle ich eine Projektmappe, in der sich sowohl ein TwinCat-Projekt, als auch ein C# .NET-Projekt befindet. Das C#-Projekt soll eine Variable aus dem TwinCat3-Projekt auslesen, und auf dem Bildschirm darstellen. Im TwinCat-Projekt gehe ich auf SYSTEM (Doppelklick) -> Reiterkarte Allgemein -> Button Zielsystem wählen -> Suchen (Ethernet). Im Feld neben "Enter Name / IP:" 192.168.1.1 eingeben und Enter drücken. Die Runtime-Environment auf der virtuellen Maschine wird gefunden. Siehe angehängte Datei TwinCat3_On_VM.jpg. Auf "Route zufügen" klicken.

Obwohl TwinCat3, das auf der virtuellen Maschine läuft, gefunden wird, erscheint in der Fehlerliste in Microsoft Visual Studio die Fehlemeldung

"Fehler 1 Can not connect to Device '192.168.1.1.1.1'. Ads-Error 0x745 : Timeout has elapsed. 0 0 "

Man kann diese Fehlermeldung auch nicht beseitigen. Im TwinCat-Projekt habe ich unter SPS eine globale Variable namens HMI_Page1_distance : Page1; erstellt. Siehe angehängte Datei HMI_Page1_distance.jpg. Darüber hinaus gibt es zwei POUs POU und MAIN. MAIN ruft POU(); und RETURN auf. POU selbst hat eine Variable index vom Typ int.

Im C#-Projekt möchte ich gerne die Variablen lesen oder schreibend ändern. Dazu verwender ich Ads, wie unter Beckhoff Information System - German dokumentiert:

Code:
TcAdsClient tcAdsClient = new TcAdsClient();
tcAdsClient.Connect("192.168.1.1.1.1", 851);


int handle = tcAdsClient.CreateVariableHandle(".HMI_Page1_distance.distance");

Das Problem ist, dass es in der Zeile, die mit int handle beginnt, zu einer XamlParseException kommt. Ruft man die Details der Fehlermeldung aufruft, sieht man unter InnerException folgende Fehlermeldung:

"Ads-Error 0x710 : Symbol could not be found."

Das bedeutet also, dass die globale Variable nicht gefunden wird. (Siehe auch die angehängte Datei DebugModus.jpg)

1) Wieso kommt es zu dieser Fehlermeldung?

2) Ist die Verbindung immer noch nicht ok?

3) Oder können nur Variablen gelesen werden, die im TwinCat-Projekt der virtuellen Maschine definiert wurden?

4) Warum gibt es im TwinCat-Projekt für GVLs keine Tabelle wie für POUs, um den Wert der Variable händisch zu ändern?

5) Ist der Port 851 für TwinCat3 der richtige Port?

Für jede Hilfe wäre ich sehr dankbar.
 

Anhänge

  • TwinCat3_On_VM.jpg
    TwinCat3_On_VM.jpg
    370,8 KB · Aufrufe: 24
  • HMI_Page1_distance.jpg
    HMI_Page1_distance.jpg
    313,3 KB · Aufrufe: 23
  • Debug_Modus.jpg
    Debug_Modus.jpg
    545,4 KB · Aufrufe: 20
Hi Patzer,
ich arbeite nur mit tc2.
nur kurz:
- Wäre Port 801 nicht der richtige ?
- Hast du mal eine einfache globale bool oder int variable deklariert ? Erreichst du die dann ?
- Die Exception wird ja beim holen des handles geworfen. Der Verbindungsaufbau ist ja o.k.
Die Instanz vom TcAdsClient hat doch ein Status Property. Pack doch mal den Brechpunkt dorthin und schau dir nach dem Connect mal genau das Objekt an.

Daniel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi Daniel!

- Wäre Port 801 nicht der richtige ?
Bei tc3 wird der Port 851 verwendet.

- Hast du mal eine einfache globale bool oder int variable deklariert ? Erreichst du die dann ?

Ich habe eine globale Variable deklariert, die ich nicht erreichen kann.

Die Instanz vom TcAdsClient hat doch ein Status Property. Pack doch mal den Brechpunkt dorthin und schau dir nach dem Connect mal genau das Objekt an.

Siehe angehängte Datei DebugModus.jpg. In dieser Abbildung sind die Properties des Objektes nach der erfolgreichen Verbindung dargestellt.

Viele Grüße,
Oleg
 
Ist die IP-Adresse 192.168.1.1 nicht grundsätzlich die Standard-Gateway-Adresse bei Windows?
Ev mal die IP-Adresse ändern, bzw auch im System-Manager mit der IP und nicht mit den Namen verbinden...
 
Die Verbindung mit der virtuellen Maschine wird trotz der Fehlermeldung richtig aufgebaut. Von daher würde eine Änderung der IP-Adresse nur Verwirrung verursachen. Es geht mir darum, wie ich globale Variablen aus dem TwinCat3-Projekt auslesen kann. Er kann das Symbol ".HMI_Page1_distance.distance" nicht finden. Soll ich GVL davor schreiben?
 
Zurück
Oben