Datenerfassung mit einem Oszilloskop

PicoScope in .NET

PicoScope in .NET

Datenerfassung mit einem Oszilloskop

PicoScope in .NET


Die PicoScope-Oszilloskope des gleichnamigen Herstellers sind ein bequemer und preisgünstiger Weg, um einen PC um programmierbare Datenerfassungsmöglichkeiten zu erweitern. Dieser Artikel stellt die Programmierung unter .NET kurz vor.

Oszilloskope sind per se bildgebende Messgeräte. Der Gedanke, mit digitalen Wandlern Messungen durchzuführen, ist derweil nicht wirklich neu. Abbildung 1 zeigt ein von Dennis Tillman vor vielen Jahren durchgeführtes Experiment mit einem (damals schweineteuren) Tektronix 7000.

hanna_picoscope_1.tif_fmt1.jpgAbb. 1: Wer einen PC anschließt, spart beim Berechnen von Werten Zeit

Die in Großbritannien ansässige Firma PicoScope hat diesen Markt als ihren Heimatbereich auserkoren. Seit einigen Jahren gibt es nun auch leistungsfähige APIs, die das direkte Abernten der Daten ermöglichen. Da sich das Oszilloskop direkt per USB mit dem Rechner verbindet, erspart man sich den sonst notwendigen Tanz mit GPIB-Karten, LXI und anderen Lustigkeiten.

Eine Frage der Hardware

PicoScopes gibt es in allen Größen und Preislagen. Der Autor wird in den folgenden Schritten mit einem PicoScope 5444D experimentieren. Vom Handling her verhält sich das Gerät nahezu komplett analog zu fast all seinen Kollegen. Die hier besprochene Vorgehensweise lässt sich also auch auf die kleinen 100-Euro-Geräte adaptieren, deren Preis man im Zweifelsfall schon einmal opfern kann. Angemerkt sei, dass PicoScope seine Messtechnik bei Bedarf auch whitelabelt – wer eine gewisse Abnahmemenge erbeuten möchte (Stichwort ASi-Bus-Konsortium), kann so mit minimalem Aufwand „white labeled“-Messtechnik erzeugen.

Als Erstes müssen wir die Softwaredownloadseite besuchen [1], wo wir sowohl die eigentliche PicoScope-Software als auch ein SDK herunterladen (Abb. 2). Wir installieren die beiden heruntergeladenen Dateien PicoScope6_r6_14_23.exe und PicoSDK_64_10.6.16.113.exe danach wie gewohnt und nicken eventuelle Administratornachfragen ab. Die für die Installation des SDKs angebotenen Voreinstellungen können wir übernehmen; die zusätzlichen Installationspakete sind in unserer Situation nicht notwendig. Während der Abarbeitung der Installation ist es empfehlenswert, nach einem als „Programmer’s Guide“ bezeichneten Dokument zu suchen. Wer unser hier verwendetes Modell benutzt, findet unter [2] das relevante Dokument als PDF.

hanna_picoscope_2.tif_fmt1.jpgAbb. 2: Die PicoScope-Software steht für 32- und 64-Bit-Systeme zur Verfügung

PicoScope selbst empfiehlt im SDK die Verwendung von Visual Studio 2017 und realisiert die hauseigenen Beispiele noch unter dem alten Windows Forms API. Wir wollen in diesem Artikel mit Visual Studio 2019 arbeiten und als GUI-Stack die WPF verwenden. Beachten Sie, dass der Treiber selbst in Form klassischer DLL-Dateien vorliegt, auf die per P/Invoke zugegriffen wird. Daraus folgt, dass die Verwendung der UWP derzeit noch nicht möglich ist.

Nach der erfolgreichen Generierung eines Projekt-skeletts müssen wir im ersten Schritt auf GitHub wechseln, wo unter [3] eine Art Beispielauswahlportal bereitsteht. Dort wechseln wir in den Ordner, der unserem Oszilloskop entspricht. Danach suchen wir nach einer Importdatei. Für die Situation des Autors hört sie auf den Namen >https://github.com/picotech/picosdk-c-sharp-examples/blob/master/ps5000a/PS5000AImports.cs. Die Datei übernehmen wir wie gewohnt in unser Projekt und beheben eventuelle Inklusionsfehler. Über die Frage, ob man den Namespace anpassen soll, lässt sich streiten – der Autor verwendet in den folgenden Schritten den in Listing 1 gezeigten Aufbau.

Listing 1

using System.Runtime.InteropServices;
namespace SUSPicoScopeWPFTest1
{
  class Imports
  {
    #region Constants
    private const string _DRIVER_FILENAME = "ps5000a.dll";
    ...

Die oszilloskopspezifischen Beispiele sind insofern undankbar, als sie nur einen Teil der für die Hardwareansteuerung notwendigen Intelligenz mitbringen. Der Rest findet sich auf GitHub [4]. Zum Zeitpunkt des Schreibens dieses Artikels enthält dieses Repository insgesamt drei Klassen, die ebenfalls eins zu eins in unser Projektskelett wandern.

Im nächsten Schritt können wir auch schon damit beginnen, eine Verbindung zum Oszilloskop aufzubauen. Hierzu ist, analog zur Arbeit unter Linux, eine Variable erforderlich, die die Verbindung zwischen Oszilloskop und Applikation eindeutig beschreibt:

public partial class MainWindow : Window {
  private short _handle;

Im nächsten Schritt beginnen wir mit dem eigentlichen Verbindungsaufbau. Das hier verwendete PicoScope 5444D ist in der Lage, die Auflösung seiner AD-Wandler je nach Bedarf entweder auf Geschwindigkeit oder auf höhere Erfassungsgenauigkeit bzw. höhere Auflösung zu optimieren. Aus diesem Grund legen wir im ersten Schritt in der Variablen Imports.DeviceResolution.PS5000A_DR_16BIT fest, dass wir in den folgenden Schritten mit 16 Bit arbeiten wollen:

private void connect_me(){
  StringBuilder UnitInfo = new StringBuilder(80);
  short handle;
  Imports.DeviceResolution resolution = Imports.DeviceResolution.PS5000A_DR_16BIT;

Fehlt Ihrem Oszilloskop diese Funktion, so können Sie sich diesen Aufruf sparen. Schon hier lernen wir allerdings ein wichtiges Designpattern für die Arbeit mit PicoScopes kennen: In vielen Fällen erfolgt das Einstellen von Hardwareoptionen...