Guten Morgen!
Ich bin bei der Arbeit gerade auf ein sehr unangenehmes Problem gestoßen, für das ich partout keine Lösung finden kann. Ich programmiere zur Zeit mit Delphi 5.0 an einer Steuerungssoftware einer
Meilhaus PCI - Messkarte. Ganz genau die ME-4670i. Dafür verwende ich zur Anregung das im
Downloadbereich von Meilhaus bereitgestellte Software Developer Kit, in dem Beispielprogramme angegeben sind.
Da ich sie als ein OnClick Ereignis verwende, habe ich zum Beispiel die AISingle Variante (näher auch im Handbuch erläutert) zum Beispiel auf eine normale Prozedur gewandelt, ohne dass es Probleme gab. Wie zu erwarten eigentlich.
(AISingle ist die in der me4000.dll vorgesehene Variante zum erfassen von Einzelwerten mit dieser Karte.)
Im Moment arbeite ich nun daran, die AI Simultaneous Funktion der Karte zu nutzen, welche zum erfassen einer Unbekannten Anzahl von Messwerten auf Timergesteuerter Basis ermöglichen soll. Dabei werden die Daten in einen Puffer geschrieben, der dann entsprechend dem Timer ausgelesen wird. Da ich dies wieder als Prozedur benötige, habe ich (wie vorher auch) die Variablendeklaration aus der Funktion extrahiert, die Function zur Prozedur erklärt und dann erstmal getestet. Nun bringt mir delphi allerdings bei folgendem Quellcode (nur die Punkte die betroffen sind, begins und ends sind richtig gesetzt und es passt auch sonst, nur taucht der unten beschriebene Fehler auf)
EDIT - hatte hier was getestet, da gibbet nen anderen Fehler! Quellcode enthält jetzt den Fehler der Angesprochen wurde, sorry
:
Delphi-Quellcode:
VAR
arrbChannelList: array [0..3] of pointer;
uiChannelNumber: Cardinal;
arrsiChannelScanData: array [0..3, 0..39] of Smallint;
lwNumberOfChannelScanData: LongWord;
arrdVoltValue: array [0..3] of Double;
lwIndex: longWord;
psValues:pointer; //<--- FEHLERVARIABLE
uiNumberOfValues: Cardinal;
pCallbackContext: pointer;
iLastError: Integer;
{[...]}
procedure TForm1.ContinStart(Sender: TObject);
Begin
for uiChannelNumber := 0 to 3 do
begin
me4000AIExtractValues(
uiChannelNumber, // Channel number
psValues, // Data buffer <--- Inkompatible Typen, s.u.
uiNumberOfValues, // Total number of data values
@arrbChannelList[0], // Start of channel list
4, // Number of entries in the channel list
@arrsiChannelScanData[uiChannelNumber][0], // Channel data returned here
40, // Size of channel data buffer
lwNumberOfChannelScanData); // Number of values actually returned
// for this channel here
end;
{[...]}
Für die Variable psValues, die sowohl in der
DLL, wie in meinem Programm ein Pointer sein soll den Fehlercode "[Fehler] FinalLayout.pas(583): Inkompatible Typen: 'SmallInt' und 'Pointer'". Weder mein chef noch ich haben eine Ahnung wie das zu beseitigen sein soll, da die Deklarationen aus den Beispielen extrahiert wurden, die Variablen nirgends anders deklariert sind oder sonstwas. Wir stehen vor einem Rätsel ...
Die
Dll findet sich im Software Developers Kit!
Ich hoffe jemand hat den Elan sich das mal anzuschauen und kann mir dabei irgendwie helfen. Für weitere Informationen stehe ich natürlich gern zur Verfügung.
Und falls ich demnächst einen Geistesblitz haben sollte gibbet hier natürlich die Lösung!
Danke, Sascha
Wenn ich was net kriege, was ich haben will, dann mach ich den Traubenklaufuchs ...