Visual Basic Forum

Visual Basic Forum
für VB6 und VB.NET Programmierer
 
RegistrierenRegistrieren  LoginLogin
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB6] Fragen - Antworten
Autor
Nachricht
*sandymaus*
Newbie
Newbie

Anmeldedatum: 25.10.2011
Beiträge: 13

Verzögerung variabel
Verfasst am: 25.10.2011, 12:49

Hey!

ich beschäftige mich seit ein paar Taagen mit VB6, da ich als praktikantin in einem unternehmen ein Ansteuerprogramm schreiben soll. das klappt auch soweit ganz gut, man findet wirklich auf fast jede Frage eine Antwort im Internet Smile

Eine kleine Frage habe ich dennoch, auf die ich leider keine Antwort gefunden habe (weiteres Problem beim suchen: bei vielen Seiten wird vom Unternehmen der Zugriff verweigert)

Über eine form frage ich den Benutzer nach verschiedenen Werten für Spannung, Strom und Zeit.
(Spannung(i), Strom(i), Zeit(i), i ist 0 bis 9)
das gerät soll spannung(i) und strom(i) für die zeit(i) ausgeben. (wird für messungen benötigt)
über eine schleife werden dann diese werte an das anzusteuernde gerät weitergegeben. das klappt auch super:) allerdings weiß ich nicht wie ich das mit der Zeit hinbekommen soll!
Habs so versucht:

im code der Form beim start-button:
...
For k = 1 To Wiederholen 'teilweise wird die schleife auch wiederholt
For i = 0 To l 'l ist die anzahl der eingegebenen werte
RS232.Output = "USET " & Spannung(i) & Chr(13) 'weitergabe der spannung an gerät
RS232.Output = "ISET " & Strom(i) & Chr(13) 'weitergabe des stroms an gerät
RS232.Output = "OUTPUT ON" & Chr(13) 'ausgabe des geräts aktivieren
Call Verzoegerung(Zeit(i)) 'für gewisse zeit warten
Next
Next

im Variablen-Modul: (damit die variablen übersichtlich bleiben)
Public VDauer As Currency
Public VStart As Currency
Public VZeit As Currency

im Modul:
Public Sub Verzoegerung()

DoEvents
VStart = Timer
Do
VZeit = Timer - VStart
Loop Until VZeit >= VDauer

End Sub


beim befehl: Call Verzoegerung(Zeit(i)) mag er wohl die variable nicht!
es kommt die fehlermeldung: Ungültige Eigenschaft (oder so ähnlich)

vllt weiß einer von euch was ich hier falsch mache? oder wie ich das mit der Zeit anders lösen kann?

vielen dank für alle antworten!!
 
christopher.g
Überflieger
Überflieger

Anmeldedatum: 03.05.2008
Beiträge: 565


Verfasst am: 25.10.2011, 13:02

versuch mal
http://www.vbarchiv.net/tipps/details.php?id=528



' *********************************************************
' *
' * Modul Delay
' *
' *********************************************************
Option Explicit

' API Declaration
Public Declare Function GetTickCount Lib "kernel32" () As Long


Public Sub Delay(nSekunden As Long)
Dim TimeOut As Long

' Abbruchbedingung für die Do Loop Schleife ermitteln
TimeOut = (GetTickCount / 1000) + nSekunden

Do
' Systemevents zulassen
DoEvents

' TimeOut erreicht?
Loop Until TimeOut < (GetTickCount / 1000)
End Sub
Aufruf:

' 5 Sekunden warten
Delay 5



ähnlich deinem code
lg
 
*sandymaus*
Newbie
Newbie

Anmeldedatum: 25.10.2011
Beiträge: 13


Verfasst am: 25.10.2011, 13:15

okay danke ich versuchs gleich mal Smile

und statt "delay 5" schreib ich dann einfach "delay zeit(i)"?

okay wenn ich das mache kommt: argumenttyp by ref unverträglich (oder so ähnlich).
 
*sandymaus*
Newbie
Newbie

Anmeldedatum: 25.10.2011
Beiträge: 13


Verfasst am: 26.10.2011, 07:25

okay also mittlerweile hab ich verstanden, dass die 5 für die nsekunden steht Smile
wenn ich jetzt allerdings versuche für die nsekunden meine zeit(i) einzugeben, funktioniert das nicht.

weiß vllt noch irgendwer eine lösung für mein problem?
 
*sandymaus*
Newbie
Newbie

Anmeldedatum: 25.10.2011
Beiträge: 13


Verfasst am: 26.10.2011, 12:50

also falls sich jemand dafür interessiert: ich habs geschafft ihn auszutricksen Wink
hier der code:

Public Declare Function GetTickCount Lib "kernel32" () As Long
Public x As Long
Public zeit() As Currency

Public Sub Delay(nsekunden As Long)
Dim TimeOut As Long
TimeOut = (GetTickCount / 1000) + nsekunden
Do
DoEvents
Loop Until TimeOut < (GetTickCount / 1000)
End Sub

x = zeit(i)
Call Delay(x)

vb6 hat wohl nur die index-variable nicht gemocht, wenn ich aber vorher in der schleife die zeit in x übernehme funktionierts Smile
 
*sandymaus*
Newbie
Newbie

Anmeldedatum: 25.10.2011
Beiträge: 13


Verfasst am: 27.10.2011, 13:51

hey !
ich hätte eine weitere frage...

also das mit der verzögerung klappt jetzt wunderbar und wenn ich auf den stop button auf der form klicke, dann stoppt auch die übertragung. jetzt möchte ich allerdings, dass sich beim start der übertragung eine andere form öffnet, auf der die aktuellen strom und spannungswerte angezeigt werden (damit man nicht immer auf das gerät schauen muss, sondern das ganz bequem am bildschirm ablesen kann).
auf diese neue form habe ich nun meinen stop button gelegt mit dem gleichen code wie der stop button auf der alten form. wenn ich dort alelrdings auf stop drücke, tut sich überhaupt nichts. liegt das daran, dass das doevents sich auf die andere form bezieht und nicht auf die aktuelle? kann ich das irgnedwie umgehen?

vielen dank für alle antworten!
 
*sandymaus*
Newbie
Newbie

Anmeldedatum: 25.10.2011
Beiträge: 13


Verfasst am: 27.10.2011, 14:07

hmm der button selbst funktioniert. es liegt daran, dass ich in jede form ein mscomm eingefügt habe und vb6 ja nicht weiß dass damit dieselbe schnittstelle gemeint ist. kann ich dem programm das irgendwie klar machen?
 
christopher.g
Überflieger
Überflieger

Anmeldedatum: 03.05.2008
Beiträge: 565


Verfasst am: 28.10.2011, 09:37

hi
was meinst du mit du möchtest stop drücken
was willst du denn unterbrechen?

die wartezeit? der delayfunktion?
 
*sandymaus*
Newbie
Newbie

Anmeldedatum: 25.10.2011
Beiträge: 13


Verfasst am: 28.10.2011, 10:29

hey!
ich gebe vor der wartezeit an das angeschlossene gerät werte für spannung und strom weiter, die dieses dann ausführt solange die wartezeit eben ist. dieses ausführen muss aber auch abgebrochen werden können! wenn der stop button auf der gleichen form wie das mscomm(bei mir rs232) liegt funktioniert das wunderbar.
ich hätte aber gerne, dass während des ausführens des geräts eine neue form geöffnet wird, die die aktuellen werte angibt (damit man eben nicht aufs gerät schauen muss was da gerade passiert).
auf dieser neuen form habe ich auch ein mscomm mit namen rs232 erstellt.
wenn ich aber auf den stop button hier drücke passiert überhaupt nichts.
ich müsste vb irgendwie mitteilen können, dass ich mit den beiden rs232s dieselbe schnittstelle meine!
war die erklärung jetzt besser?
 
christopher.g
Überflieger
Überflieger

Anmeldedatum: 03.05.2008
Beiträge: 565


Verfasst am: 29.10.2011, 21:00

du hast auf der zweiten form deinen stop button


definiere eine variable als public und boolean


also
Public Abbruch as boolean



und an einem anderen teil des codes....

Loop Until TimeOut < (GetTickCount / 1000) or abbruch = true

code im commandbutton
abbruch = true


dann wird die schleife entweder nach der wartezeit beendet oder wenn abbruch gedrückt wurde

hoffe du konntest damit was anfangen
lg
 
*sandymaus*
Newbie
Newbie

Anmeldedatum: 25.10.2011
Beiträge: 13


Verfasst am: 31.10.2011, 08:31


vielen dank Smile
 
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB6] Fragen - Antworten

Tags: vb6, variable

 
 Verwandte Themen   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge [suche] Tuturials winsock & daten senden 984 09.06.2011, 13:19
Keine neuen Beiträge Wie kann ich mich bei euch anmelden?? 916 20.05.2002, 01:28
Keine neuen Beiträge [Video] *.dll & *.ocx Installer 2612 06.03.2008, 21:19
Keine neuen Beiträge Eine kleine Frage an euch.. 1023 30.09.2007, 09:57
Keine neuen Beiträge Listbox speichern & laden 2273 22.03.2007, 21:25
 


[ Time: 0.1229s ][ Queries: 110 (0.0599s) ][ GZIP on - Debug on ]