PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Programmieren einer C-Control I



ctct
11.12.2006, 08:27
Hallo leutz!
Zuerst mal: ich habe noch kein plan von C-Control!

Ich hab mal eben ein bischen Code geschrieben und wollte mal fragen ob diese gültig ist. Hab eben noch kein C-Control um es zu prüfen. Will zuerst sicher sein dass ich es kappiere bevor ich kaufe.



'************************************************* *********
' C-Control Station
'
' Springbrunnen Regelung
'
' Die Haupt-Pumpe (Hp) läuft grunsätzlich immer, ausser wenn
' es nicht genug Wasser im Brunnen hat.
'
' Der Wasserspiegel wird konstant via Drucksensor (Ds) gemes-
' sen und bei bedarf nach gefüllt via Magnetventil (Mv) oder
' abgepumpt via kleine Pumpe (Kp).
'
' Der Wasserstrahl ist über den Wasserspiegel kontrolliert.
' Je höher der Wasserspiegel, desto tiefer der Stahl. Je
' tiefer der Wasserspiegel desto höher der Strahl.
'
' Der Anenometer [Windmesser] (Am) bewirkt eine Reduzierung
' des Wasserstrahls bei Wind. Eine Durchschnittsmessung
' (Schwellwert) von 1 Minute ist für ein ruhiges verhalten.
'
' Es sind 3 Betriebsarten einstellbar.
'
' Automatisch (F1):
' Hiermit wird der Stahl immer auf das Maximum gebracht.
'
' Halbautomatisch (F2):
' Hiermit kann man eine selbst definierte Höhe des Wasser-
' stahls festlegen der aber bei Wind via Windmessung reduziert
' wird.
'
' Manuel (F3):
' Hiermit kann man eine selbst definierte Höhe des Wasser-
' stahls festlegen der ohne Windmessung immer gleich bleibt.
'
' Die Betriebsart wird via F1, F2 und F3 bestimmt.
'
' Auf dem Display ist immer die Aktuelle Wasserstrahlhöhe
' zu sehen.
'************************************************* *********

' --- Definitionen ---

' die Relais
define Hp port[7]
define Mv port[8]
define Kp port[9]

' der Drucksensor
define Ds port[1]

' der Anenometer
define Am ad[5]

' die Folien-Funktionstasten
define F1 port[9]
define F2 port[10]
define F3 port[11]
define FTaste byte

' eine Variable zur Speicherung der Windgeschwindigkeit
define Wgs word
' Variablen zur Speicherung der Wasserstrahlhöhe
define Strahlhöhe byte
define StrahlhöheAktuell byte

' Konstanten
define C10 10 ' = 10

' --- das Programm ---

' Initialisierung
Hp = OFF
Mv = OFF
Kp = OFF

' Endlosschleife
#loop

' Tastenabfrage
if not (FTaste = 1 or FTaste = 2 or FTaste = 3) then goto Auswahl
if FTaste = 1 then gosub Automatisch
if FTaste = 2 then gosub Halbautomatisch
if FTaste = 3 then gosub Manuel

goto loop

' Betriebsarte auswählen
#Auswahl
Hp = OFF
Print "Bitte eine Betriebsart auswählen"
wait F1 or F2 or F3
if F1 then FTaste = 1
if F2 then FTaste = 2
if F3 then FTaste = 3
Return

' Schleifen der einzelnen Betriebsarten


' Endlosschleife für Automatisch
#Automatisch
#Loop1
'Das Programm:


goto loop1

' Endlosschleife für Halbautomatisch
#Halbautomatisch
#Loop2
'Das Programm:


goto loop2

' Endlosschleife für Manuel
#Manuel
#Loop3
'Das Programm:


goto loop3

#Loop4
'Windmessung


goto Loop4


Gruss
Ron

matlxxx
11.12.2006, 09:02
Hi!
während du zb. im automatikbetrieb bist würde ich eine abfrage zur betriebsmodeumschaltung einbauen(define bm port[12])

die gosub Befehl wird bei basic++ nicht mehr unterstützt!

