Awl - Scl

nur ein Teilauszug ... sollte aber verständlich sein


Code:
VAR_TEMP
  i:INT;
  j:DINT;
  k:DWORD;
  TAD1 AT j:STRUCT
    Byte0:BYTE;
    BYTE1:BYTE;
    BYTE2:BYTE;
    BYTE3:BYTE;
  END_STRUCT;
  TAD2 AT k:STRUCT
    Byte0:BYTE;
    BYTE1:BYTE;
    BYTE2:BYTE;
    BYTE3:BYTE;
  END_STRUCT;
END_VAR

im proggie

          TAD2.byte0:=TAD1.byte3;
          TAD2.BYTE1:=TAD1.BYTE2;
          TAD2.BYTE2:=TAD1.BYTE1;
          TAD2.BYTE3:=TAD1.BYTE0;

gruß stricky
 
Hallo!

gibts da schon ne bessere Lösung oder muss man das noch immer von Hand programmieren?

godi
 
Nee nur mit Rotieren (im kompletten Doppelwort) bekommt man es nicht gebacken ;o(

Und wenn ich mit schieben und zwischen Variablen anfange oder zwei Word Variablen nehme und die Rotieren lasse wird es komplexer als die Lösung vom Kollegen Stricky.

Vielleicht fällt mir noch was über Nacht ein ;o)
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
So sollte es gehen ;)
OK ist aber um nix einfacher als die Lösung von Stricky

Code:
FUNCTION FC5 : VOID
VAR_INPUT
    INPUT : DWORD;
END_VAR
VAR_OUTPUT
    OUTPUT : DWORD;
END_VAR
VAR_TEMP
  OUTPUT_Temp : DWORD;   
  OUTPUT_Temp_Word AT OUTPUT_Temp : ARRAY [0..1] OF WORD;
  OUTPUT_1 : DWORD;
  OUTPUT_1_Word AT OUTPUT_1 : ARRAY [0..1] OF WORD;
 
END_VAR
OUTPUT_1 := ROL(IN:=INPUT,  N:=16);
OUTPUT_Temp_Word[0]  := ROL(IN:=OUTPUT_1_Word[0], N:=8);
OUTPUT_Temp_Word[1]  := ROL(IN:=OUTPUT_1_Word[1], N:=8);
OUTPUT := OUTPUT_Temp;
 
END_FUNCTION

Aber es wundert mich das es hierfür keinen Befehl nicht gibt!

godi
 
...
Aber es wundert mich das es hierfür keinen Befehl nicht gibt!
...

Wenn man einen Befehl braucht den es nicht gibt schreibt man sich eine Funktion die einem die benötigte Aufgabe erledigt.

In C z.B. gibt es kaum Grundbefehle, da kommt viel aus den Bibliotheke. Bei CoDeSys läuft das ganz ähnlich man baut sich eine Funktion oder einen Funktionsblock und legt Ihn in eine Lib ab. Ok ich kann verstehen das man bei Step7 da etwas genervt ist da dort ja jede Funktion als eigener Baustein behandelt werden will.
 
@Zotos:
Ist dir über nacht nix mehr eingefallen? ;)

Ja die vielen Bausteinaufrufe sind dann auch ein wenig Nervig.
Programmiert ihr solche Funktionen dann in AWL wenn es deutlich einfacher ist wie zb. die Befehle TAD, FP, FN?
Oder Programmierst ihr das dann auch in SCL?

godi
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nee mir ist über Nacht nichts besseres eingefallen.

Also in welcher Sprache man eine Funktion schreibt hängt doch von der Aufgabe ab. Immer die Sprache die einem am geeignetsten erscheint.
Also in dem TAD Fall würde ich bei einer S7 zu AWL Greifen weil es den Befehl ja 1zu1 gibt.
In der Firma würde ich ST nehmen da wir kein AWL verwenden.
 
OK!
Hat mich nur mal interessiert wegen Kunden. Wenn die zb SCL verlangen ob da dann soetwas ein Problem ist wenn man solche Bausteine in AWL macht.
Habe mit Kunden halt noch nie was gemacht weil ich bis jetzt noch einfacher Betriebselektriker war aber ab September wechsle ich zu ner anderen Firma wo ich dann auch unter anderem SPS - Programmieren tu für Kunden. :-D

godi
 
Mit einer eigenen Funktion ginge es auch:

AWL: FC53 in Symbolik FC_TAD

Code:
FUNCTION FC 53 : VOID
TITLE =
VERSION : 0.1


VAR_INPUT
  Input : DWORD ;    
END_VAR
VAR_OUTPUT
  Output : DWORD ;    
END_VAR
BEGIN
NETWORK
TITLE =

      L     #Input; 
      TAD   ; 
      T     #Output; 
END_FUNCTION
SCL:

Code:
FUNCTION FC54 : INT

VAR_TEMP
    // temporäre Variablen
    Ohne_TAD: DWORD;
    Mit_TAD: DWORD;
END_VAR

...

    FC_TAD(Input := Ohne_TAD ,Output := Mit_TAD);
   
...
  
    ;
    FC54 := 100;
END_FUNCTION
 
Zurück
Oben