Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
DJS2009
Anmeldungsdatum: 07.11.2009 Beiträge: 22 Wohnort: Hagen / Westf.
|
Verfasst am: 07.11.2009, 14:55 Titel: Betriebsdatenerfassung für Öl-Heizung mittels Gameport |
|
|
Hallo zusammen,
ich möchte gerne eine Betriebsdatenerfassung für meine Öl-Heizung programmieren. Da ich vor Jahren mal mit Turbo-Basic programmiert habe würde ich gerne mit FreeBASIC fortfahren.
Vielleicht kann mir der eine oder andere ein paar Tipps geben wie ich schnell zum Ziel komme.
Was soll erfasst werden?
Im ersten Schritt möchte ich die Laufzeit des Brenners (Magnetventil offen) und den Zeitpunkt des Öffnens und Schließen des MGV erfassen.
Weiterhin möchte ich die Laufzeit, sowie das Ein- und Ausschaltzeitpunkt der Speicherpumpe für die Warmwasserbereitung erfassen.
Angedacht ist diese Zustände über ein Relais 220 V / 5 V (Vorschläge willkommen ) an einen USB-Gameportadapter (Conrad 981285 - 62) zu übermitteln
Unter FreeBASIC sollen die Zustände des Gameportadapters entsprechend mitgelesen werden und bei der jeweiligen Änderung entsprechend fortlaufend die Aktion (MGV on / MGV off sowie SP on / SP off mit Datum + Uhrzeit in eine Text-Datei geschrieben (protokolliert) werden.
Spätere Erweiterungen könnten dann noch die Laufzeit /on / off der Umwälzpumpe, sowie die Erfassung der Vorlauf / Rücklauf-Temperaturen und der Außen- und Raumtemperatur sein.
Wie gesagt ich bin für jeden Tipp dankbar, vielleicht hat der eine oder andere schon mal Teile einer solchen Abfrage oder des Protokollierens in eine Datei geschrieben.
Gruß
Dirk
Editiert durch Moderator: Aussagekräftigen Betreff angegeben. (Sebastian) |
|
Nach oben |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 07.11.2009, 17:48 Titel: |
|
|
Als "Newbie" hast Du Dir aber reichlich viel vorgenommen.
Du brauchst:
1) Kenntnisse in der Abfrage der Ports- abhängig vom Betriebssystem. Ist nämlich bei Win2k/XP und bei USB-Adaptern nicht ganz einfach (mal das Buch "USB in der Elektronik" durcharbeiten).
2) eine geeignete Schaltung zur Erfassung der Ventilzustände
3) eine geeignete Schaltung zur Datenübertragung
4) gute Kenntnisse in FreeBasic.
Ich würde sagen, fang mal mit dem 4. Punkt an und arbeite Dich Stück für Stück ein. _________________ Und die Grundgebihr is aa scho drin- DOS is jo nett. |
|
Nach oben |
|
 |