und wenn es geht vermeide goto befehle(bessere übersichtlichkeit)
also:




' --- Definitionen ---

' die Relais
define Hp port[7]
define Mv port[8]
define Kp port[9]

' der Drucksensor
define Ds port[1]

' der Anenometer
define Am ad[5]

' die Folien-Funktionstasten
define F1 port[9]
define F2 port[10]
define F3 port[11]
define FTaste byte
define bm port[12] 'Taster für betriebsmoduswechsel

FUNCTION Automatisch()
PRINT "Automatikbetrieb"
'Deine Programmzeilen für die automatische Regelung
loop until bm = 1 'Solange durchlaufen bis der betriebsmode taster gedrückt wird
END FUNCTION

FUNCTION Halbautomatisch()
PRINT "Halbautomatikbetrieb"
'Deine Programmzeilen für die halbautomatische Regelung
loop until bm = 1 'Solange durchlaufen bis der betriebsmode taster gedrückt wird
END FUNCTION

FUNCTION Manuel()
do
PRINT "Manuel"
'Deine Programmzeilen für die Manuele Regelung
loop until bm = 1 'Solange durchlaufen bis der betriebsmode taster gedrückt wird
END FUNCTION

if FTaste = 1 then Automatisch()
if FTaste = 2 then Halbautomatisch()
if FTaste = 3 then Manuel ()

aber sonst schauts nicht schlecht aus denke ich

ctct
12.12.2006, 14:25
Hallo!
Besten Dank für deine Hilfe.

Kann man es eventuel auch so machen mit den Tasten:


'************************************************* *********
' C-Control Station
'
' Springbrunnen Regelung
'
' Die Haupt-Pumpe (Hp) läuft grunsätzlich immer, ausser wenn
' es nicht genug Wasser im Brunnen hat.
'
' Der Wasserspiegel wird konstant via Drucksensor (Ds) gemes-
' sen und bei bedarf nach gefüllt via Magnetventil (Mv) oder
' abgepumpt via kleine Pumpe (Kp).
'
' Der Wasserstrahl ist über den Wasserspiegel kontrolliert.
' Je höher der Wasserspiegel, desto tiefer der Stahl. Je
' tiefer der Wasserspiegel desto höher der Strahl.
'
' Der Anenometer [Windmesser] (Am) bewirkt eine Reduzierung
' des Wasserstrahls bei Wind. Eine Durchschnittsmessung
' (Schwellwert) von 1 Minute ist für ein ruhiges verhalten.
'
' Es sind 3 Betriebsarten einstellbar.
'
' Automatisch (F1):
' Hiermit wird der Stahl immer auf das Maximum gebracht.
'
' Halbautomatisch (F2):
' Hiermit kann man eine selbst definierte Höhe des Wasser-
' stahls festlegen der aber bei Wind via Windmessung reduziert
' wird.
'
' Manuel (F3):
' Hiermit kann man eine selbst definierte Höhe des Wasser-
' stahls festlegen der ohne Windmessung immer gleich bleibt.
'
' Die Betriebsart wird via F1, F2 und F3 bestimmt.
'
' Auf dem Display ist immer die Aktuelle Wasserstrahlhöhe
' zu sehen.
'************************************************* *********

' --- Definitionen ---

' die Relais
define Hp port[7]
define Mv port[8]
define Kp port[9]

' der Drucksensor
define Ds port[1]

' der Anenometer
define Am ad[5]

' die Folien-Funktionstasten
define F1 port[9]
define F2 port[10]
define F3 port[11]

' eine Variable zur Speicherung der Windgeschwindigkeit
define Wgs word
' Variablen zur Speicherung der Wasserstrahlhöhe
define Strahlhöhe byte
define StrahlhöheAktuell byte

' Konstanten
define C10 10 ' = 10

' --- das Programm ---

' Initialisierung
Hp = OFF
Mv = OFF
Kp = OFF

' Endlosschleife
#loop

' Tastenabfrage
if not F1 = 1 or F2 = 1 or F3 = 1 then Asuwahl

