Forum: PC-Programmierung Probleme beim Erweitern VB5-Programm


von Matthias W. (matt007)


Lesenswert?

beim Velleman PCGU1000-Generator ist ein VB6-Beispiel dabei mit dem 
gezeigt wird wie der Generator über FGULINK.dll programmiert werden 
kann. Das funktioniert auch. Eine neuere FGULINK.dll mit 44kB erlaubt 
auch das Einstellen des Tastverhältnisses. Für den Test habe ich im 
Beispielcode im Form 2 Buttons hinzugefügt und im Code Private Sub 
Command7_Click und Private Sub Command8_Click ergänzt wo das DutyCycle 
dann gesetzt wird.
1
Private Sub Command7_Click() ' rectangle 1600Hz 7.5Vss 2Voffset, DutyCycle 90%
2
    SetGen 2, 1600, 7.5, 2   ' Generator einstellen: Rechteck, 1600Hz, 7.5Vss, 2V Offset
3
    SetDutyCycle 90          ' Tastverhaeltnis 90%
4
    StartGen                 ' Generator starten: Relais ein
5
End Sub
6
7
Private Sub Command8_Click() ' rectangle 1700Hz 8.5Vss 2Voffset, DutyCycle 10%
8
    SetGen 2, 1700, 8.5, 1   ' Generator einstellen: Rechteck, 1700Hz, 8.5Vss, 1V Offset
9
    SetDutyCycle 10          ' Tastverhaeltnis 10%
10
    StartGen                 ' Generator starten: Relais ein
11
End Sub

leider kommt beim Aufruf "Fehler beim Kompilieren: Sub oder Function 
nicht definiert".

Weiß jemand wie ich das loswerde?

Gruss
Matthias

: Verschoben durch Moderator
von Peter D. (fenstergucker)


Lesenswert?

Hast du die neue Funktion 'SetDutyCycle' von der DLL auch mit 'Declare 
...' in deinem Code eingebunden?

von Matthias W. (matt007)


Lesenswert?

Peter D. schrieb:
> Hast du die neue Funktion 'SetDutyCycle' von der DLL auch mit 'Declare
> ...' in deinem Code eingebunden?

Danke Peter für den Hinweis !
oben habe ich die Zeile eingefügt:
1
Private Declare Sub SetDutyCycle Lib (FGULink.dll) (Byval duty As Integer)

das sieht so ähnlich aus wie die anderen Zeilen darum.

von MaWin (Gast)


Lesenswert?

Das ist ein fertiges Projekt?

von Matthias W. (matt007)


Lesenswert?

MaWin schrieb:
> Das ist ein fertiges Projekt?

das Beispiel für VB6 war im Netz zu finden, incl. exe. Das exe läuft 
einwandfrei - halt ohne diese DutyCycle-Erweiterung.

ich habe nur ein paar Zeilen im Projekt addiert - und schon gibt es 
leider unerwarteten Stress.

wenn Du das testen willst sag Bescheid. Dann stell ich die Dateien zur 
Verfügung. Das ist Code von Velleman.

von Peter M. (r2d3)


Lesenswert?

Ist der Fehler mit der Umsetzung des Hinweises von Peter D. jetzt 
behoben?

von Matthias W. (matt007)


Lesenswert?

Peter M. schrieb:
> Ist der Fehler mit der Umsetzung des Hinweises von Peter D. jetzt
> behoben?

leider nein Peter. Diese Zeile hatte ich ja schon drin. Der Fehler 
kam/kommt trotzdem.

von Peter D. (fenstergucker)


Lesenswert?

Matthias W. schrieb:
>
1
> Private Declare Sub SetDutyCycle Lib (FGULink.dll) (Byval duty As 
2
> Integer)
3
>

Das ist falsch: (FGULink.dll)
Der Name der DLL gehört in Anführungszeichen.

von Matthias W. (matt007)


Lesenswert?

Peter D. schrieb:
> Der Name der DLL gehört in Anführungszeichen.

Ja Peter. Sorry - hatte ich vom Quelltext auf dem anderen Rechner falsch 
abgeschrieben. Daran liegt es also nicht.

von Matthias W. (matt007)


Lesenswert?

hier ist das VB-Programm zu finden:
https://www.velleman.eu/downloads/files/downloads/pcgu1000_sdk_rev5.zip
"Development kit. DLL for making your own software using our PCGU1000 
generator"

die neuere DLL mit 44kB, die bei dem Delphi-Beispiel dabei war hat das 
DutyCycle dabei: FGULINK_v5.0_Demo_Delphi.zip

von Sebastian S. (amateur)


Lesenswert?

Das sieht stark nach Salami aus: Scheibchen für Scheibchen.

