Seite 3 von 3

Verfasst: 13.08.2006 17:36
von Falko
Und ich hab mich schon die ganze Zeit über das C und die 2 gewundert :mrgreen:

Verfasst: 15.08.2006 01:48
von Bura.Tino
Sorry das ich jetzt erst antworte. Hatte viel zu tun.

@msh
Jetzt funktioniert es. :)
Ich werde wohl eher Deinen Code nehmen. Da weiß ich wenigstens wie er funktioniert. :mrgreen:

Verfasst: 15.08.2006 22:15
von Falko
Bura.Tino hat geschrieben:Sorry das ich jetzt erst antworte. Hatte viel zu tun.

@msh
Jetzt funktioniert es. :)
Ich werde wohl eher Deinen Code nehmen. Da weiß ich wenigstens wie er funktioniert. :mrgreen:
Wieso? Funktioniert das nicht was du zuvor geschrieben hattest? Ist ja nicht
von mir, sondern von dem Linuxlink deiner Karte. Nur eben in PB angepasst :lol:

>>>Ich werd bekloppt ! Es funktioniert !!! *freu*
>>>Danke Falko !!!!!

>>>Jetzt muss ich nur noch verstehen warum es funktioniert und was der >>>Unterschied zwischen dem anderen ist !?

Und der Fehler, worauf msh hingewiesen hatte, kam nicht davon, das einer von uns diesen Abschnitt geschrieben hatte, sondern
das ich es Blind übernommen hatte und mir über das C als auch über den Wert 2, den du geschrieben hattest mir keine Gedanken gemacht hatte :lol:

Aber egal. Hauptsache Du hast es hinbekommen. Dann spiele ich mit meinen AD/DA und IO von Meilhaus, Labview und IVT mal weiter herum.

Übrigens gibt es noch ein interessantes Programm, welches Hardware verschiedener Hersteller visuell mit Schalter, Zeigerinsrumente etc.
anzeigen und ansteuern kann.

Mit der Expertversion, lässt sich sogar ein Kompilat erstellen, welches
man auf jeden PC weitergeben kann.

Falls Interesse besteht, es nennt sich ProfiLab-Expert und man kann
schon vorab die Demoversion testen.

www.abacom-online.de

Im neuen Forum kann man sogar wünsche ansprechen, wenn man z.B.
eine neue Hardware hat, und die nicht implementiert ist, so das man nicht
lange warten muss, bis man sein Modul nutzen kann :allright:


Gruß Falko