goto loop

' Betriebsarte auswählen
Function Auswahl()
Hp = OFF
Print "Springbrunnen - "
Print "Betriebsart Wahl"
wait F1 or F2 or F3
if F1 = 1 then Automatisch
if F2 = 1 then Halbautomatisch
if F3 = 1 then Manuel

Return

' Schleifen der einzelnen Betriebsarten


' Endlosschleife für Automatisch
Function Automatisch()
PRINT "Automatikbetrieb"
pause 25
#Loop1 until F1 not = 1
'Das Programm:


goto loop1

' Endlosschleife für Halbautomatisch
Function Halbautomatisch()
Print "Halbautomatik-"
Print "betrieb"
pause 25
#Loop2 until F2 not = 1
'Das Programm:


goto loop2

' Endlosschleife für Manuel
Function Manuel()
Print "Manuelbetrieb"
pause 25
#Loop3 until F3 not = 1
'Das Programm:


goto loop3

#Loop4
'Windmessung


goto Loop4

Gruss
Ron

Tappi
12.12.2006, 15:08
die gosub Befehl wird bei basic++ nicht mehr unterstützt!

Nur zur Info: Der GOSUB Befehl wird in BASIC++ unterstützt (akt. Version 2.1.0.250). Aber wer nutzt denn schon unübersichtliche Befehle, wie GOSUB, die auf ein Label springen? Da kann man auch gleich mit Assembler arbeiten.

Ich habe den Code mal umgeändert, so dass er von BASIC++ kompiliert werden kann:


'************************************************* *********
' C-Control Station
'
' Springbrunnen Regelung
'
' Die Haupt-Pumpe (Hp) läuft grunsätzlich immer, ausser wenn
' es nicht genug Wasser im Brunnen hat.
'
' Der Wasserspiegel wird konstant via Drucksensor (Ds) gemes-
' sen und bei bedarf nach gefüllt via Magnetventil (Mv) oder
' abgepumpt via kleine Pumpe (Kp).
'
' Der Wasserstrahl ist über den Wasserspiegel kontrolliert.
' Je höher der Wasserspiegel, desto tiefer der Stahl. Je
' tiefer der Wasserspiegel desto höher der Strahl.
'
' Der Anenometer [Windmesser] (Am) bewirkt eine Reduzierung
' des Wasserstrahls bei Wind. Eine Durchschnittsmessung
' (Schwellwert) von 1 Minute ist für ein ruhiges verhalten.
'
' Es sind 3 Betriebsarten einstellbar.
'
' Automatisch (F1):
' Hiermit wird der Stahl immer auf das Maximum gebracht.
'
' Halbautomatisch (F2):
' Hiermit kann man eine selbst definierte Höhe des Wasser-
' stahls festlegen der aber bei Wind via Windmessung reduziert
' wird.
'
' Manuel (F3):
' Hiermit kann man eine selbst definierte Höhe des Wasser-
' stahls festlegen der ohne Windmessung immer gleich bleibt.
'
' Die Betriebsart wird via F1, F2 und F3 bestimmt.
'
' Auf dem Display ist immer die Aktuelle Wasserstrahlhöhe
' zu sehen.
'************************************************* *********

' --- Definitionen ---

' die Relais
define Hp port[7]
define Mv port[8]
define Kp port[9]

' der Drucksensor
define Ds port[1]

' der Anenometer
define Am ad[5]

' die Folien-Funktionstasten
define F1 port[9]
define F2 port[10]
define F3 port[11]

' eine Variable zur Speicherung der Windgeschwindigkeit
define Wgs word
' Variablen zur Speicherung der Wasserstrahlhöhe
define Strahlhöhe byte
define StrahlhöheAktuell byte

' Konstanten
const C10 = 10 ' = 10

' --- das Programm ---

' Initialisierung
Hp = OFF
Mv = OFF
Kp = OFF

' Endlosschleife
do
' Tastenabfrage
if ((not F1) = 1) or (F2 = 1) or (F3 = 1) then Auswahl()
loop

