Fr os con2010_bmatrainer
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Fr os con2010_bmatrainer

on

  • 1,576 views

BMATrainer ist ein kleines Tool zur Simulation von Brandmeldeanlagen. Geschrieben in Perl.

BMATrainer ist ein kleines Tool zur Simulation von Brandmeldeanlagen. Geschrieben in Perl.

Statistics

Views

Total Views
1,576
Views on SlideShare
1,489
Embed Views
87

Actions

Likes
0
Downloads
2
Comments
0

5 Embeds 87

http://reneeb-perlblog.blogspot.de 52
http://reneeb-perlblog.blogspot.com 29
http://reneeb-perlblog.blogspot.cz 4
http://www.docseek.net 1
http://reneeb-perlblog.blogspot.hu 1

Accessibility

Categories

Upload Details

Uploaded via as OpenOffice

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Fr os con2010_bmatrainer Presentation Transcript

  • 1.  
  • 2.  
  • 3.  
  • 4.  
  • 5. BMATrainer
      Simulationsprogramm für Brandmeldeanlagen
  • 6. Die GUI
  • 7. Die GUI
  • 8. Die GUI
  • 9. Die GUI
    • wxFormBuilder im Einsatz...
  • 10.  
  • 11. GUI
  • 12. Plugins
  • 13. Plugins I
    • Löst den “Alarm” aus
    • 14. Einfache Arduino-Anwendung
    • 15. Anschluss an USB-Port
    • 16. Device::SerialPort zum Auslesen der Arduino-Daten
    • 17. Einfacher Sketch für Arduino
  • 18. Plugins I
  • 19. Plugins I use Win32::SerialPort; my $port = 'COM3'; my $baud = 9600; my $parity = 'none'; my $data = 2; my $stop = 1; my $handshake = 'none'; sub new { bless {}, shift; }
  • 20. Plugins I my $conn = Win32::SerialPort->new( $port ) or die $^E; $conn->databits( $data ); $conn->baudrate( $baud ); $conn->parity( $parity ); $conn->stopbits( $stop ); while ( 1 ) { my $char = $conn->lookfor; no warnings 'numeric'; # read input from usb port # if “1” is returned, start alarm $conn->lookclear; }
  • 21. Plugins II
    • Soll “Hausalarm” simulieren
    • 22. Steuerung mit Win32::Sound
    • 23. Win32-only im Moment
  • 24. Plugins II sub start_sound { my ($self) = @_; Win32::Sound::Volume( '100%' ); Win32::Sound::Play( $self->sound_file, SND_ASYNC ); } sub stop_sound { Win32::Sound::Stop(); }
  • 25. Plugins
    • threads + wxPerl -> “use threads” vor “use Wx”
    • 26. Kommunikation zwischen den Plugins und der Anwendung muss möglich sein
      • Ein “Eventsystem” musste her
    • Einbinden muss einfach sein
  • 27. Plugins einbinden my $config_file = Path::Class::File->new( $args{directory}, 'plugins.yml', ); my $config = BMA::Config->new( $config_file->absolute.'' ); my $plugins = $config->get( 'plugins' ); for my $plugin ( @{$plugins} ) { $plugin->{package} = 'BMA::Plugins::'.$plugin->{module}; my $file = $plugin->{package} . '.pm'; $file =~ s{ :: }{/}gxms; $plugin->{file} = $file; push @{ $self->{ $plugin->{type} } }, $plugin; }
  • 28. Plugins einbinden --- plugins: - type: input module: Feuermelder active: 0 label: Feuermelder - type: output module: Sirene event: AlarmStart active: 0 label: Sirene
  • 29. Kommunikation
  • 30. Kommunikation
    • GUI muss von Plugins Befehle empfangen können
      • Einfach Methodenaufrufe des GUI-Objekts
    • GUI muss Befehle an Plugins senden können
      • Nicht so einfach, da GUI die Methoden der Plugins nicht kennt
    • Plugin ↔ Plugin müssen über GUI-Methoden kommunizieren, da diese voneinander nichts wissen
    • 31. => Ein Eventsystem muss her
  • 32. Kommunikation
    • Alle Output-Plugins können auf Events hören, alle Events können Events auslösen
    • 33. GUI stellt an Hand der Konfig fest, welche Plugins aufgerufen werden müssen
  • 34. Kommunikation for my $plugin ( $self->plugins( $event ) ) { my $file = $plugin->{file}; eval { $logger->debug( "require $file" ); require $file; my $object = $plugin->{package}->new( %{$plugin}, logger => $logger, BMA => $args{BMA}, ); $object->run( %args ); 1; } or $logger->debug( "Could not load $file: $@" ); }
  • 35. Kommunikation $self->event( event => 'StartAlarm', );
  • 36. Zukunft von BMATrainer
    • Es ist noch einiges zu tun
    • 37. Mehr Plugins
    • 38. Plugins auch unter Linux verfügbar machen
    • 39. .exe für Windows-Nutzer erstellen
    • 40. Restliche Funktionalität programmieren
    • 41. Dokumentieren
  • 42. Lesestoff
    • $foo – Perl-Magazin
      • BMATrainer: Ausgaben 13 und 14
      • 43. WxPerl-Tutorial: ab Ausgabe 12
    • http://github.com/reneeb/BMATrainer
    • 44. http://renee-baecker.de/vortraege.html
  • 45. Fragen?
    • Hier auf der FrOSCon oder unter
    • 46. [email_address]
  • 47. Vielen Dank für Ihre Aufmerksamkeit