Statusword

The Blue

Level-1
Beiträge
105
Reaktionspunkte
12
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich schreibe gerade an einem FB...
und weil ich die Schnittstelle nicht mit BITs riesig groß machen möchte,
will ich ein Statusword ausgeben.

Sowas wie:

  1. U IN_01
  2. = Status.0

U IN_01 = Status
funktioniert nicht!!

Also habe ich einen FC geschrieben,
mit dem ich einen Signalzustand beliebig vielen BITs eines WORDs zuweisen kann.

Rufe ich diesen in meinem FB auf und weise die Variable vom FC IN_OUT:Ziel_Word
der Variable des FBs OUT:Status zu bekomme ich die Meldung:
"Deklarationsbereich der Aktualseite VAR_OUTPUT paßt nicht zum formalen Deklarationsbereich VAR_IN_OUT des Formalparameters ZIEL_WORD"

Kann mir vllt jemand helfen?? ^^
Ich möchte einfach nur ohne viel code ein BIT in einem WORD manipulieren.
 
Ich würde da nicht mit einem FC arbeiten.

Dafür hab ich zwei Vorschläge:
Code:
// Adressregister auf Statuswort setzen
lar1   P#Status

// Bit´s zuweisen
u   IN_01
=   B [AR1,P#0.0] // Statuswort Bit 9 

u    IN_02
=   B [AR1,P#1.0] // Statuswort Bit 0
oder:

Code:
// Status 1
U     IN_01
L      1
SPB  stat

// Status 17
U     IN_02
L      17
SPB  stat

L      0
stat: T   Status
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke ^^

Das erste ist gut,
aber wieso ist
Code:
[AR1,P#1.0]
Bit 0 ??

Ich hatte sowas geschrieben ^^

Code:
 U     #Signal
      SPBNB m001

      L     W#16#FFFF
      L     #BIT                    //Bitmuster laden
      UW    
      L     #Ziel_WORD          //aktuell ausgegebenes WORD laden
      OW                            //BITs aus Bitmuster setzen
      T     #Ziel_WORD         // und ausgeben
      BEA   

m001: L     W#16#FFFF
      L     #BIT                    //Bitmuster laden
      UW    
      L     #Ziel_WORD          //aktuell ausgegebenes WORD laden
      INVI                           //Word invertieren
      OW                            //mit dem Bitmuster verrechnen
      INVI                           //geändertes WORD zurückinvertieren
      T     #Ziel_WORD          //und ausgeben
      BEA
 
Zuletzt bearbeitet:
@TheBlue

mit

LAR1 P#Status

Setzt du das Adressregister auf dein Statuswort, bzw. wenn dein Statusword beispielsweise auf DIW8 liegt auf DIX8.0.

Wenn du dann das Bit mit

= x [AR1,p#0.0]

zuweist (und nicht wie ein meinem Beispiel mit B für Byte :-( ) dann weißt du da das Bit 8.0 zu, das im Wort aber an 9. Stelle sitz.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hab´s gerade getestet ^^
nur muß ich schreiben:

= [AR1,P#0.0]

ohne X

aber in FUP kann ich nicht auf BITs zugreifen,
wenn ich den Adresszeiger geladen habe ?!
 
Der Zugriff müsste mit und ohne X funktionieren

Die UTD-Geschichte bekommst du bibliothekfähig wenn du den UDT in die Bibliothek aufnimmst und dann den UDT auch ins Projekt ziehst, aber für ein Statuswort würde ich das so nicht machen (Anlehnung an die SFB's von Siemens).
 
Zuviel Werbung?
-> Hier kostenlos registrieren
noch nicht das gelbe vom Ei...

BOOLsche aufgaben löse ich gerne un FUP
um auch später eine Fehlersuche zu erleichtern.
In FUP schein das mit dem AR1 nicht zu funktionieren.
Also brauche ich wieder zusätzliche Ressourcen...
 
Dann bastelst du dir ein Temporäre Variable vom Typ Struct in der du die einzelnen Bits deklarierst. Diese beschreibst du dann in FUP.

Anschliesend kopierst du die Struktur auf dein Statuswort. SFC20 machst das unabhängig vom Datentyp.
 
Zurück
Oben