DB's symbolisch adressieren

erwin36

Level-1
Beiträge
6
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
hallo zusammen,
als erstes mal mein ziel. ich möchte mir einen cfc.baustein erstellen, der signale (erstmal binär) aufnimmt und in einen db steckt. das ganze soll dann in wincc visualisiert werden (erstmal unwichtig). nun soll man am cfc-baustein den db eintragen können. nun habe ich versucht das ganze in awl zu schreiben. also den db zugriff statt z.b. "t db1.dbw10" bin ich hergegangen habe mir unter "IN" eine variable "dbnr" angelegt und als integer deklariert.schnell musste ich feststellen, dass "t #dbnr.dbw10"
oder ähnliches nicht geht. dazu bräuchte ich erstmal einen tipp.
aber damit nicht genug: jetzt muss ich mir die signale einlesen, in ein word packen und zum db schicken. eigentlich nicht schwer:
u e...
=m 0.0 usw.
l mw 0
t db0.dbw...
da ich aber ausschlieslich symbolisch arbeiten (das heisst dieses hier dargestellte "mw0" als "temp"-variable) möchte weiss ich an dieser stelle nicht weiter. sicher kann ich mir in "temp" eine variable "merker" als typ word anlegen. aber wie bekomme ich dann die einzelbits in dieses word geschrieben. Eine Lösung wie z.b.
u e0.0
l 1
t #merker
...
l #merker
t db1.dbw0
wäre wohl etwas zu umständlich.

vielen dank an alle, die mir jetzt weiterhelfen !!!
 
hier ein Beispiel für die Umwandlung von 16 Bit in ein Word:

Code:
FUNCTION "FC_Bit->Word" : VOID
TITLE =
//Dieser Baustein transferiert 16 Bit in ein Word.
AUTHOR : XXX
FAMILY : System
NAME : Bit_Word
VERSION : 2.0
 
VAR_INPUT
  IN_0_0 : BOOL ; 
  IN_0_1 : BOOL ; 
  IN_0_2 : BOOL ; 
  IN_0_3 : BOOL ; 
  IN_0_4 : BOOL ; 
  IN_0_5 : BOOL ; 
  IN_0_6 : BOOL ; 
  IN_0_7 : BOOL ; 
  IN_1_0 : BOOL ; 
  IN_1_1 : BOOL ; 
  IN_1_2 : BOOL ; 
  IN_1_3 : BOOL ; 
  IN_1_4 : BOOL ; 
  IN_1_5 : BOOL ; 
  IN_1_6 : BOOL ; 
  IN_1_7 : BOOL ; 
END_VAR
VAR_OUTPUT
  Out_Word : WORD ; 
END_VAR
VAR_TEMP
  Adressregister_1 : WORD ; 
  my_Word : WORD ; 
END_VAR
BEGIN
NETWORK
TITLE =AR1 retten
      TAR1  ; 
      T     #Adressregister_1; 