Unvollständiger Code: Geht euch nichts an; Braucht Ihr nicht.
Fehlerhafte Sequenzen: "Das habe ich so nicht verwendet!"

Viel spaß noch!

von Peter M. (r2d3)


Lesenswert?

Hallo Matthias W.,

bitte den Fehler eingrenzen!
Bau' Deine neuen Prozeduren Stück für Stück auf.
Kommentiere alle Deine externen Funktionsaufrufe aus.
Guck' mal ob die Command_Clicks laufen an sich isoliert laufen.

Bitte debuggen, oder

Msgbox "Hallo"

einbauen.

Beachte den Gültigkeitsbereich von VBA-Variablen.
Liegen die Command_Click-aufrufen auch im VBA-Editor unter dem 
aufrufenden Tabellenblatt oder irgendwo sonst in einem Modul oder unter 
einem falschen Blatt?

Sebastian S. schrieb:
> Das sieht stark nach Salami aus: Scheibchen für Scheibchen.
>
> Unvollständiger Code: Geht euch nichts an; Braucht Ihr nicht.
> Fehlerhafte Sequenzen: "Das habe ich so nicht verwendet!"
>
> Viel spaß noch!

Der Sebastian S. hat mit seiner Kritik schon Recht...

von Peter D. (fenstergucker)


Lesenswert?

Also das VB-Beispiel in dem Archiv "pcgu1000_sdk_rev5.zip" kann ich ohne 
Fehler in VB5 ausführen. Bei der Schaltfläche 'Turn On Generator' 
erscheint das "Function Generator"-Fenster.
Wenn ich zwei Schaltflächen mit deinen Code-Schnippseln erstelle, und 
die Declare-Anweisung einfüge, funktioniert es ebenfalls.
Da ich weder dieses Gerät, noch deine weiteren Änderungen im Code habe, 
kann ich nichts weiter tun.

Das Archiv "FGULINK_v5.0_Demo_Delphi.zip" finde ich nicht.

: Bearbeitet durch User
von Schlaumaier (Gast)


Lesenswert?

Ich würde mal sagen. EINE IST ZU WENIG.

Aus den Beispielcode.

Private Declare Sub SetGen Lib "FGULink.dll " (ByVal func As Long, ByVal 
freq As Single, ByVal ampl As Single, ByVal offset As Single)
Private Declare Sub SetSweep Lib "FGULink.dll " (ByVal freq1 As Single, 
ByVal freq2 As Single, ByVal ampl As Single, ByVal offset As Single, 
ByVal time As Single, ByVal Form As Long)
Private Declare Sub SetLibWave Lib "FGULink.dll " (ByVal freq As Single, 
ByVal ampl As Single, ByVal offset As Single, ByVal filter As Long, 
ByVal Pointer As String)

Private Declare Sub StartGen Lib "FGULink.dll " ()
Private Declare Sub StopGen Lib "FGULink.dll " ()
Private Declare Sub OpenGen Lib "FGULink.dll " ()
Private Declare Sub CloseGen Lib "FGULink.dll " ()
Private Declare Function GenReady Lib "FGULink.dll " () As Boolean
Private Declare Function GenStatus Lib "FGULink.dll " () As Long
Private Declare Sub ShowGen Lib "FGULink.dll " (ByVal status As Boolean)
Private Declare Sub AttOn Lib "FGULink.dll " (ByVal att As Boolean)
Private Declare Sub LogSweep Lib "FGULink.dll " (ByVal log As Boolean)


DAS kopierst du SO aus den Beispielcode.  Und zwar entweder in die 
GLOBAL.BAS (normale Textdatei die unter diesen Namen ins Projekte 
eingebunden wird)  oder in JEDE Form die du aufrufst. !!!

Dann sollte es funktionieren.

Die GLOBAL.BAS geht in jeder VB-Version. Alles war darin deklariert 
wird, gilt für das ganze Projekt. Also auch Variablen die man mit DIM 
deklariert.

Wichtiger Hinweis. In der GLOBAL.BAS muss "Private" mit "Public" 
erstetzt werden.

von Schlaumaier (Gast)


Lesenswert?

Nachtrag :
Das ist alter VB 6.0 Code. in VB-2010 macht man das anders.

Da linkt mit in den Projekt-Eigenschaften via klicki die DLL dazu. Im 
Code schreibt man nur noch in die 1 Zeile #imports FGULink" Und ruft die 
Funktionen der Lib mit FGULink.StartGen  auf.

von Peter D. (fenstergucker)


Lesenswert?

Es wird nur ein Tippfehler im Code sein, oder unabsichtlich ein Zeichen 
gelöscht oder so. Darauf deutet zumindest die Fehlermeldung hin. 
Normalerweise wird sogar die fehlende Sub oder Function im Code 
markiert, wenn man mit Strg+F5 startet.

