Vorgabe des Bereichs (A/E/M) Über die Variablen Deklaration

Balou

Level-1
Beiträge
221
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Kollegen

wie kann ich in einem FC von außen vorgeben in welchem Bereich Merker, Ausgänge oder Eingänge etwas geladen werden soll es geht genauer um das Bsp.

https://www.sps-forum.de/phpBB2/viewtopic.php?t=1363

Wir wollen dort über die Vorgabe einer Zahl ein Betimmtes Bit Laden um den FC aber Flexibler z gestalten will ich net im FC stehn haben
U E [AR1,P#0.0] sonder will das E irgendwie auch Variabel haben so das da auch mal M oder A stehen soll (aber immer Lesend auch bei A)

MfG Balou
 
Nimm am besten einen Any-Typ und bastel dir, je nach Bedarf, den richtigen Typ (M,E,A etc.) zusammen (Hilfe "Any" unter Step7 zeigt, wie der Typ Any aufgebaut ist)

Gruß Ralle

(Hab letztens hier einen Block-Move-Baustein eingestellt, da ist so ein Any-Typ drin)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Balou,

ein Pointer tut's auch. Sieh in der Step7-Hilfe unter "Format des Parametertyps Pointer". Dort ist sind Aufbau des Pointers sowie die Hex-Codes für die Speicherbereiche beschrieben. Im einfachsten Fall übergibst du die Byte-Adresse und den Speicherbereich als Byte an den Baustein.


Code:
      L     #ADRESSE                    // hex
      SLD   3
      L     #BEREICH                    // hex (z.Bsp. B#16#81 für "E")
      SLD   24
      OD    
      LAR1  

      U      [AR1,P#0.0]
      ..


Gruß, Onkel
 
Mahlzeit

bin wohl zu doof oder noch net Ausgeschlafen

in der Erklärung steht das der Pointer 6 Byte länge hat.
Nun bin ich nicht sicher wo ich den hinladen soll ins Adressregister und dann mit U [AR1,P#0.0] aufrufen muss oder mit U P#M50.0
wenn ich ihn vorher im Merkerbereich 50 -55 definiert hab.

Ach ja ich will irgendwie auch den DB aufruf mitnutzen der ja im Byte 0 und 1 steht.

Sorry aber ich steh voll auf dem Schlauch

MfG Balou
 
Hallo Balou,

richtig, der Pointer besteht im Allgemeinen aus 6 Byte, das ist der sogenannte DB-Pointer. Da du nur auf E/A/M zugreifen wolltest, könnst du wie oben beschrieben einen bereichsübergreifenden Pointer (4Byte) verwenden. Er unterscheidet sich dadurch, daß die zwei Bytes mit der DB-Nummer fehlen. Der Vorteil ist die einfache Bearbeitung da ja ein Doppelwort direkt in den Akku bzw. in ein Adressregister geladen werden kann.

Byte n Byte n+1 Byte n+2 Byte n+3
10000zzz_00000yyy_yyyyyyyy_yyyyyxxx

x - Bitadresse
y - Byteadresse
z - Operandenbereich

Die Werte für den Operandenbereich findest du in der Online-Hilfe.
Wenn du nun auf Daten in einem DB zugreifen willst, öffnest du den DB und verwendest als Operandenbereich, bzw "Byte n" b#16#84.


Ich habe dich doch richtig verstanden, daß du den Operandenbereich und die Adresse als Parameter an den Baustein anlegen möchtest?


Wenn du einen DB-Pointer oder Any-Zeiger zusammenstellen willst, dann würde ich eine Variable vom Typ Any in den temporären Lokaldaten anlegen. Dann kannst du über absolute Adressierung byte- oder wortweise die gewünschten Daten dort hinein schreiben. Wegen der absoluten Adressierung sollte die Adresse dieser Variable nicht verändert werden, also möglichst Adresse 0 usw. dafür reservieren! Diesen Any-Pointer kannst du als Parameter an andere Bausteine wie "BLKMOV" übergeben.


Gruß, Onkel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nabend

richtig für das erste reicht mir der Nrmale (4 Byte) Pointer den ich ins AR Laden kann.

Aber da mein wissens durst nicht zu stillen ist wollte ich wissen wie und wohin ich den DB Pointer laden muss da das AR meines wissens nur 4 Byte hat geht er da ja net rein oder lieg ich da verkehrt??

Wie gesagt ich weiß halt net wirklich wo ich den hinschreiben muss und wie ich das dann anwende so das ich einen db Flexibel aufrufen kann und auch die bytes flexibel rufen kann???

MfG Balou
 
Hallo Balou,

Balou schrieb:
...Aber da mein wissens durst nicht zu stillen ist wollte ich wissen wie und wohin ich den DB Pointer laden muss da das AR meines wissens nur 4 Byte hat geht er da ja net rein oder lieg ich da verkehrt??
...

Na das sieht dann z.Bsp. so aus:

Code:
      L     P##HMI_DATEN_REGELKREIS     // Pointer-Adresse
      LAR2                              // ins AR2
      L     W [AR2,P#0.0]               // DB-Nummer
      T     #TEMP_INT
      AUF   DB [#TEMP_INT]              // DB öffnen
      L     D [AR2,P#2.0]               // bereichsübergreifenden Pointer
      LAR2                              // ins AR2
      L     W [AR2,P#0.0]               // ...


Gruß, Onkel
 
Moin

erstmal besten Dank

ich werd das mal auf meiner CPU Testen und werde mich dann wieder Melden.

MfG Balou
 
Zuviel Werbung?
-> Hier kostenlos registrieren
hallo balou,
ich habe auch vor, einem baustein die erste adresse eines ew oder mw zu geben, aber dann noch vorgeben wie viel worte kopiert werden sollen. möchte auch vorgeben ab welchem aw oder mw sie geschrieben werden sollen. komme leider nicht weiter.
:oops:
bist du schon vorran gekommen? kannst du helfen oder soll ich ein neuen thread aufmachen?
mfg wannabee
 
hi wannabee
wir haben in diesem thread weiter darüber gerätselt vielleicht hilft dir mein letzter beitrag (sry das ich ihn nicht nochmal schreibe aber ....)
https://www.sps-forum.de/phpBB2/viewtopic.php?t=1363&start=15

guck einfach mal bei fragen kannst du dann ja nochmal posten
ich habe im praktikum die Anypointer für eine Rezepturverwaltung genommen
dort konnten über ein touchpanel 25 verschiedene Datensätze geladen werden und ich habe dafür die anypointer geschrieben
hoffe das bringt dich weiter
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin

sorry hatte die letzten Wochen viel zu tun bin also noch nicht weiter aber ich denke nähste Woche wird sich da was tun.

Hoffe ich zumindest.

Ich werdes dann hier Posten

MfG Balou
 
Zurück
Oben