Alarmanlage

ftComputing : Programme für die fischertechnik-Interfaces und -konstruktionskästen
  
ftComputing.de
Home
Back
Sitemap
Index
Links
Impressum
Mail
 

Programmbeispiel : Alarmanlage

  

Modell Alarmanlage aus Kasten Profi E-Tec

Funktion :
Sobald I1 unterbrochen wird, ertönt der Summer mit Unterbrechungen. Wird I3 geschlossen, schaltet der Summer ab, aber nur, wenn vorher I1 wieder geschlossen wurde. Durch Überbrücken von I2 kann die Dauer des einzelnen Summtons verändert werden (Text Handbuch). An I1 ist im Original ein Reed-Kontakt angeschlossen (Tür zu : ein, Schaltung durch einen Magneten).

Sub Main
Dim PZ%
  Do
    If Not GetInput(ftiE1) Then
      PZ = IIf(GetInput(ftiE2),256,512)
      Do
        SetMotor ftiM1, ftiEin
        Pause PZ
        SetMotor ftiM1,ftiAus
        Pause PZ
      Loop Until ( GetInput(ftiE1) And GetInput(ftiE3) Or Finish())
    End If
  Loop Until Finish()
End Sub

Programmiersprache VBA, erstellt mit vbaFish. Gegenüber E-Tec etwas vereinfacht : Die Alarmanlage kann nur am Ende einer Hup-Phase zurückgesetzt werden (Also max. 1 Sekunde drücken).

ft = FishFace()

ft.OpenInterface("LPT")

while not ft.Finish():
  if not ft.GetInput(eReed):
    if ft.GetInput(eTime): PZ = 256
    else: PZ = 512
    while not(ft.GetInput(eReed) and ft.GetInput(eStop) or ft.Finish()):
      ft.SetMotor(mHupe, ftiEin)
      ft.Pause(PZ)
      ft.SetMotor(mHupe, ftiAus)
      ft.Pause(PZ)

Programmiersprache Python (Programmausschnitt). Die Lösung entspricht der obigen VBA-Version. Da Python keinen "Until" Loop kennt, wurde hier die Abbruchabfrage für die Hup-Schleife "umgedreht" (in Klammern gesetzt und not davor).

class FishFaceP(FishFace):
  def Pause(self, mSek,
TermInput):
    sZeit = windll.kernel32.GetTickCount()
    while (windll.kernel32.GetTickCount() - sZeit) < mSek:
      if (windll.user32.GetAsyncKeyState(self.ESCAPE) != 0 
         or
self.GetInput(TermInput)): return
      windll.kernel32.Sleep(self.PollInterval)

ft = FishFaceP()

ft.OpenInterface("LPT") # --- ACHTUNG : PortName

while not ft.Finish():
  if not ft.GetInput(eReed):
    if ft.GetInput(eTime): PZ = 256
    else: PZ = 512
    while not(ft.GetInput(eReed) and ft.GetInput(eStop) or ft.Finish()):
      ft.SetMotor(mHupe, ftiEin)
      ft.Pause(PZ,
eStop)
      ft.SetMotor(mHupe, ftiAus)
      ft.Pause(PZ,
eStop)

Programmiersprache Python (Programmausschnitt) : Die Alarmanlage kann in jedem Augenblick zurückgesetzt werden. Dazu wurde die Methode Pause der Klasse FishFace in einer hiervon abgeleiteten Klasse FishFaceP durch eine neue Methode Pause überschrieben. Sie entspricht voll der bisherigen Methode Pause, hinzugekommen ist lediglich ein Abbruchparameter TermInput, der in der bereits vorhandenen Abbruchabfrage zusätzlich abgefragt wird.

Und dann noch eine Lösung mit dem Intelligenten Steuerrelais Siemens LOGO! Hier wurde auf die Änderung der Hupfrequenz durch Überbrücken von I2 verzichtet, da der Baustein B01 bequem von außen parametrisiert werden kann. B02 : Selbsthalterelais, B01 : Symmetrischer Taktgeber.

Alle Sources in eTec.ZIP

Stand : 03.11.2003