Problem: LabView - TwinCat3 Simulation

Ralfk84

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

ich versuche mich gerade durch die Beispielprojekte von Beckhoff bezüglich der ADS.Net Kommunikation mit LabView durchzuarbeiten. Allerdings scheitere ich gerade beim praktischen Test der Beispielprojekte.

Und zwar habe ich mir das Beispielprojekt 2 zur ADS.Net Kommunikation vorgenommen (https://infosys.beckhoff.com/index....le_labview/html/tcatadsnet_lvsample02.htm&id=). Dazu habe ich mir TwinCat 3 installiert und dort die zugehörige .pro Datei für das Beispielprojekt eingeladen. Gleichzeitig habe ich das Labview-Beispielprogramm geöffnet. Nach Start der SPS als Simulation und Anpassung des LabView Programmes bezüglich des server-ports funktioniert die Kommunikation prinzipiell. Allerdings kommen die geschriebenen Wet nur teilweise richtig in der simulierten SPS an.
Beim unveränderten LabView-Programm funktioniert schon die zweite Variabe (DINT) nicht wie gewünscht. Das Ergebnis sieht man im Anhang "Labview_Twincat3_Variablen.jpg". Daher habe ich im nächsten Schritt aus dem DINT ein INT gemacht (in Labview und in der PLC im TwinCat) und einen zweiten Versuch gestartet. Das Ergebnis seht ihr im zweiten Anhang "Labview_Twincat3_Variablen_angepasst.jpg". Bis byteVal entsprechen die durch das LabViewprogramm geschriebenen Werte der Vorgabe. Für den DOUBLE und den SINGLE-Wert steht aber wieder völliger Blödsinn in der Variable.
Ich habe aber aktuell keine Ahnung wo der Fehler liegen könnte. Das Beispielprojekt von Beckhoff sollte ja eigentlich funktionieren (ohne Veränderungen). Oder sind die Beispielprojekte mit TwinCat3 nicht so ganz kompatibel? Ich bin in Sachen TwinCat leider völliger Anfänger. Für ein Projekt benötige ich aber eine Schnittstelle für ein LabView Programm mit TwinCat bzw. einer Beckhoff SPS. Daher wollte ich die grundlegenden Beispiele zum laufen bekommen um dann anschließend meine eigene Schnittstelle zu konfigurieren.

Über Tipps wo der Fehler liegen könnte wäre ich sehr dankbar.

Viele Grüße,
Ralf
 

Anhänge

  • Labview_Twincat3_Variablen_angepasst.jpg
    Labview_Twincat3_Variablen_angepasst.jpg
    62,5 KB · Aufrufe: 34
  • Labview_Twincat3_Variablen.jpg
    Labview_Twincat3_Variablen.jpg
    55,1 KB · Aufrufe: 23
Auf die Schnelle möchte ich hier nur das Stichwort "Atribute Packmode" einwerfen. Damit wird die Speicherbelegung in TWinCat durch Variablen geregelt.
Grundsätzlich sollte man, gerade im Hinblick auf externe Kommunikation, Strukturen so anlegen, dass keine unnötigen "Löcher" in der Speicherbelegung entstehen.
https://infosys.beckhoff.com/index.php?content=../content/1031/tc3_plc_intro/2529746059.html&id=

Labview muss für jede zu lesende Variable zusätzlich zur Adresse die Länge in Bytes wissen
 
Das Stichwort hat geholfen. Durch Ergänzung von "{attribute 'pack_mode' := '1'} " vor der Deklaration der Variablen läuft das Beckhoff-Beispiel nun wie gewünscht. Es spricht also auch nichts dagegen ohne die "Löcher" zu arbeiten?

Viele Grüße,
Ralf
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok nach etwas Lektüre habe ich es begriffen :). Ich ordne mein Strukturen so an, dass ich wenig Löcher habe. Also beispielsweise erst meine ganzen Variablen von Wert "Single" und dann am Ende beispielsweise die "Bool" oder Byte-Werte, sodass ich möglichst gleiche Blöcke habe. Danke dir!
 
Das liegt am so genannten "Alignment", normalerweise müssen Variablen der Größe "n Byte" an einer Position im Speicher sitzen, die durch n Teilbar ist (n = 1,2,4 bei 32-bit Systemen, n=1,2,4,8 bei 64-bit Systemen. Größere Variablen sind egal). Wenn das nicht der Fall ist, dauert der Variablenzugriff deutlich länger, weil die Variable "zerstückelt" gelesen wird, und wieder zusammengesetzt werden muß (vereinfacht gesagt). Um das sicherzustellen, werden vom Compiler automatisch Lücken eingefügt, wenn eine größere Variable folgt.

Du mußt nicht zwingend alle kleinen Variablen ans Ende der Struktur setzen, aber so stellst du am ehesten sicher, daß keine Lücken entstehen.

Der "pack_mode" verhindert das automatische Einfügen von Lücken, so daß die Datenstruktur auch für Kommunikation zwischen verschiedenen Systemen genutzt werden kann. (Auf Kosten der Performance, wenn man nicht manuell auf das Alignment aufpaßt)
 
Zurück
Oben