Stop durch DBW ?

Deep Blue

Level-2
Beiträge
431
Reaktionspunkte
17
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich deklariere den Rückwärtszählwert zweier Zähler in einem FB als Word. Im OB 1 rufe ich dann den FB auf und definiere als Zählwert den DB1.DBW 0 und DBW 2. Im Programmablauf holt sich das Programm dann auch artig erst den DBW 0, zählt diesen runter und holt danach den DBW 2. Dort geht die CPU dann aber sofort auf Stop. Diagnose ist ein Programmierfehler, lasse ich mir den Baustein anzeigen, ist es mein 2. Zähler. Sage ich im OB 1 nun das anstatt des DBW 2 ein fester Wert geholt werden soll (W#16#12) dann läuft das Programm durch. Auch das bilden eines Merkerwordes hat nix gebracht. Beide Zähler sind von dem Aufbau gleich, nur der 2. tut es nicht:confused: Warum ???
Code:
DB1:
Zeit_1 WORD W#16#0 Zeit für 1. Drehzahl 
Zeit_2 WORD W#16#0 Zeit für 2. Drehzahl 
 
FB10:
      Zaehlw2     Word     8.0     W#16#0
 
      U(    
      UN    #T_Pause
      U     #Taktgeber
      ZR    #Zaehler2
      BLD   101
      U     #SRO_6
      L     #Zaehlw2    //In --> Word
      S     #Zaehler2
      NOP   0
      NOP   0
      LC    #Zaehler2
      T     #Restwert2
      U     #Zaehler2
      )     
      NOT   
      U     #SRO_6
      =     #Ergebnis_Z2
 
OB 1
      CALL  FB    10 , DB10
       Zaehler1          :=Z1
       Zaehlw1           :=DB1.DBW0  //geht
       Zaehler2          :=Z2
       Zaehlw2           :=DB1.DBW0  //so geht´s nicht
       Zaehlw2           :=W#16#12  // aber so ???
 
Welcher Wert steht denn in Deiner Variablen Zaehlw2 drin?

Der Zählwert ZW eines Zählers muss im BCD-Format und im Bereich von 0 bis 999 vorliegen.

Gruß Kai
 

Anhänge

  • Zähler.jpg
    Zähler.jpg
    179,7 KB · Aufrufe: 12
Zuviel Werbung?
-> Hier kostenlos registrieren
Im Moment steht in DBW 0 eine 23 und im DBW 2 eine 12. Das komische ist ja, das er bei dem 1. Zähler nicht meckert bzw. auf stop geht.

Kai, Du hattest Recht. Es lag an dem BCD Format, mal konnte er den Hex verarbeiten - mal nicht. Kam immer auf die Zahl an :)
 
Zuletzt bearbeitet:
Super, dass es jetzt funktioniert. :)

Hier noch einmal ein Erklärungsversuch:

INT 12 = HEX C => Dieser HEX-Wert kann nicht als BCD-Wert dargestellt werden. Der INT-Wert muss vorher in einen BCD-Wert umgewandelt werden.

INT 09 => Umwandlung INT nach BCD => BCD 09 ( HEX 09 ) ( INT 09 )
INT 10 => Umwandlung INT nach BCD => BCD 10 ( HEX 10 ) ( INT 16 )
INT 12 => Umwandlung INT nach BCD => BCD 12 ( HEX 12 ) ( INT 18 )

Gruß Kai
 
Zuletzt bearbeitet:
Zurück
Oben