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%
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.
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.
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.
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.
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
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!
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...
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.
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.
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.
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.
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. ;)
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!
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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."
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.
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.
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.
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.
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. ;)
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.