Bit aus einem PEW lesen ohne es vorher in ein DB zu schreiben

Garog

Level-1
Beiträge
197
Reaktionspunkte
32
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen.

Ich habe folgendes Problem.
Ich lese über den Bus von einem FU das "Fehler" Bit aus.
Das mache ich Momentan so

Ausschnitt aus dem FC
------------------------------------------

Netzwerk1

L #Bus_Word_1 #Schnittstelle auf der dann z.B PEW 264 liegt
T DB200.DBW 0 #Mein DB wo ich das Wort drin speicher

Netzwerk 2

U DB200.DBX 1.3 #Hier lese ich dann das benötigte Bit aus
= #AusgangBit_1 #Schnittstelle "Ausgang"
-------------------------------------------

das muss doch auch einfacher gehen... ich muss doch auch die Möglichkeit haben das Bit direkt aus dem PEW zu lesen ohne es erst in ein DB zu schreiben... oder?

dank euch schonmal :)
 
Schau doch mal, ob du den FU nicht im Prozeßabbild ablegen kannst - dann wäre es möglich direkt das Eingangsbit abzufragen.
Ob das jetzt eleganter ist lasse ich mal so im Raum stehen:rolleyes:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
erstmal einlesen

Hallo,
einzelne Bits von einem PEW abfragen geht nicht direkt, sondern erst nachdem das PEW eingelesen wurde. Entweder ins Prozeßabbild (EW) oder in ein TEMP-Wort oder ein Datenwort oder ein MW, u.U. sogar mit einem fiktiven EW.
 
Das kann man auch direkt über die Temp Variable machen.

Code:
L P##Bus_Word_1   //Lade Adresse von Temp
LAR 1                  //schreibe Adresse in Adressregister 1
U [AR1,P#1.3]    //Lese Bit 1.3 
= #AusgangBit_1
 
Garog schrieb:
das muss doch auch einfacher gehen... ich muss doch auch die Möglichkeit haben das Bit direkt aus dem PEW zu lesen ohne es erst in ein DB zu schreiben... oder?

dank euch schonmal :)


Welche CPU hast Du den?
Besteht evtl. die Möglichkeit den FU im normalen und nicht im erweiterten Adressbreich unterzubringen? Die neueren 317'er CPU können ja 256 Byte dirket adressieren.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Boxy schrieb:
Welche CPU hast Du den?
Besteht evtl. die Möglichkeit den FU im normalen und nicht im erweiterten Adressbreich unterzubringen? Die neueren 317'er CPU können ja 256 Byte dirket adressieren.
Ich schreibe das Programm auf eine 319'er CPU
Um es genauer zu sagen. CPU 319-3 PN/DP 6ES7 318-3EL00-0AB0 /V2.4


@ godi.

dank dir
werde ich morgen mal ausprobieren.
 
Zuletzt bearbeitet:
godi schrieb:
Das kann man auch direkt über die Temp Variable machen.

Code:
L P##Bus_Word_1   //Lade Adresse von Temp
LAR 1                  //schreibe Adresse in Adressregister 1
U [AR1,P#1.3]    //Lese Bit 1.3 
= #AusgangBit_1


da mal eine dumme frage zu da ich mich mit diesem part nicht so auskenne

wenn ich jetzt ein anderes word habe muss ich
Code:
L P##Bus_Word2
LAR 2
U [AR2,P#1.3]
= #AusgangsBit2

schreiben.. oder?
 
Garog schrieb:
da mal eine dumme frage zu da ich mich mit diesem part nicht so auskenne

wenn ich jetzt ein anderes word habe muss ich
Code:
L P##Bus_Word2
LAR 2
U [AR2,P#1.3]
= #AusgangsBit2

schreiben.. oder?

Nein, brauchst du nicht.

LAR1 bedeutet das du den Pointer der im Akku1 steht in das Adressregister 1 ladest.

Wenn du jetzt eine zweite indirekte Adresierung hast kannst du das auch über das AR1 machen nur wird bei LAR1 der alte Pointer mit dem neuen überschrieben.

Wenn du aber beide Pointer zugleich brachst dann kannst du einen in das AR1 schreiben und den zweiten in das AR2.

Aber Vorsicht mit dem AR2 bei Multiinstanzen. Da befindet sich nämlich die Adresse der Multiinstanz drinn.

Lg Godi
 
Hallo Garog,

man kann das benötigte Bit auch abfragen, indem man die nicht benötigten Bit´s im Wort ausmaskiert. Das schaut dann so aus:

L #Bus_Word_1
L 4
UW
L 1
>=I
= #AusgangBit_1

Mfg

uncle_tom :rolleyes:
 
Zurück
Oben