' Betriebsarte auswählen
Function Auswahl()
Hp = OFF
Print "Springbrunnen - "
Print "Betriebsart Wahl"
wait F1 or F2 or F3
if F1 = 1 then Automatisch()
if F2 = 1 then Halbautomatisch()
if F3 = 1 then Manuel()
end function

' Schleifen der einzelnen Betriebsarten

' Endlosschleife für Automatisch
Function Automatisch()
PRINT "Automatikbetrieb"
pause 25
do
loop until ((not f1) = 1)
end function


' Endlosschleife für Halbautomatisch
Function Halbautomatisch()
Print "Halbautomatik-"
Print "betrieb"
pause 25
do
Loop until ((not F2) = 1)
end function

' Endlosschleife für Manuel
Function Manuel()
Print "Manuelbetrieb"
pause 25
do
loop until ((not f3) = 1)
end function


Übrigens: DEFINE zur Deklaration einer Konstanten wird in so gut wie keiner Programmiersprache verwendet (halt nur in CCBasic). Aus diesem Grund wurde es sinnvollerweise in BASIC++ auch analog zu anderen Programmiersprachen CONST genannt.

Die zusätzlichen Klammern dienen der Übersicht. Du hast vergessen die Funktionen mit END FUNCTION abzuschließen. Ein RETURN springt nur aus einer Funktion raus.

Bitte keine Labels "LOOP" nennen (auch wenn BASIC++ das zulässt). Sowas ist schlechter Stil. Bei größeren Programmen wirst Du selbst merken, dass das unübersichtlich wird. Man sollte ohnehin auf Labels verzichten.

Außerdem solltest Du anstatt "F1 = 1" besser "F1 = ON" schreiben. 1 und ON ist nicht das gleiche!

ctct
12.12.2006, 15:54
Besten Dank..
Habs kappiert bis auf: "DO" ?

Was macht dieser Parameter?

Gruss
Ron

