Step 7 BCD - Winkelgeber an Eingangskarte auslesen

Zuviel Werbung?
-> Hier kostenlos registrieren
Es wird meiner Meinung nach nicht funktionieren! Dazu wurde ja der Gray code erfunden. Beim Gray code wechselt immer nur ein Bit zut einem Zeitpunkt.
Bei BCD wechseln oft mehrere Bit "gleichzeitig" das gibt ein gezappel am Eingang und der Winkelwert läuft nicht sauber ab ( gemachte Erfahrung)
Enn man dann mit dem Winkelwert abschalten muss kommen da durchaus Zufallsabschaltungen raus.

peter(R)
 
.. Meinst Du die genannten 321-1BH02 und 321-1BL00? Wie geht das da? ..
Sorry, ich meinte natürlich, eine Verzögerung der Eingänge kannst du bei diesen Baugruppen NICHT parametrieren :???: . Meine Unwahrheit korrigiere ich gleich im Anschluss. In diesem Zusammenhang fällt mir noch ein, die Begrenzung des Stromes über die notwendige Eingangsbeschaltung wird den Signalwechsel vermutlich zusätzlich verzögern und die Störfestigkeit verschlechtern.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke an euch schon mal für die ganze Antworten.

Irgendwie bekomme ich von Tag zu Tag immer mehr Zweifel ob es wirklich funktionieren wird was ich mir da so ausgedacht habe. Fakt ist das ich keine anderen Bauteile zu Verfügung habe und auch keine gekauft werden. Falls das ganze nicht klappt wird halt alles wieder zurück auf den alten Stand gebaut und dann bleibt die Maschine halt so wie sie ist bis sie von alleine auseinander fällt.

Da ich aber von Natur sehr Neugierig bin wird dieser Umbau auf jedem Fall Probiert. Leider aber erst Mitte Februar.

Wäre es möglich das mir jemand mal in einer Skizze aufmalt wie ich das mit den Pull-Up- Widerständen machen soll ? Was ich dazu gefunden hab verwirrt mich ein wenig weil es ja auch Pull-Down Widerstände gibt.

Danke
 
Es wird meiner Meinung nach nicht funktionieren! Dazu wurde ja der Gray code erfunden. Beim Gray code wechselt immer nur ein Bit zut einem Zeitpunkt.
Bei BCD wechseln oft mehrere Bit "gleichzeitig" das gibt ein gezappel am Eingang und der Winkelwert läuft nicht sauber ab ( gemachte Erfahrung)
+1
Ich nehme an dass diese Drehgeber ist für den direkten Anschluss an ein Display gemeint. So lange dass der Geber dreht ist es nich wichtig ob das Display flattern.
 
Danke an Heinileini für die Zeichnung.
Werde mal was zusammenlöten und dann im Februar das ganze mal Testen. Meld mich dann wieder.

Danke an alle
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@ JesperMP
nein ich meine nicht die Anzeige am Display sondern den Wert in der SPS.
Da er mit diesem Wert - soweit ich verstanden habe - auch abschalten will
muss der SPS Wert sauber laufen und das tut er nicht wenn im BCD Code mindestens 2 bits gleichzeitig umschalten.
Dann bekommt er kurzfristig einen falschen Wert und wird wenn es dumm läuft falsch abschalten.
peter(R)
 
So, hab es ausprobiert und es Funktioniert NICHT.
Der Winkel wird ausgelesen wenn die Anlage steht, aber sobald sie anläuft geht die SPS auf Störung wegen Bausteinfehler. Ich denke mal das das an dem BCD-Code liegt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nutzt du den BCD-Wandler der SPS?
Ich kenne das von einfachen BCD-Wahlschaltern. Dort mußte man auch erst warten, bis sich nichts mehr änderte.
Wenn BCD-Wandler Zeichen vorgesetzt bekommt, die ungültig sind, dann passiert genau das, was du beschreibst.
Entweder das geht im OB (z.B. OB121 - Programfehler) abzufangen und das 'falsche' Ergebnis löscht du oder du wandelst das selbst und prüfst auch selbst auf Plausibilität des Ergebnisses.
 
Hab da mal was vorbereitet (oder nachbereitet?).
Achtung, völlig ungetestet!
Code:
VAR_IN_OUT                                               
     i_oCycCountMax : INT    ; // max Anzahl Zyklen bis gültig // 2)
