0.0.5 • Published 4 months ago

rigol-dho800 v0.0.5

Weekly downloads
-
License
MIT
Repository
github
Last release
4 months ago

rigol-dho800

rigol-dho800 is a Node.js library for interfacing with Rigol DHO800 oscilloscopes using NI-VISA. It provides an easy-to-use API for configuring the oscilloscope, setting acquisition parameters, triggering, and retrieving waveform data.

The library is built on top of ni-visa and requires RsVisa to be installed. Alternatively, you can provide a custom path to a dynamic library that supports the NI-VISA standard.

Features

  • Timebase and Channel Configuration: Easily set up acquisition parameters.
  • Trigger Control: Configure edge triggering.
  • Memory Depth Selection: Adjust memory depth based on acquisition needs.
  • Waveform Acquisition: Retrieve waveform data in WORD format for high-resolution captures.
  • Automatic Conversion: Convert raw ADC values into accurate voltage readings.

Requirements

  • RsVisa or another NI-VISA compatible library.
  • Node.js 23+ (for TypeScript support and latest JS features).

Installation

Install the library via npm:

npm install rigol-dho800

Usage

Below is an example demonstrating how to connect to the oscilloscope, configure it, set up a trigger, wait for an acquisition, and retrieve waveform data:

import { VisaInstrument, VisaResourceManager } from 'ni-visa';

import { RigolDho800 } from 'rigol-dho800';

const rm = new VisaResourceManager();

try {
  console.log('Listing available VISA resources...');
  const resources = rm.listResources();
  const usbResources = resources.filter((res) => res.startsWith('USB'));
  if (!usbResources.length) {
    throw new Error('No USB resources found');
  }

  const instr = rm.open(usbResources[0]);
  try {
    await onInstrumentOpened(instr);
  } finally {
    instr.close();
  }
} catch (error) {
  console.error(error);
} finally {
  rm.close();
}

async function onInstrumentOpened(instr: VisaInstrument) {
  const scope = new RigolDho800(instr);

  scope.reset();
  scope.configureTimebase(0.001); // 1ms/div
  scope.configureChannel(1, { verticalScale: 1, probeRatio: 10 });
  scope.configureEdgeTrigger({ source: 'CHAN1', level: 1.0, slope: 'POS' });
  scope.configureMemoryDepth('100k');
  scope.wait();

  scope.singleTrigger();
  scope.wait();

  // Wait up to 5 seconds for trigger
  if (!(await scope.waitTigger(5000))) {
    throw new Error('Timeout waiting for trigger');
  }

  const { samples } = scope.readWaveform(1);
  console.log('Waveform data:', samples);
}

API Reference

RigolDho800

General Methods

  • new RigolDho800(instr: VisaInstrument): Initializes the oscilloscope instance.
  • reset(): void: Resets and clears the oscilloscope.
  • wait(): void: Blocks execution until the oscilloscope completes an operation.

Configuration Methods

  • configureTimebase(scale: number = 0.001): void: Sets the timebase scale (default: 1ms/div).
  • configureChannel(ch: number, config: Partial<RigolDho800Channel>): void: Configures a channel’s probe ratio, scale, offset, coupling, and display.
  • configureMemoryDepth(depth: string): void: Sets the oscilloscope’s memory depth (e.g., 'AUTO').
  • configureEdgeTrigger(config: RigolDho800TriggerEdge): void: Configures an edge trigger.

Acquisition & Triggering

  • singleTrigger(): void: Arms the oscilloscope for a single acquisition.
  • run(): void: Starts continuous acquisition.
  • stop(): void: Stops acquisition.
  • waitTigger(timeout: number): Promise<boolean>: Waits for a trigger event (returns false if timeout occurs).

Waveform Acquisition

  • readWaveform(ch: number): { samples: number[], params: RigolDho800WaveformParameters }
    • Retrieves waveform data from the specified channel and converts it to voltage.
  • queryWaveformParameters(): RigolDho800WaveformParameters
    • Queries the oscilloscope for waveform preamble information.
  • createWaveformXLabels(params: RigolDho800WaveformParameters, inMs = false): number[]
    • Generates time labels for the waveform data.

Custom Dynamic Library Path

If using a custom VISA library, specify the path when initializing VisaResourceManager:

const rm = new VisaResourceManager('/path/to/your/library');

Running the Examples

The example above is available in the repository. To run it:

npm install
node run start

Contributing

Contributions are welcome! If you find any issues or have suggestions, open an issue or submit a pull request.

License

This project is licensed under the MIT License.

Support

If you have questions or need assistance, open an issue on the GitHub repository.

0.0.5

4 months ago

0.0.4

4 months ago

0.0.3

4 months ago

0.0.2

4 months ago

0.0.1

5 months ago