von Schlaumaier (Gast)


Lesenswert?

Peter D. schrieb:
> Es wird nur ein Tippfehler im Code sein, oder unabsichtlich ein Zeichen
> gelöscht oder so. Darauf deutet zumindest die Fehlermeldung hin.

Die Fehlermeldung sagt "Sub o. Funktion nicht gefunden."  Die Lösung 
ist, mein kopierten Code KOMPLETT !!!! in sein Projekt rein zu kopieren.

Die DLL ist so gecodet das sie alles einzeln macht. Ergo muss man auch 
alles einzeln deklarieren = viele viele Declare-Befehle. ;)

Und dann läuft das Teil. ;)

von Peter M. (r2d3)


Lesenswert?

Hallo Peter D.,

Peter D. schrieb:
> Es wird nur ein Tippfehler im Code sein, oder unabsichtlich ein Zeichen
> gelöscht oder so. Darauf deutet zumindest die Fehlermeldung hin.
> Normalerweise wird sogar die fehlende Sub oder Function im Code
> markiert, wenn man mit Strg+F5 startet.

bitte meinen Beitrag oben ignorieren - der zweite Teil bezüglich VBA hat 
das Thema vollkommen verfehlt, es geht ja nicht um Excel sondern um 
"stand alone VBA".

Danke!

von Schlaumaier (Gast)


Lesenswert?

Peter M. schrieb:
> sondern um
> "stand alone VBA".

Nö- um Visual-Basic 6.0 .  Was meiner bescheidenen Meinung nach eh schon 
Steinzeit ist. Ich würde das Beispiel in VB-2010 oder höher umarbeiten.

von Peter M. (r2d3)


Lesenswert?

Bei mir ist heute der Wurm drin.

"stand-alone VBA" ist missverständlich.
Es geht um VB.

Danke für Eure Nachsicht.

von Matthias W. (matt007)


Lesenswert?

Sebastian S. schrieb:
> Das sieht stark nach Salami aus: Scheibchen für Scheibchen.

sag halt einfach Deinen Wunsch Sebastian. So ein Gelöhle bringt hier 
niemand weiter. Das kannst Du Dir echt sparen !

wenn Du Code willst - so lad ihn einfach runter. Die Links sind ja da. 
Baue dann selbst die Zeilen ein und schau ob und warum es klemmt !

wenn Du willst schick ich Dir auch den Code den ich hier habe. Nur 
leider weiß ich nicht wo VB das abgelegt hat. In den Dateien die ich 
geöffnet habe fand ich den Code schlicht nicht.

von Matthias W. (matt007)


Lesenswert?

Peter M. schrieb:
> bitte den Fehler eingrenzen!

eingrenzen? bei den 5 Zeilen die hinzukamen?
man kann noch mal 2 Zeilen rausnehmen. Dann macht der Aufruf gar nichts 
mehr.

> Bau' Deine neuen Prozeduren Stück für Stück auf.

genau das hat der Autor des VB-Programms doch getan !
ich habe nur einen Minimalumfang dazu ergänzt. Mehr nicht.

von Matthias W. (matt007)


Lesenswert?

Peter D. schrieb:
> Das Archiv "FGULINK_v5.0_Demo_Delphi.zip" finde ich nicht.

soll ich ein zip packen mit dem ganzen Ordner? hier posten wollte ich 
das nicht alles.

von Matthias W. (matt007)


Lesenswert?

Peter D. schrieb:
> Wenn ich zwei Schaltflächen mit deinen Code-Schnippseln erstelle, und
> die Declare-Anweisung einfüge, funktioniert es ebenfalls.

ja. Das war bei mir auch so. Das Problem kam als ich für diese beiden 
Schaltflächen dann die "Private Sub Command7_Click()" und "Private Sub 
Command8_Click()" hinzufügte. Wenn ich diese beiden Teile auskommentiere 
kommt kein Fehler - aber es wird dann eben auch nichts aufgerufen.

So ein Hexenwerk kann das doch nicht sein.

von Matthias W. (matt007)


Lesenswert?

Schlaumaier schrieb:
> Ergo muss man auch
> alles einzeln deklarieren = viele viele Declare-Befehle. ;)
> Und dann läuft das Teil. ;)

das Beispiel von Velleman lief/läuft ja auch !
hinzu kam nur die Zeile mit dem DutyCycle, die andere neuere DLL 
deswegen und die Zeilen wo dieser DutyCycle dann aufgerufen wird.

das ist alles sehr einfach und es gibt doch kaum Möglichkeiten dabei 
viel falsch zu machen. Daher ist mir auch diese Fehlermeldung so unklar.

von Matthias W. (matt007)


Lesenswert?