PS: Code: (Mein Compiler [WorkBench++] sagt dass dieser code gültig ist.

'//////////////////////////////////////
'//
'// Basic++
'// Destination C-Control I M2.0
'// Beschreibung:
'//
'//////////////////////////////////////

OPTION CC2.0 'Zielplattform
'************************************************* *********
' C-Control Station
'
' Springbrunnen Regelung
'
' Di Haupt-Pumpe (Hp) läuft grunsätzlich immer, ausser wenn
' es nicht genug Wasser im Brunnen hat.
'
' Der Wasserspiegel wird konstant via Drucksensor (Ds) gemes-
' sen und bei bedarf nach gefüllt via Magnetventil (Mv) oder
' abgepumpt via kleine Pumpe (Kp).
'
' Der Wasserstrahl ist über den Wasserspiegel kontrolliert.
' Je höher der Wasserspiegel, desto tiefer der Stahl. Je
' tiefer der Wasserspiegel desto höher der Strahl.
'
' Der Anenometer [Windmesser] (Am) bewirkt eine Reduzierung
' des Wasserstrahls bei Wind. Eine Durchschnittsmessung
' (Schwellwert) von 1 Minute ist für ein ruhiges verhalten.
'
' Es sind 3 Betriebsarten einstellbar.
'
' Automatisch (F1):
' Hiermit wird der Stahl immer auf das Maximum gebracht.
'
' Halbautomatisch (F2):
' Hiermit kann man eine selbst definierte Höhe des Wasser-
' stahls festlegen der aber bei Wind via Windmessung reduziert
' wird.
'
' Manuel (F3):
' Hiermit kann man eine selbst definierte Höhe des Wasser-
' stahls festlegen der ohne Windmessung immer gleich bleibt.
'
' Die Betriebsart wird via F1, F2 und F3 bestimmt.
'
' Auf dem Display ist immer die Aktuelle Wasserstrahlhöhe
' zu sehen.
'************************************************* *********

' --- Definitionen ---

' die Relais
define Hp port[7]
define Mv port[8]
define Kp port[9]

' der Drucksensor
define Ds port[1]

' der Anenometer
define Am ad[5]

' die Folien-Funktionstasten
define F1 port[9]
define F2 port[10]
define F3 port[11]
define FTaste byte

' eine Variable zur Speicherung der Windgeschwindigkeit
define Wgs byte
define WgsT byte
define WgsZyk byte

' Variablen zur Speicherung der Wasserstrahlhöhe
define Strahlhöhe byte
define StrahlhöheAktuell byte

' Konstanten

'----------------------------------------------------------
' --- Das Programm ---
'----------------------------------------------------------

' Initialisierung
Hp = OFF
Mv = OFF
Kp = OFF

' Endlosschleife
#Tastenabfrage

' Tastenabfrage
if not (FTaste = 1 or FTaste = 2 or FTaste = 3) then Auswahl
if FTaste = 1 then Automatisch
if FTaste = 2 then Halbautomatisch
if FTaste = 3 then Manuel

goto Tastenabfrage

' Betriebsarte auswählen
Function Auswahl()
Hp = OFF
Lcd.Print"Springbrunnen - "
Lcd.Print "Betriebsart Wahl"
wait F1 or F2 or F3
if F1 then FTaste = 1
if F2 then FTaste = 2
if F3 then FTaste = 3
Return
end function

' Event Zähler Setupfür Windmessung
Function Setevent()
CONFIG.INIT
CONFIG.PUT 00000110b
CONFIG.OFF
End Function

'----------------------------------------------------------
' --- Schleifen der einzelnen Betriebsarten ---
'----------------------------------------------------------

' Endlosschleife für Automatisch
Function Automatisch()
Lcd.Print "Automatikbetrieb"
pause 25
#LoopA until FTaste not = 1
' Das Programm:

goto loopA
end function


' Endlosschleife für Halbautomatisch
Function Halbautomatisch()
Lcd.Print "Halbautomatik-"
Lcd.Print "betrieb"
pause 25
#LoopH until FTaste not = 2
' Das Programm:

goto loopH
end function


' Endlosschleife für Manuel
Function Manuel()
Lcd.Print "Manuelbetrieb"
pause 25
#LoopM until FTaste not = 3
' Das Programm:

goto loopM
end function


' Windmessung (Durchschnitt von eine Minute)
Function Windmessung()

' Initialisierung
WgsT = ""
Setevent()

#LoopWgs

If TIMER>=500 Then 'alle 10s gemessen
WgsT = Am + WgsT
WgsZyk = WgsZyk + 1 ' Zykeln Zählen
TIMER=0 ' Timer reset
End If

' Zykel reseten wenn nötig (6 Zykeln pro minute)
If WgsZyk = 6 then
Wgs = WgsT / 6
WgsT =0

End If

goto LoopWgs
end function


' Strahlhöhe

Tappi
12.12.2006, 16:04
DO

LOOP

ist eine Schleife.

ctct
12.12.2006, 17:13
Danke!

Wie kann ich zwei Funktionen gleichzeitig Loopen? Ich will ja dass die aktuelle Windgeschwindigkeit angezeigt wird.

So etwa?

' eine Variable zur Speicherung der Windgeschwindigkeit
define Wgs byte
define WgsT byte
define WgsZyk byte

'----------------------------------------------------------
' --- Schleifen der einzelnen Betriebsarten ---
'----------------------------------------------------------

' Endlosschleife für Automatisch
Function Automatisch()
Lcd.Print "Automatikbetrieb"
pause 25
Do
' Das Programm:

' Windmessungsfunktion
Windmessung
Lcd.Print Wgs


Loop until (FTaste not = 1)
end function


' Windmessung (Durchschnitt von eine Minute)
Function Windmessung()

' Initialisierung
WgsT = ""
Setevent()

Do

If TIMER>=500 Then 'alle 10s gemessen
WgsT = Am + WgsT
WgsZyk = WgsZyk + 1 ' Zykeln Zählen
TIMER=0 ' Timer reset
End If

' Zykel reseten wenn nötig (6 Zykeln pro minute)
If WgsZyk = 6 then
Wgs = WgsT / 6
WgsT =0

End If

Loop
end function

Noch was: Ist meine Windmessungsmetode so ok?

Gruss
Ron

Tappi
12.12.2006, 17:18
Hallo,

der Syntax einer DO ... LOOP Schleife sieht so aus:


DO
' Hier der Programmcode, der immer wieder ausgeführt werden soll
LOOP [UNTIL expression]

Ohne die optionale eckige Klammer wird aus der DO ... LOOP Schleife eine Endlosschleife. Mit UNTIL expression legt man eine Bedigung fest, bis zu der die Schleife durchlaufen werden soll. Ist die Bedigung erfüllt, wird die Schleife verlassen. Dabei steht die Bedigung in expression.

Schau einfach mal auf die BASIC++ 2006 Seite, inbs. in die Referenz. Außerdem solltest Du Dir vielleicht Standard BASIC mal anschauen (also einfach nach einen guten Tutorial in Internet suchen und ein paar Trockenübungen am PC machen).

ctct
13.12.2006, 07:55
Besten Dank!

Habs glaub kappiert. Bitte beachte die Windmessungsmetode.
Also so:

'//////////////////////////////////////
'//
'// Basic++
'// Destination C-Control I M2.0
'// Beschreibung:
'//
'//////////////////////////////////////

OPTION CC2.0 'Zielplattform
'************************************************* *********
' C-Control Station
'
' Springbrunnen Regelung
'
' Di Haupt-Pumpe (Hp) läuft grunsätzlich immer, ausser wenn
' es nicht genug Wasser im Brunnen hat.
'
' Der Wasserspiegel wird konstant via Drucksensor (Ds) gemes-
' sen und bei bedarf nach gefüllt via Magnetventil (Mv) oder
' abgepumpt via kleine Pumpe (Kp).
'
' Der Wasserstrahl ist über den Wasserspiegel kontrolliert.
' Je höher der Wasserspiegel, desto tiefer der Stahl. Je
' tiefer der Wasserspiegel desto höher der Strahl.
'
' Der Anenometer [Windmesser] (Am) bewirkt eine Reduzierung
' des Wasserstrahls bei Wind. Eine Durchschnittsmessung
' (Schwellwert) von 1 Minute ist für ein ruhiges verhalten.
'
' Es sind 3 Betriebsarten einstellbar.
'
' Automatisch (F1):
' Hiermit wird der Stahl immer auf das Maximum gebracht.
'
' Halbautomatisch (F2):
' Hiermit kann man eine selbst definierte Höhe des Wasser-
' stahls festlegen der aber bei Wind via Windmessung reduziert
' wird.
'
' Manuel (F3):
' Hiermit kann man eine selbst definierte Höhe des Wasser-
' stahls festlegen der ohne Windmessung immer gleich bleibt.
'
' Die Betriebsart wird via F1, F2 und F3 bestimmt.
'
' Auf dem Display ist immer die Aktuelle Wasserstrahlhöhe
' zu sehen.
'************************************************* *********

'----------------------------------------------------------
' --- Definitionen ---
'----------------------------------------------------------

' die Relais
define Hp port[7]
define Mv port[8]
define Kp port[9]

' der Drucksensor
define Ds port[1]

' der Anenometer
define Am ad[5]

' die Folien-Funktionstasten
define F1 port[9]
define F2 port[10]
define F3 port[11]
define FTaste byte

' eine Variable zur Speicherung der Windgeschwindigkeit
define Wgs byte
define WgsT byte
define WgsZyk byte

' Variablen zur Speicherung der Wasserstrahlhöhe
define Strahlhöhe byte
define StrahlhöheAktuell byte

' Konstanten

'----------------------------------------------------------
' --- Setup ---
'----------------------------------------------------------

' Initialisierung
Hp = OFF
Mv = OFF
Kp = OFF

do
' Tastenabfrage
if F1 = OFF or F2 = OFF or F3 = OFF then Auswahl()
loop

' Betriebsarte auswählen
Function Auswahl()
Hp = OFF
Print "Springbrunnen - "
Print "Betriebsart Wahl"
wait F1 or F2 or F3
if F1 = ON then Automatisch()
if F2 = ON then Halbautomatisch()
if F3 = ON then Manuel()
end function

' Event Zähler Setup für Windmessung
Function Setevent()
CONFIG.INIT
CONFIG.PUT 00000110b
CONFIG.OFF
End Function

'----------------------------------------------------------
' --- Schleifen der einzelnen Betriebsarten ---
'----------------------------------------------------------

' Endlosschleife für Automatisch
Function Automatisch()
Lcd.Print "Automatikbetrieb"
pause 25
Lcd.Clear
Do
' Das Programm:


Loop until F1 = OFF
end function


' Endlosschleife für Halbautomatisch
Function Halbautomatisch()
Lcd.Print "Halbautomatik-"
Lcd.Print "betrieb"
pause 25
Lcd.Clear
Do
' Das Programm:

loop until F2 = OFF
end function


' Endlosschleife für Manuel
Function Manuel()
Lcd.Print "Manuelbetrieb"
pause 25
Lcd.Clear
Do
' Das Programm:

Loop until F3 = OFF
end function


' Windmessung (Durchschnitt von eine Minute)
Function Windmessung()

' Initialisierung
WgsT = ""
Setevent()

Do

If TIMER>=500 Then 'alle 10s gemessen
WgsT = Am + WgsT
WgsZyk = WgsZyk + 1 ' Zykeln Zählen
TIMER=0 ' Timer reset
End If

' Zykel reseten wenn nötig (6 Zykeln pro minute)
If WgsZyk = 6 then
Wgs = WgsT / 6
WgsT =0

End If

Loop
end function

MFG
Ron

ctct
13.12.2006, 11:13
Hallo.
Kann ich mit dem C-Contol Unit 2.0, drei Tasks (Funktionen) gleichzeitig laufen lassen? Da ich die Aktuelle Wind sowie Wasserdruck Schwellwert brauche.

Gruss
Ron

Dierk
13.12.2006, 14:07
Nein, das geht nicht. Die C-Control I unterstützt kein Multitasking.

Du solltest eine große Hauptprogrammschleife haben in der einzelnen Funktionen hintereinander abgeklappert werden. Dafür darf halt keine Endloschleife in den Funktionen sein.

also schematisch soetwas

#Mainloop

MessungWind()
AuswertungWind()
messungWasserdruck()
AuswertungWasserdruck()
AusgabeDisplay()

goto Mainloop

ctct
15.12.2006, 07:01
...alles Klar. Danke!

Noch eine Frage, mit der BITTE um eure Hilfe:

Der Wasserstrahlhöhe meiner Brunnen wir via Wasserstand über Drucksensor gemessen z.B. 20mV = 3m Strahl und 22 mV = 2m Strahl (je höher der Wasserstand desto tiefer der Strahl [und anders rum]).
Ich hab einen Drucksensor der von 0mV bei 0bar bis 25mV bei 0.1bar variiert. Wie kann ich am besten die Werte als Meter im Bereich von 18mV und 24 mV errechnen?

z.B.: 18.2mV = 5m
(...je nach mV wir die Strahlhöhe angezeigt...)
24.0mV = 0.5m

Ich hab mal gedacht mit einem Case, aber der wäre ewig lang und langsam. Gibt’s eine einfache Rechnung oder Funktion hierfür? Ich werde fast wahnsinnig!


Freue mich auf eine Antwort.

Gruss
Ron

matlxxx
15.12.2006, 16:48
Hallo!

1000cm = 1bar
1cm = 1mbar

25mV=1mbar

1/25=0,04mbar/mV

1mV=0,04mbar

0,04*1cm=0,04cm

1mV=0,04cm

Ich hoffe ich hab mich nicht verrechnet
gruß martin

Dierk
16.12.2006, 08:51
Hast Du Dir mal Gedanken gemacht, wie Du den Sensor anschließen willst?
Die AD- Eingänge der Unit M2.00 / Station2 haben eine Auflösung von 8 Bit, was einem Spannungswert von 19,6 mV pro Digit entspricht.
Wie willst Du dann 1mV oder auch 10mV messen?

Tappi
16.12.2006, 11:33
Das ginge nur, in dem er den Bereich, wo er misst einschränkt, ein Offset entfernt (bei einem Wechselsignal z.B. durch einen Aktiven Hochpass) und das Signal entsprechend mit einem OP verstärkt (da benötigt man schon einen Präzisions-OP).

ctct
17.12.2006, 17:20
Hallo!
Ich hab diesen Sensor gekauft http://www.conrad.ch/goto.php?artikel=185523

Denn kann ich ja an einem Digitalport anschliessen oder?

Gruss
Ron

matlxxx
17.12.2006, 19:37
Hi!
wenn, dann an einen Analogport!
der digitalport kennt nur 0V oder 5V!

dieser Sensor hat eine Ausgangsspannung von max 25mV==> 0,025V

Dein Analogport hat einen Messbereich von 0-5V. Der wert den dir deine c-control ausgibt geht von 0-255. wenn du zb. eine spannung von 2.5V an den Analogport hängst, dann gibt dir deine c-control den wert 128 zurück.

wenn dein sensor die 0,025V, bei max. druck, ausgibt dann wird die c-control wahrscheinlich eine 1 ausgeben. Wenn die spannung unter 0,019 V fällt dann wird sie 0 ausgeben
und mehr Werte wirst du mit diesem sensor ohne zusätzliche spannungsverstärkung nicht angezeigt bekommen!

[edit]
Warum nimmst du nicht diesen?
Conrad Best-Nr
183890 - 62

Gruß Martin

ctct
17.12.2006, 20:27
Hallo!

Gibt es sowas in Conrad? oder sonst wo? Ich finde gerade nichts.

Gruss
Ron

Edit: Sry hab dein edit nicht gesehen.
Mach ich gleich, sende den anderen dann wieder zurück.

ctct
19.12.2006, 06:45
Hallo!
Wie mess ich Impulse von meine Anemometer? kann ich dass auf einem Digital Port?

Gruss
Ron

Dierk
19.12.2006, 09:18
Du kannst dafür den Freq1- oder Freq2-Port als Ereigniszähler verwenden. Schau Dir mal das Beispiel an:
http://www.csslabs.de/ccontrol/lib/bpp/Demo_Unit_M2.0_M1.2/EXTENDED_FUNCTIONS_M2.0_M1.2/CONFIG_OBJECT/CONFIG1/EREIGNISZ%C4HLER_1.htm

ctct
21.12.2006, 11:25
Wie würdest du es messen?

Die Zeit zwischen den frequenzen auswerten oder die frequnezen innert einer minute zusammen zählen?

Ich muss die Windgeschwindigkeit herausholen.

Gruss
Ron

Dierk
21.12.2006, 11:37
Ich würde jede Minute(oder anderer Zeitraum) schauen wieviele Pulse gekommen sind und dann die Freq-Variable auf 0 setzen.

ctct
24.02.2007, 11:09
Hallo

Wie kann ich den Drucksensor (Conrad http://www.conrad.ch/goto.php?artikel=183890 ) an einen Digitalport anhängen? Habs probiert aber es zeigt nur 0 an. Der Analog port funzt ohne probleme aber die aufösung ist mir zu grob (0...255).

Was schlägt Ihr vor?

Gruss

Ron

matlxxx
25.02.2007, 22:54
Hi!
wenn, dann an einen Analogport!
der digitalport kennt nur 0V oder 5V!


Wie schon gesagt nur null oder eins!

wenn dir die auflösung zu klein is, musst du das ausgangssignal des sensors aufteilen. den häufigsten teil( zb 50-70 kp) herausfiltern und mit op verstärken und dann wieder zum analogport, oder so ähnlich...

was hast denn jetzt schon alles realisiert? erzähl mal ein bisschen...

gruß martin