INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

ANTDKT3



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

17.11.2008, 22:01
Beitrag #7

masht Offline
LVF-Grünschnabel
*


Beiträge: 11
Registriert seit: Sep 2008

8.5
2007
de

1150
Oesterreich
ANTDKT3
' schrieb:Klingt ziemlich korrek. Ich würde in sendresponse() auch die Callbackfunktion selber installieren und falls möglich einen weiteren Boolean Parameter vorsehen um diese auch wieder zu deinstallieren.

Rolf Kalbermatter

Hallo Rolf,

du glaubst ja gar nicht, wie sehr du mir geholfen hast :Dunglaublich - es funktioniert fast. d.h. ich mach das jetzt genau so wie besprochen.

ein problem habe ich aber noch - der event wird in der richtigen frequenz ausgelöst und daten werden übertragen, aber anscheinend wird der Buffer nicht korrekt aktualisiert, d.h. die der string ändert sich nicht. zuerst hatte ich die befürchtung, dass das memcpy bei abgebrochen wird (da die daten ca. so aussehen 01 41 00 00 09 01..). aber die funktion kopiert ja wirklich alles zum LVbuffer.

die buffer die ich verwende sind ja auch globale variablen in meine dll, deshalb habe ich mir gedacht, dass das schon so passt, oder muss ich von LabVIEW aus einen cstring zeiger mit der gewünschten adresse an meine dll übergeben und dort die daten hineinschreiben?

Danke für die Hilfe Lol

<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>// antwrapper.cpp : Definiert die exportierten Funktionen für die DLL-Anwendung.
//

#include "stdafx.h"
#include "stdio.h"
#include "extcode.h" //LabVIEW inlcude

//Definitionen der Laenge für die Buffer
#define EVENT_LAENGE 10
#define RESPONSE_LAENGE 5

//Typendifinitionen für die ANT Funktionen
typedef BOOL (*ptreventfunction)(UCHAR ucChannel, UCHAR ucEvent);
typedef BOOL (*ptrresponsefunction)(UCHAR ucChannel, UCHAR ucMsgId);

typedef void (*ANT_RESPONSE_POINTER)(ptrresponsefunction, UCHAR*);
typedef void (*ANT_EVENT_POINTER)(UCHAR, ptreventfunction, UCHAR*);

//ANT Buffer & Globals
UCHAR aucResponseBuffer[5]={};
UCHAR aucChannelEventBuffer[10]={};

LVUserEventRef *eventref;
LVUserEventRef *responseref;
LStrHandle eventStringHandle;
LStrHandle responseStringHandle;

BOOL ANT_ChannelEventFunction(UCHAR ucChannel, UCHAR ucEvent);
BOOL ANT_ResponseFunction(UCHAR ucChannel, UCHAR ucMsgId);

extern "C" __declspec(dllexport) int ANT_LabVIEW_Schnittstelle(LVUserEventRef *eventrefLabVIEW, LVUserEventRef *responserefLabVIEW, UCHAR antChannel)
{
int ok = 0;

//Übergaben von den LabVIEWRefs an Globale Variable
eventref=eventrefLabVIEW;
responseref=responserefLabVIEW;

//Eventstringhandle Speicher zuweisen
// Allocate LabVIEW User Event Data
responseStringHandle=(LStrHandle)DSNewHandle(sizeof(int32)+RESPONSE_LAENGE*sizeo​
(UCHAR));
LStrLen(*responseStringHandle)=RESPONSE_LAENGE;
eventStringHandle=(LStrHandle)DSNewHandle(sizeof(int32)+EVENT_LAENGE*sizeof(UCHA​
));
LStrLen(*eventStringHandle)=EVENT_LAENGE;


//Zeiger auf die ANT_Funktionen definieren
ANT_RESPONSE_POINTER ANT_AssignResponseFunction;
ANT_EVENT_POINTER ANT_AssignChannelEventFunction;

//ANT_DLL laden
HINSTANCE hANTdll = LoadLibraryA("ANT_DLL.dll");
if (hANTdll != NULL){

//Pointer auf die Funktionen setzen
ANT_AssignResponseFunction = (ANT_RESPONSE_POINTER) GetProcAddress(hANTdll, "_ANT_AssignResponseFunction");
ANT_AssignChannelEventFunction = (ANT_EVENT_POINTER) GetProcAddress(hANTdll, "_ANT_AssignChannelEventFunction");
}
//Funktionen aufrufen
if(ANT_AssignResponseFunction != NULL && ANT_AssignChannelEventFunction != NULL)
{
ANT_AssignResponseFunction((ptrresponsefunction)ANT_ResponseFunction, aucResponseBuffer);
ANT_AssignChannelEventFunction(antChannel, (ptreventfunction)ANT_ChannelEventFunction, aucChannelEventBuffer);
ok=1;
}

else
ok=0;


//ANT_DLL freigeben
FreeLibrary(hANTdll);

return ok;
}

//ChannelEventFunction
BOOL ANT_ChannelEventFunction(UCHAR ucChannel, UCHAR ucEvent)
{
//ANT Event Daten --> LabVIEWstring

memcpy((char*)LStrBuf(*eventStringHandle), &ucChannel, 1);
memcpy((char*)LStrBuf(*eventStringHandle)+1, &ucEvent, 1);
memcpy((char*)LStrBuf(*eventStringHandle)+2, &aucChannelEventBuffer,strlen(aucChannelEventBuffer)+1);

//Stringhandle an LabVIEW
PostLVUserEvent(*eventref, (void*)&eventStringHandle);

return TRUE;
}

//ResponseFunction
BOOL ANT_ResponseFunction(UCHAR ucChannel, UCHAR ucMsgId)
{
//ANT Response Daten --> LabVIEWstring

memcpy((char*)LStrBuf(*responseStringHandle), &ucChannel, 1);
memcpy((char*)LStrBuf(*responseStringHandle)+1, &ucMsgId, 1);
memcpy((char*)LStrBuf(*responseStringHandle)+2, &aucResponseBuffer, strlen(aucResponseBuffer)+1);

//Post event to Event structure
PostLVUserEvent(*responseref,(void*)&responseStringHandle);

return TRUE;
}</div>
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Nachrichten in diesem Thema
ANTDKT3 - masht - 03.09.2008, 21:06
ANTDKT3 - rolfk - 15.09.2008, 09:07
ANTDKT3 - masht - 16.11.2008, 09:01
ANTDKT3 - rolfk - 16.11.2008, 10:51
ANTDKT3 - masht - 16.11.2008, 14:28
ANTDKT3 - rolfk - 17.11.2008, 07:46
ANTDKT3 - masht - 17.11.2008 22:01
ANTDKT3 - rolfk - 18.11.2008, 08:36
ANTDKT3 - masht - 20.11.2008, 20:42

Gehe zu: