Step 7 SCL indirekt adressieren

Bluecivic

Member
Beiträge
9
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo zusammen,

ich bin schon am ganzen Morgen auf der Suche nach der Lösung meines Step7 Klassik SCL Problems.
Leider finde ich nicht genau die Lösung und bin was SCL angeht, ein absoluter Neuling.

Ich habe einen Kommunikationsbaustein zu einem SEW Umrichter in TIA.
Diesen möchte ich in die Klassikwelt übertragen, leider ohne Erfolg.

Genauergesagt möchte ich aus einem Wort bitweise auslesen und reinschreiben.
Dies kann sich in der Adresse von Anlage zu Anlage verändern daher indirekt addressieren.

Ich möchte für meine Altanlage nicht das vorhandene Programm nach TIA konvertieren, daher die Rolle rückwärts zu Klassik.

Folgendermaßen sieht die Passage in TIA aus, welche mir Probleme macht:
MoviDrv_TIA.JPG


Kann mir jemand beim Klassikcode in SCL und der Variablendeklaration helfen? Danke.

Gruß
Martin
 

TP-Inc

Well-known member
Beiträge
525
Punkte Reaktionen
101
Im gezeigten Bild findet keine indirekte Adressierung statt... Ich denke dein Problem ist der Slice Zugriff. .%X0 usw.

Hier kannst du dir entweder eine Funktion bauen die ein WORD in BOOL und umgekehrt wandeln Step 7 Bool zu Byte oder Int (sps-forum.de)

Oder du verwendest eine AT-Sicht. Müsset es in der STEP7 Hilfe geben.
 

PN/DP

User des Jahres 2011 - 2013; 2015 - 2017; 2020
Beiträge
16.865
Punkte Reaktionen
4.949
Zuviel Werbung?
->Hier kostenlos registrieren
Genauergesagt möchte ich aus einem Wort bitweise auslesen und reinschreiben.
Du könntest auch das Word temporär auf eine Struktur aus 16 Bits (Bools) umkopieren, dort Deine Bits lesen und schreiben, und ggf danach wieder auf ein Word zurückkopieren. Das geht gut in SCL mit einer AT-Sicht, ist aber auch in AWL (ohne AT) machbar.

Harald
 
OP
B

Bluecivic

Member
Beiträge
9
Punkte Reaktionen
0
Also gibt es keinen so einfachen Befehl wie im TIA für die Klassikwelt, mit dem ich das Bit eines Wortes, welches ich mit einer Array Adresse anspreche, lesen oder schreiben kann?

#PO[1].%X0

Gruß
Martin
 

PN/DP

User des Jahres 2011 - 2013; 2015 - 2017; 2020
Beiträge
16.865
Punkte Reaktionen
4.949
korrekt. Direkte Slice-Zugriffe gibt es da nicht.

Harald
 

JesperMP

Well-known member
Beiträge
6.273
Punkte Reaktionen
1.170
Zuviel Werbung?
->Hier kostenlos registrieren
Anstatt auf das Prozessabbild die Daten lesen und schreiben, schlage ich vor ein DB anliegen um die Umrichter Daten zu speichern.
Dann kannst du mittels DPWR_DAT und DPRD_DAT die Daten konsistent schreiben und lesen. Datenkonsistenz ist wichtig bei Umrichter.
Gleichzeitig kannst du UDTs anliegen und damit die Daten in den DB als auch in dein FC formatieren. Dann hast du die Daten schön symbolisch und da ist kein Bedarf die Daten rumzukopieren zwischen die Absolutadressen und die symbolische Adressen.
 

Zombie

Well-known member
Beiträge
697
Punkte Reaktionen
109
Wunderbar, dass sowas auch mal andersrum gefragt wird.

Ich hab das in Klassik immer so gemacht.

Ein Merkerwort, zb. MW240 global als Word deklariert. Name "mwSEW_Signale".
Jedes Bit dieses Wortes ebenfalls mit einem Variablennamen versehen, je nachdem für was sie in dem Signalwort von SEW standen.
M240.0 war dann Umrichterfregabe_aktiv usw.

Hat den Nachteil, dass der Baustein bei jedem Aufruf wieder den Eingang lesen muss und die Signale erneut zuweisen muss.
Wenn man mehrere Aufrufe des FBs hat, wird das Merkerwort jedes Mal neu überschrieben. D.h. obwohl die Variable global ist, kann man sie nicht global abfragen, weil nur Murks drin steht.

Im Baustein dann

Code:
mwSEW_Signale := iwSignale; (iwSignale war ein Eingangswort des FBs)


If Umrichterfreigabe_aktiv then
.
.
.
.
.
END_IF;
 
Zuletzt bearbeitet:
Oben