DJS2009
Anmeldungsdatum: 07.11.2009 Beiträge: 22 Wohnort: Hagen / Westf.
|
Verfasst am: 07.11.2009, 18:03 Titel: |
|
|
Also:
das Erkennen des Zustands von Magnetventil und der Speicherpumpe ist nicht das Problem, weil die auch mit einem 220 V Betriebsstundenzähler bzw. einem Impuszähler erfasst werden können (Parallelschaltung) Insoweit wäre hier ein Wechselerrelais eine gangbare Möglichkeit.
Das Programm steht nach Überarbeitung inzwischen soweit sowohl zur Verwendung mit einem RS232-Anschluß als auch mit einem Gameportadapter.
Version für den Gameportadapter:
---------------------------------------
SCREEN 12
DIM AS SINGLE x, y
DIM AS INTEGER buttons, result, i
DIM AS STRING A, B, C, D ,Z
DIM as INTEGER C1, C2, C3, C4, S1, S2, S3, S4
CONST JoystickID = 0
' Joystick-Abfrage:
IF GETJOYSTICK(JoystickID, buttons, x, y) THEN
PRINT "Joystick existiert nicht, oder ein Fehler ist aufgetreten."
PRINT
PRINT "Beliebige Taste drücken um fortzusetzen"
SLEEP
END
END IF
DO
GETJOYSTICK JoystickID, buttons, x, y
LOCATE 1,1
IF (buttons AND (1 SHL 1)) THEN
PRINT "Channel ";1 ;" on "
C1=1
ELSE
PRINT "Channel ";1 ;" off"
C1=0
END IF
IF (buttons AND (1 SHL 2)) THEN
PRINT "Channel ";2 ;" on "
C2=1
ELSE
PRINT "Channel ";2 ;" off"
C2=0
END IF
IF (buttons AND (1 SHL 3)) THEN
PRINT "Channel ";3 ;" on "
C3=1
ELSE
PRINT "Channel ";3 ;" off"
C3=0
END IF
IF (buttons AND (1 SHL 4)) THEN
PRINT "Channel ";4 ;" on "
C4=1
ELSE
PRINT "Channel ";4 ;" off"
C4=0
END IF
'Daten in Datei schreiben:
B = DATE$
C = Time$
IF S1 <> C1 THEN
IF C1=1 Then A="C1 on" ELSE A="C1 off"
OPEN "C:/bde.txt" FOR APPEND AS #1
WRITE #1, B, C, A
CLOSE #1
S1 = C1
ENDIF
IF S2 <> C2 THEN
IF C2=1 Then A="C2 on" ELSE A="C2 off"
OPEN "C:/bde.txt" FOR APPEND AS #1
WRITE #1, B, C, A
CLOSE #1
S2 = C2
ENDIF
IF S3 <> C3 THEN
IF C3=1 Then A="C3 on" ELSE A="C3 off"
OPEN "C:/bde.txt" FOR APPEND AS #1
WRITE #1, B, C, A
CLOSE #1
S3 = C3
ENDIF
IF S4 <> C4 THEN
IF C4=1 Then A="C4 on" ELSE A="C4 off"
OPEN "C:/bde.txt" FOR APPEND AS #1
WRITE #1, B, C, A
CLOSE #1
S4 = C4
ENDIF
'Daten in Datei geschrieben:
' Bei Tastendruck beenden.
LOOP UNTIL LEN(INKEY)
--------------------
Verbesserungsvorschläge erwünscht
Gruß
Dirk |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 11.11.2009, 14:13 Titel: |
|
|
Achtung:
(1 SHL 1) = 2, also wird damit Channel 2 abgefragt !
Probier mal: Code: | Print (1 SHL 0)
Print (1 SHL 1)
Print (1 SHL 2)
Print (1 SHL 3)
Print (1 SHL 4)
sleep |
_________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 11.11.2009, 15:13 Titel: |
|
|
Mit welcher datenrate könnte man eigentlich daten über den gameport empfangen? Kann man einen Gameport auch als Datenausgang "misbrauchen" ? |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 11.11.2009, 16:28 Titel: |
|
|
Zitat: | Belegung des Soundkarten-Anschlusses für den jeweiligen Verwendungszweck
Pin-
Nummer allgemein MIDI-Funktion Joystick (normal)
[2-Achsen-2Tasten] Joystick (erweitert)
[z.B. 2-Achsen-4-Tasten]
1 +5V --- +5V (für Potis Joystick A) +5V
2 IN4 --- Feuer-Taste 1 (Joystick A) Feuer-Taste 1 ("A")
3 IN0 --- X-Achsen-Poti (Joystick A) X-Achsen-Poti
4 Masse Masse Masse (für Feuer-Tasten Joystick A) Masse
5 Masse Masse Masse Masse
6 IN1 --- Y-Achsen-Poti (Joystick A) Y-Achsen-Poti
7 IN5 --- Feuer-Taste 2 (Joystick A) Feuer-Taste 2 ("B")
8 +5V --- --- ---
9 +5V --- +5V (für Potis Joystick B) +5V
10 IN6 --- Feuer-Taste 1 (Joystick B) Feuer-Taste 3 ("C")
11 IN2 --- X-Achsen-Poti (Joystick B) Schubkontrolle
12 MIDI OUT MIDI OUT Masse (für Feuer-Tasten Joystick B) Masse
13 IN3 --- Y-Achsen-Poti (Joystick B) ---
14 IN7 --- Feuer-Taste 2 (Joystick B) Feuer-Taste 4 ("D")
15 MIDI IN MIDI IN --- --- |
Quelle: http://hardware-bastelkiste.de/index.html?gamemidi.html
Der Gameport ist daher ein reiner Eingabeanschluss - was ja auch ziemlich exakt seinem Zweck entspricht. Heutzutage macht man das ja nicht mehr, weil man - u.a. - die Elektronik zum Digitalisieren (ADC-Wandler, Microprozessor, Schnittstellencontroller usw.) problemlos in das Eingabegerät integrieren kann um so einen universelleren Anschluss wie bspw. USB benutzen zu können. Im Rahmen des Gameports ist - und war es auch nie - notwendig etwas anderes als MIDI Signale ausgeben zu müssen.
Da die Signale des Gameports auf der Soundkarte abgetastet wird, ist die Abtastrate und damit die Frequenz des Eingangssignals von Karte zu Karte unterschiedlich, da es dort meines Wissens nach keinen Standard gibt. Gut möglich, dass auf einer Uraltsoundkarte der Port nur mit 10kHz abgetastet wird, und auf einer modernen (Haben zwar meistens keinen Gameport mehr, aber egal) mit 300 kHz oder mehr.
Der Gameport ist auch gar nicht dazu erdacht worden Daten zu übertragen. |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 11.11.2009, 18:30 Titel: |
|
|
über USB wird es noch langsamer, alle 1 - 3ms (300-1000 pro Sekunde) eine Abfrage  _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 11.11.2009, 22:12 Titel: |
|
|
Abtastfrequenz != Pollfrequenz.
Ich kann an den USB Port einen ADC mit einer Abtastfrequenz von 30 Mhz dranhängen, und trotzdem in Echtzeit noch alle Daten mitkriegen (Isochronoustransfer) |
|
Nach oben |
|
 |
