Step 7 AWL-Code in SCL umsetzen?

spirit

Level-1
Beiträge
961
Reaktionspunkte
23
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallöchen, ;)

hänge da etwas an einer Sache. Habe einen kurzen Code in AWL und müsste das jetzt im TIA-Portal bei ner 1200er einsetzen ... und auch noch erweitern.

Das Problem ist ja nun, dass es hier kein AWL gibt - und FUP kann ja mit Pointern auch nichts anfangen!

Frage:

Kann folgender Beispielcode 1:1 in SCL (mit Pointern) umgesetzt werden?


Code:
      L     #Nummer                 
      SLD   3                           
      T     MD   120                    

      AUF DB30
      L     DBW [MD 120]                
      T     #Wert


Lieben Dank ...
 
Das müßte etwa so aussehen (eventuell mit runden Klammern () statt []?)
Code:
  #Wert := DB30.DW[#Nummer] ;

Siehe SCL-Hilfe: Indizierter Zugriff auf Datenbausteine

PS:
TIA-SCL verlangt die Schreibweise vermutlich so:
Code:
  Wert := %DB30.DW(Nummer) ;

Harald
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Das müßte etwa so aussehen (eventuell mit runden Klammern () statt []?)
Code:
  #Wert := DB30.DW[#Nummer] ;

Siehe SCL-Hilfe: Indizierter Zugriff auf Datenbausteine

Harald

Ok, vielen Dank Harald!

Werde ich gleich am Montag im TIA versuchen ...

Dann kann ich mir ja (unbesorgt) weiter Gedanken machen, wenn das alles umsetzbar ist. :p
 
Hm, also irgendwie funzt das noch nicht ...

Bekomme hier immer einen Fehler angezeigt:

Fehler.jpg

Und das sagt die Hilfe dazu (hier noch mit eckigen Klammern!):

Hilfe.jpg


Was gebe ich denn nur falsch ein? :confused:


Habe es jetzt mal so eingegeben - sieht etwas besser aus: ;)

#Wert := "DB_Test".DW[#Nummer];

Hier wird noch moniert: Der Operand DW ist nicht definiert.
 
Zuletzt bearbeitet:
Ich meine, in irgendeiner TIA-Hilfe steht, daß der DB nicht symbolisch angegeben werden darf, sondern die absolute DB-Nummer mit % vornedran.
Code:
  Wert := %DB30.DW(Nummer) ;

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich meine, in irgendeiner TIA-Hilfe steht, daß der DB nicht symbolisch angegeben werden darf, sondern die absolute DB-Nummer mit % vornedran.
Code:
  Wert := %DB30.DW(Nummer) ;

Harald

Nehme mal an, du meinst so etwas in der Art hier:

Unbenannt.JPG


Dem Ausgang #Wert soll einfach über den Eingang #Nummer der Wert zugewiesen werden, der an entsprechender Stelle im DB steht:

Wenn ich das nun aber so schreibe

Code:
  #Wert := %DB30.DW(#Nummer) ;

dann erhalte ich gleich drei Fehlermeldungen:

Unbenannt2.JPG
 
Zuletzt bearbeitet:
Hallo,
ich denke mal, dass das %DB30 hier nicht funktioniert sondern das es "DB30" werden müßte.
Des Weiteren bitte beachten, dass dieser Zugriff dir den Datentyp WORD zurück gibt. Ist Wert aber ein INT dann müßtest du das Ganze erst noch von WORD nach INT umcasten (WORD_to_INT)

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich denke mal, dass das %DB30 hier nicht funktioniert sondern das es "DB30" werden müßte.
Des Weiteren bitte beachten, dass dieser Zugriff dir den Datentyp WORD zurück gibt. Ist Wert aber ein INT dann müßtest du das Ganze erst noch von WORD nach INT umcasten (WORD_to_INT)

Gruß
Larry

Danke Larry,

aber auch diese Schreibweise klappt nicht.

ABER:

Kann es sein, dass es nicht klappt, weil ich im TIA keine 300er sondern eine 1200er programmiere?

Habe jetzt mal etwas gründlicher geschaut, und da gibt es die Fkt. "PEEK" (=Speicheradresse lesen) ...
 
Zuletzt bearbeitet:
... das kann natürlich auch sein - ich tippe hier aber eher auf TIA V12 oder höher ... (setze ich selber nicht ein).

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Kann folgender Beispielcode 1:1 in SCL (mit Pointern) umgesetzt werden?

Code:
      L     #Nummer                 
      SLD   3                           
      T     MD   120                    

      AUF DB30
      L     DBW [MD 120]                
      T     #Wert
Macht es nicht mehr Sinn, die Aufgabe des Ausgangscodes zu erfassen und diese dann mit den Funktionalitäten von SCL umzusetzen?
Bei 'ner 1:1-Übersetzung kommt ja gern mal sowas hier raus.


Bei so 'nem Pointer hat man ja meist ein Variablenfeld, das man dann abgrast. Kann man das z.B. vlt. als Array anlegen oder ist es gar schon eins?
So ganz nebenbei würdest Du auf diese Weise dann auch noch symbolisch arbeiten.
;)
 
Macht es nicht mehr Sinn, die Aufgabe des Ausgangscodes zu erfassen und diese dann mit den Funktionalitäten von SCL umzusetzen?
Bei 'ner 1:1-Übersetzung kommt ja gern mal sowas hier raus.


Bei so 'nem Pointer hat man ja meist ein Variablenfeld, das man dann abgrast. Kann man das z.B. vlt. als Array anlegen oder ist es gar schon eins?
So ganz nebenbei würdest Du auf diese Weise dann auch noch symbolisch arbeiten.
;)

Hi hucki,

eigentlich war ich schon der Meinung, dass der beschriebene SCL-Code genau dieser AWL-Anweisung entspricht?

Entsprechend dem Eingang #Nummer wird der Zahlenwert an dieser Stelle im DB dem Ausgang #Wert zugewiesen ... und das macht doch besagter SCL-Code auch! Daher sehe ich nun nicht, worauf du genau hinaus willst? :confused:

Ja, man könnte die Werte im DB auch in ein Array fassen.
 
Ich kann mir nicht vorstellen, das dies der komplette Code ist.

Es hat ja einen Grund, warum man einen Zeiger auf die Variable benutzt, anstatt sie direkt anzugeben. Meist gehört noch irgend eine Schleife oder ähnliches dazu, damit man den Code mehrfach durchlaufen kann.
Und vor allem ist aber der Aufbau des DB interessant. In dem DB werden doch vermutlich hintereinander gleichartige Werte abgelegt, oder?


Diese Sachen gilt es im Ganzen zu erfassen und dann mit SCL entsprechend der Aufgabe umzusetzen, anstatt den AWL-Code Zeile für Zeile zu übersetzen, was oft eh' nicht geht.


PS: Hast Deinen Beitrag gerade noch mal geändert, oder? (Zumindest hatte ich den letzten Satz vorher nicht wahrgenommen. :confused:) Also:
Wenn die Daten im DB als Array angelegt werden können, kann das Array in SCL auch symbolisch und mit den entsprechenden Indizies angesprochen werden, was mit AWL wiederum nicht möglich war.
 
Zuletzt bearbeitet:
Zurück
Oben