Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Betriebsdatenerfassung für Öl-Heizung mittels Gameport
Gehe zu Seite 1, 2, 3  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
DJS2009



Anmeldungsdatum: 07.11.2009
Beiträge: 22
Wohnort: Hagen / Westf.

BeitragVerfasst am: 07.11.2009, 14:55    Titel: Betriebsdatenerfassung für Öl-Heizung mittels Gameport Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 07.11.2009, 17:48    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
DJS2009



Anmeldungsdatum: 07.11.2009
Beiträge: 22
Wohnort: Hagen / Westf.

BeitragVerfasst am: 07.11.2009, 18:03    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 11.11.2009, 14:13    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 11.11.2009, 15:13    Titel: Antworten mit Zitat

Mit welcher datenrate könnte man eigentlich daten über den gameport empfangen? Kann man einen Gameport auch als Datenausgang "misbrauchen" ?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 11.11.2009, 16:28    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 11.11.2009, 18:30    Titel: Antworten mit Zitat

über USB wird es noch langsamer, alle 1 - 3ms (300-1000 pro Sekunde) eine Abfrage mit den Augen rollen
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 11.11.2009, 22:12    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
DJS2009



Anmeldungsdatum: 07.11.2009
Beiträge: 22
Wohnort: Hagen / Westf.

BeitragVerfasst am: 11.11.2009, 22:29    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 11.11.2009, 22:31    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
DJS2009



Anmeldungsdatum: 07.11.2009
Beiträge: 22
Wohnort: Hagen / Westf.

BeitragVerfasst am: 11.11.2009, 23:01    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 956
Wohnort: Austria

BeitragVerfasst am: 11.11.2009, 23:26    Titel: Antworten mit Zitat

@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? zwinkern
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 12.11.2009, 09:43    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 12.11.2009, 11:57    Titel: Antworten mit Zitat

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 Zunge rausstrecken
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
DJS2009



Anmeldungsdatum: 07.11.2009
Beiträge: 22
Wohnort: Hagen / Westf.

BeitragVerfasst am: 12.11.2009, 13:26    Titel: Antworten mit Zitat

@ 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
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 12.11.2009, 17:28    Titel: Antworten mit Zitat

@St_W
Nein, sowas... Zunge rausstrecken
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 12.11.2009, 19:25    Titel: Antworten mit Zitat

@volta .. das is natürlich ein ding der selbstverständlichkeit lächeln


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 12.11.2009, 21:34    Titel: Antworten mit Zitat

@volta:
Zeig mir den Menschen, den ein Inputlag von <1 ms intessiert...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 12.11.2009, 21:48    Titel: Antworten mit Zitat

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. lachen

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 12.11.2009, 22:36    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2, 3  Weiter
Seite 1 von 3

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz