Siemens S5 snippets

Gemiddelde uit 16 meetwaardes

Een kort programma om meetwaardes te middelen. Omdat S5 niet bekent staat om z'n geweldige floating point eigenschappen is dit een mooie oplossing van Peter. Uiteraard ook bruikbaar in S7. M 0.4 is een flank van bv een timer.

gemiddelde.awl
           U      M   0.4
           SPBN   =NTEL
 
           L      MW  10            > JOUW GEMETEN WAARDE VAN DE SENSOR
           L      MW  40
           +I
           T      MW  40
 
NTEL:      U      M   0.4
           ZV     Z   1
 
           L      z   1
           L      16
           >=I
           SPBN   =NGEM
           SET
           R      Z   1
           L      MW  40
           SRW    4
           T      MW  50    //>> GEMIDDELDE WAARDE OVER 16 METINGEN
           L      0
           T      MW  40
NGEM:      NOP 0

Flankdetectie

Voor een student die op zoek was naar een flankdetektie.

flank.awl
  positieve flank:               
U   E  1.0      de ingang waar we een opgaande flank van gaan detekteren
UN  M 20.1      hulpbit
=   M 20.0      de flankdtektie
U   E  1.0
=   M 20.1 
 
  negatieve flank:               
UN  E  1.0      de ingang waar we een neergaande flank van gaan detekteren
UN  M 20.1      hulpbit
=   M 20.0      de flankdtektie
UN  E  1.0
=   M 20.1 

Tellen in een dubbelwoord

Tellen in een dubbelwoord in S5, door Joop.

„In dit voorbeeld word DW0 als teller aantal gebruikt, DW 3 is het LW van het teller DWord DD2 . Als voor de telling DW3 negtief is (dus > 32767) dan wordt M255.0 hooggemaakt. Als deze merker niet hoog is is de telling na het optellen klaar. Is deze hoog dan wordt er weer een vergelijking gemaakt is DW3 nog negatief is de telling klaar, als DW3 niet meer negatief an wordt DW2 met 1 verhoogt. M255.0 is een smeermerker.”

tellen.awl
      AUF DB3                     //DB van teller
      L     DW    3                //LW teller
      L     0
      <F   
      =    M255.0                 //LW is negatief
 
      L     DW    0                //teller aantal
      L     DW    3                //LW teller
      +F   
      T     DW    3                //LW teller
      UN    M255.0
      SPB   OK                     //LW was positief ->klaar
      L     DW    3
      L     0
      <F   
      SPB   OK                     //LW is nog negatief ->klaar
      L     DW    2                // HW teller
      L     1
      +F                             //HW met 1 verhogen
      T