TIA Tia V15.1 SCL Syntax

Nico770

Level-1
Beiträge
41
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen zusammen,

ich hätte da mal eine kurze Frage:
Wie kann ich bei einer WORD Variable, welche zwei unabhängige Zahlen enthält, diese im Programm mit SCL Zahlen lesen/schreiben?
Die Variable im Datenbaustein ist vom Datentyp WORD, und ist mit dem Defaultwert B#(10,15) deklariert. Das klappt soweit alles wunderbar.
Nur sobald ich im Programm dieser Variable einen Wert zuweisen will mit dem Syntax "DB"."Var" := B#(0, 5) meckert die IDE rum, dass ich ein falsches Syntax verwende.
Ich könnte natürlich auch um das ganze herum Arbeiten indem ich statt einem WORD eine Struct/Array of Byte erstelle oder mit der AT-Sicht auf das Word zugreife, aber ich würde gerne nah am original bleiben (Das Original ist eine S5 welche den Datentypen KY verwendet).
Und um es zu verwenden zu können müsste ich natürlich auch Variablen zuweisen können, sowas wie "DB"."Var" := B#(#tmpVar1, %MB4). Ist das möglich mithilfe von SCL?
Und wie würde ich einzelne/beide Werte abfragen? In der S5 kann ich das Wort ja mit DL/DR addressieren, aber in S7-SCL sehe ich da keine Möglichkeit.
Ich verwende übrigens eine CPU417, somit ist der Slice-Befehl auch keine Option.

Vielen Dank im Vorraus und einen schönen Tag noch!
 
Grundsätzlich frage ich mich gerade, warum du aus der einen Word-Variable nicht einfach 2 Bytes machst.
Bei der S5 war der Krampf ja auch nur nötig, weil der DB halt immer "WORD" war ...
 
Weil ich gerne so nah am original bleiben würde wie nur möglich. Grundsätzlich hast du aber Recht. Das Problem ist ja auch wirklich nur ob es dafür ein Syntax in SCL gibt, Wege um dieses Problem zu lösen gibts viele :D

//Edit: Anderen Post gerade erst gelesen:
Oke also nach 30Min Recherche im Internet / Handbüchern und Lehrgangsdaten habe ich auch nichts zu dem Thema gefunden.... da frage ich mich nur warum es möglich ist diese Variablen überhaupt noch zu erstellen (Vorallem in einer SCL-Quelle in Step7 Classic??).
Ich denke aber ihr habt Recht, dann werde ich das eben umstellen.

Der Grund (nur Falls es jmd. interessiert) ist, das wir aktuell eine Anlage von S5 auf S7 umstellen, und mir Azubis die gerade in diesem Themenbereich in der Ausbildung sind "dabeigegeben" wurden die sich das ein wenig anschauen sollen. Und da ich ein Fan von vorher/nachher Vergleichen bin, dachte ich es wäre ganz schön nah am Original zu bleiben.

Vielen Dank für die Hilfe und einen entspannten Start in die Woche!
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Stimmt auch wieder. Kann man aber auch nur froh drüber sein vom AWL weg zu sein.
Das es SCL wurde, liegt auch nur an persönlicher Präferenz.
Wie gesagt, ich denke ich wollte einfach zu sehr den Vorher/Nachher Vergleich, aber hat sich nun erledigt. Habe das gesamte Konstrukt auf Structs umgestellt.
 
Weil ich gerne so nah am original bleiben würde wie nur möglich. Grundsätzlich hast du aber Recht. Das Problem ist ja auch wirklich nur ob es dafür ein Syntax in SCL gibt, Wege um dieses Problem zu lösen gibts viele :D

//Edit: Anderen Post gerade erst gelesen:
Oke also nach 30Min Recherche im Internet / Handbüchern und Lehrgangsdaten habe ich auch nichts zu dem Thema gefunden.... da frage ich mich nur warum es möglich ist diese Variablen überhaupt noch zu erstellen (Vorallem in einer SCL-Quelle in Step7 Classic??).
Ich denke aber ihr habt Recht, dann werde ich das eben umstellen.

Der Grund (nur Falls es jmd. interessiert) ist, das wir aktuell eine Anlage von S5 auf S7 umstellen, und mir Azubis die gerade in diesem Themenbereich in der Ausbildung sind "dabeigegeben" wurden die sich das ein wenig anschauen sollen. Und da ich ein Fan von vorher/nachher Vergleichen bin, dachte ich es wäre ganz schön nah am Original zu bleiben.

Du kannst ja die Bytes in deiner Struktur DL und DR benennen. :p
Dann bist du noch nah am Original
 
Du kannst doch mit Slice-Zugriffen auf die Bytes Zugreifen
Code:
"DB"."Var".%B0 := 0;
"DB"."Var".%B1 := 5;

