Scheife - kleines Prog.

Limette

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

Code:
      L     4                           // Lade Eingangadresse        
      SLD   3                           // Verschiebe Bit um 3, da Aufbau des Pointer. vereinfacht: Byteadress(16Bit).Bitadress(3Bit)
      LAR1                              // Lade Adressregister 1
      L     EB [AR1,P#0.0]              // Lade Eingangsbyte in Adressregister nach AKK1
      T     DIB    5                    // Transfer Akk1 auf Adresse Byte 5 im Instanzdatenbausten
Ich hoffe das Programm ist verständlich.
der eingang hat nun z.b. ein bereich von 4.0 bis 4.7. nun möchte ich in einer schleife abfragen ob auch wirklich etwas anliegt und es gegenenfalls "transferieren".
also wenn zum beispiel:

L EB [AR1,P#0.1] anliegt, es in
T DIB 5.1 zu schreiben. und so weiter.

danke im voraus.
 
Hallo!

Hast du den Groschen (seit 2002 Cent) schon wieder aufgehoben?

Eigentlich ist nichts verständlich...
Was verstehst du unter "wirklich etwas anliegt"?
Einzelne Bits können nicht mit Transferbefehlen transferiert werden.
Dazu sind die Operatoren S und = vorhanden.
Aber wenn du das ganze Byte übertragen willst dann brauchst du keine einzelnen Bits Adressieren sondern kannst gleich
L EB4
T DBx.DBBy
schreiben.

Was ist DIB 5.1? :confused:

godi
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ich denke er meinte DIX godi

@godi Wie gehts dir überhaupt alter Leidensgenosse :)
Was macht das Studium?

Code:
U E[AR1,P#0.1]
= DIX 5.1

Willst du dein Eingangsbyte nach True durchsuchen und
wenn True ein DIX x.x setzen?
 
Willst du damit geziehlt verschiedene DIX x.x setzen oder einfach 1:1
vom EB auf dein DIB transferieren?
Schreib mal, was du wirklich willst?:rolleyes:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Willst du damit geziehlt verschiedene DIX x.x setzen oder einfach 1:1
vom EB auf dein DIB transferieren?
Schreib mal, was du wirklich willst?:rolleyes:

entschuldigung dass ich mich so schlecht ausdrücken kann. ich versuche es nochmal.

ich möchte nur peripherie die zum beispiel von E4.0 bis E6.5 angeschlossen in einen zum beispiel Dix von 7 bis 8.5 laden. bit für bit, in einer schleife.
 
ich möchte nur peripherie die zum beispiel von E4.0 bis E6.5 angeschlossen in einen zum beispiel Dix von 7 bis 8.5 laden. bit für bit, in einer schleife.
Vorab: Die Peripherie-Adressen müssen im PAE liegen, weil sonst Byte- oder Bitzugriffe auf die Peripherie-Eingänge meist nicht funktionieren.

Code:
//einfache Variante: E4.0..E6.7 -> DIX7.0..DIX9.7
      L     EW     4                    //  E4.0..E5.7
      T     DIW    7                    //DIX7.0..DIX8.7
      L     EB     6                    //  E6.0..E6.7
      T     DIB    9                    //DIX9.0..DIX9.7

Bit-Kopier-Schleife:
Code:
//Schleife für "krumme" Anfangs- oder Endeadressen
      TAR2  #tmpDW_AR2save              //AR2 sichern
      LAR1  P#E 4.0                     //Quell-Bereichsbeginn
      LAR2  P#DIX 7.0                   //Ziel-Bereichsbeginn

loop: U      [AR1,P#0.0]                //E[AR1] lesen
      =      [AR2,P#0.0]                //in DIX[AR2] übertragen

      +AR1  P#0.1                       //E-Pointer auf nächstes Bit
      TAR1  
      L     P#E 6.5                     //Quell-Endadresse
      >D                                //überschritten?
      SPB   end
      +AR2  P#0.1                       //DIX-Pointer auf nächstes Bit
      SPA   loop                        //Schleife wiederholen

end:  LAR2  #tmpDW_AR2save              //AR2 wiederherstellen

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vorab: Die Peripherie-Adressen müssen im PAE liegen, weil sonst Byte- oder Bitzugriffe auf die Peripherie-Eingänge meist nicht funktionieren.

Code:
//einfache Variante: E4.0..E6.7 -> DIX7.0..DIX9.7
      L     EW     4                    //  E4.0..E5.7
      T     DIW    7                    //DIX7.0..DIX8.7
      L     EB     6                    //  E6.0..E6.7
      T     DIB    9                    //DIX9.0..DIX9.7
Bit-Kopier-Schleife:
Code:
//Schleife für "krumme" Anfangs- oder Endeadressen
      TAR2  #tmpDW_AR2save              //AR2 sichern
      LAR1  P#E 4.0                     //Quell-Bereichsbeginn
      LAR2  P#DIX 7.0                   //Ziel-Bereichsbeginn

loop: U      [AR1,P#0.0]                //E[AR1] lesen
      =      [AR2,P#0.0]                //in DIX[AR2] übertragen

      +AR1  P#0.1                       //E-Pointer auf nächstes Bit
      TAR1  
      L     P#E 6.5                     //Quell-Endadresse
      >D                                //überschritten?
      SPB   end
      +AR2  P#0.1                       //DIX-Pointer auf nächstes Bit
      SPA   loop                        //Schleife wiederholen

end:  LAR2  #tmpDW_AR2save              //AR2 wiederherstellen
Harald

danke, werde es gleich mal probieren.
 
Vorab: Die Peripherie-Adressen müssen im PAE liegen, weil sonst Byte- oder Bitzugriffe auf die Peripherie-Eingänge meist nicht funktionieren.

Code:
//Schleife für "krumme" Anfangs- oder Endeadressen
      TAR2  #tmpDW_AR2save              //AR2 sichern
      LAR1  P#E 4.0                     //Quell-Bereichsbeginn
      LAR2  P#DIX 7.0                   //Ziel-Bereichsbeginn

loop: U      [AR1,P#0.0]                //E[AR1] lesen
      =      [AR2,P#0.0]                //in DIX[AR2] übertragen

      +AR1  P#0.1                       //E-Pointer auf nächstes Bit
      TAR1  
      L     P#E 6.5                     //Quell-Endadresse
      >D                                //überschritten?
      SPB   end
      +AR2  P#0.1                       //DIX-Pointer auf nächstes Bit
      SPA   loop                        //Schleife wiederholen

end:  LAR2  #tmpDW_AR2save              //AR2 wiederherstellen
Harald


ich habe daran kaum etwas verändert, leider geht die sps in stop und zeigt SF Fehler an.:confused:

an was könnte das liegen ?

Grüße
 
Ich glaub schon.
Spontan würde ich jetzt sagen dass nun die Bereichskennung fehlt. ( E )


ich hab mein abgeänderter quelltext durch den orgianlen ersetz und wieder hochgeladen. leider immer SF Fehler. willst du ihn bei dir mal kurz in der sps hochladen und gucken was passiert(falls zeit und lust :) ). dann wüßte ich ob es am code oder doch an meiner s7-300 liegt.
 
Zurück
Oben