TC2, System Manager, Variablen-Zuordnung scheint nicht zu passen

cpalm

Level-1
Beiträge
19
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
[GELÖST] TC2, System Manager, Variablen-Zuordnung scheint nicht zu passen

Hallo zusammen,

in meiner Haussteuerung habe ich jetzt eine neue DALI-Klemme eingebaut und im System Manager konfiguriert (Beckhoff TC2.11.2303).


In den globalen Variablen des SPS-Programms sind auch diese Strukturen entsprechend aufgenommen. Jedoch scheinen die Werte nicht wirklich zu korrespondieren. Aufgefallen ist mir das beim markierten "Status" Datenelement.
07-04-_2021_15-35-56.jpg

Im SPS-Programm hat dies einen ganz anderen Wert:
07-04-_2021_15-38-46.png

Die Darstellung im System Manager ist ohne Anzeige-Skalierung.

Dadurch schlagen natürlich auch alle Folge-Funktionen, wie die Initialisierung mit dem entsprechenden Baustein fehl.

Was ich bereits versucht habe:
Boot-Projekt komplett löschen und neu anlegen, Variablen-Zuordnung prüfen / erzeugen. Steuerung (CX1020) neu gestartet (inkl. Bus-Strom ausschalten).
Variable gelöscht und neu zugeordnet.

Irgendwie wird aber auch hierzu nichts in der automatisch erzeugten TwinCAT_Configuration (VAR_CONFIG) gespeichert, wenn ich dies einmal mit anderen Variablen vergleiche.


Für andere Variablen steht dort die Referenz als Kommentar. Auffällig war auch, das ich im System Manager, jeden einzelnen Ein/Ausgang einzeln auf die Member der Strukturen mappen musste. Dies scheint aber hier überhaupt nicht reflektiert zu sein. Wo ist das also zu finden?
07-04-_2021_15-46-32.png

Habe durch Werte in System Manager "Forcen" herausgefunden, dass die Datenleitungen durchaus richtig gemappt sind. Aber leider der Status Wert nicht.

Bin für jede Hilfe dankbar!
 
Zuletzt bearbeitet:
ich dachte dabei eher an eine Konfiguration, wo auch die einzelnen Klemmen eingetragen werden.

Aber irgendwie passen deine Screenshots für mich nicht wirklich zusammen. Im ersten Bild könnte man meinen, dass der Status auf der Eingangsadresse 105 liegt und der Ausgang bei 617 beginnt, im dritten Bild In auf 404 und Out auf 288

Bei den sonstigen Codesys 2 Systemen wird in der Steuerungskonfiguration die Adresse angezeigt, aber da hat dann Beckhoff wohl etwas mehr "verbogen"
 
Stimmt. Genau das macht dieser Beckhoff TwinCAT System Manager. Ich habe diesen "Missing Link" - wie das also zwischen Compiler und Zuordnung alles wirklich zusammenhängt auch noch nicht genau verstanden und habe solche technischen Hinweise leider auch noch nicht im Beckhoff Infosystem entdeckt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin,
ich dachte immer, dass man bei den "großen" Steuerungen, wo ich über den System Manager eine Hardware-Konfiguration erzeuge und die via Variablen-Verknüpfungen mit der Softwareseite verbinde, im SPS Programm keine absoluten Adressen angibt, sondern alles mit %I* bzw %Q* deklariert. Der System Manager kümmert sich dann um die richtige Adressierung. Und irgendwo war auch mal was mit einem Byte-Alignment, dass gewisse Variablen immer auf einer geraden Adresse starten. Ich bekomm das aber nicht mehr ganz auf die Reihe, aber in diese Richtung würde ich mal suchen...
 
So wie das aussieht hast Du in der globalen Variablenliste selber Einträge hinzugefügt, das darf man nicht. Diese Liste wird vom Systemmanager erstellt und gepflegt, darum steht ja auch oben in der Liste der Hinweis "read only". Die Adressen in der Liste sind auch keine Hardwareadressen, sondern sozusagen Softwareadressen. Andere Codesys basierte SPSen kennen das %I* oder %Q* Konstrukt nicht, da muss man statt dem * eine Adresse angeben was TwinCAT für einen übernimmt.
Du musst im Deklarationsteil Deines Programms eine Variable mit AT %Q* für Ausgänge und %I* für Eingänge anlegen vom Typ ST_KL6821... anlegen, dann das Ganze übersetzen und dann kannst Du im Systemmanager die Variablen verknüpfen.
 
