Ausgänge über ANY Pointer setzen

Pico1184

Level-2
Beiträge
332
Reaktionspunkte
9
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich probiere gerade Ausgänge über einen ANY Pointer zu setzen.
Am Zyklusende steht das richtige im Pointer drin, aber komischerweise ist es am Anfang wieder weg:

Code:
//P#A0.0 WORD 1 als Parameter übergeben
      L     P##P_Any
      LAR1  

//nicht relevante Bits ausmaskieren (hier 82hex für Ausgänge)
      L     D [AR1,P#6.0]
      L     DW#16#FFFFFF
      UD    
      T     #T_DAT

      U     M      0.0
      SPBN  RES

      L     256
      T     #T_DAT

      SPA   END
//alles auf null setzen
RES:  L     0
      T     #T_DAT
END:  NOP   0

//ins AR zurückschreiben + 82hex anfügen
      L     #T_DAT
      L     DW#16#82000000
      OD    
      T     D [AR1,P#6.0]

kann mier jemand erklären warum????

Grüße Pico
 

Anhänge

  • Unbenannt.jpg
    Unbenannt.jpg
    337,3 KB · Aufrufe: 37
Zuletzt bearbeitet:
Was genau schreibst du den an den INOUT vom Typ Any? Das, was du da dranschreibst, ist ja fest und das ist das, was im Any steht. Du kannst es im FC natürlich manipulieren, aber bei jedem Zyklus, wird doch wieder der ursprüngliche Any eingelesen, so würde ich das mal vermuten. Variabel im Sinne von INOUT ist ja eher das, worauf der Any zeigt, also der A0.0 bzw. das AB,AW,AD0.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Was genau schreibst du den an den INOUT vom Typ Any?

P#A0.0 WORD 1

Also das AW0.......


Das, was du da dranschreibst, ist ja fest und das ist das, was im Any steht. Du kannst es im FC natürlich manipulieren, aber bei jedem Zyklus, wird doch wieder der ursprüngliche Any eingelesen

Ich bin davon ausgegangen, dass dies was im FC manipuliert wird auch auf die Ausgänge übernommen wird, da ich dies ja wieder in das AR1 zurückschreibe!

Code:
//ins AR zurückschreiben + 82hex anfügen
      L     #T_DAT
      L     DW#16#82000000
      OD    
      T     D [AR1,P#6.0]

Daher dachte ich auch das die Ausgänge entsprechend gesetzt werden?!?!
 
Ich kann nicht erkennen, dass du irgendwo einen Ausgang setzt oder ihn beschreibst, du veränderst lediglich den Any, also den Ort, wo der Zeiger hinweist. Darauf zu schreiben wäre noch zu erledigen, aber dafür braucht es im FC eigentlich keinen Any mehr. Mir ist der Sinn deiner Aktion nicht ganz klar. Wenn du AWx beschreiben willst, dann übergib dem FC eine Int-Variable mit x, bau einen Zeiger auf AWx und schreib deinen Wert hinein. Noch einfach ist evtl. den dafür vorhandenen Befehlsvorrat zu nutzen und einfach per AR 1 die Byteadresse festzulegen und dann das AW zu beschreiben.

Code:
L 10
SLD 3
LAR 1
L 5
T     AW [AR1,P#0.0]

Sollte dann eine 5 in AW 10 schreiben.
 
Zuletzt bearbeitet:
Als ehem. Instandhalter möchte ich darauf hinweisen, daß das indirekte Beschreiben von Ausgängen die Fehlersuche erheblich einschränkt. Indirekt adressierte Operanden tauchen nämlich nicht mehr in der Referenzliste auf.
Also bitte immer so proggen, daß sich auch dritte schnell zurechtfinden. (und nicht so proggen, daß es "toll" aussieht) ;)

Gruß Approx
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Okay soweit verstanden, ich habe im FC1 nur den
bereichsübergreifenden Zeiger verändert und nicht einen Ausgang gesetzt.

Daher ist am Zyklusanfang auch wieder der Wert welchen ich an den ANY Parameter angehängt habe aktuell.

Also bitte immer so proggen, daß sich auch dritte schnell zurechtfinden. (und nicht so proggen, daß es "toll" aussieht)

Kein Angst ich wollte nur etwas ausprobieren. Wollte eigentlich nur son ne Art Lauflicht auf der Ausgangskarte der SPS erscheinen lassen.

von A0.0 bis A1.7 einen LED nach der anderen und dann alle blinken lassen und dies dann wieder rückwärts.

Dachte mir dass ich dies über eine Schleife lösen könnte mit Hilfe des ANY Pointers.

Grüße Pico
 
Hallo,
also wenn es dir "nur" um das grundsätzliche Verstehen der Handhabung des ANY-Pointers geht dann ist das sicherlich OK.
Wenn es dir aber um die geschilderte Funktion geht dann gäbe es da m.E. noch so 2 bis 3 Alternativen, wie man das Gleiche etwas leichter verdaulich hinbekommen könnte ... (Schiebe-Befehle z.B.)

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Als ehem. Instandhalter möchte ich darauf hinweisen, daß das indirekte Beschreiben von Ausgängen die Fehlersuche erheblich einschränkt. Indirekt adressierte Operanden tauchen nämlich nicht mehr in der Referenzliste auf.
Also bitte immer so proggen, daß sich auch dritte schnell zurechtfinden. (und nicht so proggen, daß es "toll" aussieht) ;)

Gruß Approx

Ein lieber Kunde von uns hat es in den Ausschreibungen immer so definiert:
"Speicherplatz ist ausreichend vorhanden, auf trickreiche Programmierung wird kein Wert gelegt."

XLOL
 
Zurück
Oben