TIA Ar1

  • Ersteller Ersteller Gelöschtes Mitglied 193
  • Erstellt am Erstellt am
G

Gelöschtes Mitglied 193

Guest
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
wie muss man in AWL es schreiben.
- Zahl 1 in MW0 laden.
- Aufrufen AR1
- mit [ AR1 , P#0.0 ] abfragen von Zustand MW0 P#0.0

gruß
 
Moin waldy,

Code:
LAR1 P#M0.0
L 1
T W[AR1,P#0.0]

sollte gehen.


oder:

Code:
LAR1 p#0.0
L 1
T MW[AR1,P#0.0]

VG

MFreiberger
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
und wenn ich schreiben so
L 1 // Lade Zahl 1 in Akku 1
T "MW0" // Transfer in MW0 Inhalt von Akku 1 , in MW0 wird ein Zahl 1 reingeschrieben

dann lade Inhalt von Akku 1 in AR1

LAR1 // inhalt von Akku 1 in AR1 laden


wäre so OK ?

Es geht darum, in eine MW, z.B. MW0 wurde erst mal eine Zahl rein geschrieben.
Später musste Merker in AR1 geladen werden und mit Bitadresse von MW0 ( M0.0 , M0.1 usw ) auslesen.


gruß
 
Zuletzt bearbeitet von einem Moderator:
Moin waldy,

mit LAR1 lädst Du den Wert von Akku 1 in das Adressregister 1.
Wenn Du also folgendes schreibst:

Code:
L 1
T MW0
LAR1

passiert Dieses:

L 1: Der Wert 1 wird in den Akku 1 geladen
T MW0: Der Wert 1 wird aus dem Akku 1 in das Merkerwort 0 geladen
LAR1: Der Inhalt von Akku 1 (hier "1") wird in das Adressregister 1 geladen.

Damit steht im AR1 jetzt die Adresse 0.1, allerdings ohne Bereichsangabe (Merker).

Ich glaube den Merker M0.1 kannst Du dann mit
Code:
U M[AR1,P#0.0]
auslesen.

Dann reicht aber auch

Code:
LAR1 1 //lädt in das Adressregister 1 den Wert 1 (Adresswert 0.1)
 
Hallo
ich noch weiter Fragen :)

L MW0
LAR1 // inhalt von Akku 1 in AR1 laden
U E [ AR1 , P#0.0 ]


Es zeigt bei Beobachten nur Wert ( 1,3,7,15 , 0F )

Nun ich möchte VKE von jede Eingang MW0 z.B. M0.0 [AR1,P#0.0] abfragen .
wie muss dann Programm aussehen ?

Gruß
 
Zuletzt bearbeitet von einem Moderator:
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin waldy,

ein paar Fragen dazu:

Es zeigt bei Beobachten nur Wert ( 1,3,7,15 , 0F )


Wo wird der Wert angezeigt? Das kann ja nicht an einem Bool angezeigt werden (wie z.B. ein Eingang). Liegen die Werte immer in HEX vor (also 15h)?

Nun ich möchte VKE von jede Eingang MW0 z.B. M0.0 [AR1,P#0.0] abfragen .

Aus meiner Sicht ist es nie eine gute Idee Eingänge indirekt abzufragen. Dadurch kann man das Programm fast gar nicht mehr debuggen.

Aber was genau willst Du jetzt abfragen? Eingang, Merker, etc.?

Ich vermute, dass Du die Eingänge mit einer Schleife abfragen willst? Dann musst Du das Adressregister AR1 inkrementieren.


VG

MFreiberger
 
Waldy ...
Du musst mal mitlesen, was dir sdo geschrieben wird und nicht immer etwas ganz anderes daraus machen.
IM AR1 steht der Pointer (also Zeiger), der auf die Zieladresse zeigt. Dieser Pointer legt fest, was die Zieladresse ist - siehe Beitrag #2.
Deine daraus konstruierten Abwandlungen werden nicht das gewünschte Ergebnis bringen - ich habe allerdings auch noch nicht verstanden, was du eigentlich vorhast ...

Gruß
Larry
 
Es zeigt bei Beobachten nur Wert ( 1,3,7,15 , 0F )
Arbeitest Du wirklich mit TIA? Oder mit Step7 "classic" V5.x?

Beim Beobachten von AWL-Code in Step7 V5.x kann man den Zustand von Bit-Operanden in der Spalte "Sta" sehen und bei BYTE/WORD/DWORD-Operationen den Wert des AKKU1 in der Spalte "STANDARD".
Beim Beobachten in TIA steht der Wert des Bit-Operanden oder Mehrbit-Operanden in der neuartig intelligenten Combi-Spalte "Wert" - da sollte bei Bit-Operationen nur die Werte 0 und 1 stehen. Bei registerindirekten Operationen zeigt TIA (V13) da (anscheinend je nach Lust und Laune ;)) irgendwas unverständliches an - stör Dich nicht dran (vielleicht steht in späteren ausgereiften TIA-Versionen da was sinnvolles?).

Nun ich möchte VKE von jede Eingang MW0 z.B. M0.0 [AR1,P#0.0] abfragen .
wie muss dann Programm aussehen ?
Hier wirfst Du Begriffe durcheinander (VKE, Eingang), so daß der Sinn Deiner Frage unverständlich wird.
Meinst Du, Du willst den Zustand (Status) jedes Bits des MW0 abfragen? Der Bits M0.0, M0.1 ... M1.7? Dann mußt Du in einer Schleife den Inhalt des AR1 um 1 erhöhen, oder den Wert des Versatz P#x.y in der Anweisung ändern:
Code:
      L P#M0.0             //Anfangsadresse des MW0
      LAR1                 //in AR1 laden

      L 16                 //ein MW hat 16 Bits
loop: T #Schleifenzaehler

      U M [AR1, P#0.0]     //geht auch: U [AR1, P#0.0]
      = #temp_Bit

      L 1
      +AR1

      L #Schleifenzaehler
      LOOP loop

[COLOR="#008000"]//oder[/COLOR]

      LAR1 P#M0.0          //Anfangsadresse des MW0 in AR1

      U M [AR1, P#0.0]     //fragt M0.0
      U M [AR1, P#0.1]     //fragt M0.1
      U M [AR1, P#0.2]     //fragt M0.2
..
      U M [AR1, P#1.7]     //fragt M1.7
      = #temp_Bit
Code:
//verschiedene Varianten registerindirekter Adressierung:
      LAR1 P#M0.0
      U [AR1, P#0.0]       //bereichsübergreifende registerindirekte Adressierung
      = #temp_Bit

      LAR1 P#0.0
      U M [AR1, P#0.0]     //bereichsinterne registerindirekte Adressierung
      = #temp_Bit


//Bereichskennung in der Operation hat Vorrang vor Bereichskennung in AR1
      LAR1 P#E0.0
      U M [AR1, P#0.0]     //bereichsinterne registerindirekte Adressierung, fragt M0.0
      = #temp_Bit

Harald
 
Zurück
Oben