Ankündigung

Einklappen
Keine Ankündigung bisher.

Forth Code MicroVis2 für oder Logik richtig?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • chrismave
    antwortet
    Ne,
    habe ich bei mir im Büro programmiert (kopiert) und der Bus liegt Zuhause,
    teste ich heute Abend mal, wenn das funktioniert brauche ich nur noch wissen wie ich einen Umwandler von 8*1Bit in 1byte schreibe dann könnte bzw. hätte ich mir den ABB LM/S1.1 und 100 € schenken können, aber nachher ist man(n) immer schlauer!

    Danke für´s drüberschauen.

    Christoph

    Einen Kommentar schreiben:


  • pio
    antwortet
    Ja, die eib-Gruppen werden innerhalb der or-Funktion abgefragt.
    Der Ausgangskanal wird auch auf den Bus gesendet

    over eibset dup signalobj eibtx

    und die Elemente der Bedienoberfläche werden aktualisiert

    over eibset dup signalobj eibtx

    Hast Du's schonmal laufen lassen?

    Einen Kommentar schreiben:


  • chrismave
    antwortet
    Ich habe das einfach aus dem Vorlage Projekt: or_project_mvis2_1

    was komplett so aussieht übernommen:

    : __stoptimers
    15 0 do I tstop drop loop stopeib ;

    __stoptimers

    forget __stoptimers
    forget __eibtbl

    128 1 4 array __eibtbl

    : __eibfunction
    __eibtbl @ ?dup 0= if exit then execute ;

    # USE "['] your_function your_object __eibregister" in "oninit"
    : __eibregister ( function objnr -- )
    dup 0< if 2drop exit then
    dup 127 > if 2drop exit then
    __eibtbl ! ;

    var __acttimer
    : __newtimer 1 __acttimer +! ;

    #Is the button pressed?

    : __buttonpressed 0xFFFFF43C 0x4000 and 0= ;

    # USE ": oninit oninit .....your code.... ;"
    : oninit ['] __eibfunction dup oneibc oneibu starteib ;

    #USE inobj1 ... inobjn n outobject1 outobj2 __orfunction myorfunctionname

    var __orfunctioncounter

    : __orfunction create , , dup , 0 do dup self swap __eibregister , loop does>
    0 __orfunctioncounter !
    dup 8 + dup @
    0 do
    4 + dup @ eibget 0<> if 1 __orfunctioncounter +! then
    loop
    drop
    dup
    4 + @
    __orfunctioncounter @
    2dup
    swap eibget = if 2drop else
    over eibset dup signalobj eibtx
    then
    @
    __orfunctioncounter @ dup 0<> if drop 1 then
    2dup
    swap eibget = if 2drop exit then
    over eibset dup signalobj eibtx
    ;


    #Die zu ver-ODER-nden Eingänge
    #define or1in1 eib.input1
    #define or1in2 eib.input2
    #define or1in3 eib.input3
    #define or1in4 eib.input4

    #Der Ausgang mit dem 1-Bit Object
    #define or1out1 eib.output1

    #Der Ausgang mit dem 1-Byte-Object "Anzahl der 1-en"
    #define or1out2 eib.output2

    or1in1 or1in2 or1in3 or1in4 4 or1out2 or1out1 __orfunction or1
    : oninit mvis2_1_patch @ 0= if exit then
    oninit
    0 mvis2_1_patch !
    ;

    : __initpatch
    drop
    oninit ;

    ' __initpatch mvis2_1_patch !
    "DONE" type
    fsave
    reset


    Sieht eigentlich ganz gut aus?!
    Angehängte Dateien

    Einen Kommentar schreiben:


  • pio
    antwortet
    Hallo Christoph,

    Du hast noch eine ältere MicroVis-Version (2.1)?
    Bei der Patchgeschichte kann ich Dir nicht helfen,
    aber um auf Eib-Meldungen zu reagieren musst Du noch sowas
    wie eine Interruptroutine schreiben. Keine Sorge, ist simpel:

    : eibreaktion
    dup eib.or1in1 = if eib.or1in1 eibget *irgendwas tun* else then
    dup eib.or1in2 = if eib.or1in2 eibget *irgendwas tun* else then
    eib.or1in3 = if eib.or1in3 eibget *irgendwas tun* else then
    ;

    : oninit ['] eibreaktion dup oneibc oneibu starteib
    ;

    Die or-funktion hab ich auch noch nicht benutzt, aber wenn Du das Beispiel aus dem Arcus-Forum als Vorbild hast, sollte das schon funktionieren.
    Ich weiss jetzt gerade nicht, ob die Eib-Abfrage nicht schon innerhalb dieser or-Funktion erfolgt, dann wäre die obige Funktion eibreaktion doppelt gemoppelt.

    Am besten wäre es, wenn Du mal die 2 relevanten Seiten
    als kleines Projekt exportierst und hier im nächsten Post anhängst, dann schau ich mal.


    Gruss
    Pio

    p.s. hab noch kein Internet, kann also mit der Antwort ein paar Tage dauern.

    Einen Kommentar schreiben:


  • chrismave
    hat ein Thema erstellt KNX/EIB Forth Code MicroVis2 für oder Logik richtig?.

    Forth Code MicroVis2 für oder Logik richtig?

    Hallo liebe Forumianer,
    ich habe meinen ersten Forth Code für mein MicroVis2 geschrieben, kann das jemand von Euch beurteilen?

    Hintergrund der Geschichte ist das ich gerne auf meiner Startseite eine Statusanzeige (siehe Grafik)haben möchte die Umschaltet ob ein Fenster auf ist oder alle geschlossen sind. Weiterführend könnte ich dann in der Detailansicht schauen welches Fenster auf ist.

    Code:
    #Die zu ver-ODER-nden Eingange
    #define or1in1 eib.Wohnen_Südseite_Öffnungsstatus
    #define or1in2 eib.Essen_Westseite_Öffnungsstatus
    #define or1in3 eib.Küche_Westseite_Öffnungsstatus
    #define or1in4 eib.Max-Luca_Südseite_Öffnungsstatus
    #define or1in5 eib.Finja_Südseite_Öffnungsstatus
    #define or1in6 eib.Finja_Westseite_Öffnungsstatus
    #define or1in7 eib.Schlafzimmer_Westseite_Öffnungsstatus

    #Der Ausgang mit dem 1-Bit Object
    #define or1out1 eib.Logik_Fensterstatus

    or1in1 or1in2 or1in3 or1in4 or1in5 or1in6 or1in7 or1out1 __orfunction or1
    : oninit mvis2_1_patch @ 0= if exit then
    oninit
    0 mvis2_1_patch !
    ;

    : __initpatch
    drop
    oninit ;

    ' __initpatch mvis2_1_patch !
    "DONE" type
    fsave
    reset
    ______________________


    Danke Christoph
    Angehängte Dateien
Lädt...
X