TIA AWL Pionter nach FUP

Zuviel Werbung?
-> Hier kostenlos registrieren
bei U DBX [ #SUB_Hilfe ] komme ihc nicht ganz klar.
Wenn Du im DB "MyDB" am Offset 10.0 ein Array "MyArray" [0..99] OF BOOL hast, dann wurde das indirekte Lesen eines BOOL früher in AWL so programmiert:
Code:
L #Index  //Index des gewünschten Bits
L P#0.1   //Speichergröße des Datentyps BOOL
*D
L P#10.0  //Offset von MyArray im DB
+D
T #SUB_Hilfe

AUF "MyDB"
U DBX [#SUB_Hilfe]
= #Speichern

Heute schreibt man viel einfacher mit einer Zeile SCL:
#Speichern := "MyDB".MyArray[#Index];

Harald
 
Fazit: Vollsymbolisch arbeiten und für sowas Array-Variablen anlegen. Der Zugriff erfolgt dann über den Index...
Genau, vollsymbolisch arbeiten.

Wenn du ein Programm migrieren willst dan einfach Quick und dirty als AWL in die 1500er hinein hauen.
Solange der Kompiler es in Odnung findet.

Sonnst in dein Fall, vergesse AWL um zu programmieren.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Dann kann man aber auch gleich bei der 300ér bleiben. So ein verhunztes, migriertes und nicht vollständig
überarbeitetes Programm wird doch immer eine Baustelle bleiben.
Ja natürlich.

In Waldy Fall wäre es warscheinlich besser. Da wird der alte AWL Code mit hohe Sicherkeit machen was sie soll. Das neu programmierte FUP ist die Frage...
 
U DBX [ #SUB_Hilfe ] // DWord " es wird auf Inhalt von DW abgefragt, so bals ist mindestens Zehl "1" , VKE ist 1

UN M0.0 // Bool " abgefragt nach Merker M0.0 - NICHT

= #Speichern // Bool " zuweisen "1"



wäre es so Richtig in FUP dargestellt?
 

Anhänge

  • FUP1.PNG
    FUP1.PNG
    12,8 KB · Aufrufe: 21
Wo kommt denn dein "Zahl" her? Das kannst du auch direkt auf >1 vergleichen.
Zahl habe ich mit MOVE simuliert.

Sobald DW ist auf "0", bzw hat keine Zahl = VKE ist "0", schaue erste Bild.

Wenn ich gebe mit MOVE "1" nach DW , dann VKE ist "1" und es wird ausgeführt. Bild zweite.

Gruß
 

Anhänge

  • fup0.PNG
    fup0.PNG
    31,5 KB · Aufrufe: 24
  • FUP1.PNG
    FUP1.PNG
    29,9 KB · Aufrufe: 24
Zuviel Werbung?
-> Hier kostenlos registrieren
ob das so gewollt ist ? :unsure:
Sicher nicht.

[Glaskugel On]
Ich vermute mal, dass es sich hier um einen Ausschnitt einer Schrittkette in AWL mit Sprungverteiler handelt.
Mit dem Pointer wird wahrscheinlich ein Bit in einem Array gesetzt. Somit hat man dann einfach „Schrittmerker“ für die Befehlsausgabe und braucht da keine Vergleicher.
[Glaskugel Off]
 
Also ich kenne mich jetzt nicht soooo genau mit FUP aus. Ich halte das noch nichtmal für eine Programmiersprache, aber wenn da steht:

Code:
UND X >= 1
dann hat sich doch jemand was dabei gedacht...

Edit:
P.S.: Die Kunst liegt im weglassen (Lutz Ilgner Kölner Musikverleger)
 
Im Quellen-Ordner eine SCL-Quelle anlegen, öffnen und folgenden Quelltext hineinkopieren:
Code:
FUNCTION Deco1440 : VOID
VAR_INPUT
    Minute : INT; //0..1439
END_VAR

VAR_OUTPUT
   MinutenArray : ARRAY [0..1439] OF BOOL;
END_VAR

VAR_TEMP
    tmpDw : DWORD;
    tmpI : INT;
END_VAR

    tmpDw := 0;
    tmpI := FILL(BVAL := tmpDw, BLK := MinutenArray); //Array löschen/initialisieren

    MinutenArray[Minute] := TRUE;
END_FUNCTION
In der Symboltabelle ein Symbol "Deco1440" : FC... anlegen. Dann die SCL-Quelle übersetzen.

Harald
... und für AWL-Freunde ;)
Code:
//Array löschen/initialisieren
      L     0
      T     #tempDW

      CALL  "FILL"                      //SFC21
       BVAL   :=#tempDW
       RET_VAL:=#tmpInt
       BLK    :="MyDB".MinutenArray

//"MyDB".MinutenArray[Minute] := TRUE;
      L     #Minute                     //0..1439
      L     P#2.0                       //<--- Anfangsadresse des Array "MinutenArray" im DB hier eintragen
      +D  
      LAR1
      SET  
      R     "MyDB".MinutenArray[0]      //AUF DB und für Querverweise und Kontrolle der Adresse "MinutenArray"
      S     DBX [AR1,P#0.0]

Harald
@waldy,

wie Du an diesem aktuellen Beispiel von Harald sehen kannst, ist eine 1:1-Übersetzung zwischen 2 Programmiersprachen (insbesondere, wenn eine AWL ist) nur selten wirklich sinnvoll.
 
Zurück
Oben