Pointerproblem

Limette

Level-2
Beiträge
282
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
      L     P##z                        // Lade Eingang Variable z mit eingang 4.0
      SLD   3                           // Verschiebe Bit um 3, da Aufbau des Pointer. vereinfacht: Byteadress(16Bit).Bitadress(3Bit)
      LAR1  
      U     E [AR1,P#0.0]               // ABfrage ob Eingang anliegt, offset P#0.0
      =     A      0.1                  // Setze Ausgang 0.1
Die Variable z habe ich unter "In Out" als Pointer deklariert.
Im OB1 habe ich dem FB am z Eingang
Code:
P#E4.0
zugewiesen. Leider reagiert der Eingang nicht.

Habt ihr eine Idee ?

Gruß und Dank
limette
 
Also das SLD3 ist schon mal definitiv falsch an der Stelle.
Du übergibts den Eingang ja bereits als Pointer.

Mfg
Manuel
 
Was zeigt denn der Status unter AR1 an, nachdem der LAR1 ausgeführt wurde?

EDIT:
Hab's gerade gesehen:
Mach mal aus dem "L P##z" "L #z"!
 
Zuletzt bearbeitet:
für mein verständnis sollte folgendes funktionieren:

Code:
*
      LAR1  P##z
      L     D [AR1,P#0.0]
      SRD   3
      T     #byte_Adr
      L     D [AR1,P#0.0]
      L     2#111
      UD
      T     #bit_Adr

      L     #byte_Adr
      SLD   3
      L     #bit_Adr
      +D    
      LAR1

bekommt man allerdings die Kennung E nicht mit ... also wäre besser gleich ein ANY zu nehmen, wenn es da zu unterschieden kommen könnte...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
für mein verständnis sollte folgendes funktionieren:

Code:
*
      LAR1  P##z
      L     D [AR1,P#0.0]
      SRD   3
      T     #byte_Adr
      L     D [AR1,P#0.0]
      L     2#111
      UD
      T     #bit_Adr

      L     #byte_Adr
      SLD   3
      L     #bit_Adr
      +D    
      LAR1
bekommt man allerdings die Kennung E nicht mit ... also wäre besser gleich ein ANY zu nehmen, wenn es da zu unterschieden kommen könnte...

danke für deine hilfe. ich bin leider nicht so der profi und frage mich deshalb was ich bei #byte_Adr und #bit_Adr angeben muss. P#E4.0 würde ich ja gerne erst im OB1 zuweisen.
 
Hi,

Code:
      L     P##z                        // Lade Eingang Variable z mit eingang 4.0
      LAR1  
      L     D [AR1,P#2.0]               // Nur Speicherbereich u. Adresse
      LAR1                              // ins Adressregister schreiben
      U      [AR1,P#0.0]                // ABfrage ob Eingang anliegt, offset P#0.0
      =     #Ausgang                    // Setze Ausgang 0.
;)

z ist ein POINTER und Ausgang ein BOOL.

Gruss Daniel
 
Hi,

Code:
      L     P##z                        // Lade Eingang Variable z mit eingang 4.0
      LAR1  
      L     D [AR1,P#2.0]               // Nur Speicherbereich u. Adresse
      LAR1                              // ins Adressregister schreiben
      U      [AR1,P#0.0]                // ABfrage ob Eingang anliegt, offset P#0.0
      =     #Ausgang                    // Setze Ausgang 0.
;)

z ist ein POINTER und Ausgang ein BOOL.

Gruss Daniel

merci, jetzt gehts. :)

wie kommst du auf das ?

Code:
L     D [AR1,P#2.0]
so richtig verstehe ich es noch nicht. aber danke:)
 
Code:
//Pointer AR1 auf IN_OUT-Parameter z erstellen
      LAR1  P##z                    //Adresse Parameter z im DI in AR1
[COLOR="red"]      TAR2                          //Multiinstanz-Offset von AR2 in Akku1
      +AR1                          //zu AR1 addieren => Pointer auf Parameter z[/COLOR]

//Wert des Pointers z in AR1 laden
//      L     W [AR1,P#0.0]           //DB-Nummer - hier nicht benötigt
      L     D [AR1,P#2.0]           //Bereichskennung + Adresse
      LAR1  

//das über Parameter z adressierte Bit verarbeiten
      U      [AR1,P#0.0]
      =     A      0.1

Nachtrag:
Die beiden rot markierten Zeilen werden nur in Multiinstanz-FB benötigt.
In FC müssen die Zeilen weggelassen werden (oder AR2 muß 0 sein).

Harald
 
Zuletzt bearbeitet:
Zurück
Oben