Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: Steuerung und Fernbedienen Kategorie: Programmierung Basic (von ManfredW, Homepage - 15.05.2009 20:26)
 Als Antwort auf Re: Steuerung und Fernbedienen von Börner - 14.05.2009 13:04
ManfredW nutzt:  CC1-Station V1.1
Hallo,
Anmerkungen habe ich eingefügt.
MfG ManfredW

> Hallo es gibt bereit eine erste Version.
>
> Die CC-Schaltet Zeitgesteuert die Pumpen und die Meßwerte werden auf gezeichnet.
>
> Es ist möglich die Pumpen vom PC zu schalten und die gespeicherten Messwerte mit Excel auszulesen.
>
> Das VB-Programm ist eigenständig un mit VB 6.0 realisiert.
>
> Nur wie kann ich von dem VB Programm die Schaltzeiten der Pumpen ändern und diese wiederrum in meinem VB-Programm anzeigen lassen ?
>
siehe meine homepage Kapitel Softwarebausteine Schaltuhren
>
> Hier das Programm was bislang in der Station läuft:
>
> '*********************************************************************************************
> '
> ' C-Control Station/BASIC
> ' Steuerprogramm mit Zeitsteuerung der Pumpen
> '
> ' Aufgabe:
> '
> ' Steuerung der Filteranlage
> ' Ausgabe von Meßwerten an den PC
> ' Kommmandos vom Leitrechner empfangen
> ' Meßwerte aufzeichnen und auf Kommando an Leitrechner senden
> '*********************************************************************************************
> ' --- Definitionen --------------------
>
> define Ausgang byteport[1]
> define Eingang byteport[2]
>
> define AD1 AD[1]                ' AD 1 ---
> define AD2 AD[2]                ' AD 2 Batterie - Strom
> define AD3 AD[3]                ' AD 3 Start Taster
> define AD4 AD[4]                ' AD 4 Reset Taster
> define AD5 AD[5]                ' AD 5 Lufttemperatur
> define AD6 AD[6]                ' AD 6 Wassertemperatur
> define AD7 AD[7]                ' AD 7 Batteriespannung
> define AD8 AD[8]                ' AD 8 Netzspannung
>
> define Kommando byte
> define Gruppe Byte
>
> define UVC          port[8] 'Definition Relais UV - Klärer
> define Luft         port[7]     'Definition Relais Belüftungspumpe
> define Pumpe1       port[3] 'Definition Digitalport Pumpe 1
> define Pumpe2       port[4] 'Definition Digitalport Pumpe 2
> define Ãœberlauf     port[5]     'Definition Digitalport Schwimmschalter Ãœberlauf
>
> define LED1         port[13] 'Definition Betriebsmodusanzeige LED 1
> define LED2         port[14] 'Definition Betriebsmodusanzeige LED 2
> define LED3         port[15] 'Definition Betriebsmodusanzeige LED 3
> define LED4         port[16] 'Definition Betriebsmodusanzeige LED 4
>
> define F1           port[9] 'Definition Folien-Funktionstaster Fl
> define F2           port[10]    'Definition Folien-Funktionstaster F2
> define F3           port[11] 'Definition Folien-Funktionstaster F3
> define F4           port[12] 'Definition Folien-Funktionstaster F4
>
> define F1gedrueckt  bit[189]
> define F2gedrueckt  bit[190]
> define F3gedrueckt  bit[191]
> define F4gedrueckt  bit[192]
> define StörungAktiv bit[180]
>
> define BitAnfang bit[180]
Bit wird zwar nicht benutzt, aber 180 ist doppelt belegt.
Außerdem ein neues Byte. Warum nicht bit 188 ?

> define Wert byte
> define n Word
Obige define ... byte 3 Stück und dann word bedeutet 1 Byte verschenkt.
Besser mit define .. word beginnen.

> define Minuten byte
> define Sekunde byte
Mit bits Zeittakt spart man bytes
>
> ' --- Programmoperationen -------------
>
> beep 250,30,5
>
> Minuten = 0          'erste Messung bei dieser MinuteX starten (einmalige Vorgabe beim Start)
>
> Luft =   OFF
> UVC =    OFF
> Pumpe1 = OFF
> Pumpe2 = OFF
Die Relais sind bei Start immer aus.
>
> '##################################################################################################
> 'Programm:
> #Loop
> '--------------------------------------------------------------------------------------------------
> 'Zeitprogramm für Pumpe 1 und Pumpe 2              AKTUELL !!! 26.09.2008 !!!!!
>
> if (hour =  10)  and (minute =  0)  then Pumpe1 = ON                    'Pumpe 1 einschalten
> if (hour =  10)  and (minute =  0)  then Luft =   ON
> if (hour =  10)  and (minute =  0)  then UVC =    ON
> if (hour =  18)  and (minute =  0)  then Pumpe1 = OFF                   'Pumpe 1 ausschalten
> if (hour =  18)  and (minute =  0)  then Luft =   OFF
> if (hour =  18)  and (minute =  0)  then UVC =    OFF
>

if SchaltzeitStdEin = hour and SchaltzeitMinuteEin = minute then goto Ein

