Fragen 1)Befehle mehrmals senden 2)Rechnen

Programmierung der FHZ-Zentralen mit contronics homeputer Standard / homeputer Studio & WEB-Server

Moderator: Co-Administratoren

Antworten
mfreye
Beiträge: 237
Registriert: 22.12.2007, 08:01

Fragen 1)Befehle mehrmals senden 2)Rechnen

Beitrag von mfreye » 31.12.2009, 12:27

Hallo!

1 Frage)
Also ganz neu ist das Thema ja nicht, ich möchte zur Sicherheit mehrmals den Befehl senden.

Code: Alles auswählen

wenn EM_SC_AQ_Luft_3112.Zustand = "00:00:00" dann
  EM_SC_AQ_Luft_3112 ausschalten
sonst
  wenn EM_SC_AQ_Luft_3112.Zustand = "1" dann
    EM_SC_AQ_Luft_3112 einschalten
  sonst
    EM_SC_AQ_Luft_3112 einschalten für EM_SC_AQ_Luft_3112.Zustand
  endewenn
endewenn
Um die Befehle jetzt mehrmals zu senden bleibt mir nur die folgende Möglichkeit:

Code: Alles auswählen

wenn EM_SC_AQ_Luft_3112.Zustand = "00:00:00" dann
  EM_SC_AQ_Luft_3112 ausschalten
  warte("00:00:00")
  EM_SC_AQ_Luft_3112 ausschalten
sonst
  wenn EM_SC_AQ_Luft_3112.Zustand = "1" dann
    EM_SC_AQ_Luft_3112 einschalten
    warte("00:00:00")
    EM_SC_AQ_Luft_3112 einschalten
  sonst
    EM_SC_AQ_Luft_3112 einschalten für EM_SC_AQ_Luft_3112.Zustand
   warte("00:00:00")
    EM_SC_AQ_Luft_3112 einschalten für EM_SC_AQ_Luft_3112.Zustand
  endewenn
endewenn
Oder geht das noch anders (inzwischen), wenn ich sendewert nehme wird die Zeit ja nicht nochmal mit übertragen.

2 Frage)

Code: Alles auswählen

**Meldung ob makro aktiv ist oder inaktiv
EM_DI_AQ_Licht_3111_Zusatnd := "Makro aktiv"

**Helligkeit erhöhen bzw. reduzieren stoppen
wenn EM_DI_AQ_Licht_3111.Stop = "an" dann
   gehezu ende
endewenn

**Keine Zeit übermittelt, Lichtstufe direkt setzen
wenn EM_DI_AQ_Licht_3111.WarteZeit = "00:00:00" dann
   EM_DI_AQ_Licht_3111 setzen auf stufe EM_DI_AQ_Licht_3111.Stufe
endewenn

**Zeit wurde mit übermittelt, Lichtstufe schrittweise anpassen und setzen
wenn nicht EM_DI_AQ_Licht_3111.WarteZeit = "00:00:00" dann

   **Nichts machen, wenn der alte Wert gleich dem neuen Wert ist
   wenn EM_DI_AQ_Licht_3111 = EM_DI_AQ_Licht_3111.Stufe dann
      gehezu ende
   endewenn

   **Neue Stufe ist größer als die eingestellte Stufe
   wenn EM_DI_AQ_Licht_3111 < EM_DI_AQ_Licht_3111.Stufe dann

      **Wenn die Stufe 0 ist, dann erst auf Stufe 1 setzen und kurz warten (damit die Neonröhren erst starten können)
      wenn EM_DI_AQ_Licht_3111 = 0 dann
         EM_DI_AQ_Licht_3111 := 1
         warte("00:00:03")
      endewenn

      SchleifePlus:
      **Wenn die Stufe 16 erreicht wurde, Makro beenden
      wenn EM_DI_AQ_Licht_3111 = 16 dann
         gehezu ende
      endewenn

      EM_DI_AQ_Licht_3111.MerkerStufe := EM_DI_AQ_Licht_3111
      warte(EM_DI_AQ_Licht_3111.WarteZeit)
      EM_DI_AQ_Licht_3111 := EM_DI_AQ_Licht_3111.MerkerStufe + 1

      **Wenn die eingestellte Stufe erreicht wurde, Makro beenden
      wenn EM_DI_AQ_Licht_3111 = EM_DI_AQ_Licht_3111.Stufe dann
      gehezu ende
         endewenn
      gehezu SchleifePlus

   **Neue Stufe ist kleiner als die eingestellte Stufe
   sonst

      SchleifeMinus:
      **Wenn die Stufe 1 erreicht wurde, Makro beenden (Neonröhre nicht direkt ausschalten, sondern verzögert!)
      wenn EM_DI_AQ_Licht_3111 = 1 dann
         warte("00:00:05")
         EM_DI_AQ_Licht_3111 := 0
         gehezu ende
      endewenn

      EM_DI_AQ_Licht_3111.MerkerStufe := EM_DI_AQ_Licht_3111
      warte(EM_DI_AQ_Licht_3111.WarteZeit)
      EM_DI_AQ_Licht_3111 := EM_DI_AQ_Licht_3111.MerkerStufe - 1

      **Wenn die eingestellte Stufe erreicht wurde, Makro beenden
      wenn EM_DI_AQ_Licht_3111 = EM_DI_AQ_Licht_3111.Stufe dann
      gehezu ende
         endewenn
      gehezu SchleifeMinus

   endewenn

endewenn


**Programm beenden und Werte zurücksetzen
ende:

**Befehle nochmal senden
warte("00:00:00")
EM_DI_AQ_Licht_3111 := EM_DI_AQ_Licht_3111
warte("00:00:00")
EM_DI_AQ_Licht_3111 := EM_DI_AQ_Licht_3111

**Werte zurücksetzen
EM_DI_AQ_Licht_3111.Stop := "aus"
EM_DI_AQ_Licht_3111.Stufe := ""
EM_DI_AQ_Licht_3111.WarteZeit := "00:00:00"
EM_DI_AQ_Licht_3111_Zusatnd := "Makro inaktiv"

**ggf. Schalter zurücksetzen
SE_DI_AQ_Licht_3111_ra ausschalten
SE_DI_AQ_Licht_3111_ru ausschalten
EM_DI_AQ_Licht_3111.WarteZeit ist als Zeichen eingetragen und ich übergebe den Wert wie folgt "00:00:10".

Jetzt möchte ich damit rechen, geht das?

Also z.B.:" 00:30:00" / 2 = "00:15:00"

Es wird damit ein Dimmer angesteuert, der in x Zeit auf die eingestellte Helligkeit dimmt. Ich möchte aber nicht die Zeit angeben die er braucht von einer zur nächsten Stufe, so wie jetzt. Sondern die gesamt Zeit und anhand von den Stufen habe ich ja meinen Teiler.

MfG
Maik Freye

PS Guten Rutsch Euch allen!

buempi
Ehrenmitglied
Beiträge: 12194
Registriert: 29.07.2006, 15:58
Wohnort: Schweiz
Danksagung erhalten: 5 Mal

Re: Fragen 1)Befehle mehrmals senden 2)Rechnen

Beitrag von buempi » 31.12.2009, 14:25

Hallo Maik

Zu Frage 1: Ich hab es vor ziemlich langer Zeit mal getestet und weiss deshalb nicht, ob es immer noch so ist: SENDEWERT() hat damals die "EIN-Zeit" nicht nochmals übertragen. Der Aktor blieb also dauerhaft ein (wenn das AUS-Signal der FHZ am Schluss der EIN-Zeit unterdrückt wurde). Wenn du es genau wissen musst, bleibt nichts anderes als ein Test mit der aktuellen Version.

Deine Lösung mit der "Verdoppelung" der Befehle funktioniert aber auch nur, wenn "Senden auch bei Zuweisung ohne Änderung" aktiviert ist. Das Marko darf dann allerdings nicht in einem Intervall ablaufen, weil sonst (wie bei SENDEWERT) bei jedem Durchgang gesendet würde.

Zu Frage 2: Ich habe das betreffende Makro nur kurz überflogen und konnte dabei nicht ganz nachvollziehen, was da genau abläuft. Die Bezeichnungen mit den vielen Unterstrichen verwirren doch etwas. Wenn ich richtig verstanden habe, geht's aber gar nicht ums Makro, sondern ums Rechnen mit Uhrzeiten.

Mit Zeichenvariablen kann man nicht rechnen; auch mit Uhrvariablen nur Plus und Minus. Wir müssen also in mehreren Schritten vorgehen:

Code: Alles auswählen