VAR_END                                                  
VAR_INPUT                                                
     inpNumOfBits   : INT    ; // Anzahl Bits in inpPattern         
     inpPattern     : DWORD  ; // u.a. BCD (rechtsbündig!)          
VAR_END                                                  
VAR_OUTPUT                                               
     outBCDvalid    : DWORD  ; // gültige BCDzahl                   
     outCycCount    : INT    ; // akt Anzahl Zyklen bis gültig // 1)
     outDecValid    : DINT   ; // gültige DezZahl                   
     outInvalid     : BOOL   ; // Eingabe ist ungültig              
     outSteady      : BOOL   ; // Eingabe ist stabil                
VAR_END                                                  
VAR_STATIC                                               
     statCycCount   : INT    ; // Anzahl Zyklen bis gültig          
     statPreInvalid : BOOL   ; // vorheriger ungültig-Zustand       
     statPrePattern : DWORD  ; // vorheriges Bitmuster (maskiert)   
VAR_END                                                  
VAR_TEMP                                                 
     tmpPattern     : DWORD  ; // aktuelles Bitmuster (maskiert)    
VAR_END                                                  

      L   28              // Anzahl Bit gegrenzen             
      L   inpNumOfBits    // max : 28                         
      >=I                                                     
      SPB MAX                                                 
      TAK                                                     
MAX:  L   4               // min : 4                          
      <=I                                                     
      SPB MIN                                                 
      TAK                                                     
MIN:  L   1                                                   
      SLD                                                     
      +   -1              // Maske                            
      L   inpPattern      // Bitmuster maskieren              
      UD                                                      
      T   tmpPattern                                          
      L   statPrePattern  // Bitmuster stabil?                
      TAK                                                     
      T   statPrePattern                                      
      ==I                                                     
      =   outSteady                                           
      SLD 1               // PseudoTetraden?                  
      OD                                                      
      SLD 1                                                   
      UD                                                      
      UD  #16#8888888                                         
      O   <>0                                                 
      ON  outSteady                                           
      =   outInvalid                                          
      SPB IVAL                                                
      L   tmpPattern      // gültig                           
      T   outBCDvalid                                         
      BTD                                                     
      T   outDecValid                                         
      UN  statPreInvalid                                      
      SPB CONT            // gültig geworden                  
      L   i_oCycCountMax  // wenn Zähler > bisher             // 2)
      L   statCycCount             
      T   outCycCount     // akt Zähler ausgeben              // 1)
      >=I                                                     // 2)
      SPB CONT                                                // 2)
      T   i_oCycCountMax  // MaxZähler aktualisieren          // 2)
CONT: L   0                                                   
      SPA STOR                                                
IVAL: L   255             // 1..32767                         
      L   statCycCount    // OberGrenze ZyklZähler            
      >I                                                      
      +I  1                                                   
      SPB STOR                                                
      TAK                                                     
STOR: T   statCycCount                                        
      U   outInvalid                                          
      =   statPreInvalid                                      
      BE                                                      
// 1) nur erforderlich für Ausgabe "akt. ZyklenAnzahl bis gültig" 
// 2) nur erforderlich für Ausgabe "max. ZyklenAnzahl bis gültig" 
// Prüft das EingangsBitmuster in 'inpPattern'.
// Die BCD-Zahl muss dort rechtsbündig stehen.
// Die Anzahl auszuwertende Bits werden in 'inpNumOfBits' vorgegeben.
// 1..7 BCD-Stellen sind möglich, also 4..28 Bits. 
// Wenn sich die relevanten Bits in zwei aufeinander folgenden Zyklen 
// nicht geändert haben und keine PseudoTetraden festgestellt
// werden, wird die BCD-Zahl in 'outBCDvalid' ausgegeben und die
// in Dezimal gewandelte Zahl in 'outDecValid'.
// Beide bleiben anstehen, bis wieder ein Bitmuster stabil ansteht,
// das keine PseudoTetraden enthält.
// In 'outCycCount' wird ausgegeben, wieviele Zyklen lang das
// Bitmuster nicht stabil bzw. nicht frei von PseudoTetraden war. 
// In 'i_oCycCountMax' wird der maximal aufgetretene Wert seit dem
// Löschen dieser Variable ausgegeben.
// Ein Überlaufen des ZyklenZählers wird verhindert, um FehlInter-
// pretationen zu vermeiden. Die Obergrenze kann im Bereich 1..32767
// gewählt werden und ist z.Z. auf 255 festgelegt (s. Label IVAL:).
 
Zurück
Oben