Aber wenn die Werte nicht auch als Wort benötigt werden, würde ich auch lieber zwei einzelne Bytes anlegen
 
(Das Original ist eine S5 welche den Datentypen KY verwendet).
Die S5 hatte eigentlich gar keine DatenTypen im Sinne der S7.
Es gab Befehle, um Bits, Worte oder DoppelWorte zu verknüpfen. Wollte man Bytes verknüpfen, so war man darauf angewiesen, dafür Wort- oder DoppelWort-Befehle zu "missbrauchen".
Für das Laden und Transferieren und auch für das Inkrementieren und Dekrementieren um eine Vorzeichen-lose ByteKonstante gab es allerdings ByteBefehle. Sogar für das Addieren einer Vorzeichen-behafteten ByteKonstante gab es einen Befehl.
Als spezielle DatenTypen gab es eigentlich nur die GleitpunktZahlen (Doppelwort) mit speziellen Operatoren und Komperatoren sowie TypKonvertierungen und den Typ BCD mit entsprechenden TypKonvertierungen. Alles andere war BOOL (BitVariablen) oder WORD bzw. DWORD und verhielt sich bei Vergleichen je nach VergleichsOperator wie INT bzw. DINT.
Für das Laden von WortKonstanten in den Akku gab es allerdings eine ganze Palette von Varianten/Möglichkeiten, u.a. die von Dir genannte Variante KY.
Für das Laden eines Bytes gab es KB, für DoppelWorte gab es KG und DH.

... da frage ich mich nur warum es möglich ist diese Variablen überhaupt noch zu erstellen (Vorallem in einer SCL-Quelle in Step7 Classic??)
Diese Frage verstehe ich überhaupt nicht.
Beim "Erstellen von Variablen" wünscht man sich doch eher keinerlei Einschränkungen!? Und bei den InterpretationsMöglichkeiten von "Bitmustern" doch wohl auch nicht?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Diese Frage verstehe ich überhaupt nicht.
Beim "Erstellen von Variablen" wünscht man sich doch eher keinerlei Einschränkungen!? Und bei den InterpretationsMöglichkeiten von "Bitmustern" doch wohl auch nicht?

Die Frage ist eher nach dem Motto gemeint "Warum gibt man dem Nutzer die Möglichkeit solche Variablen zu erstellen, ihm aber dann keine Möglichkeit mit diesen Variablen zu arbeiten?".
Dann hätte man sich das Meiner Meinung nach in SCL komplett sparen können, bevor man dort etwas halbes einfügt.
 
Spruch eines alten Programmierers „Die Steuerung braucht keine Datentypen. Datentypen gibt‘s nur, weil Programmierer nicht mitdenken“
Na klar, auch unter den Programmierern gibt es so 'ne und solche. Programmierer, die mitdenken und Leute, die programmieren, ohne mitzudenken.
Und es gibt Leute, die davon überzeugt sind, dass der Computer alias Compiler sehr viel besser und "gewissenhafter" (= pingeliger) mitdenken kann als ein Programmierer.
Und es gibt Leute, die die Kosten für Programmierer eliminieren, zumindest aber dezimieren möchten.
Und es gibt Leute, die die mitdenkenden Compiler realisieren sollen, ohne eine Vorstellung davon zu haben, was das täglich Brot eines SPS-Programmierers eigentlich ist.
Wenn diese Leute mitdenken, dann denken sie "BitSchiebereien, Maskierungen und Verküpfungen von Bits in grösseren Verbänden (Bytes, Worten, etc.) sind doch möglich, wenn man es mal braucht ... aber wer braucht das schon? Wen interessieren schon einzelne Bits oder Bytes oder sogar Nibbles in einem (Doppel-)Wort?".
DatentypUmwandlungen sind doch zu Hauf vorhanden. Aber sie blähen den zu schreibenden Code u.U. so sehr auf, dass man vor lauter Code den eigentlichen Sinn und Zweck des Codes mit einer Lupe suchen muss.
In der Praxis kommt hinzu, dass die vorhandenen DatentypUmwandlungen z.T. nicht korrekt umgesetzt sind (wie Harald alias PN/DP uns gezeigt hat). Der Code wird dann durch die erforderlichen WorkArounds noch weiter aufgebläht.
Diese Unzulänglichkeiten sind längst bekannt und jeder Hersteller von SPS-CPUs hat einen Lösungsweg von vornherein vorgegeben oder nachgebessert. Da gibt es viele gute bzw. zumindest brauchbare Konzepte. Zu viele.
Unterschiede zwischen verschiedenen CPU-Typen desselben Herstellers sind die Krönung der Problematik.
Es gibt leider kein einheitliches, gutes Konzept. Das ist das eigentliche Problem, das einem in diesem Forum in viel zu vielen Threads zu diesem DauerbrennerThema immer wieder vor Augen geführt wird.
 
Zurück
Oben