Step 7 SCL Syntax

CZach001

Level-1
Beiträge
65
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich möchte gerne einem Bit in einem Datenbaustein variabel einen Eingang zuweisen.
Der gedanke ist über die Visualisierung für eine Funktion einen Eingang zu konfigurieren, über die Eingabe von Byte und Bit.
Hab das ganze mal mit SCL versucht.

Wenn ich das Bit für die Funktion (Funktion1:BOOL)
und das Byte und das Bit für die Eingangsvariable deklariere

F1_Byte:int;
F2_Bit:int;

und das Ganze dann zuweise Funktioniert es.

E[F1_BYTE,F1_BIT] := Funktion1;


am Bit Funktion1 hängt dann der Eingang den ich über F1_Byte und F1_Bit vorgegeben habe.


Jetzt möchte ich aber nur noch den Datenbaustein über eine Variable mitgeben, weiß aber nicht wie der Syntax dazu aussehen soll.

Datenbaustein:
DB.PNG


SCL:

scl.PNG
Die Adresse für das Byte steht im Datenbaustein im Wort 2
Die Adresse für das Bit steht im Datenbaustein im Wort 4

Das Signal des Eingangs soll dan im Bit 0.0 des Datenbaustein stehen.


Vielleicht gibt es auch eine elegantere Lösung für dieses Problem?


Danke schon mal für eure Hilfe.

VG
CZach
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja natürlich du hast recht.
das hab ich auch so schon probiert und hat funktioniert mein Problem liegt bei der zweiten Variante.

Wie soll der Syntax aussehen das ich in dem DB der als Variable deklariert ist auf eine Feste Adresse zugreifen kann.

VG
CZach
 
Hi, ich weiß nicht genau was du vorhast, aber es scheint sehr unflexibel zu sein. Wenn du mal genau erläuterst was du möchtest gäbe es wahrscheinlich elegantere Lösungen, aber zu deiner Frage,

Die Byte und Bit Adressen müssen in SCL als INT in den eckigen Klammern angegeben werden. Mit DW2 gibst du aber ein WORD an. Du muss ein WORD_TO_INT machen, etwa so:
Code:
FUNCTION TEST_FC: VOID
VAR_INPUT
    DB_IN : BLOCK_DB;
END_VAR
VAR_TEMP
    BYTE_ADRESS :INT;
    BIT_ADRESS: INT;        
END_VAR
BEGIN
//Gewünschte Adressen zuweisen
BYTE_ADRESS := WORD_TO_INT(DB_IN.DW2);
BIT_ADRESS := WORD_TO_INT(DB_IN.DW4);
    
//Eingang lesen und der BOOL-Variable im DB_IN zuweisen
DB_IN.dbx0.0 := E[BYTE_ADRESS,BIT_ADRESS];

END_FUNCTION

PS: Man kann das WORD_TO_INT auch direkt in die Klammer schreiben...

Edit: Warum werden meine Umlaute nicht richtig dargestellt ?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie soll der Syntax aussehen das ich in dem DB der als Variable deklariert ist auf eine Feste Adresse zugreifen kann.
Hilfe zu STEP 7 : Indizierter Zugriff auf Datenbausteine schrieb:
STATUS_1:= WORD_TO_BLOCK_DB(INDEX).DW[ZAEHLER];
Siehe in der "Step7-Hilfe > Index" die SCL-Themen
- Indizierter Zugriff auf Datenbausteine
- Indizierter Zugriff auf Speicherbereiche der CPU

Ich würde so eine Programmierweise in neuen Projekten aber nicht mehr verwenden, weil sie in TIA so nicht mehr unterstützt wird. Da muß man nun die Funktionen PEEK und POKE verwenden. Noch besser: symbolisch programmieren und STRUCT bzw. UDT verwenden und übergeben.

Harald
 
Zurück
Oben