NETWORK
TITLE =
      L     P##my_Word; 
      LAR1  ; 
      U     #IN_0_0; 
      =     L [AR1,P#1.0]; 
      U     #IN_0_1; 
      =     L [AR1,P#1.1]; 
      U     #IN_0_2; 
      =     L [AR1,P#1.2]; 
      U     #IN_0_3; 
      =     L [AR1,P#1.3]; 
      U     #IN_0_4; 
      =     L [AR1,P#1.4]; 
      U     #IN_0_5; 
      =     L [AR1,P#1.5]; 
      U     #IN_0_6; 
      =     L [AR1,P#1.6]; 
      U     #IN_0_7; 
      =     L [AR1,P#1.7]; 
      U     #IN_1_0; 
      =     L [AR1,P#0.0]; 
      U     #IN_1_1; 
      =     L [AR1,P#0.1]; 
      U     #IN_1_2; 
      =     L [AR1,P#0.2]; 
      U     #IN_1_3; 
      =     L [AR1,P#0.3]; 
      U     #IN_1_4; 
      =     L [AR1,P#0.4]; 
      U     #IN_1_5; 
      =     L [AR1,P#0.5]; 
      U     #IN_1_6; 
      =     L [AR1,P#0.6]; 
      U     #IN_1_7; 
      =     L [AR1,P#0.7]; 
      L     #my_Word; 
      T     #Out_Word; 
NETWORK
TITLE =AR1 zurückschreiben
      L     #Adressregister_1; 
      LAR1  ; 
END_FUNCTION
 
Einzelbitwandler nach DWORD

Folgender Baustein sammelt 32 einzelene Bit und legt sie der Reihe nach in einem DWORD ab

Code:
FUNCTION "Bitfeld_N_Dword" : VOID
TITLE =
VERSION : 0.1


VAR_INPUT
  Eingang_1 : BOOL ;    
  Eingang_1_1 : BOOL ;    
  Eingang_1_2 : BOOL ;    
  Eingang_1_3 : BOOL ;    
  Eingang_1_4 : BOOL ;    
  Eingang_1_5 : BOOL ;    
  Eingang_1_6 : BOOL ;    
  Eingang_1_7 : BOOL ;    
  Eingang_1_8 : BOOL ;    
  Eingang_1_9 : BOOL ;    
  Eingang_1_10 : BOOL ;    
  Eingang_1_11 : BOOL ;    
  Eingang_1_12 : BOOL ;    
  Eingang_1_13 : BOOL ;    
  Eingang_1_14 : BOOL ;    
  Eingang_1_15 : BOOL ;    
  Eingang_1_16 : BOOL ;    
  Eingang_1_17 : BOOL ;    
  Eingang_1_18 : BOOL ;    
  Eingang_1_19 : BOOL ;    
  Eingang_1_20 : BOOL ;    
  Eingang_1_21 : BOOL ;    
  Eingang_1_22 : BOOL ;    
  Eingang_1_23 : BOOL ;    
  Eingang_1_24 : BOOL ;    
  Eingang_1_25 : BOOL ;    
  Eingang_1_26 : BOOL ;    
  Eingang_1_27 : BOOL ;    
  Eingang_1_28 : BOOL ;    
  Eingang_1_29 : BOOL ;    
  Eingang_1_30 : BOOL ;    
  Eingang_1_31 : BOOL ;    
END_VAR
VAR_OUTPUT
  Sammel_Dword : DWORD ;    
END_VAR
VAR_TEMP
  Ar1_Speicher : DWORD ;    
  Ar2_Speicher : DWORD ;    
END_VAR
BEGIN
NETWORK
TITLE =

      TAR1  #Ar1_Speicher; //Rettung der Adresseregister
      TAR2  #Ar2_Speicher; 
//******************************************************************************************
      L     P##Eingang_1; //pointer auf Anfang der Eingänge
      LAR1  ; 
      L     P##Sammel_Dword; //Pointer auf das Ausgangs DWord
      LAR2  ; 

//******************************************************************************************
l d[ar1,p#0.0]//Informationübergabe
t d[ar2,p#0.0]
//******************************************************************************************
      LAR1  #Ar1_Speicher; //Rückspielung der Adresseregister
      LAR2  #Ar2_Speicher; 
END_FUNCTION
Viel Grüße Bernard
 
Zuletzt bearbeitet:
@erwin36
Das gehört ja nicht in den Stammtisch, habs mal verschoben, bitte in Zukunft darauf achten!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Bernard
Du rettest 2x Adressregister 1
es sollte so sein
Code:
*
...

      TAR1  #Ar1_Speicher; //Rettung der Adresseregister
      TAR[COLOR=Red]2[/COLOR]  #Ar[COLOR=Red]2[/COLOR]_Speicher; 
...
      LAR1  #Ar1_Speicher; //Rückspielung der Adresseregister
      LAR[COLOR=Red]2[/COLOR]  #Ar[COLOR=Red]2[/COLOR]_Speicher; 
...
 
Zuletzt bearbeitet:
Du rettest 2x Adressregister 1

Danke werde ich gleich Beheben (scheiß kopiererei)

Viel Grüße Bernard
 
Zuletzt bearbeitet:
Zurück
Oben