Schlaumaier schrieb:
> Ich würde das Beispiel in VB-2010 oder höher umarbeiten.

In PureBasic funktioniert das nun - das ist aber eine ganz andere Art 
der Programmierung dort.

von Matthias W. (matt007)


Lesenswert?

Peter D. schrieb:
> Normalerweise wird sogar die fehlende Sub oder Function im Code
> markiert, wenn man mit Strg+F5 startet.

es wird die erste dieser Subs rot markiert. Und dazu erscheint die 
Fehlermeldung. Da fehlt keine Sub. Die hatte ich ja von Hand 
dazugeschrieben.

von Matthias W. (matt007)


Lesenswert?

Peter D. schrieb:
> Es wird nur ein Tippfehler im Code sein

wenn es so wäre sollte das doch zu finden sein?

ich hatte sogar diese Sub mal mit dem internen Generator von VB 
erstellen lassen. Mir wurde nicht klar was der anders macht als ich per 
Hand.

von Peter D. (fenstergucker)


Lesenswert?

Poste die Datei 'FGLink_demo.frm' die du geändert hast, die ist klein 
und sollte genügen um den Fehler zu finden.

von Schlaumaier (Gast)


Lesenswert?

https://forum.vellemanprojects.eu/t/pcsgu250-matlab-set-duty-cycle/12487

Ist zwar das kleiner Teil, aber ich denke das Teil kann das nicht.

In den Link zu der Lib ist auch in der Dokumentation der Befehl 
SetDutyCycle nicht dokumentiert.  Ergo ist klar wieso VB den an 
meckert.

Für VB ist der Aufruf eine Sub bzw. Funktion.

von Peter D. (fenstergucker)


Lesenswert?

Schlaumaier schrieb:
> In den Link zu der Lib ist auch in der Dokumentation der Befehl
> SetDutyCycle nicht dokumentiert.  Ergo ist klar wieso VB den an
> meckert.
>
> Für VB ist der Aufruf eine Sub bzw. Funktion.

Nein, das stimmt nicht. Du kannst in VB5/6 DLL-Aufrufe deklarieren, die 
in der DLL nicht vorhanden sind. Es gibt erst zur Laufzeit, beim Aufruf 
der Prozedur einen Fehler mit "DLL-Einsprungspunkt XYZ nicht gefunden."

von Matthias W. (matt007)


Angehängte Dateien:

Lesenswert?

Peter D. schrieb:
> Poste die Datei 'FGLink_demo.frm' die du geändert hast, die ist klein
> und sollte genügen um den Fehler zu finden.

hier anbei.

ich kann auch den Code abfotografieren - wenn das hilft.

von Peter D. (fenstergucker)


Lesenswert?

Matthias W. schrieb:
> hier anbei.
>
> ich kann auch den Code abfotografieren - wenn das hilft.

Wie gesagt ein Tippfehler. Deine Deklaration von 'SetDutyCycle' ist 
falsch, da fehlt ein c. Und darum gibt es in der Sub für den Button 
einen Fehler.

: Bearbeitet durch User
von Matthias W. (matt007)


Angehängte Dateien:

Lesenswert?

Schlaumaier schrieb:
> ist auch in der Dokumentation der Befehl
> SetDutyCycle nicht dokumentiert.

2010 gab es "SetDutyCycle" noch nicht. In der Doku von 2012 bei Delphi 
wurde das erwähnt. Siehe das pdf.

von Matthias W. (matt007)


Lesenswert?

Peter D. schrieb:
> Wie gesagt ein Tippfehler. Deine Deklaration von 'SetDutyCycle' ist
> falsch, da fehlt ein c.

Vielen Dank Peter ! Das hatte ich x-male angeschaut und nie ist mir das 
aufgefallen. So funktioniert es nun.

Danke an alle die mitgeholfen haben das zu lösen !!!
Einen schönen Restsonntag noch.

von Schlaumaier (Gast)


Lesenswert?

Schön das es nun läuft. Aber tröste dich. Ich habe zu c=64 Zeiten mal 4 
Tage den Code abgesucht, und das Resulat war ein Komma zu viel in den 
ca. 1000 Data-Zeilen. ;)

von Matthias W. (matt007)


Lesenswert?

Schlaumaier schrieb:
> und das Resulat war ein Komma zu viel in den
> ca. 1000 Data-Zeilen. ;)

ok. Das kann ich nachvollziehen !
Bei Dir waren es wenigstens so viele Zeilen.

Bei mir sah ich den Fehler nicht mal in den wenigen Zeilen, vor allem 
wohl weil ich ihn eher da vermutete wo das Programm mit der roten 
Fehlermeldung hinwies.

Da kann man sehen wie man fehlgesteuert wird und am Ende das Problem 
einfach übersieht.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.