DJS2009
Anmeldungsdatum: 07.11.2009 Beiträge: 22 Wohnort: Hagen / Westf.
|
Verfasst am: 11.11.2009, 22:29 Titel: |
|
|
volta hat Folgendes geschrieben: | Achtung:
(1 SHL 1) = 2, also wird damit Channel 2 abgefragt !
Probier mal: Code: | Print (1 SHL 0)
Print (1 SHL 1)
Print (1 SHL 2)
Print (1 SHL 3)
Print (1 SHL 4)
sleep |
|
Danke für den Hinweis
also muss der Eintrag im Prg
IF (buttons AND (1 SHL 0)) THEN
PRINT "Channel ";1 ;" on "
lauten. |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 11.11.2009, 22:31 Titel: |
|
|
Dir ist schon klar, dass x SHL y (wobei gilt, dass x und y const sind - also bspw. hardgecodete Zahlen) eine Konstante ist, die du auch einfach hinschreiben kannst? |
|
Nach oben |
|
 |
DJS2009
Anmeldungsdatum: 07.11.2009 Beiträge: 22 Wohnort: Hagen / Westf.
|
Verfasst am: 11.11.2009, 23:01 Titel: |
|
|
28398 hat Folgendes geschrieben: | Dir ist schon klar, dass x SHL y (wobei gilt, dass x und y const sind - also bspw. hardgecodete Zahlen) eine Konstante ist, die du auch einfach hinschreiben kannst? |
Um ehrlich zu sein, nicht so wirklich verstanden |
|
Nach oben |
|
 |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 956 Wohnort: Austria
|
Verfasst am: 11.11.2009, 23:26 Titel: |
|
|
@DJS2009: Ich glaube 28... meint, dass du den Ausdruck "1 SHL 0" usw. gleich ausrechnen und das Ergebnis "1" hinschreiben könntest. ==> Lass es lieber. Wie du es jetzt hast ist es mindestens so gut.
@28...: Dir ist schon klar, dass x SHL y (wobei gilt, dass x und y const sind - also bspw. hardgecodete Zahlen) eine Konstante ist, die der FB Compiler (jedenfalls in der Version 0.20.0) zur Compile-Zeit berechnet und diesen konstanten Wert (und nicht die Berechnung) ins Programm einbaut?  _________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken) |
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 12.11.2009, 09:43 Titel: |
|
|
du brauchst nicht zwingend ein relais .. du kannst das auch mti nem spanungsteiler, na Z-Diode und na normalen Diode + kondi machen.
Preistechnisch kommst du da auf rund 10cent, anstat auf 1 euro pro sensor-gruppe
wenn du n schaltplan willst, schreib mir ne PM
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 12.11.2009, 11:57 Titel: |
|
|
Hi DJS2009,
ich würde solche Schreibweise wählen:
Code: | If (buttons And 1) Then
..
If (buttons And 2) Then
..
If (buttons And 4) Then
.. |
@TPM, bei 230V würde ich aber immer eine galvanische Trennung vorziehen!
28398 hat Folgendes geschrieben: | Ich kann an den USB Port einen ADC mit einer Abtastfrequenz von 30 Mhz dranhängen | keine Frage, natürlich. Trotzdem wird auch bei dir ein Joystick am USB ca. alle 1ms abgefragt  _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
DJS2009
Anmeldungsdatum: 07.11.2009 Beiträge: 22 Wohnort: Hagen / Westf.
|
Verfasst am: 12.11.2009, 13:26 Titel: |
|
|
@ The PuppetMaster
Du hast eine PM von mir
@ Volta
Danke für den Tipp, werde ich mal probieren.
Wegen dem Relais hatte ich übrigens an folgendes gedacht:
Conrad 50 28 28 - 42
Meinungen?
Gruß
Dirk |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 12.11.2009, 17:28 Titel: |
|
|
@St_W
Nein, sowas...  |
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 12.11.2009, 19:25 Titel: |
|
|
@volta .. das is natürlich ein ding der selbstverständlichkeit
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 12.11.2009, 21:34 Titel: |
|
|
@volta:
Zeig mir den Menschen, den ein Inputlag von <1 ms intessiert... |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 12.11.2009, 21:48 Titel: |
|
|
Oh ja, oben schrieb einer
er fragt seinen ADC mit 30Mhz ab und bekommt die Ergebnisse in Echtzeit, der ist von 1ms Latenz bestimmt nicht begeistert.
Ansonsten ist es beim Joystick natürlich unerheblich ... _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 12.11.2009, 22:36 Titel: |
|
|
Wenn ich das mit nem Isochronoustransfer mache ist das kein Problem. Natürlich kriege ich das nicht mit Interrupttransfers hin (max. 1000/EP). Mit Isochronoustransfers kann ich das jedoch Problemlos hinkriegen. (max. 90% Bandbreite, 3000 Microframes/s)
Das wird hier langsam sehr OT. |
|
Nach oben |
|
 |
|