Zuletzt bearbeitet:
@NieZuSpaet und @oliver.tonn: Genau so habe ich es gemacht. In den globalen Variablen ist bei mir nur definiert:

Code:
    stDaliInData        AT %I* : ST_KL6821InData;
    stDaliOutData       AT %Q* : ST_KL6821OutData;

Den Read-Only Teil der VAR_CONFIG habe ich natürlich nicht verändert, und nur für Fehleranalyse-Zwecke hier gepostet, da ich dachte, dass das hilfreich sein könnte. Mittlerweile stelle ich die Diskrepanz jedoch schon im System-Manager selbst fest.

Hier ein paar Screenshots, von der Feldbus-Ebene, die zeigen, wie der Status Wert gerade steht und innerhalb des gleichen Projekts im System Manager die Variablen des Prozessabbildes. Schon hier sind die angezeigten Online-Werte unterschiedlich. Mir fällt nur auf, dass die Klemme als Datentyp UINT hat und die Variable in der Struktur aus der Original-Beckhoff Dali Library WORD ist. Die sind aber ja zu 100% identisch. Also 2 Byte lang und nicht vorzeichenbehaftet. Also woher kommt die 8 in der 0x82?

Auch ändert ein Schreiben, auf der einen Ebene nicht unbedingt den Wert in der anderen. Dabei sind die doch verknüpft! Das SPS-Programm habe ich zum Testen auch gestoppt um Seiteneffekte auszuschließen.

Klemme:
08-04-_2021_13-04-16.png


08-04-_2021_13-04-40.png

Prozess (siehe auch zueinader passende Referenzen, jedoch unterschiedliche Werte):
08-04-_2021_13-06-12.png

08-04-_2021_13-06-35.png
 

Anhänge

  • 08-04-_2021_13-04-16.png
    08-04-_2021_13-04-16.png
    30,9 KB · Aufrufe: 7
@oliver.tonn: Ist mir klar und ist auch nicht so... Bin ja kein NOOB und habe seit 2006 da schon sehr viele Variablen und Klemmen angesteuert ;-) trotzdem danke.

Globale Variablen mit der im letzten Beitrag angegebenen Deklaration sind hier:
08-04-_2021_14-07-46.png

Die dazu generierte Config (eine Zeile tiefer) ist natürlich Read Only. Im Falle von TwinCAT darf man da nicht nur nicht rumeditieren, sondern man kann auch gar nicht.
08-04-_2021_14-09-48.png
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hast du die Klemme im System Manager von Hand eingefügt oder im Config Mode durch scannen?
In der PLC mal Projekt bereinigt und komplett neu übersetzt, dann im System Manager neu einlesen...
Was ist, wenn du eine Testvariable vom Typ UINT oder WORD anlegst und verknüpfst?
Sonst fällt mir nicht mehr viel ein.
 
Ich wollte mich einmal bei allen Autoren für die Antworten bedanken. Ich habe den Bug mittlerweile gefunden und poste einmal am Ende, was es war.

@NieZuSpaet: Ja, ich füge alle Klemmen per Hand ein. Durch ein Durchscannen verliere ich individuelle Benennungen und Klemmen, die dadurch nicht gefunden werden können, die mir aber Numerierung und Übersicht erleichtern und manche Klemmen musste man in einen Subtyp wandeln (der technisch gleich aussieht). Falls jemand anders dazu eine Best-Practice hat, lerne ich die aber gerne.

Das Anlegen einer alternativen Struktur mit USINT bzw. UINT's brachte mich auf die richtige Fährte. Die neue Struktur wurde vom Programm nämlich noch nicht beschrieben und verknüpft. Dadurch verhielten sich die Werte exakt wie erwartet und es funktionierte. Überall stand der richtig Wert der Klemme: physisch und im Programm.

Mein Fehler war, im initialisierenden DALI Baustein die DataTerminal und Data Klemmen zu vertauschen (rot bzw. gelb):
11-04-_2021_17-54-07.png

Hierdurch gab es scheinbar dauernd Schreibimpulse, die zu einem Mix (bitwise OR) des gesetzten Status Bit's 1 im Hardware-Register und Bit 7 des SPS-Programms führten. Macht dann zusammen Hex 82.
 
Zurück
Oben