Einzelnen Beitrag anzeigen

Sascha.E

Registriert seit: 9. Nov 2006
Ort: Bremen
11 Beiträge
 
#1

Meilhaus PCI Karte - Inkompatible Typen

  Alt 27. Nov 2006, 10:34
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 ...
  Mit Zitat antworten Zitat