Aus Word BITs rausziehen

mfg_mr.e

Level-1
Beiträge
34
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi zusammen,
will einen FB erzeugen den ich im OB aufrufe:

IN Variable z.B.
----------------------------------------------------------
Bezeichnung____________Format___________Anfangswert
#I_EW_120____________Word_____________W#16#0
----------------------------------------------------------

OUT Variable z.B.
----------------------------------------------------------
Bezeichnung____________Format____________Anfangswert
#O_AW_120___________Word______________W#16#0
----------------------------------------------------------

Statische Variable z.B
-----------------------------------------------------------
Bezeichnung____________Format____________Anfangswert
#MW120_____________Word______________W#16#0
-----------------------------------------------------------

so nun will ich die die einzelnen Bits aus diesem #MW120 local verarbeiten
z.B. den 3 BIT aus dem #MW120 (#MW120.2)

Nun meine Frage ist es überhauptmöglich weil er schreibt mir immer Syntaxfehler!?
 
Da ich aus dem, was du da schreibst so gar nicht schlau werde - wie wäre es denn mal mit einem Code-Auszug dessen, was du schon programmiert hast von dem du sagst, dass es nicht funktioniert.

Was soll mit deinen Variablen passieren ?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
///
///LADEN der PEW 
///
      L     #I_PEW_120
      T     #MEW_120
///
///
///

Im #I_PEW_120 liegt ein WORD von außen an, in diesem Wort sind 16 Fehlermeldungen vorhanden, dieses Word wird in den Statischen Merkerbereich #MEW_120 transferiert.
Ich brauche aber jede Fehlermeldung einzeln, sprich jedes einzelne BIT!


Code:
///
///Fehlermeldung Kabelbruch
///
U #MEW120.0
= #O_Kabelbruch
///
///
///


So funktioniert leider nicht!
Was muss ich anders machen???

Bin für jede Idee dankbar
 
Zuletzt bearbeitet:
Wenn es den Merker wären würde es so aussehen:
Code:
L PEW 120
T MW 120

//Störung 1
U M 120.0
..
..
//Störung 2
U M 120.1

Mann kann Eingänge auch direkt Binär abfragen.

Ich habe aber eher den Eindruck das dein Speicherbereich den du Merker
nennst eher Lokal ist.
 
Ja das mit den Merker ist mir klar, funktioniert auch ohne Problem (IST SCHON IM EINSATZ :) ).

Jetzt wollt ich einen Baustein FB erstellen und dort nur lokal Variablen nutzen.

Dieser FB wird um die 20 mal dann im OB aufgerufen, es macht das Programm dann übersichtlich und die Fehlerquelle wird eingegrenzt.
 
Zuletzt bearbeitet:
Ok, hier mal ein kleines Beispiel, wie ich das gemacht habe:
FC-Variante!!!

Status ist ein Word in INOUT definiert, Status_intern ist ein Word in TEMP:

Code:
      L     #STATUS
      T     #Status_intern              

      L     P##Status_intern
      LAR1  
      L     0
      T     LD [AR1,P#0.0]

      U     #ENDLAGE_G
      =     L [AR1,P#3.0]

      U     #ENDLAGE_A
      =     L [AR1,P#3.1]

      UN    #ENDLAGE_G
      UN    #ENDLAGE_A
      =     L [AR1,P#3.2]

      U     #STOERMELDUNG
      =     L [AR1,P#3.3]

      UN    #FRG
      O     
      U     #GRUNDFAHRT
      UN    #GRUNDBEDINGUNG
      =     L [AR1,P#3.4]

      U     #AUSGANG_G
      =     L [AR1,P#3.6]

      U     #AUSGANG_A
      =     L [AR1,P#3.7]

Eine andere Variante wäre:
Man kann auch in Tempvar hintereinander Weg die 16 Bit eines Word deklarieren. Dann kopiert man Status indirekt in dieses "Word", adressiert wird über AR1 und geladen wird die Adresse des 1. Bit. MAn muß aber darauf achten, dass die Bit in der Wordgrenze liegen.
 
Zuletzt bearbeitet:
Hab das ganze mal versucht in mein Programm umzusetzen, auf dem ersten BIT im #MEW_2 liegt die OK Meldung.

Code:
 L     P##MEW_2
      LAR1  
      L     0
      T     LD [AR1,P#0.0]
      =     #O_OK

Wenn ich das dann so programmiere liegt bei mir am Ausgang eine 0 an.

???
 
Hab das ganze mal versucht in mein Programm umzusetzen, auf dem ersten BIT im #MEW_2 liegt die OK Meldung.

Code:
 L     P##MEW_2
      LAR1  
      L     0
      T     LD [AR1,P#0.0]
      =     #O_OK
Wenn ich das dann so programmiere liegt bei mir am Ausgang eine 0 an.

???


Was willst du mit dem L0 machen? :confused:
Ein Integer in ein Bit, das von einem Pointer adressiert wird, transferieren?

Sorry ich versteh es nicht.
Mit den Link von Helmut oder dem Code von Ralle musst du doch das Problem lösen können. :confused:


bike
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hast natürlich recht das

"L 0"

gehört natürlich nicht dazu.


Verstehe ich das richtig: Ich frage den ersten BIT im MEW_2 ab?

Das Ergebnis muss doch an die OUT_Variable #O_OK weitergeleitet werden!

Aber da liegt 0 an! (Obwohl eine 1 sein muss, der Ausgang muss beschaltet sein)
 
Hi,

Mit dem Code, den Bike in #11 zitiert hat fragst du gar nix ab!
Auch wenn das L 0 wegbleibt.

Wenn du im FB die einzelnen Bits eines IN-Parameters vom Typ Word abfragen willst sieht das so aus:
Code:
Lar1 ar2
L p#Eingangswort
+Ar1   //Pointer auf Eingangswort; multiinstanzfähig
U dix [ar1,p#0.0] //Abfrage Bit 0
= ....
U dix [ar1,p#0.1] //Abfrage Bit 1
=...
.
.
U dix [ar1,p#1.7] //Abfrage Bit 15
=....

Eingangswort ist dabei ein Eingang deines FBs vom Typ Word.
Wie du siehst werden die Bits indirekt über den Offset angesprochen.
Hoffe, das hilft dir weiter.

Micha
 
Guten Morgen,

hab das mal so geschrieben wie du es gemeint hast

Code:
LAR1
L       #MEW_2
+AR1
U       DIX [AR1,P#0.0]
=       #stoerung_Kabelbruch
wenn ich das aber in die SPS Laden will bringt sie SF Fehler und geht in STOP zustand
 
Danke Jungs das ihr so geduldig mit mir wart...

Diesmal ist es umgekehrt:

Habe im selben Baustein 2 Ausgangswörter (#MAW_0)(#MAW_2)
da sollte ich auf die ersten beiden BITs und auf den 4 BIt ein Signal geben.

Beispiel für #MAW_0

Code:
///
/// Start
///
U #I_Start
=  
///
///
///
Was muss ich eingeben damit ich den BIT 1 im #MAW_0 ansteuern kann?
 
Zurück
Oben