> if rxd then gosub loop12        'Kommandosignal vom Leitrechner abfragen
> '--------------------------------------------------------------------------------------------------
> ' Abfrage der eingeschalteten Pumpen und Anzeigen an den LED´s
> LED1 = Pumpe1
> LED2 = Pumpe2
> LED3 = Luft
> LED4 = UVC
> '--------------------------------------------------------------------------------------------------
> ' Tastenabfrage an der C-Control Station
> if F1 then F1gedrueckt = OFF ' F1 losgelassen merken
> if F1 or F1gedrueckt then goto NotF1 ' F1 neu gedrueckt?
> F1gedrueckt = ON ' F1 gedrueckt merken
> tog Pumpe1 ' Zustandswechsel nur einmal, bis F1 wieder losgelassen
> wait 1 ' Taste entprellen
> #NotF1
>
> if F2 then F2gedrueckt = OFF ' F2 losgelassen merken
> if F2 or F2gedrueckt then goto NotF2 ' F2 neu gedrueckt?
> F2gedrueckt = ON ' F2 gedrueckt merken
> tog Pumpe2 ' Zustandswechsel nur einmal, bis F1 wieder losgelassen
> wait 1 ' Taste entprellen
> #NotF2
>
> if F3 then F3gedrueckt = OFF ' F3 losgelassen merken
> if F3 or F3gedrueckt then goto NotF3 ' F3 neu gedrueckt?
> F3gedrueckt = ON ' F3 gedrueckt merken
> tog Luft ' Zustandswechsel nur einmal, bis F3 wieder losgelassen
> wait 1 ' Taste entprellen
> #NotF3
>
> if F4 then F4gedrueckt = OFF ' F4 losgelassen merken
> if F4 or F4gedrueckt then goto NotF4 ' F4 neu gedrueckt?
> F4gedrueckt = ON ' F4 gedrueckt merken
> tog UVC ' Zustandswechsel nur einmal, bis F4 wieder losgelassen
> wait 1 ' Taste entprellen
> #NotF4
>
> IF Ãœberlauf=ON then Pumpe1=OFF
Eventuell schaltet die Schaltuhr wieder ein.
Das muss vor der Schaltuhr programmiert sein z.B.
if Ãœberlauf then goto PumpeAus  Ã¼berspringt Schaltuhr.

> if überlauf=on and second mod 2=1 then led1=on else led1=off
>
> if rxd then gosub loop12        'Kommandosignal vom Leitrechner abfragen
> '--------------------------------------------------------------------------------------------------
> '--------------------------------------------------------------------------------------------------
> ' Meßwerte der Analogen Eingänge und der Frequenzmessung im Epprom speichern
> 'minute = Minuten
> if  minute = Minuten then goto messen
> goto Loop ' Anfang
einfacher wäre
if not MinutenImpuls then goto Loop
jetzt wird hier einmal je Minute gemessen
>
> #messen
> open# for append
> if filefree then print# AD5 'Lufttemperatur
> if filefree then print# AD6 'Wassertemperatur
> if filefree then print# AD7 'Akkuspannung
> if filefree then print# AD8 'Netzspannung
> if filefree then print# freq 'Durchfluß
> if filefree then print# minute 'Zeit bei Messung
>
> close#
>
> Minuten = Minuten + 15
> if Minuten = 60 then Minuten = 0
entfällt bei Anwendung Minuten-Impuls

> goto Loop
> '----------------------------------------------------------------------------------------
> 'Kommunikation mit Leitrechner
> #loop12
> get Kommando
> if Kommando = 27 then gosub Auslesen
27/16 ist 1. Soll wirklich G1 zusätzlich ausgeführt werden?
Statt gosub strukturiere mit goto Auslesen
>
> Gruppe = Kommando / 16
> on Gruppe gosub G0, G1, G2, G3, G4, G5
> return             'Endlosschleife
>
>
> #G0                 'keine Aktion
> return
>
> #G1                 'digitale Ausgabe
> get Ausgang
> return
>
> #G2                 'digitale Eingabe
> put Eingang
> return
>
> #G3                 'analoge Eingaben
> if Kommando = 48 then put AD1
> if Kommando = 49 then put AD2
> if Kommando = 50 then put AD3
> if Kommando = 51 then put AD4
> if Kommando = 52 then put AD5
> if Kommando = 53 then put AD6
> if Kommando = 54 then put AD7
> if Kommando = 55 then put AD8
>
> if Kommando = 56 then put hour
> if Kommando = 57 then put minute
> if Kommando = 58 then put second
> if Kommando = 59 then put freq2
>
> return
>
> #G4                 'analoge Ausgaben
> if Kommando = 64 then get second
> if Kommando = 65 then get day
> return
>
> #G5                 'Freuquenz Hi, Lo
> put freq / 256
> put freq mod 256
>
>
> return
> '----------------------------------------------------------------------------------------
>
> #Auslesen
>   'close#
>   open# for read
> #Next
>   input# Wert
>   put Wert
>   if not EOF then goto Next
>   close#
>  return

Befehl close# ist nur nach print#  notwendig.
> '-------------------------------------------------------------------------------------

Meine Homepage: http://manfred.wilzeck.de

 Antwort schreiben

Bisherige Antworten: