Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: FreescaleIAP MODSERIAL mbed monitor timer0
Fork of 18_PT1000 by
Revision 21:6f524a6caabe, committed 2015-08-23
- Comitter:
- rs27
- Date:
- Sun Aug 23 10:18:54 2015 +0000
- Parent:
- 20:b85406f52de3
- Commit message:
- Version 1
Changed in this revision
--- a/info.txt Mon May 11 17:32:06 2015 +0000 +++ b/info.txt Sun Aug 23 10:18:54 2015 +0000 @@ -1,15 +1,22 @@ -1. Nottaster NICHT gedrückt = Öffner (Klemmen,2,3,4) geschlossen / Summer und Alarm-LED inaktiv -2. Nottaster gedrückt = Öffner (Klemmen1,2,3,4) offen / Summer und Alarm-ELD aktiv (bis der Nottaster zurückgestellt wird) -3. KABA AML OUT1 NICHT aktiv = Öffner geschlossen / rote LED (Verriegelt) EIN / grüne LED (Entriegelt) AUS -4. KABA AML OUT1 aktiv = Öffner offen / rote LED (Verriegelt) AUS / grüne LED (Entriegelt) EIN +Anpassung der Software für das NTB1880-IX Board + +I/O Belegung +• IN1: Ext. Öffnugsbefehl (Taster) +• OUT5: Türöffner +• OUT:6 (Relais): Tür-/Torsteuerung + +Funktion: +• IN1 auf 0 = OUT5+6 AUS +• IN1 auf 1 = OUT5+6 EIN plus 5 Sekunden Ausschaltverzögerung -IN1 Sabotageschaltet -IN2 Nottaster -IN3 Schlüsselschalter S1 LABA ALM OUT1 -IN4 Schlüsselachalter S2 + +IN1 Taster Befehl für Türöffner +IN2 nicht belegt +IN3 nicht belegt +IN4 nicht belegt -OUT1 Summer -OUT2 LED rot -OUT3 LED grün -OUT4 LED gelb -OUT5 Relais KABA ALM \ No newline at end of file +OUT1 nicht belegt +OUT2 nicht belegt +OUT3 nicht belegt +OUT4 Türöffner +OUT5 Relais: Tür / Torsteuerung \ No newline at end of file
--- a/main.cpp Mon May 11 17:32:06 2015 +0000
+++ b/main.cpp Sun Aug 23 10:18:54 2015 +0000
@@ -1,6 +1,7 @@
-// Version 1.0 erstellt am 25.04.2015
-// 01.05.15 den Eingäng 4 auf 2 verlegt
-// den Eingang 5 auf 1 verlegt
+// Version 1.0 erstellt am 22.08.2015
+//
+// IN1 auf 0 = OUT5+6 AUS
+// IN1 auf 1 = OUT5+6 EIN plus 5 Sekunden Ausschaltverzögerung
#include "mbed.h"
#include "main.h"
@@ -8,14 +9,6 @@
#include "monitor.h"
#include "MODSERIAL.h"
-// timer 2 => optischer Alarm Periode = 500 entspricht Blinkfrequnz von 1 Selunde
-#define OA_PERIODE 500
-// timer 3 => Minimale Zeit für den akustischen Alarm in ms >> soll 10000 entspricht 10 Sekunden
-#define AA_NIN 10000
-// timer 4 => Verzögerung für des Entriegeln des Tasters. In dieser Zeit wird dann kein neuer
-// akustischer Alarm ausgelöst
-#define AA_DELAY 10000
-
#define NEED_CONSOLE_OUTPUT 1 // Set this if you need debug messages on the console
// mit Debug wird die Programmgröße von 32,8k um ca. 300 Byte vergrößert
// dies ist nicht bedeutend, aber auch die Ausführungszeit der Ausgabebefehle
@@ -42,15 +35,15 @@
DigitalOut LED(PTE30);
DigitalOut OUT1(PTC6); // nicht belegt
-DigitalOut OUT2(PTC5); // LED Rot
-DigitalOut OUT3(PTC4); // LED Grün
-DigitalOut OUT4(PTC3); // LED Gelb
-DigitalOut OUT5(PTC2); // Summer
-DigitalOut OUT6(PTC1); // Relais
+DigitalOut OUT2(PTC5); // nicht belegt
+DigitalOut OUT3(PTC4); // nicht belegt
+DigitalOut OUT4(PTC3); // Türöffner schaltet gegen GND max. 500mA
+DigitalOut OUT5(PTC2); // nicht belegt (Summer)
+DigitalOut OUT6(PTC1); // Relais: Tür / Torsteuerung Relais Kontakt als Ausgang
-DigitalIn IN1(PTC7); // Notaus, schaltet gegen 24V => 24V oder 1 ist der Ruhezustand
-DigitalIn IN2(PTD4); // Sabotageschalter, schaltet gegen 24V => 24V oder 1 ist Ruhezustand
-DigitalIn IN3(PTD5); // KABA Türöffner Signal => 24V oder 1 ist Ruheezustand
+DigitalIn IN1(PTC7); // Taster Türöffnersignal 24V oder 1 ist der Ruhezustand
+DigitalIn IN2(PTD4); // nicht belegt
+DigitalIn IN3(PTD5); // nicht belegt
DigitalIn IN4(PTD6); // nicht belegt
DigitalIn IN5(PTD7); // nicht belegt
@@ -62,8 +55,7 @@
bool in;
struct di_struct in1; // Eingang 1
-struct di_struct in2; // Eingang 2
-struct di_struct in3; // Eingang 3
+
//------------------------------------------------------------------------------
//
@@ -82,30 +74,15 @@
//--------------------------------------------------------------------
// Anfangswerte setzen
- in1.old = 1; // 1 im Ruhezustand
- in1.aktiv = 0;
- in1.filter = 0;
- in1.optischer_alarm = 0;
- in1.summer = 0;
-
- in2.old = 1; // 1 im Ruhezustand
- in2.aktiv = 0;
- in2.filter = 0;
- in2.optischer_alarm = 0;
- in2.summer = 0;
-
- in3.old = 1; // 1 im Ruhezustand
- in3.aktiv = 0;
- in3.filter = 0;
-
+ in1.old = 1; // 1 im Ruhezustand
+ OUT4 = 0;
+ OUT6 = 0;
+
//--------------------------------------------------------------------
// Softwaretimer für die Zeitsteuerung anlegen
- down_timer.SetCountdownTimer(0,1,500); // 1 ms Timer * 500 => ergibt 500 ms
- down_timer.SetCountdownTimer(1,1,100); // 1 ms Timer * 10 => ergibt 10 ms, 100 ms für Einschaltverzögerung
- down_timer.SetCountdownTimer(2,1,0); // 1 ms Timer => reserviert für optischen Alarm
- down_timer.SetCountdownTimer(3,1,0); // 1 ms Timer => reserviert für akustischen Alarm
- down_timer.SetCountdownTimer(4,1,0); // 1 ms Timer => reserviert für nach Entriegelung
+ down_timer.SetCountdownTimer(0,1,500); // 1 ms Timer * 500 => ergibt 500 ms für die LED
+ down_timer.SetCountdownTimer(1,1,10); // 1 ms Timer * 10 => ergibt 10 ms für die Tasterabfrage
//--------------------------------------------------------------------
// Schleife fuer die Datenerfassung
@@ -121,7 +98,8 @@
//-------------------------------------------
// timer 0 steuert die LED auf dem Board mit der Takrate 0,5 Sekunden
- if (down_timer.GetTimerStatus(0) == 0) {
+ if (down_timer.GetTimerStatus(0) == 0)
+ {
down_timer.SetCountdownTimer(0,1,500);
LED = !LED;
@@ -143,157 +121,43 @@
in = IN1;
-
if(!in && in1.old) // Öffner im Ruhezustand 24 V >> durch Drücken wird eine neg. Flanke erzeugt
- {
+ {
in1.old = 0;
- in1.aktiv = 1; // Taster ist betätigt
- in1.optischer_alarm = 1;
- in1.summer = 1;
- down_timer.SetCountdownTimer(3,1,AA_NIN); // Zeit für Softtimer auf 10 Sekunden setzen
DEBUG("\n negative Flanke IN1 \n");
}
- if (in && !in1.old) { // Öffner im Ruhenzustand 24 V >> durch Rückstellen enteht eine pos. Flanke
- in1.old = 1;
- in1.aktiv = 0; // Taster ist zurückgesetzt
-
- in1.summer = 0;
- down_timer.SetCountdownTimer(4,1,AA_DELAY); // Zeit für Entriegelung, Haube innerhalb von 10 Sekunden schließen
- DEBUG("\n positve Flanke IN1 \n");
- }
-
- // optischer Alarm ausschalten, wenn IN3 wieder 0 bekommt ==> Quittierung
-
- if (in1.optischer_alarm && in3.aktiv && !in1.aktiv)
+ if (in && !in1.old) // Öffner im Ruhenzustand 24 V >> durch Rückstellen enteht eine pos. Flanke
{
- in1.optischer_alarm = 0;
- DEBUG("\n IN1 mit IN3 quittiert \n");
- }
-
-
- //------------------------------------------------
- // IN2 Sabotageschalter, 24V ist Ruhezustand
- // wird mit der negativen Flanke aktiviert
- // das Signal muss mindestens 10ms anliegen, damit es akzeptiert wird
-
- in = IN2;
-
-
- if(!in && in2.old) // Eingang neg. Flanke
- {
- in2.old = 0; // 0 im aktivierten Modus
- in2.aktiv = 1; // Eingang ist aktiv
- //in2.optischer_alarm = 1;
- in2.summer = 1; // am 11.05.15 entfernt, da Summer weiter untern aktiviert wird
- //down_timer.SetCountdownTimer(3,1,AA_NIN); // Zeit für Softtimer auf 10 Sekunden setzen
- DEBUG("\n negative Flanke IN2 \n");
+ in1.old = 1;
+ down_timer.SetCountdownTimer(3,1,5000); // Zeit für Abschaltverzögerung auf 5 Sekunden setzen
+ DEBUG("\n positve Flanke IN1 \n");
}
- if (in && !in2.old) // Eingang mit pos. Flanke
- {
- in2.old = 1; // 1 im Ruhezustand
- in2.aktiv = 0; // Eingang ist inaktiv
- in2.summer = 0;
- DEBUG("\n positve Flanke IN2 \n");
- }
-/*
- if (in2.aktiv && !in2.summer && !in1.summer && (down_timer.GetTimerStatus(4) == 0))
- {
- in2.summer = 1;
- down_timer.SetCountdownTimer(3,1,AA_NIN); // Zeit für Softtimer auf 10 Sekunden setzen ( zum Testen auf 2 Sek. gesetzt )
- DEBUG("\n IN2 Summer aktiviert \n");
- }
-
- // nur zurückschalten, wenn IN3 wieder 1 ==> Quittierung
-
- if (in2.optischer_alarm && in3.aktiv) {
- in2.optischer_alarm = 0;
- DEBUG("\n IN2 mit IN3 quittiert \n");
- }
-*/
- //------------------------------------------------
- // IN3 Signalstation, Öffner => 1 ist Ruheezustand
-
- in = IN3;
-
- if(in && !in3.old) // Eingang pos. Flanke
- {
- in3.old = 1;
- in3.aktiv = 0; // Eingang ist Ruhezustand
-
- }
-
- if (!in && in3.old) // Eingang mit neg Flanke
- {
- in3.old = 0;
- in3.aktiv = 1; // Eingang ist aktiv
- }
-
-
//---------------------------------------------------------------------------------------------------------------------------------------
- // Die Eingänge sind nun gelesen, jetzt kommt das Steuern der Ausgaänge
+ // Die Eingänge sind nun gelesen, jetzt kommt das Steuern der Ausgänge
//
//------------------------------------------------
- // Rot/Grüne LED (verriegelt/entriegelt):
- // rot Tor ist verriegelt
- // grün Tor ist entriegelt
-
- // 2. IN3 auf 0 = OUT2 aus und OUT3 ein Rot aus / Grün an (entriegelt)
- // 3. IN1 auf 1 = OUT2 aus und OUT3 ein Rot aus / Grün an (entriegelt)
+ // IN1 auf 0 = OUT4+6 AUS
+ // Nach Ablauf der Ausschaltverzögerung wird der Ausgang wieder auf 0 geschaltet
- if (in3.aktiv || in1.aktiv) {
- OUT2 = LED_AUS;
- OUT3 = LED_EIN;
- }
- else
- // 1. IN3 auf 1 = OUT2 ein und OUT3 aus Rot an / Grün aus (verriegelt)
- {
- OUT2 = LED_EIN;
- OUT3 = LED_AUS;
- }
-
- //------------------------------------------------
- // Gelbe LED (optischer Alarm):
-
- if (in1.optischer_alarm) // sobald der optische Alarm aus Eingang 1 akiviert wurde, diesen in Blinkmode schalten
- {
- if (down_timer.GetTimerStatus(2) == 0)
- {
- down_timer.SetCountdownTimer(2,1,OA_PERIODE); // Zeit für Softtimer auf eine Sekunde setzen
- OUT4 = !OUT4;
- }
- }
- else
- {
- OUT4 = LED_AUS;
+ if (!in1.old && (down_timer.GetTimerStatus(3) == 0))
+ {
+ OUT4 = 0;
+ OUT6 = 0;
}
//------------------------------------------------
- // Summer (OUT5 +24V)
-
-
- if (in1.summer || in2.summer || (down_timer.GetTimerStatus(3) != 0)) // sobald der Eingang 1 oder Eingang 2 akiviert ist oder der Timer
- { // noch aktiv ist, den Summer aktivieren
- DEBUG("\n Summer 1 = %d Summer 2 = %d \n",(uint8_t)in1.summer,(uint8_t)in2.summer);
- OUT5 = 1;
- }
- else
- {
- OUT5 = 0;
- }
+ // IN1 auf 1 = OUT4+6 EIN plus 5 Sekunden Ausschaltverzögerung
+ // Die Ausschaltverögerung wirkt auf das Ausschalten nicht auf das Einschalten
+
+ if (in1.old)
+ {
+ OUT4 = 1;
+ OUT6 = 1;
+ }
- //------------------------------------------------
- // Relais K1:
- // Der Kontakt des Nottasters wird weitergegeben
-
- if (in1.aktiv) { // 1. IN1 auf 0 = OUT6 (K1) ein
- OUT6 = 1;
- } else { // 2. IN1 auf 1 = OUT6 aus
- OUT6 = 0;
- }
-
} // end if (downtimer ...
} // end while
--- a/main.h Mon May 11 17:32:06 2015 +0000
+++ b/main.h Sun Aug 23 10:18:54 2015 +0000
@@ -9,10 +9,7 @@
struct di_struct {
bool aktiv; // Flag zur Steuerung
- bool old; // alter Wert vom Eingang für Flankenerkennung
- bool filter; // ein Flankengetriggertes Signal muss mindestens 10ms anliegen
- bool optischer_alarm; // für die Bestätigung von IN3
- bool summer; // Flag für Zeitsteuerung des Summers
+ bool old; // alter Wert vom Eingang für Flankenerkennung // Flag für Zeitsteuerung des Summers
};
#endif
