Seite 1 von 1

GSV-3USB und Matlab

Verfasst: Mo 7. Apr 2014, 18:18
von Kabelitz
Die Messwerterfassung mit Matlab kann die Windows DLL "megsv.dll" eingesetzt werden.
Alternativ ist auch die Erfassung von Messwerten ohne Windows DLL möglich.
Dazu sollte der Messverstärker auf "text-Modus" eingestellt sein und auf "Einzelwertabfrage";
Dann wird ein Messwert auf Anforderung durch das Senden des zeichens ";" übertragen.
Den Code hat Martin von der TU München zur Verfügung gestellt.

('#' durch die Com port Nummer ersetzen):

Code: Alles auswählen


s1 = serial('COM#',...
    'BaudRate',38400,...
    'DataBits',8,...
    'StopBits',1,...
    'FlowControl','none',...
    'Parity','none');

fopen( s1 );

fprintf( s1 , '%s' , ';' );

dec = fread( s1 , [1,3] );

fclose( s1 );
delete( s1 );
clear s1;


Dadurch wird ein "serial port object" definiert, die Serielle Schnittstelle geöffnet, nach einem Wert gefragt, dieser Wert (der ja eigentlich aus 3 zweistelligen Hexadezimalzahlen besteht) dezimal in der Variablen "dec" gespeichert ( z.B. dec = [ 165 128 30] ), und die Verbindung wieder geschlossen. Dabei wird davon ausgegangen, dass der Logger-Modus wie vorgeschlagen bereits vorher z.B. in ME GSV Control aktiviert wird.

Um die Kraft aus der Variablen (/dem Vektor) "dec" zu erhalten, müssen die beiden hinteren Einträge einzeln in das Hexadezimalystem umgewandelt, aneinandergehängt, und wieder ins Dezimalsystem umgewandelt werden. Den entstehenden Wert kann man dann entsprechend den Anweisungen im kb-convert.pdf in eine Kraft umwandeln.

Meiner Meinung nach kann man die Messwerterfassung etwas eleganter lösen, indem man mehrere Matlabskripte verwendet, die z.B. nur das Öffnen/Schließen der seriellen Schnittstelle oder die Messwerterfassung übernehmen, und diese von einem zentralen Skript aus aufruft wenn man sie benötigt. Das würde aber über das "Hello World" Konzept hinausgehen.

Re: GSV-3USB und Matlab

Verfasst: Fr 25. Jul 2014, 14:39
von Kabelitz
Herr Peter Leinen vom Sportwissenschaftlichen Institut der Uni Saarland hat uns freundlicherweise den Matlab Code für GSV-3 und GSV-8 zur Verfügung gestellt:
Die MEGSV.DLL wird benötigt.

Code: Alles auswählen

clear all

% Loading MEGSV dll driver if it's not already loaded
if ~libisloaded('MEGSV')
   loadlibrary('.\MEGSV_32bit\MEGSV.DLL','.\MEGSV_32bit\MEGSV.h')
end

% Channel activation
calllib('MEGSV','GSVactivate',3,500);   % channel on COM3

% some variables
x=zeros(100,1); % A Vector filled with Zeros (100x1)
z=int32(0); % A Variable Type Integer32

adx = libpointer('doublePtr',x);    % Creates a Double Pointer to x. Needed for GSVread parameters
valsread = libpointer('int32Ptr',z);    % Creates a  Int32 Pointer to z.


loopstart=cputime;     % starttime of the for-loop

% Collecting max. 600 values from Com3 Channel
calllib('MEGSV','GSVreadMultiple',3,adx,600,valsread);

loopend=cputime-loopstart     % endtime of the for-loop



% Clean up a bit
calllib('MEGSV','GSVrelease',3)     % realease Channel 3
clear adx valsread
unloadlibrary('MEGSV')            % Should be done, but crashes Matlab
% clear all