Verfasst: 01.12.2006 20:02
von onny
Hallo, ich beschäftige mich zurzeit mit K8055 (http://www.velleman.be/ot/de/product/view/?id=351346), das über USB gesteuert wird. Leider habe ich mich davor noch nie damit beschäftigt. Und die Beispiele auf der CD sind ausschlieslich für VB oder C++. Ich habe jetzt versucht mit einer Libary (open/loaddll) die DLL-Datei für das Ansteuern der Platine in PB zu laden. Soweit so gut... Jetzt hab ich keine Ahnung wie ich weiter mache, aus den PDF´s werd ich auch nicht schlau. Ich habe hier mal Anleitungen, Software und DLLs hochgeladen: http://rapidshare.com/files/5626921/k8055.rar
Es handelt sich hierbei um einen Bausatz von der Schule, und das aktuelle Projekt ist mir sehr wichtig. Ich hab mir auch schon überlegt ob ich mir VB-Testversion hole und damit die einzelnen Befehle compiliere und dann mit PB als Exe starten, dann habe ich aber hier dieses Topic gefunden und mir gedacht das es einfacher ginge und hoffe nun um Hilfe :wink:

Würde mich super freuen wenn man mir ein paar Tipps geben würde!
Danke!

Verfasst: 02.12.2006 02:56
von Falko
Hi onny,
du könntest ja einfach mit ts-soft sein Tool DLL2Lib eine Library für PB erstellen und daraus ein TailBite-Source für PB machen. Das mit Tailbite dann zu einer Library erstellen. Der Source sieht dann so aus, wo dann all die Funktionsaufrufe stehen. Im Manual steht eigendlich das wesentliche,
mit Welcher Funktion was gemacht wird. Den C-Source als auch den VB-Source braucht man eigentlich nicht, da all die Funktionen dann direkt in PB aufgerufen werden können. Leide kann ich das nicht austesten, aber den TailBite-source habe ich schon mal hier reingestellt. Natürlich kannst du die jeweiligen Varialblen der Funktionen, so anpassen, wie es im Handbuch steht.

Code: Alles auswählen

; Source generiert durch DLL2PBLib
; Copyright 2005 by Thomas Schulz (TS-Soft)


; Globale Variablen deklaration
Global ClearAllAnalog.l
Global ClearAllDigital.l
Global ClearAnalogChannel.l
Global ClearDigitalChannel.l
Global CloseDevice.l
Global OpenDevice.l
Global OutputAllAnalog.l
Global OutputAnalogChannel.l
Global ReadAllAnalog.l
Global ReadAllDigital.l
Global ReadAnalogChannel.l
Global ReadCounter.l
Global ReadDigitalChannel.l
Global ResetCounter.l
Global SearchDevices.l
Global SetAllAnalog.l
Global SetAllDigital.l
Global SetAnalogChannel.l
Global SetCounterDebounceTime.l
Global SetCurrentDevice.l
Global SetDigitalChannel.l
Global Version.l
Global WriteAllDigital.l

; Init-Funktion
ProcedureDLL K8055D_DLL_Init()
  Shared DLL.l
  DLL = LoadLibrary_("K8055D.DLL")
  If DLL
    ClearAllAnalog = GetProcAddress_(DLL, "ClearAllAnalog")
    ClearAllDigital = GetProcAddress_(DLL, "ClearAllDigital")
    ClearAnalogChannel = GetProcAddress_(DLL, "ClearAnalogChannel")
    ClearDigitalChannel = GetProcAddress_(DLL, "ClearDigitalChannel")
    CloseDevice = GetProcAddress_(DLL, "CloseDevice")
    OpenDevice = GetProcAddress_(DLL, "OpenDevice")
    OutputAllAnalog = GetProcAddress_(DLL, "OutputAllAnalog")
    OutputAnalogChannel = GetProcAddress_(DLL, "OutputAnalogChannel")
    ReadAllAnalog = GetProcAddress_(DLL, "ReadAllAnalog")
    ReadAllDigital = GetProcAddress_(DLL, "ReadAllDigital")
    ReadAnalogChannel = GetProcAddress_(DLL, "ReadAnalogChannel")
    ReadCounter = GetProcAddress_(DLL, "ReadCounter")
    ReadDigitalChannel = GetProcAddress_(DLL, "ReadDigitalChannel")
    ResetCounter = GetProcAddress_(DLL, "ResetCounter")
    SearchDevices = GetProcAddress_(DLL, "SearchDevices")
    SetAllAnalog = GetProcAddress_(DLL, "SetAllAnalog")
    SetAllDigital = GetProcAddress_(DLL, "SetAllDigital")
    SetAnalogChannel = GetProcAddress_(DLL, "SetAnalogChannel")
    SetCounterDebounceTime = GetProcAddress_(DLL, "SetCounterDebounceTime")
    SetCurrentDevice = GetProcAddress_(DLL, "SetCurrentDevice")
    SetDigitalChannel = GetProcAddress_(DLL, "SetDigitalChannel")
    Version = GetProcAddress_(DLL, "Version")
    WriteAllDigital = GetProcAddress_(DLL, "WriteAllDigital")
  EndIf
EndProcedure
; End-Funktion
ProcedureDLL K8055D_DLL_End()
  Shared DLL.l
  FreeLibrary_(DLL)
EndProcedure
; Allgemeine Funktionen
ProcedureDLL.l ClearAllAnalog()
  ProcedureReturn CallFunctionFast(ClearAllAnalog)
EndProcedure

ProcedureDLL.l ClearAllDigital()
  ProcedureReturn CallFunctionFast(ClearAllDigital)
EndProcedure

ProcedureDLL.l ClearAnalogChannel(a.l)
  ProcedureReturn CallFunctionFast(ClearAnalogChannel,a)
EndProcedure

ProcedureDLL.l ClearDigitalChannel(a.l)
  ProcedureReturn CallFunctionFast(ClearDigitalChannel,a)
EndProcedure

ProcedureDLL.l CloseDevice()
  ProcedureReturn CallFunctionFast(CloseDevice)
EndProcedure

ProcedureDLL.l OpenDevice(a.l)
  ProcedureReturn CallFunctionFast(OpenDevice,a)
EndProcedure

ProcedureDLL.l OutputAllAnalog(a.l,b.l)
  ProcedureReturn CallFunctionFast(OutputAllAnalog,a,b)
EndProcedure

ProcedureDLL.l OutputAnalogChannel(a.l,b.l)
  ProcedureReturn CallFunctionFast(OutputAnalogChannel,a,b)
EndProcedure

ProcedureDLL.l ReadAllAnalog(a.l,b.l)
  ProcedureReturn CallFunctionFast(ReadAllAnalog,a,b)
EndProcedure

ProcedureDLL.l ReadAllDigital()
  ProcedureReturn CallFunctionFast(ReadAllDigital)
EndProcedure

ProcedureDLL.l ReadAnalogChannel(a.l)
  ProcedureReturn CallFunctionFast(ReadAnalogChannel,a)
EndProcedure

ProcedureDLL.l ReadCounter(a.l)
  ProcedureReturn CallFunctionFast(ReadCounter,a)
EndProcedure

ProcedureDLL.l ReadDigitalChannel(a.l)
  ProcedureReturn CallFunctionFast(ReadDigitalChannel,a)
EndProcedure

ProcedureDLL.l ResetCounter(a.l)
  ProcedureReturn CallFunctionFast(ResetCounter,a)
EndProcedure

ProcedureDLL.l SearchDevices()
  ProcedureReturn CallFunctionFast(SearchDevices)
EndProcedure

ProcedureDLL.l SetAllAnalog()
  ProcedureReturn CallFunctionFast(SetAllAnalog)
EndProcedure

ProcedureDLL.l SetAllDigital()
  ProcedureReturn CallFunctionFast(SetAllDigital)
EndProcedure

ProcedureDLL.l SetAnalogChannel(a.l)
  ProcedureReturn CallFunctionFast(SetAnalogChannel,a)
EndProcedure

ProcedureDLL.l SetCounterDebounceTime(a.l,b.l)
  ProcedureReturn CallFunctionFast(SetCounterDebounceTime,a,b)
EndProcedure

ProcedureDLL.l SetCurrentDevice(a.l)
  ProcedureReturn CallFunctionFast(SetCurrentDevice,a)
EndProcedure

ProcedureDLL.l SetDigitalChannel(a.l)
  ProcedureReturn CallFunctionFast(SetDigitalChannel,a)
EndProcedure

ProcedureDLL.l Version()
  ProcedureReturn CallFunctionFast(Version)
EndProcedure

ProcedureDLL.l WriteAllDigital(a.l)
  ProcedureReturn CallFunctionFast(WriteAllDigital,a)
EndProcedure
Die DLL muss aber nachher dann entweder im gleichen Verzeichnis sein, wo dein Programm ist, oder noch einfacher direkt ins Systemverzeichnis kopiert werden. Ich hoffe, ich konnte dir ein klein wenig weiterhelfen. Alles
weitere wird sich wohl nach und nach hier im Thread weiter aufklären lassen können :allright:

Gruß ..Falko

Verfasst: 02.12.2006 09:48
von onny
danke für deine antwort! aber durch viel rumprobieren hab ich es doch noch geschaft eine birne zum leuchten zu bekommen :allright:
OpenLibrary(0, "K8055D.dll")
CallCFunction(0, "OpenDevice",0)
OpenWindow(0,x,y,500,200,#PB_Window_ScreenCentered | #PB_Window_SystemMenu,"ONNYS ROBOTER STEUERUNG")
CreateGadgetList(WindowID())
ButtonGadget(0,400,5,100,20,"Set all digital")
ButtonGadget(1,400,30,100,20,"Clear all digital")
ButtonGadget(2,400,60,100,20,"TEST")
ButtonGadget(3,400,90,100,20,"Würfel")
Frame3DGadget(10,5,5,200,100,"Analog Output-Channels")
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_EventGadget
Select EventGadgetID()
Case 0
CallCFunction(0, "SetAllDigital")
Case 1
CallCFunction(0, "ClearAllDigital")
Case 2
CallCFunction(0, "SetDigitalChannel",1)
Delay(100) : CallCFunction(0, "ClearAllDigital")
CallCFunction(0, "SetDigitalChannel",2)
Delay(100) : CallCFunction(0, "ClearAllDigital")
CallCFunction(0, "SetDigitalChannel",3)
Delay(100) : CallCFunction(0, "ClearAllDigital")
CallCFunction(0, "SetDigitalChannel",4)
Delay(100) : CallCFunction(0, "ClearAllDigital")
CallCFunction(0, "SetDigitalChannel",5)
Delay(100) : CallCFunction(0, "ClearAllDigital")
CallCFunction(0, "SetDigitalChannel",6)
Delay(100) : CallCFunction(0, "ClearAllDigital")
CallCFunction(0, "SetDigitalChannel",7)
Delay(100) : CallCFunction(0, "ClearAllDigital")
CallCFunction(0, "SetDigitalChannel",8)
Case 3
CallCFunction(0, "ClearAllDigital")
For a = 0 To Random(6)
CallCFunction(0, "SetDigitalChannel",Random(6))
Next
EndSelect

EndIf

Until EventID = #PB_Event_CloseWindow
CloseLibrary(0)
End
Also bin ich jetzt dabei mein eigenes Demo-Programm zu schreiben! Kann es sein das mein Programm manchmal abstürzt wenn ich zu viele Befehle an das Board schicke?