RDK – TpcAccess

API für eigene Software Entwicklung

Das Rapid Development Kit (RDK) TpcAccess bietet Entwicklern von Messtechniksoftware eine einfache Lösung zur Anbindung der TraNET Geräten sowie TPCE Messkarten in ihre eigene Anwendung.

Die Client/Server Architektur ermöglicht es, die Anwendung auf dem Selben Gerät wie die installierten Messkarten (TraNET EPC und PPC) oder auf einem über Ethernet angeschlossenen Rechner laufen zu lassen. Zudem ist es möglich, dass mehrere Anwendungen gleichzeitig auf die Hardware zugreifen können.

Für Anwendungen in C++ steht die TpcAccess Library unter Windows oder Linux zur Verfügung. Für Windows Anwendungen in C# ist the TpcAccess LIbrary auch als C# Variante erhältlich.

Für Anwendungen in Python wird ein ensprechender Wrapper der C++ DLL zur Verfügung gestellt.

 

TpcAccess Software Architecture

Downloads

PDF Download

TpcAccess API

Dokumentation (EN)

Elsys ZIP Download

TpcAccess API

RDK Source Code

Code Beispiel C++

Connect to a Device

int deviceIx;
TPC_ErrorCode err;

// Connecting to one device:
TPC_BeginSystemDefinition();
deviceIx = TPC_AddDevice("192.168.0.107:10010");	// Replace the IP address with your device address
err = TPC_EndSystemDefinition(1000); 		// 1s timeout till connection failed
if(err != tpc_noError) 	return 1;

// Set default parameters
TPC_ResetConfiguration();

Parametereinstellungen

// Set recording mode to scope
TPC_SetParameter(deviceIx, 0, 0, tpc_parOperationMode, tpc_opModeScope);

// Set single shot and turn on auto trigger
TPC_SetParameter(deviceIx, 0, 0, tpc_parScopeAutoTrigger, 1);
TPC_SetParameter(deviceIx, 0, 0, tpc_parScopeSingleShot, 1);

// Set Sampling frequency to 10MHz
TPC_SetParameter(deviceIx, 0, 0, tpc_parSamplingFrequency,10000000);

// Set trigger delay to -50%
TPC_SetParameter(deviceIx, 0, 0, tpc_parScopeTriggerDelay, -50);

// Set Block Size to 16k Samples
TPC_SetParameter(deviceIx, 0, 0, tpc_parScopeBlockLength, 4096);

// Set Board 0, Channel 0, Input Range to 5V, 0% Offset
TPC_SetParameter(deviceIx, 0, 0, tpc_parRange, 5);
TPC_SetParameter(deviceIx, 0, 0, tpc_parOffset, 0);

// Set Trigger Board 0, Channel 0, Positive Slope at 1V, 0.1V hysteris
TPC_SetTrigger(deviceIx,0,0,tpc_etrgSlope,tpc_etrgCompPositive,tpc_etrgNone, 1,0.1);	

Messung Starten

int measurementNumber = 0;
TPC_MakeMeasurement(2000,&measurementNumber); 	

// readout time meta data
TPC_TMetaData tmetaData;
TPC_GetTMetaData(deviceIx, 0, 0, m_iMeasurementNumber, &tmetaData, sizeof(TPC_TMetaData));
cout << endl << "Meas. Start Time: " << tmetaData.startTime.hour   << ":" 
				<< tmetaData.startTime.minute << ":"
				<< tmetaData.startTime.second << endl;
cout << "Trigger Sample: " << tmetaData.triggerSample << endl;
cout << "Trigger Time:   " << tmetaData.triggerTime   << endl;

// read out y meta data
TPC_YMetaData ymetaData;
TPC_GetYMetaData(deviceIx, 0, 0, m_iMeasurementNumber, &ymetaData, sizeof(TPC_YMetaData));
uint32_t analogMask		= ymetaData.analogMask;
uint32_t markerMask		= ymetaData.markerMask;
double bintoVoltFactor		= ymetaData.binToVoltFactor;
double bintoVoltConstant	= ymetaData.binToVoltConstant;

Daten auslesen

// get raw data
int32_t *rawData, *analogData, *markerData;
rawData	   = new int32_t[4096];
analogData = new int32_t[4096];
markerData = new int32_t[4096];
TPC_GetRawData(deviceIx, 0, 0, 0, m_iMeasurementNumber, 0, 4096, rawData);

double* voltageData;
voltageData = new double[4096];
// get analog an marker data
for(int i = 0; i < 4096; i++){
 analogData[i] = rawData[i] & analogMask; // Mask digital marker data from the analog data
 markerData[i] = rawData[i] & markerMask; // Extract the digital marker signals
		
 // scale to voltage (this gives the same data as the TPC_GetData function)
 voltageData[i] = (analogData[i]* bintoVoltFactor) + bintoVoltConstant;
 cout << voltageData[i] << endl;
}