** Die Zahlen-Variable muss mit Startwert 0,0 definiert werden!

ZeichenVariable := "00:30:00"
UhrVariable     := ZeichenVariable
ZahlenVariable  := UhrVariable / 2
UhrVariable     := ZahlenVariable
ZeichenVariable := UhrVariable

Anzeige         := ZeichenVariable
Ganz lustige Spielerei zum Jahresausklang... Dir und allen einen guten Rutsch!

Viele Grüsse
Bümpi

mfreye
Beiträge: 237
Registriert: 22.12.2007, 08:01

Re: Fragen 1)Befehle mehrmals senden 2)Rechnen

Beitrag von mfreye » 04.01.2010, 17:44

Hallo Bümpi,
Ich hab es vor ziemlich langer Zeit mal getestet und weiss deshalb nicht, ob es immer noch so ist: SENDEWERT() hat damals die "EIN-Zeit" nicht nochmals übertragen. Der Aktor blieb also dauerhaft ein (wenn das AUS-Signal der FHZ am Schluss der EIN-Zeit unterdrückt wurde). Wenn du es genau wissen musst, bleibt nichts anderes als ein Test mit der aktuellen Version.
Ja genau daran hat sich leider nichts geändert. Hatten wir ja schon mal ;)
Deine Lösung mit der "Verdoppelung" der Befehle funktioniert aber auch nur, wenn "Senden auch bei Zuweisung ohne Änderung" aktiviert ist. Das Marko darf dann allerdings nicht in einem Intervall ablaufen, weil sonst (wie bei SENDEWERT) bei jedem Durchgang gesendet würde.
Ja, habe ich gemacht.
Die Bezeichnungen mit den vielen Unterstrichen verwirren doch etwas
Ist doch ganz einfach :wink:

EM_SC_AQ_Luft_3112.Zustand = Empfänger Schalter Aquarium Luftversorgung Kanal3112 Zustand(AN/AUS)
Mit Zeichenvariablen kann man nicht rechnen; auch mit Uhrvariablen nur Plus und Minus. Wir müssen also in mehreren Schritten vorgehen:
Danke! Werde jetzt das ganze erweitern.

Gruß
Maik

Ach noch ne Frage, kann man eigentlich alle Adressen von Sender und Empfänger sich auflisten lassen. Mache das zur Zeit mit einen export als PDF und lese dieses dann Excel ein? Es geht, aber nicht schön! Wäre doch was für das SPG Tool!

buempi
Ehrenmitglied
Beiträge: 12194
Registriert: 29.07.2006, 15:58
Wohnort: Schweiz
Danksagung erhalten: 5 Mal

Re: Fragen 1)Befehle mehrmals senden 2)Rechnen

Beitrag von buempi » 04.01.2010, 19:40

mfreye hat geschrieben:kann man eigentlich alle Adressen von Sender und Empfänger sich auflisten lassen. Mache das zur Zeit mit einen export als PDF und lese dieses dann Excel ein? Es geht, aber nicht schön! Wäre doch was für das SPG Tool!
... soweit mir bekannt ist, hat Thomas da bereits was in Arbeit!

Viele Grüsse
Bümpi

tsa
Beiträge: 725
Registriert: 03.01.2008, 17:42
Hat sich bedankt: 3 Mal
Danksagung erhalten: 1 Mal

Re: Fragen 1)Befehle mehrmals senden 2)Rechnen

Beitrag von tsa » 06.01.2010, 15:41

...da hat Bümpi recht, dieser Teil ist sogar schon fertig. Nur eben noch nicht veröffentlicht :(
Wird schon noch - geduldet Euch ein wenig! :wink:

Gruss
Thomas

mfreye
Beiträge: 237
Registriert: 22.12.2007, 08:01

Re: Fragen 1)Befehle mehrmals senden 2)Rechnen

Beitrag von mfreye » 06.01.2010, 20:49

Hallo Thomas,
...da hat Bümpi recht, dieser Teil ist sogar schon fertig. Nur eben noch nicht veröffentlicht :(
Wird schon noch - geduldet Euch ein wenig! :wink:
Das ist ja als wenn schon bald wieder Weihnachten ist :D :D :D

MfG
Maik

PS Danke für dieses super Tool!!!

Antworten

Zurück zu „homeputer Studio / Standard: Programmierbeispiele“