sd-pxe-dio-h0003 16 channels, 1 gbps, differential digital ... · sd-pxe-dio-h0003 16 channels, 1...
TRANSCRIPT
SD-PXE-DIO-H0003
16 Channels, 1 Gbps, Differential Digital I/O PXI Express Module
Features
• 16 LVDS digital I/O channels
• 1 Gbps per channel
• Programable I/O direction per channel
• 4 MB, 128 MB or 1GB of RAM
• System:
• PXI Express & CompactPCI Express compatible• 1 slot• 350 MB/s (2.8 Gbps) transfer speed: PCIe x2
• Included software:
• SDM: Signadyne Manager• Programming libraries for VI. Nearly all lan-
guages (C, C++, LabVIEW, Java, Python, For-tran, BASIC, MATLAB, Mathematica, Maple, etc.)
• VirtualKnob: Software Front Panels
• Compatible Signadyne software:
• ProcessFlow: HVI Programming Environment
Applications
• Digital Waveform Generator
• Digital Delay Generator
• Pulse Generator
• Digital Waveform Analyzer
• ATE (Automatic Test Equipment)
• Sequencing / process control
Application Fields
• Electronics & telecom
• Aerospace & defense
• Experimental physics
• Life sciences
General Description
The SD-PXE-DIO-H0003 is a high performance PXI Ex-press module with LVDS (Low-Voltage Differential Signaling)inputs/outputs. It can generate any digital pattern with anydesired timing, and be used as a complex Digital WaveformGenerator (DWG) or Digital Delay Generator. This moduleis ideal to generate trigger pulses or to control/test exter-nal devices digitally. In addition, its data acquisition (DAQ)capabilities makes it a powerful Digital Waveform Analyzer.The SD-PXE-DIO-H0003 can be controlled like a classicalworkbench instrument with Signadyne VirtualKnob [1]. Foruser-defined operation, the module can be controlled withSignadyne Programming Libraries [2] (Virtual Instrumenta-tion), or using Signadyne ProcessFlow [3] (Hard Virtual In-strumentation).
Similar Products
Product Number Description
SD-PXE-DIO-H0001 32 Ch, 800 Mbps [4]
SD-PXE-DIO-H0002 64 Ch, 800 Mbps [5]
SD-PXE-DIO-H0004 32 Ch, 1 Gbps LVDS [6]
Ordering Information
Product Number Description RAM(MB)
SD-PXE-DIO-H0003-4 16 Channels, 1 Gbps, Differential Digital I/O PXI Express Module 4
SD-PXE-DIO-H0003-128 16 Channels, 1 Gbps, Differential Digital I/O PXI Express Module 128
SD-PXE-DIO-H0003-1G 16 Channels, 1 Gbps, Differential Digital I/O PXI Express Module 1024
Rev. 1.4 (April 10, 2012)Specifications subject to change without notice.
c© 2012 Signadyne. All rights reserved.
SD-PXE-DIO-H0003
Specifications
Parameter Min Typ Max Units Comments
General
Digital Lines 16 I/O Organized in 16-bit LVDS I/O Banks
16-Bit I/O Banks 1 I/O LVDS digital I/O lines
Data Clock / Bank 2 I/O Sampling clock for the digital I/O lines
Reference Clock / Bank 1 O Reference clock output
I/O Data System
16-Bit Fixed Ports 1 I/O One per I/O Bank
32-Bit Fixed Ports 0 I/O Fixed I/O Bank combinations
Input Buses 2 I Fully configurable with the Bus Matrices
Output Buses 2 O Fully configurable with the Bus Matrices
Bus Length 1 16 Bits Fully configurable with the Bus Matrices
Digital Waveform Generators 2 Blocks Connected to the Output Buses
Data Acquisition Blocks 2 Blocks Connected to the Input Buses
Digital Lines
VOH 1.875 V For DIO+ and DIO-, 100 Ω across them
VOL 0.715 V For DIO+ and DIO-, 100 Ω across them
VODIFF 350 820 mV Output DIO+ - DIO-, 100 Ω across them
VIDIFF 100 1000 V Input DIO+ - DIO-, for VICM =1.25V
VICM 0.3 1.2 2.2 V Input common-mode, for VIDIFF = +350mV
Input Impedance 100 Ω
Reference Clock Output
Voltage 1.6 Vpp On a 50 Ω load
Power 8 dBm On a 50 Ω load
Source Impedance 50 Ω AC coupled
Frequency 10 or 100 MHz Generated from the internal clock
Onboard Memory
Memory 4 1024 MBytes Product dependent, see Ordering Info. onpage 1
Points 2 512 MPoints For 16-bit points. Shared by all the ports
Sustainable Throughput 2000 MPoints/s For 16-bit points. Shared by all the ports
System Bus
Slots 1 Slot PXI Express or CompactPCI Express com-patible
PCI Express Link 1 2 4 Lanes Automatic negotiation, chassis dependent
PCI Express Speed 200 350 350 MBytes/s Automatic negotiation, chassis dependent
Sustainable Throughput 100 170 170 MPoints/s For 16-bit points. Automatic negotiation,chassis dependent
DMA Channels 32 Channels Number of simultaneous high-speed datatransfer transactions
Internal Clock
Accuracy and Stability 100 ppm Chassis dependent. This value correspondsto a chassis that fulfils the PXI Expressspecifications
2 / 60 Rev. 1.4 (April 10, 2012)
SD-PXE-DIO-H0003
Interface
Pin Line Name Direction Description
A.1..16 DIO A[0..7] I/O Differential digital input / output lines. They correspond to BankA.Low
A.17 RESERVED n/a System reserved, do not use
A.18 VCC 2.5V O Power supply 2.5V
A.19 DATACLK A.LO I/O Sampling clock for BankA.Low
A.20 VCC 2.5V O Power supply 2.5V
A.21..36 DIO A[8..15] I/O Differential digital input / output lines. They correspond to BankA.High
A.37 RESERVED n/a System reserved, do not use
A.38 VCC 5V O Power supply 5V
A.39 DATACLK A.HI I/O Sampling clock for BankA.High
A.40 CLK A O Output clock reference
Connector type: SAMTEC QSE-020-01-L-D-EM2
Figure 1: SD-PXE-DIO-H0003 front panel
Rev. 1.4 (April 10, 2012) 3 / 60
SD-PXE-DIO-H0003
16 Channels, 1 Gbps, Differential Digital I/O PXI Express Module
Contents
1 Device Operation 61.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.1.1 Classical Instrument . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61.1.2 Virtual Instrument (VI) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61.1.3 Hard Virtual Instrument (HVI) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2 Digital I/O System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.2.1 Physical Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.2.2 I/O Ports (Banks and Buses) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.3 Digital Waveform Generators (DWGs) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101.4 Data Acquisition Blocks (DAQs) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131.5 Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.5.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161.5.2 SD-PXE-DIO-H0003 Event List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2 VI / HVI Programming 182.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182.2 SD-DIO Class Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.2.1 IOdirectionConfig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192.2.2 BusConfig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202.2.3 PortWrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212.2.4 PortRead . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232.2.5 WaveformLoad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242.2.6 WaveformFlush . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252.2.7 DWG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262.2.8 DWGqueueWaveform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282.2.9 DWGflush . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292.2.10 DWGrun . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302.2.11 DWGstop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312.2.12 DWGtrigger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322.2.13 DAQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332.2.14 DAQread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352.2.15 DAQconfig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362.2.16 DAQrun . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372.2.17 DAQstop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382.2.18 DAQflush . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392.2.19 DAQtrigger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402.2.20 DAQcounterRead . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412.2.21 DAQrelease . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422.2.22 MathAssign (D=S) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432.2.23 MathArithmetics (R=A[+-*/]B) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442.2.24 MathMultAcc (R=A[+-]B[*/]C) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452.2.25 Open . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462.2.26 Close . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472.2.27 EventAddCallback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 482.2.28 EventRemoveCallback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492.2.29 EventWaitFor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502.2.30 EventAcknowledge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512.2.31 EventSetTimeout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522.2.32 CallbackFunction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
2.3 SD-Wave Class Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 542.3.1 New . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 542.3.2 Delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
2.4 DAQ Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 562.4.1 DAQeventRun . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 562.4.2 DAQeventStop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 562.4.3 DAQeventTrigger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
4 / 60 Rev. 1.4 (April 10, 2012)
SD-PXE-DIO-H0003
2.4.4 DAQeventDataReady . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572.5 Error Codes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Rev. 1.4 (April 10, 2012) 5 / 60
SD-PXE-DIO-H0003
1 Device Operation
1.1 Overview
1.1.1 Classical Instrument
Any Signadyne module can be used as a classical workbench instrument using Signadyne VirtualKnob [1], our ready-to-use software front panels. They are designed to control the inputs and outputs of the modules in real time, making themideal for standard test and measurement applications.
1.1.2 Virtual Instrument (VI)
Virtual instrumentation is the use of customizable software to create user-defined control, test and measurement systems,called Virtual Instruments (VI). For this purpose, Signadyne delivers highly optimized programming libraries [2], allowingthe user to control all modules functionalities. In VIs, instructions are executed by the user computer (controller), and theI/O commands are transferred to the modules via the PXI Express bus (Figure 2). Therefore, the system can executeinstructions at a rate limited by the power and load of the user computer, and the PCI Express speed and latency perfor-mance.
Figure 2: Virtual Instrument (VI) operation. The user-defined software (VI) is executed in the system computer and thecommands are transferred to the modules.
ADVANCED:
Using advanced programming techniques -e.g. multithreading, callback functions, onboard waveform buffering, DMA,etc.- increases the performance of the system execution. Our libraries do make use of these advanced techniques.
NOTE:
Some manufacturers refer to some of these advanced techniques as ”hardware triggering”, but this concept must notbe confused with Signadyne’s Hard Virtual Instrument (HVI).
1.1.3 Hard Virtual Instrument (HVI)
The main drawback of virtual instrumentation is that, for many applications, the speed, the timing precision, and pre-dictability of normal computers and operating systems (even real-time ones) are not sufficient. Signadyne has developed atechnology where the user can write custom software directly to any Signadyne hardware modules, extending the conceptof virtual instrumentation to hard virtual instrumentation. The instructions of a Hard Virtual Instrument (HVI) are executedby the hardware modules, leaving the computer free for other VI tasks, e.g. complex processing and visualization (Figure 3on the next page). Unlike a normal VI, HVIs are time deterministic, and they run at maximum module speed independentlyof the PC. That means, for example, that a 1 GSPS (Gigasamples Per Second) analog output card can run amplitudeinstructions every 1 ns. HVIs are programmed with Signadyne ProcessFlow [3].
6 / 60 Rev. 1.4 (April 10, 2012)
SD-PXE-DIO-H0003
NOTE:
HVIs are programmed with Signadyne ProcessFlow [3], an HVI programming environment with a user-friendly flowchart-style interface, compatible with all Signadyne hardware modules.
Perfect synchronization: Each HVI is defined by a group of PXIe modules which work perfectly synchronized, and,therefore, can be effectively seen as a single integrated programmable hardware. In addition, a single system can rundifferent HVIs in parallel without any interference between them (Figure 3).
Figure 3: Hard Virtual Instrument (HVI) operation. The user HVI program is executed inside the Signadyne PXIe modules,and the computer is only occupied with other VI processes (e.g. data post-processing, visualization, etc.). All cards in anHVI work perfectly synchronized.
Ultra fast decisions and control: At HVI execution time, the PXIe modules can perform data processing and decisionmaking extremely fast (in tens of nanoseconds). This is very useful for process control where fast (and deterministic) re-sponse times are needed. If the decision requires more complex processing, the user can use our programming librariesto collect the data in the computer, process it at will, and then send the decision back to the modules (VI and HVI can becombined at will). The latency of the VI processing task will depend on the computer power and load, operating system,etc., and its minimum cannot be precisely determined (Figure 4).
Figure 4: An example of a purely HVI decision making, a VI decision making and a HVI & VI parallel execution.
Rev. 1.4 (April 10, 2012) 7 / 60
SD-PXE-DIO-H0003
1.2 Digital I/O System
Figure 5: Digital I/O system of the SD-PXE-DIO-H0003
1.2.1 Physical Interface
The Physical Interface Block is used to configure the direction of the digital lines. Each line can be independently configuredas input or output (function IOdirectionConfig, Section 2.2.1 on page 19). Regardless of this configuration, all lines can beread.
1.2.2 I/O Ports (Banks and Buses)
The access to the I/O lines is performed via two type of I/O Ports (Table 1 on the next page). BANKs have a fix I/O lineassignment determined by the module physical connector. Buses are configurable, by means of an interconnection matrix,to include any of the modules I/O lines with any ordering. For example, a Bus may be configured to have only four bits: thelines BankA.2, BankA.1, BankB.7, and BankA.5, in this specific order. Buses are unidirectional, either input or output.
The number of Buses available in the SD-PXE-DIO-H0003 is shown in Specifications in Page 2.
NOTE:
Digital Waveform Generation/Acquisition: Digital Waveform Generators (DWG) and Data Acquisition Blocks (DAQs)can only be used with Buses.
TIP:
Digital Delay Generator / Pulse Generator : Writing values to the I/O Ports using the VI Libraries (LabVIEW, C, C++,etc.) is not time deterministic, unless a Digital Waveform Generator (DWG) is used. However, this approach to performdigital delay generation or pulse generation is very inefficient. The best solution for these applications is to read/writethe I/O lines by means of an HVI (Section 1.1.1 on page 6), which can be programmed with Signadyne ProcessFlow[3].
8 / 60 Rev. 1.4 (April 10, 2012)
SD-PXE-DIO-H0003
Port port (const & value) Length (bits) Description
BANK A BANKA 0 16 Port to access BANK A
BANK B BANKB 1 16 Port to access BANK B
... ...
BUS IN 0 BUSIN0 1000 1..16 Port to access BUS IN number 0
BUS IN 1 BUSIN1 1001 1..16 Port to access BUS IN number 1
... ...
BUS OUT 0 BUSOUT0 2000 1..16 Port to access BUS OUT number 0
BUS OUT 1 BUSOUT1 2001 1..16 Port to access BUS OUT number 1
... ...
BANK A & BANK B BANKAB 3000 32 Port to access BANK A and BANK B at the same time
Table 1: List of Ports with their associated port numbers (the total number of Banks and Buses is module dependent)
Rev. 1.4 (April 10, 2012) 9 / 60
SD-PXE-DIO-H0003
1.3 Digital Waveform Generators (DWGs)
A Digital Waveform Generator (DWG) is a powerful and flexible block designed to generate arbitrary digital waveforms(Figure 6). The number of DWGs available in the SD-PXE-DIO-H0003 is shown in Specifications on Page 2.
Figure 6: Digital Waveform Generators (DWGs) in the SD-PXE-DIO-H0003
Each DWG has a queue system that allows the user to configure simple generation sequences, choosing many param-eters such as the trigger method (Table 2), the start delay, the number of cycles, etc. Figure 7 on the next page showssome generation examples.
Function triggerMode (const & value) Trigger Type Description
Auto AUTOTRIG 0 (default) Hardware Triggers are generated continuously in an automaticway
VI/HVITrigger
VIHVITRIG 1 Software (VI)Hardware (HVI)
The DWG is triggered by the function DWGtrigger(Section 2.2.12 on page 32) provided that the DWG isrunning. DWGtrigger can be executed from a VI or anHVI (see HVI and VI details, Section 1.1.1 on page 6)
ExternalTrigger
EXTTRIG 2 Hardware The DWG waits for an external trigger (hardware trig-ger input is only available in some hardware modules)
Table 2: Trigger methods for the waveforms queued in a DWG (function DWG, Section 2.2.7 on page 26, or DWGqueue-Waveform, Section 2.2.8 on page 28)
Digital waveform generation can performed using two methods:
a) DWG function: This function provides a one step solution to load, queue and run a single waveform directly from afile or an array in memory, as shown in Figure 6.
b) Step by step programming: DWG simplifies the setup of a single waveform, but does not allow the user to controlimportant aspects of the waveform generation:
• The precise moment when waveforms are transferred from file to the PC RAM and to the onboard RAM. Thismay be important for long waveforms and time-critical applications.
• The possibility to have a variety of waveforms in the PC RAM or in the onboard RAM in order to queue themrepeatedly in the DWGs in an efficient way.
• The possibility to prepare the DWG queue with multiple waveforms in advance before starting the generation.This is important to create more complex generation sequences and control the start time precisely (Figure 7on the next page).
Signadyne Programming Libraries allow the user to control every aspect of the digital waveform generation (Figure 8on the facing page):
1) Create waveforms in the PC RAM with the SD-Wave Class (function New).
2) Transfer the waveforms to the onboard RAM with WaveformLoad.
3) Queue the waveforms in any DWG to create the desired generation pattern (function DWGqueueWaveform).
4) Start the generation with DWGrun and provide triggers if required.
10 / 60 Rev. 1.4 (April 10, 2012)
SD-PXE-DIO-H0003
Figure 7: Examples of the DWGs queue configuration
Figure 8: Process to prepare and run digital waveforms
TIP:
HVI Generation Sequences: The queue system of the Digital Waveform Generators (DWGs) provides a way to createsimple generation sequences. For more complex sequences, the best solution is the use of a Hard Virtual Instrument(HVI) programmed with Signadyne ProcessFlow [3]. HVIs are time deterministic with nanosecond resolution (Sec-tion 1.1 on page 6), and ProcessFlow provides a user-friendly flowchart programming environment.
Rev. 1.4 (April 10, 2012) 11 / 60
SD-PXE-DIO-H0003
TIP:
Pausing and Resuming a DWG: The function DWGstop pauses the DWG operation, leaving the last waveform pointat the output. The waveform generation can be resumed calling DWGrun.
Note: After a call to DWG, the selected DWG is running, because this function performs a DWGrun automatically.
Prescaler: Each queued waveform can have a sampling clock prescaler associated with it. This prescaler divides theeffective waveform sampling rate providing a way to reduce waveform sizes.
ADVANCED:
Prescaler and aliasing: Note that reducing the effective sampling rate produces aliasing inside the module reconstruc-tion filter bandwidth. This unfiltered alias appears in the output.
12 / 60 Rev. 1.4 (April 10, 2012)
SD-PXE-DIO-H0003
1.4 Data Acquisition Blocks (DAQs)
The Data Acquisition (DAQ) is a powerful and flexible block which acquires incoming digital words and sends them to theuser PC at the PXIe maximum transfer speed using dedicated DMA channels (Figure 9). The number of DAQ Blocksavailable in the SD-PXE-DIO-H0003 is shown in Specifications on page 2.
Figure 9: SD-PXE-DIO-H0003 digital words acquisition operation
The digital words acquisition requires two easy steps:
1) Setup: A call to the function DAQ (Section 2.2.13 on page 33) allows the user to configure, among others, the triggermethod (Table 3), the number of DAQ cycles to perform (number of triggers), the number of acquired digital wordsper cycle (DAQpointsPerCycle), and the number of digital words that must be acquired before interrupting the PC(DAQpoints). Figure 10 on the next page illustrates the flexibility of the DAQ block operation.
2) Data read:
a) Using DAQread (Section 2.2.14 on page 35): a blocking function that returns the array of acquired digital words(DAQdata).
b) Using a callback function (Section 2.2.32 on page 53): a user function that is automatically called when theconfigured amount of data is available.
Function triggerMode (const & value) Trigger Type Repetition Description
Auto DAQ AUTOTRIG 0 (default) Hardware Continuous Triggers are generated continuously inan automatic way
VI/HVITrigger
DAQ VIHVITRIG 1 Software (VI)Hardware (HVI)
On demand Data acquisition is triggered by thefunction DAQtrigger (Section 2.2.19 onpage 40), provided the DAQ is running.DAQtrigger can be executed from a VIor an HVI (see HVI and VI details, Sec-tion 1.1.1 on page 6)
ExternalTrigger
DAQ EXTTRIG 2 Hardware On demand Data acquisition waits for an externaltrigger (hardware trigger input is onlyavailable in some hardware modules)
Table 3: SD-PXE-DIO-H0003 trigger methods for the DAQ process (function DAQ, Section 2.2.13 on page 33, or DAQcon-fig, 2.2.15 on page 36)
ADVANCED:
Programming with events: The DAQ operation makes use of the event DAQeventDataReady (see Events, Section 1.5on page 16), but its operation is simplified with the functions DAQ and DAQread. The same functionality can beachieved calling the functions DAQconfig (Section 2.2.15 on page 36), DAQflush (Section 2.2.18 on page 39), DAQrun(Section 2.2.16 on page 37) and EventWaitFor (Section 2.2.29 on page 50) for a DAQeventDataReady event.
Rev. 1.4 (April 10, 2012) 13 / 60
SD-PXE-DIO-H0003
Figure 10: Examples of the DAQ operation (not all trigger methods are available in all modules, see Table 3 on theprevious page)
TIP:
Pausing and Resuming the DAQ: The function DAQstop (Section 2.2.17 on page 38) pauses the DAQ operation(triggers are discarded). The acquisition can be resumed calling DAQrun (Section 2.2.16 on page 37).
Note: After a call to the function DAQ, the acquisition is running, because this function performs a DAQrun automatically.A DAQstop is also performed automatically when the DAQ block reaches the specified number of acquisition cycles.
ADVANCED:
Onboard memory and DAQpoints selection: The acquired digital words are first stored in a DAQ buffer located in themodule onboard RAM and then sent to the PC RAM via the ultra fast PXI Express bus (Figure 9 on the previous page)using dedicated DMA channels. This DAQ buffer, and therefore the minimum amount of onboard RAM needed for anapplication, is directly the size of the data array the user wants to receive in each DAQread or callback function call(DAQeventDataReady event). This data array, called DAQdata, contains DAQpoints digital words. Therefore, its size isDAQpoints x 4 bytes/digital word (in the case of the SD-PXE-DIO-H0003). The size of this DAQ buffer must be chosenaccording to two criteria:
• High speed transients: the DAQ onboard buffer can store bursts of digital words at higher rates than the PXIe andthe computer can handle. Larger buffers allow handling longer high speed bursts.
• PC load: The DAQ buffer must be chosen to allow the PC enough time to process each DAQ buffer (DAQdata) andto handle interrupts and process-context switching tasks. For example, if a computer requires 500 ms to processDAQdata, the buffer size must be such that it can store more than 500 ms of input timestamps without interruptingthe computer (DAQeventDataReady event). The DAQ block facilitates the task of adjusting the PC processing ratewith the introduction of the DAQ cycles (Figure 10).
Note: The amount of required PC RAM is double the amount of required onboard RAM.
14 / 60 Rev. 1.4 (April 10, 2012)
SD-PXE-DIO-H0003
Prescaler: The DAQ block has an input prescaler which can be configured to discard digital words, reducing the effectiveacquisition data rate (function DAQ, Section 2.2.13 on page 33, or DAQconfig, 2.2.15 on page 36).
DAQ counter: The DAQ block has a dedicated counter to store the number of acquired digital words since the last call toDAQ or DAQflush. This counter can be read with DAQcounterRead (Section 2.2.20 on page 41).
Rev. 1.4 (April 10, 2012) 15 / 60
SD-PXE-DIO-H0003
1.5 Events
1.5.1 Overview
Events are signals sent by a device (a hardware module, an HVI, etc.) to the PC, which can be captured in VIs usingSignadyne Programming Libraries [2], e.g. from C/C++, LabVIEW, MATLAB, etc. Thus, the user can write specific codethat is executed only when the event is signaled.
There are two methods to capture an event (Figure 11): using a callback function (Section 2.2.32 on page 53), a user-defined function executed whenever the event is signaled; or using the function EventWaitFor (Section 2.2.29 on page 50),a blocking call that sends the program/thread to sleep until the event is signaled. Both methods cannot be used with thesame event at the same time.
ADVANCED:
Blocking functions and threads: The user can emulate the behaviour of the callback function method by creating auser thread that calls the EventWaitFor blocking function.
Some events require an acknowledgement from the user, performed with the function EventAcknowledge (Section 2.2.30on page 51).
Figure 11: Event capture using a callback function (left), and using the blocking function EventWaitFor (right). Both methodscannot be concurrently used with the same event.
NOTE:
Device-specific Events: Each Signadyne device (a hardware module, an HVI, etc.) has its own events. Check thecorresponding datasheet to see the events available a specific device.
NOTE:
Callback and EventWaitFor Function Parameters: Some input parameters in the callback function (Section 2.2.32on page 53) and some output parameters in the EventWaitFor function (Section 2.2.29 on page 50) are defined in ageneric format, but they take a specific form for each particular event. For instance, the generic buffer in the dataacquisition event becomes the DAQ buffer.
16 / 60 Rev. 1.4 (April 10, 2012)
SD-PXE-DIO-H0003
1.5.2 SD-PXE-DIO-H0003 Event List
The events of the SD-PXE-DIO-H0003 are listed in Table 4.
Event eventNumber Description
DAQeventRun 1024+(n*10) DAQ n has started or resumed acquisition
DAQevenStop 1024+(n*10)+1 DAQ n has been paused
DAQeventTrigger 1024+(n*10)+2 DAQ n starts digital words acquisition as a result of a trigger
DAQeventDataReady 1024+(n*10)+3 DAQ n has a new digital words buffer available
Table 4: List of SD-PXE-DIO-H0003 events
Rev. 1.4 (April 10, 2012) 17 / 60
SD-PXE-DIO-H0003
2 VI / HVI Programming
2.1 Overview
As described in Section 1.1.2 on page 6, virtual instrumentation is the use of customizable software to create user-definedcontrol, test and measurement systems, called Virtual Instruments (VI). For this purpose, Signadyne delivers highly opti-mized static and dynamic programming libraries [2].
a) Static Libraries
Ready-to-use static libraries are supplied for the following programming languages and compilers:
Language Compiler Files
C Any C compiler *.h, *.lib
MinGW (Qt), GCC *.h, *.a
C++ Microsoft Visual Studio *.h, *.lib
MinGW (Qt), GCC *.h, *.a
LabVIEW National Instruments LabVIEW *.vi
b) Dynamic Libraries
Dynamic libraries are compatible with any programming language that has a compiler capable of performing dynamiclinking. Here are some examples:
∙ C++ compilers not listed above.
∙ Other programming languages: Java, Python, Visual Basic, C#, PHP, Perl, Fortran, Pascal, etc.
∙ Computer Algebra Systems (CAS): MathWorks MATLAB, Wolfram Mathematica, Maplesoft Maple, etc.
Dynamic libraries available:
Exported Functions Language Operating System Files
C Microsoft Windows *.dll
NOTE:
DLL function prototypes: The exported functions of the dynamic libraries have the same prototype as their counter-parts of the static libraries.
NOTE:
Function Parameters: Some of the parameters of the library functions are language dependent. The table of inputs andoutputs parameters for each function is a conceptual description, therefore, the user must check the specific languagefunction to see how to use it. One example are the ID parameters (moduleID, etc.), which identify objects in non object-oriented languages. In object-oriented languages the objects are identified by their instances, and therefore the ID arenot present.
Function Names: Some programming languages like C++ or LabVIEW have a feature called function overloadingor polymorphism, that allows creating several functions with the same name but different input/output parameters. Inlanguages without this feature, functions with different parameters must have different names.
NOTE:
Event Parameters: Some input parameters in the callback function (Section 2.2.32 on page 53) and some outputparameters in the EventWaitFor function (Section 2.2.29 on page 50) are defined in a generic format, but they take aspecific form for each particular event. For instance, the generic buffer0 in the data acquisition event becomes the DAQbuffer.
18 / 60 Rev. 1.4 (April 10, 2012)
SD-PXE-DIO-H0003
2.2 SD-DIO Class Functions
2.2.1 IOdirectionConfig
This function configures the direction (input/output) of the digital I/O lines (Figure 5 on page 8).
Compatibility
Programming Libraries v0.9 or newer
Parameters
NameType
DescriptionC C++ LabVIEW ProcessFlow
Inputs
moduleID int - - Module identifier (returned by Open)
lineMask long long long long - Mask to select the digital lines to configure (LSBis DIO A[0], bit 1 is DIO A[1] and so forth). Ifthe module has two Banks, line DIO B[0] comesafter DIO A[31]. ’0’ to modify and ’1’ to leaveuntouched
direction long long long long - ’0’ for input and ’1’ for output. Each bit representsone digital line (LSB is DIO A[0], bit 1 is DIO A[1]and so forth). If the module has two Banks, lineDIO B[0] comes after DIO A[31]
errorIn - - - If it contains an error, the function will not be ex-ecuted and errorIn will be passed to errorOut
Outputs
moduleIDOut - - - A copy of moduleID
errorOut int int - See error codes in Table 9 on page 58
C Function
int SD Module IOdirectionConfig(int moduleID, long long lineMask, long long direction);
C++ Function
int SD DIO::IOdirectionConfig(long long lineMask, long long direction);
LabVIEW
SD Module IOdirectionConfig.vi
Rev. 1.4 (April 10, 2012) 19 / 60
SD-PXE-DIO-H0003
2.2.2 BusConfig
This function configures the I/O line assignment and ordering of a Bus (Section 1.2.2 on page 8).
Compatibility
Programming Libraries v0.9 or newer
Parameters
NameType
DescriptionC C++ LabVIEW ProcessFlow
Inputs
moduleID int - - Module identifier (returned by Open)
port int int - Bus port to configure (Table 1 on page 9)
length int int - The number of digital lines in the Bus
lines int* int* - Array containing the list of digital lines in the Bus
errorIn - - - If it contains an error, the function will not be executed anderrorIn will be passed to errorOut
Outputs
moduleIDOut - - - A copy of moduleID
errorOut int int - See error codes in Table 9 on page 58
C Function
int SD Module BusConfig(int moduleID, int port, int length, int* lines);
C++ Function
int SD DIO::BusConfig(int port, int length, int* lines);
LabVIEW
SD Module BusConfig.vi
20 / 60 Rev. 1.4 (April 10, 2012)
SD-PXE-DIO-H0003
2.2.3 PortWrite
This function writes values in a digital output Bank or Bus (Section 1.2.2 on page 8). The user has the options to: write thefull port; write the full port with a mask to select which digital lines are modified and which ones left untouched; or changea single digital line (Banks only).
Compatibility
Programming Libraries v0.9 or newerSignadyne ProcessFlow v0.9 or newer
Signadyne ProcessFlow
Execution Latency: 10 ns
Timing resolution: 1 ns
Parameters
NameType
DescriptionC C++ LabVIEW ProcessFlow
Inputs
moduleID int - - Module identifier (returned by Open)
port int int selection list Output port (Table 1 on page 9). For singlelines only Banks are valid
portValue long long long long - ’0’ or ’1’ for logic levels low or high. Each bitrepresents one digital line (LSB is PORT[0], bit1 is PORT[1] and so forth)
- - - constant[format] Constant in the specified format (Decimal, Bi-nary, Hexadecimal, etc.)
- - - variable Local variable
lineMask long long long long - Mask to selects the digital lines to modify (LSBis PORT[0], bit 1 is PORT[1] and so forth). ’0’to modify and ’1’ to leave untouched
- - - constant[format] Constant in the specified format (Decimal, Bi-nary, Hexadecimal, etc.)
line int int - Digital line number within the Bank
lineValue int int - ’0’ or ’1’ for logic levels low or high
errorIn - - - If it contains an error, the function will not beexecuted and errorIn will be passed to erro-rOut
Outputs
moduleIDOut - - - A copy of moduleID
errorOut int int - See error codes in Table 9 on page 58
C Function
int SD Module PortWrite(int moduleID, int port, long long portValue);int SD Module PortWriteWithMask(int moduleID, int port, long long portValue, long long lineMask);int SD Module PortWriteSingleLine(int moduleID, int port, int line, int lineValue);
C++ Function
int SD DIO::PortWrite(int port, long long portValue);int SD DIO::PortWrite(int port, long long portValue, long long lineMask);int SD DIO::PortWriteSingleLine(int port, int line, int lineValue);
ProcessFlow
PortWritePortPort Value
TypeValue
Line MaskTypeValue
LabVIEW
SD Module PortWrite.vi
Rev. 1.4 (April 10, 2012) 21 / 60
SD-PXE-DIO-H0003
LabVIEW
SD Module PortWriteWithMask.vi
LabVIEW
SD Module PortWriteSingleLine.vi
22 / 60 Rev. 1.4 (April 10, 2012)
SD-PXE-DIO-H0003
2.2.4 PortRead
This function reads the value of a digital input Bank or Bus (Section 1.2.2 on page 8). The user has the options to read thefull port or a single digital line (Banks only).
Compatibility
Programming Libraries v0.9 or newerSignadyne ProcessFlow v0.9 or newer
Parameters
NameType
DescriptionC C++ LabVIEW ProcessFlow
Inputs
moduleID int - - Module identifier (returned by Open)
port int int selection list Input port (Table 1 on page 9)
line int int - Digital line number within the Bank
errorIn - - - If it contains an error, the function will not beexecuted and errorIn will be passed to erro-rOut
Outputs
moduleIDOut - - - A copy of moduleID
portValue long long* long long* - ’0’ or ’1’ for logic levels low or high. Each bitrepresents one digital line (LSB is PORT[0],bit 1 is PORT[1] and so forth)
destination - - - selection list Destination variable to store the port value
lineValue int int - ’0’ or ’1’ for logic levels low or high, negativevalues for errors (see error codes in Table 9on page 58)
- - - constant[format] Constant in the specified format (Decimal,Binary, Hexadecimal, etc.)
errorOut int int - See error codes in Table 9 on page 58
C Function
int SD Module PortRead(int moduleID, int port, long long* portValue);int SD Module PortReadSingleLine(int moduleID, int port, int line);
C++ Function
int SD DIO::PortRead(int port, long long* portValue);int SD DIO::PortReadSingleLine(int port, int line);
ProcessFlow
PortReadPortDestination
LabVIEW
SD Module PortRead.vi
LabVIEW
SD Module PortReadSingleLine.vi
Rev. 1.4 (April 10, 2012) 23 / 60
SD-PXE-DIO-H0003
2.2.5 WaveformLoad
This function loads the specified waveform into the module onboard RAM. Waveforms must be created first with the SD-Wave class (Section 2.3 on page 54).
ADVANCED:
Memory usage: When a waveform is replaced (same waveformNumber used more than once) and the new waveformhas a different size than the old one, the module’s RAM memory has to be defragmented. In this case the process takesmore time to be accomplished.
Compatibility
Programming Libraries v0.9 or newer
Parameters
NameType
DescriptionC C++ LabVIEW ProcessFlow
Inputs
moduleID int - - Module identifier (returned by Open)
waveformID int - - Waveform identifier (see SD-Wave Class, Sec-tion 2.3 on page 54)
waveformObject - SD Wave* - - Pointer to the waveform object (see SD-WaveClass, Section 2.3 on page 54)
waveformNumber int int - Waveform number to identify the waveform in sub-sequent related function calls. This value must bein the [0..n] range, and in order to optimized on-board memory usage, it should as low as possible
errorIn - - - If it contains an error, the function will not be exe-cuted and errorIn will be passed to errorOut
Outputs
moduleIDOut - - - A copy of moduleID
availableRAM int int - Available onboard RAM in waveform points, or anegative number for errors (see error codes in Ta-ble 9 on page 58)
errorOut - - - See error codes in Table 9 on page 58
C Function
int SD Module WaveformLoad(int moduleID, int waveformID, int waveformNumber);
C++ Function
int SD DIO::WaveformLoad(SD Wave* waveformObject, int waveformNumber)
LabVIEW
SD Module WaveformLoad.vi
24 / 60 Rev. 1.4 (April 10, 2012)
SD-PXE-DIO-H0003
2.2.6 WaveformFlush
This function deletes all the waveforms from the module onboard RAM and flushes all DWG queues (DWGflush, Sec-tion 2.2.9 on page 29).
Compatibility
Programming Libraries v0.9 or newer
Parameters
NameType
DescriptionC C++ LabVIEW ProcessFlow
Inputs
moduleID int - - Module identifier (returned by Open)
errorIn - - - If it contains an error, the function will not be executed anderrorIn will be passed to errorOut
Outputs
moduleIDOut - - - A copy of moduleID
errorOut int int - See error codes in Table 9 on page 58
C Function
int SD Module WaveformFlush(int moduleID);
C++ Function
int SD DIO::WaveformFlush()
LabVIEW
SD Module WaveformFlush.vi
Rev. 1.4 (April 10, 2012) 25 / 60
SD-PXE-DIO-H0003
2.2.7 DWG
This function provides a one-step method to load, queue and run a single waveform in one of the module Digital WaveformGenerators (DWGs) (Section 1.3 on page 10). The waveform can be loaded from an array of points in memory or from a file.
ADVANCED:
Step by step programming: This function is equivalent to create a waveform with new (SD-Wave class, Section 2.3on page 54), and to call WaveformLoad, DWGqueueWaveform and DWGrun. With these functions, the user hascomplete control of the memory usage, data transfer times between the PC and the module, and the possibility tocreate generation sequences and to control the generation start time precisely (Section 1.3 on page 10).
Compatibility
Programming Libraries v0.9 or newer
Parameters
NameType
DescriptionC C++ LabVIEW ProcessFlow
Inputs
moduleID int - - Module identifier (returned by Open)
DWG int int - DWG number where the waveform is queued.DWG n is associated with BUS OUT n
waveformData void* int* - Array with waveform points. Digital waveformsare defined by integers, whose bits correspondto the digital lines/channels in the BUS
waveformFile char* char* - File containing the waveform points
fileType int int - 0 for binary file, 1 for text file (one value per line)
waveformPoints int int - Number of points of the waveform
sampleRate double double - Sample rate of waveformData in samples/s
triggerMode int int - Trigger method to launch the waveform (Table 2on page 10)
startDelay int int - Defines the delay between the trigger and thewaveform launch in tens of ns
cycles int int - Number of times the waveform is repeated oncelaunched (negative means infinite)
prescaler int int - Prescaler value (1..65,535). The DWG clock isdivided by ”prescaler value”, reducing the wave-form sampling rate
errorIn - - - If it contains an error, the function will not be ex-ecuted and errorIn will be passed to errorOut
Outputs
moduleIDOut - - - A copy of moduleID
availableRAM int int - Available onboard RAM in waveform points, ornegative number for errors (see error codes inTable 9 on page 58)
errorOut - - - See error codes in Table 9 on page 58
26 / 60 Rev. 1.4 (April 10, 2012)
SD-PXE-DIO-H0003
C Function
int SD Module DWGfromArray(int moduleID, int DWG, void* waveformData, int waveformPoints, double sampleRate,int triggerMode, int startDelay, int cycles, int prescaler);
int SD Module DWGfromFile(int moduleID, int DWG, char* waveformFile, int fileType, int waveformPoints,double sampleRate, int triggerMode, int startDelay, int cycles, int prescaler);
C++ Function
int SD DIO::DWG(int DWG, int* waveformData, int waveformPoints, double sampleRate,int triggerMode, int startDelay, int cycles, int prescaler);
int SD DIO::DWG(int DWG, char* waveformFile, int fileType, int waveformPoints, double sampleRate, int triggerMode,int startDelay, int cycles, int prescaler);
LabVIEW
SD Module DWGfromArray.vi SD Module DWGfromFile.vi
Rev. 1.4 (April 10, 2012) 27 / 60
SD-PXE-DIO-H0003
2.2.8 DWGqueueWaveform
This function queues the specified waveform in one of the Digital Waveform Generators (DWGs) of the module (Section 1.3on page 10). The waveform must be already loaded in the module onboard RAM (function WaveformLoad, Section 2.2.5on page 24).
Compatibility
Programming Libraries v0.9 or newerSignadyne ProcessFlow v0.9 or newer
Parameters
NameType
DescriptionC C++ LabVIEW ProcessFlow
Inputs
moduleID int - - Module identifier (returned by Open)
DWG int int - DWG number where the waveform is queued. DWG nis associated with BUS OUT n
waveformNumber int int constant Waveform to be queued into the DWG. It must be al-ready loaded with WaveformLoad
triggerMode int int - Trigger method to launch the waveform (Table 2 onpage 10)
startDelay int int - Defines the delay between the trigger and the waveformlaunch in tens of ns
cycles int int - Number of times the waveform is repeated oncelaunched (negative means infinite)
prescaler int int - Prescaler value (1..65,535). The DWG clock is dividedby ”prescaler value”, reducing the waveform samplingrate
errorIn - - - If it contains an error, the function will not be executedand errorIn will be passed to errorOut
Outputs
moduleIDOut - - - A copy of moduleID
errorOut int int - See error codes in Table 9 on page 58
C Function
int SD Module DWGqueueWaveform(int moduleID, int DWG, int waveformNumber, int triggerMode, int startDelay,int cycles, int prescaler);
C++ Function
int SD DIO::DWGqueueWaveform(int DWG, int waveformNumber, int triggerMode, int startDelay, int cycles, int prescaler);
ProcessFlow
DWGqueueWaveformDWGWaveform numberTrigger modeStart delay
TypeValue
Cycles
LabVIEW
SD Module DWGqueueWaveform.vi
28 / 60 Rev. 1.4 (April 10, 2012)
SD-PXE-DIO-H0003
2.2.9 DWGflush
This function empties the queue of the selected Digital Waveform Generators (DWGs) (Section 1.3 on page 10). Wave-forms are not removed from the module onboard RAM.
Compatibility
Programming Libraries v0.9 or newerSignadyne ProcessFlow v0.9 or newer
Parameters
NameType
DescriptionC C++ LabVIEW ProcessFlow
Inputs
moduleID int - - Module identifier (returned by Open)
DWGmask int int - Mask to selects the DWGs to flush (LSB is DWG 0, bit 1 isDWG 1 and so forth)
DWG - - - selection list DWG to flush
errorIn - - - If it contains an error, the function will not be executed anderrorIn will be passed to errorOut
Outputs
moduleIDOut - - - A copy of moduleID
errorOut int int - See error codes in Table 9 on page 58
C Function
int SD Module DWGflush(int moduleID, int DWGmask);
C++ Function
int SD DIO::DWGflush(int DWGmask);
ProcessFlow
DWGflushDWG
LabVIEW
SD Module DWGflush.vi
Rev. 1.4 (April 10, 2012) 29 / 60
SD-PXE-DIO-H0003
2.2.10 DWGrun
This function starts or resumes the selected Digital Waveform Generators (DWGs) (Section 1.3 on page 10). The gen-eration will start when a trigger is received, provided that at least one waveform is queued in these DWGs (functionsDWGqueueWaveform, or DWG).
Compatibility
Programming Libraries v0.9 or newerSignadyne ProcessFlow v0.9 or newer
Parameters
NameType
DescriptionC C++ LabVIEW ProcessFlow
Inputs
moduleID int - - Module identifier (returned by Open)
DWGmask int int - Mask to select the DWGs to be started (LSB is DWG 0, bit 1is DWG 1 and so forth)
DWG - - - selection list DWG to be started
errorIn - - - If it contains an error, the function will not be executed anderrorIn will be passed to errorOut
Outputs
moduleIDOut - - - A copy of moduleID
errorOut int int - See error codes in Table 9 on page 58
C Function
int SD Module DWGrun(int moduleID, int DWGmask);
C++ Function
int SD DIO::DWGrun(int DWGmask);
ProcessFlow
DWGrunDWG
LabVIEW
SD Module DWGrun.vi
30 / 60 Rev. 1.4 (April 10, 2012)
SD-PXE-DIO-H0003
2.2.11 DWGstop
This function pauses the selected Digital Waveform Generators (DWGs) (Section 1.3 on page 10), leaving the last wave-form point at the output, and ignoring all incoming triggers. The waveform generation can be resumed calling DWGrun.
Compatibility
Programming Libraries v0.9 or newerSignadyne ProcessFlow v0.9 or newer
Parameters
NameType
DescriptionC C++ LabVIEW ProcessFlow
Inputs
moduleID int - - Module identifier (returned by Open)
DWGmask int int - Mask to select the DWGs to be stopped (LSB is DWG 0, bit1 is DWG 1 and so forth)
DWG - - - selection list DWG to be stopped
errorIn - - - If it contains an error, the function will not be executed anderrorIn will be passed to errorOut
Outputs
moduleIDOut - - - A copy of moduleID
errorOut int int - See error codes in Table 9 on page 58
C Function
int SD Module DWGstop(int moduleID, int DWGmask);
C++ Function
int SD DIO::DWGstop(int DWGmask);
ProcessFlow
DWGstopDWG
LabVIEW
SD Module DWGstop.vi
Rev. 1.4 (April 10, 2012) 31 / 60
SD-PXE-DIO-H0003
2.2.12 DWGtrigger
This function triggers the selected Digital Waveform Generators (DWGs) (Section 1.3 on page 10). The waveform waitingin the first position of the queue is launched provided it is configured with VI/HVI Trigger.
Compatibility
Programming Libraries v0.9 or newerSignadyne ProcessFlow v0.9 or newer
Parameters
NameType
DescriptionC C++ LabVIEW ProcessFlow
Inputs
moduleID int - - Module identifier (returned by Open)
DWGmask int int - Mask to select the DWGs to be triggered (LSB is DWG 0, bit1 is DWG 1 and so forth)
DWG - - - selection list DWG to be triggered
errorIn - - - If it contains an error, the function will not be executed anderrorIn will be passed to errorOut
Outputs
moduleIDOut - - - A copy of moduleID
errorOut int int - See error codes in Table 9 on page 58
C Function
int SD Module DWGtrigger(int moduleID, int DWGmask);
C++ Function
int SD DIO::DWGtrigger(int DWGmask);
ProcessFlow
DWGtriggerDWG
LabVIEW
SD Module DWGtrigger.vi
32 / 60 Rev. 1.4 (April 10, 2012)
SD-PXE-DIO-H0003
2.2.13 DAQ
This function configures and starts the Data Acquisition (DAQ, Section 1.4 on page 13) in two possible reading modes:
• Blocking: Using the function DAQread (Section 2.2.14 on page 35) to read the digital words. DAQread is a blockingfunction that is released when the amount of digital words specified in DAQpoints is acquired (DAQeventDataReadyevent is signaled) or when timeout elapses. This mode is enabled when a callback function is not specified (null).
• Non-blocking: The user specifies a callback function which is called whenever the DAQeventDataReady event issignaled or when timeout elapses. In the latter condition, there may be digital words available, but less than theamount specified in DAQpoints.
NOTE:
LabVIEW: In LabVIEW, the callBack function method cannot be used, the only option is to use DAQread.
ADVANCED:
Programming with events: This function is equivalent to call DAQconfig, program a callback with EventAddCallbackfor the DAQeventDataReady event, call DAQflush and finally call DAQrun.
Compatibility
Programming Libraries v0.9 or newer
Parameters
NameType
DescriptionC C++ LabVIEW ProcessFlow
Inputs
moduleID int - - Module identifier (returned by Open)
DAQ int int - DAQ to use
triggerMode int int - Trigger mode (Table 3 on page 13)
DAQpoints int int - Number of digital words to acquiredbefore DAQeventDataReady is gener-ated, i.e. DAQread is released or thecallback function is called
DAQpointsPerCycle int int - Number of digital words to acquire pertrigger
cycles int int - Number of acquisition cycles. Eachcycle requires a trigger specified bytriggerMode. A negative numbermeans continuous
prescaler int int - Prescaler value (1..65,535), 1 out of”prescaler value” digital words is ac-quired
callbackFunction callbackPtr callbackPtr - - User callback (Section 2.2.32 onpage 53)
callbackUserObject void* void* - - Optional parameter returned to theuser in the callback
timeout int int - Timeout in ms for the DAQevent-DataReady event. Negative meansforever
errorIn - - - If it contains an error, the function willnot be executed and errorIn will bepassed to errorOut
Outputs
moduleIDOut - - - A copy of moduleID
errorOut int int - See error codes in Table 9 on page 58
Rev. 1.4 (April 10, 2012) 33 / 60
SD-PXE-DIO-H0003
C Function
int SD Module DAQ(int moduleID, int DAQ, int triggerMode, int DAQpoints, int DAQpointsPerCycle, int cycles,int prescaler, callbackPtr callbackFunction, void* callbackUserObject, int timeout);
C++ Function
int SD DIO::DAQ(int DAQ, int triggerMode, int DAQpoints, int DAQpointsPerCycle, int cycles, int prescaler,callbackPtr callbackFunction, void* callbackUserObject, int timeout);
LabVIEW
SD Module DAQ.vi
34 / 60 Rev. 1.4 (April 10, 2012)
SD-PXE-DIO-H0003
2.2.14 DAQread
This function reads the digital words acquired with the selected DAQ (Section 1.4 on page 13). It can be used only whena callback function is not programmed. DAQread is a blocking function released when the configured amount of digitalwords is acquired, or when the timeout elapses. In the latter condition, there may be digital words available, but less thanthe configured amount.
ADVANCED:
LabVIEW multithreading: LabVIEW allows the user to create multiple threads very easily, e.g. by creating independentWhile Loop Structures. It may be useful to create a different thread that calls DAQread, obtaining the same behaviouras programming with a callback function.
ADVANCED:
Programming with events: This function is equivalent to EventWaitFor for a DAQeventDataReady event.
Compatibility
Programming Libraries v0.9 or newer
Parameters
NameType
DescriptionC C++ LabVIEW ProcessFlow
Inputs
moduleID int - - Module identifier (returned by Open)
DAQ int int - DAQ to be read
errorIn - - - If it contains an error, the function will not be executed anderrorIn will be passed to errorOut
Outputs
moduleIDOut - - - A copy of moduleID
DAQdata int* int* - Array with acquired digital words
DAQpoints int* int* - - Number of acquired digital words
status int int - ”1” if DAQpoints is equal to the amount of digital words con-figured with DAQ or DAQconfig, ”0” in case of timeout, ornegative numbers for errors (See error codes in Table 9 onpage 58)
errorOut - - - See error codes in Table 9 on page 58
C Function
int SD Module DAQread(int moduleID, int DAQ, int* DAQdata, int* DAQpoints);
C++ Function
int SD DIO::DAQread(int DAQ, int* DAQdata, int* DAQpoints);
LabVIEW
SD Module DAQread.vi
Rev. 1.4 (April 10, 2012) 35 / 60
SD-PXE-DIO-H0003
2.2.15 DAQconfig
This function configures the acquisition of digital words (Data Acquisition, Section 1.4 on page 13).
Compatibility
Programming Libraries v0.9 or newer
Parameters
NameType
DescriptionC C++ LabVIEW ProcessFlow
Inputs
moduleID int - - Module identifier (returned by Open)
DAQ int int - DAQ to configure
triggerMode int int - Trigger mode (Table 3 on page 13)
DAQpoints int int - Number of digital words to acquired before DAQevent-DataReady is generated, i.e. DAQread is released orthe callback function is called
DAQpointsPerCycle int int - Number of digital words to acquire per trigger
cycles int int - Number of acquisition cycles. Each cycle requires atrigger specified by triggerMode. A negative numbermeans continuous
prescaler int int - Prescaler value (1..65,535), 1 out of ”prescaler value”digital words is acquired
errorIn - - - If it contains an error, the function will not be executedand errorIn will be passed to errorOut
Outputs
moduleIDOut - - - A copy of moduleID
errorOut int int - See error codes in Table 9 on page 58
C Function
int SD Module DAQconfig(int moduleID, int DAQ, int triggerMode, int DAQpoints, int DAQpointsPerCycle, int cycles,int prescaler);
C++ Function
int SD DIO::DAQconfig(int DAQ, int triggerMode, int DAQpoints, int DAQpointsPerCycle, int cycles, int prescaler);
LabVIEW
SD Module DAQconfig.vi
36 / 60 Rev. 1.4 (April 10, 2012)
SD-PXE-DIO-H0003
2.2.16 DAQrun
This function starts or resumes acquisition on the selected DAQs (Section 1.4 on page 13). Acquisition will start when atrigger is received, see trigger modes in Table 3 on page 13.
Compatibility
Programming Libraries v0.9 or newerSignadyne ProcessFlow v0.9 or newer
Parameters
NameType
DescriptionC C++ LabVIEW ProcessFlow
Inputs
moduleID int - - Module identifier (returned by Open)
DAQmask int int - Mask to select which DAQs are started or resumed (LSB isDAQ 0, bit 1 is DAQ 1 and so forth). DAQ n is connected toBUS IN n
DAQ - - - selection list DAQ to be started or resumed. DAQ n is connected to BUSIN n
errorIn - - - If it contains an error, the function will not be executed anderrorIn will be passed to errorOut
Outputs
moduleIDOut - - - A copy of moduleID
errorOut int int - See error codes in Table 9 on page 58
C Function
int SD Module DAQrun(int moduleID, int DAQmask);
C++ Function
int SD DIO::DAQrun(int DAQmask);
ProcessFlow
DAQrunDAQ
LabVIEW
SD Module DAQrun.vi
Rev. 1.4 (April 10, 2012) 37 / 60
SD-PXE-DIO-H0003
2.2.17 DAQstop
This function pauses the digital words acquisition (Section 1.4 on page 13). Acquisition can be resumed using DAQrun(Section 2.2.16 on the preceding page).
Compatibility
Programming Libraries v0.9 or newerSignadyne ProcessFlow v0.9 or newer
Parameters
NameType
DescriptionC C++ LabVIEW ProcessFlow
Inputs
moduleID int - - Module identifier (returned by Open)
DAQmask int int - Mask to select which DAQs are paused (LSB is DAQ 0, bit 1is DAQ 1 and so forth). DAQ n is connected to BUS IN n
DAQ - - - selection list DAQ to be paused. DAQ n is connected to BUS IN n
errorIn - - - If it contains an error, the function will not be executed anderrorIn will be passed to errorOut
Outputs
moduleIDOut - - - A copy of moduleID
errorOut int int - See error codes in Table 9 on page 58
C Function
int SD Module DAQstop(int moduleID, int DAQmask);
C++ Function
int SD DIO::DAQstop(int DAQmask);
ProcessFlow
DAQstopDAQ
LabVIEW
SD Module DAQstop.vi
38 / 60 Rev. 1.4 (April 10, 2012)
SD-PXE-DIO-H0003
2.2.18 DAQflush
This function flushes the acquisition buffers and resets the acquisition counter included in a Data Acquisition block (Sec-tion 1.4 on page 13).
Compatibility
Programming Libraries v0.9 or newerSignadyne ProcessFlow v0.9 or newer
Parameters
NameType
DescriptionC C++ LabVIEW ProcessFlow
Inputs
moduleID int - - Module identifier (returned by Open)
DAQmask int int - Mask to select which DAQs are reset (LSB is DAQ 0, bit 1 isDAQ 1 and so forth). DAQ n is connected to BUS IN n
DAQ - - - selection list DAQ to be reset. DAQ n is connected to BUS IN n
errorIn - - - If it contains an error, the function will not be executed anderrorIn will be passed to errorOut
Outputs
moduleIDOut - - - A copy of moduleID
errorOut int int - See error codes in Table 9 on page 58
C Function
int SD Module DAQflush(int moduleID, int DAQmask);
C++ Function
int SD DIO::DAQflush(int DAQmask);
ProcessFlow
DAQflushDAQ
LabVIEW
SD Module DAQflush.vi
Rev. 1.4 (April 10, 2012) 39 / 60
SD-PXE-DIO-H0003
2.2.19 DAQtrigger
This function triggers the acquisition of digital words in the selected DAQs (Section 1.4 on page 13) provided that they areconfigured for VI/HVI Trigger (Table 3 on page 13).
Compatibility
Programming Libraries v0.9 or newerSignadyne ProcessFlow v0.9 or newer
Parameters
NameType
DescriptionC C++ LabVIEW ProcessFlow
Inputs
moduleID int - - Module identifier (returned by Open)
DAQmask int int - Mask to select which DAQs are triggered (LSB is DAQ 0, bit1 is DAQ 1 and so forth). DAQ n is connected to BUS IN n
DAQ - - - selection list DAQ to be triggered. DAQ n is connected to BUS IN n
errorIn - - - If it contains an error, the function will not be executed anderrorIn will be passed to errorOut
Outputs
moduleIDOut - - - A copy of moduleID
errorOut int int - See error codes in Table 9 on page 58
C Function
int SD Module DAQtrigger(int moduleID, int DAQmask);
C++ Function
int SD DIO::DAQtrigger(int DAQmask);
ProcessFlow
DAQtriggerDAQ
LabVIEW
SD Module DAQtrigger.vi
40 / 60 Rev. 1.4 (April 10, 2012)
SD-PXE-DIO-H0003
2.2.20 DAQcounterRead
This function reads the number of digital words acquired by the selected DAQ (Section 1.4 on page 13) since the last callto DAQflush or DAQ.
Compatibility
Programming Libraries v0.9 or newer
Parameters
NameType
DescriptionC C++ LabVIEW ProcessFlow
Inputs
moduleID int - - Module identifier (returned by Open)
DAQ int int - DAQ whose counter is read
errorIn - - - If it contains an error, the function will not be executed anderrorIn will be passed to errorOut
Outputs
moduleIDOut - - - A copy of moduleID
counter int int - Value of the DAQ counter or a negative number for errors(See error codes in Table 9 on page 58)
errorOut - - - See error codes in Table 9 on page 58
C Function
int SD Module DAQcounterRead(int moduleID, int DAQ);
C++ Function
int SD DIO::DAQcounterRead(int DAQ);
LabVIEW
SD Module DAQcounterRead.vi
Rev. 1.4 (April 10, 2012) 41 / 60
SD-PXE-DIO-H0003
2.2.21 DAQrelease
This function finishes the DAQ operation, and releases all the memory buffers associated with the DAQ (onboard and PCbuffers).
Compatibility
Programming Libraries v0.9 or newer
Parameters
NameType
DescriptionC C++ LabVIEW ProcessFlow
Inputs
moduleID int - - Module identifier (returned by Open)
DAQ int int - DAQ to be closed
errorIn - - - If it contains an error, the function will not be executed anderrorIn will be passed to errorOut
Outputs
moduleIDOut - - - A copy of moduleID
errorOut - - - See error codes in Table 9 on page 58
C Function
int SD Module DAQrelease(int moduleID, int DAQ);
C++ Function
int SD DIO::DAQrelease(int DAQ);
LabVIEW
SD Module DAQrelease.vi
42 / 60 Rev. 1.4 (April 10, 2012)
SD-PXE-DIO-H0003
2.2.22 MathAssign (D=S)
This function copies the value of the source parameter (S) into the destination variable (D).
Compatibility
Signadyne ProcessFlow v0.9 or newerSignadyne ProcessFlow
Execution Latency: 50 ns
Timing resolution: 1 ns
Parameters
NameType
DescriptionC C++ LabVIEW ProcessFlow
Inputs
destination - - - variable Destination local variable
source - - - constant[format] Constant in the specified format (Decimal, Binary, Hexadeci-mal, etc.)
- - - variable Source local variable
- - - port Input port (Section 1.2.2 on page 8)
ProcessFlow
MathAssign (D=S)DestinationSource
TypeValue
Rev. 1.4 (April 10, 2012) 43 / 60
SD-PXE-DIO-H0003
2.2.23 MathArithmetics (R=A[+-*/]B)
This function subtracts, adds, multiplies or divides the values of the operands A and B, writing the result in R.
Compatibility
Signadyne ProcessFlow v0.9 or newerSignadyne ProcessFlow
Execution Latency: 50 ns
Timing resolution: 1 ns
Parameters
NameType
DescriptionC C++ LabVIEW ProcessFlow
Inputs
Result - - - variable Destination local variable
A - - - constant[format] Constant in the specified format (Decimal, Binary, Hexadeci-mal, etc.)
- - - variable Local variable
- - - port Input port (Section 1.2.2 on page 8)
Operation - - - selection list Arithmetic operation (+, -, *, /)
B - - - constant[format] Constant in the specified format (Decimal, Binary, Hexadeci-mal, etc.)
- - - variable Local variable
- - - port Input port (Section 1.2.2 on page 8)
ProcessFlow
MathArithmetics (R=A[+-*/]B)ResultA
TypeValue
OperationB
TypeValue
44 / 60 Rev. 1.4 (April 10, 2012)
SD-PXE-DIO-H0003
2.2.24 MathMultAcc (R=A[+-]B[*/]C)
This function performs a Multiplication and Accumulation (MAC) operation, widely used in digital signal processing.
Compatibility
Signadyne ProcessFlow v0.9 or newerSignadyne ProcessFlow
Execution Latency: 50 ns
Timing resolution: 1 ns
Parameters
NameType
DescriptionC C++ LabVIEW ProcessFlow
Inputs
Result - - - variable Destination local variable
A - - - constant[format] Constant in the specified format (Decimal, Binary, Hexadeci-mal, etc.)
- - - variable Local variable
- - - port Input port (Section 1.2.2 on page 8)
Operation - - - selection list Arithmetic operation for the Accumulation (+ or -)
B - - - constant[format] Constant in the specified format (Decimal, Binary, Hexadeci-mal, etc.)
- - - variable Local variable
- - - port Input port (Section 1.2.2 on page 8)
Operation - - - selection list Arithmetic operation for the Multiplication (* or /)
C - - - constant[format] Constant in the specified format (Decimal, Binary, Hexadeci-mal, etc.)
- - - variable Local variable
- - - port Input port (Section 1.2.2 on page 8)
ProcessFlow
MathMultAcc (R=A[+-]B[*/]C)ResultA
TypeValue
OperationB
TypeValue
OperationC
TypeValue
Rev. 1.4 (April 10, 2012) 45 / 60
SD-PXE-DIO-H0003
2.2.25 Open
This function initializes a hardware module, therefore it must be called before using any other module-related function. Amodule can be opened using the serial number or the chassis and slot number. The first option ensures the same moduleis always opened regardless its chassis or slot location.
Compatibility
Programming Libraries v0.9 or newer
Parameters
NameType
DescriptionC C++ LabVIEW ProcessFlow
Inputs
partNumber char* char* - Complete module part number (e.g. ”SD-PXE-DIO-H0003-1G”)
serialNumber char* char* - Module Serial Number (e.g. ”ND23G86A”). This infor-mation can be found on the product, in Signadyne Man-ager (SDM), or in nearly any Signadyne software
chassis int int - Chassis number where the device is located. This infor-mation can be found in Signadyne Manager (SDM)
slot int int - Slot number where the device is plugged in
errorIn - - - If it contains an error, the function will not be executedand errorIn will be passed to errorOut
Outputs
moduleID int int - Module identifier or negative numbers for errors (see er-ror codes in Table 9 on page 58)
errorOut - - - See error codes in Table 9 on page 58
C Function
int SD Module OpenWithSerialNumber(char* partNumber, char* serialNumber);int SD Module OpenWithSlot(char* partNumber, int chassis, int slot);
C++ Function
int SD DIO::Open(char* partNumber, char* serialNumber);int SD DIO::Open(char* partNumber, int chassis, int slot);
LabVIEW
SD Module OpenWithSerialNumber.vi SD Module OpenWithSlot.vi
46 / 60 Rev. 1.4 (April 10, 2012)
SD-PXE-DIO-H0003
2.2.26 Close
This function releases all the resources allocated for the module instance. It must be always called before exiting theapplication.
Compatibility
Programming Libraries v0.9 or newer
Parameters
NameType
DescriptionC C++ LabVIEW ProcessFlow
Inputs
moduleID int - - Module identifier (returned by Open)
errorIn - - - If it contains an error, the function will not be executed and er-rorIn will be passed to errorOut
Outputs
errorOut int int - See error codes in Table 9 on page 58
C Function
int SD Module Close(int moduleID);
C++ Function
int SD DIO::Close();
LabVIEW
SD Module Close.vi
Rev. 1.4 (April 10, 2012) 47 / 60
SD-PXE-DIO-H0003
2.2.27 EventAddCallback
This function programs an event to execute a user callback function (Section 1.5.1 on page 16). This callback function iscalled whenever the event is signaled or the callbackTimeout is reached. If the callback function is programmed for anevent, the EventWaitFor function cannot be used, both methods cannot coexist for the same event.
NOTE:
LabVIEW: In LabVIEW, the callback function method cannot be used, the only option is to use EventWaitFor.
Compatibility
Programming Libraries v0.9 or newer
Parameters
NameType
DescriptionC C++ LabVIEW ProcessFlow
Inputs
moduleID int - - - Module identifier (returned by Open)
eventNumber int int - - Identifies the event (see Table 4 onpage 17)
callbackFunction callbackPtr callbackPtr - - Specifies the user callback function
callbackUserObject void* void* - - Optional parameter that will be re-turned to the user in the callback
Outputs
errorOut int int - - See error codes in Table 9 on page 58
C Function
int SD Module EventAddCallback(int moduleID, int eventNumber, callbackPtr callbackFunction, void* callbackUserOb-ject);
C++ Function
int SD DIO::EventAddCallback(int eventNumber, callbackPtr callbackFunction, void* callbackUserObject);
48 / 60 Rev. 1.4 (April 10, 2012)
SD-PXE-DIO-H0003
2.2.28 EventRemoveCallback
This function detaches the callback function previously attached to an event using EventAddCallback (Section 2.2.27 onthe preceding page).
Compatibility
Programming Libraries v0.9 or newer
Parameters
NameType
DescriptionC C++ LabVIEW ProcessFlow
Inputs
moduleID int - - - Module identifier (returned by Open)
eventNumber int int - - Identifies the event (see Table 4 onpage 17)
callbackFunction callbackPtr callbackPtr - - Pointer to the user callback function to bedetached from the event
Outputs
errorOut int int - - See error codes in Table 9 on page 58
C Function
int SD Module EventRemoveCallback(int moduleID, int eventNumber, callbackPtr callbackFunction);
C++ Function
int SD DIO::EventRemoveCallback(int eventNumber, callbackPtr callbackFunction);
Rev. 1.4 (April 10, 2012) 49 / 60
SD-PXE-DIO-H0003
2.2.29 EventWaitFor
This is a blocking function that waits until the specified event is signaled, or until the timeout specified with EventSetTimeout(Section 2.2.31 on page 52) elapses (see Events, Section 1.5 on page 16).
ADVANCED:
LabVIEW multithreading: LabVIEW allows the user to create multiple threads very easily, e.g. by creating indepen-dent While Loop Structures. It may be useful to create a different thread that calls EventWaitFor, obtaining the samebehaviour as programming with a callback function.
Compatibility
Programming Libraries v0.9 or newer
Parameters
NameType
DescriptionC C++ LabVIEW ProcessFlow
Inputs
moduleID int - - Module identifier (returned by Open)
eventNumber int int - Identifies the event (see Table 4 on page 17)
errorIn - - - If it contains an error, the function will not be exe-cuted and errorIn will be passed to errorOut
Outputs
moduleIDOut - - - A copy of moduleID
buffer0 void* void* event-dependent - ∗1
buffer0Points int* int* - - Number of data points contained in buffer0
buffer1 void* void* event-dependent - ∗1
buffer1Points int* int* - - Number of data points contained in buffer1
status int int - ”1” if the event was signaled, ”0” if there was atimeout, or negative numbers for errors (See errorcodes in Table 9 on page 58)
errorOut - - - See error codes in Table 9 on page 58
∗1 These parameters are event-specific (see Section 1.5 on page 16)
C Function
int SD Module EventWaitFor(int moduleID, int eventNumber, void* buffer0, int* buffer0Points, void* buffer1, int* buffer1Points);
C++ Function
int SD DIO::EventWaitFor(int eventNumber, void* buffer0, int* buffer0Points, void* buffer1, int* buffer1Points);
LabVIEW
SD Module EventWaitFor.vi
50 / 60 Rev. 1.4 (April 10, 2012)
SD-PXE-DIO-H0003
2.2.30 EventAcknowledge
This function sends an event acknowledge to the module which generated the event (Section 1.5 on page 16).
Compatibility
Programming Libraries v0.9 or newer
Parameters
NameType
DescriptionC C++ LabVIEW ProcessFlow
Inputs
moduleID int - - Module identifier (returned by Open)
eventNumber int int - Identifies the event (see Table 4 on page 17)
errorIn - - - If it contains an error, the function will not be executed anderrorIn will be passed to errorOut
Outputs
moduleIDOut - - - A copy of moduleID
errorOut int int - See error codes in Table 9 on page 58
C Function
int SD Module EventAcknowledge(int moduleID, int eventNumber);
C++ Function
int SD DIO::EventAcknowledge(int eventNumber);
LabVIEW
SD Module EventAcknowledge.vi
Rev. 1.4 (April 10, 2012) 51 / 60
SD-PXE-DIO-H0003
2.2.31 EventSetTimeout
This function sets the timeout for the specified event. Both the release of the function EventWaitFor and the call to the usercallback function, are performed when the corresponding event is signaled or when the timeout elapses.
NOTE:
Default timeout: The default timeout for all the events is -1 (∞)
Compatibility
Programming Libraries v0.9 or newer
Parameters
NameType
DescriptionC C++ LabVIEW ProcessFlow
Inputs
moduleID int - - Module identifier (returned by Open)
eventNumber int int - Identifies the event (see Table 4 on page 17)
timeout int int - Timeout in ms (-1 for ∞)
errorIn - - - If it contains an error, the function will not be executed anderrorIn will be passed to errorOut
Outputs
moduleIDOut - - - A copy of moduleID
errorOut int int - See error codes in Table 9 on page 58
C Function
int SD Module EventSetTimeout(int moduleID, int eventNumber);
C++ Function
int SD DIO::EventSetTimeout(int eventNumber);
LabVIEW
SD Module EventSetTimeout.vi
52 / 60 Rev. 1.4 (April 10, 2012)
SD-PXE-DIO-H0003
2.2.32 CallbackFunction
This is not a function of Signadyne Programming Libraries, it is a user function that can be called by the system when anevent is signaled or when the timeout specified with EventSetTimeout elapses (see Events, Section 1.5 on page 16). Thisfunction must be attached to an event using EventAddCallback. A callback function can be shared among multiple events.
TIP:
Type definitions: callbackPtr is a pointer that identifies the callback function with the following type definitions:
C: typedef void (*callbackPtr)(int, int, void*, int, void*, int, void*, int);
C++: typedef void (*callbackPtr)(SD Device*, int, void*, int, void*, int, void*, int);
ADVANCED:
C++ Static: In an object-oriented language like C++, a callback function cannot be a member of a class unless it isdeclared as static.
Compatibility
Programming Libraries v0.9 or newer
Parameters
NameType
DescriptionC C++ LabVIEW ProcessFlow
Inputs
deviceID int - - - Identifier of the device that generated theevent (module, HVI, etc.). The user may callgetDeviceType to know which type of deviceit is
deviceObject - SD Device* - - Device that generated the event (module,HVI, etc.). The user may call getDeviceTypeto know which type of device it is and to per-form the corresponding cast
eventNumber int int - - Identifies the event (Table 4 on page 17).For other devices, check their correspond-ing datasheets
buffer0 void* void* - - ∗1
buffer0Points int int - - Number of data points contained in buffer0
buffer1 void* void* - - ∗1
buffer1Points int int - - Number of data points contained in buffer1
callBackUserObject void* void* - - Optional parameter that was passed by theuser in the function eventAddCallback
status int int - - ”1” if the event was signaled, ”0” if there wasa timeout, or negative numbers for errors(see error codes in Table 9 on page 58)
∗1 These parameters are event-specific (see Section 1.5 on page 16)
C Function
void CallbackFunction(int deviceID, int eventNumber, void* buffer0, int buffer0Points, void* buffer1, int buffer1Points,void *callBackUserObject, int status);
C++ Function
void CallbackFunction(SD Device* deviceObject, int eventNumber, void* buffer0, int buffer0Points, void* buffer1,int buffer1Points, void *callBackUserObject, int status);
Rev. 1.4 (April 10, 2012) 53 / 60
SD-PXE-DIO-H0003
2.3 SD-Wave Class Functions
2.3.1 New
This function creates a waveform object from data points contained in an array in memory or in a file.
NOTE:
Sample Rate: This function accepts a waveform with any sample rate, and it translates it automatically to the samplerate of the specified hardware module.
ADVANCED:
Memory usage: Waveforms created with New are stored in the PC RAM, not in the module onboard RAM. Therefore,the limitation in the number of waveforms and their sizes is given by the amount of PC RAM.
Compatibility
Programming Libraries v0.9 or newer
Parameters
NameType
DescriptionC C++ LabVIEW ProcessFlow
Inputs
moduleID int int - Hardware module identifier (returned by Open).It specifies the waveform destination module
waveformData void* int* - Array with waveform points. Digital waveformsare defined by integers, whose bits correspondto the digital lines/channels in the BUS
waveformFile char* char* - File containing the waveform points
fileType int int - 0 for binary file, 1 for text file (one value per line)
waveformPoints int int - Number of points of the waveform
sampleRate double double - Sample rate of waveformData in samples/s
errorIn - - - If it contains an error, the function will not be ex-ecuted and errorIn will be passed to errorOut
Outputs
waveformID int - - Waveform identifier, or a negative number for er-rors (see error codes in Table 9 on page 58)
errorOut - int - See error codes in Table 9 on page 58
C Function
int SD Wave NewFromArray(int moduleID, void* waveformData, int waveformPoints, double sampleRate);int SD Wave NewFromFile(int moduleID, char* waveformFile, int fileType, int waveformPoints, double sampleRate);
C++ Function
int SD Wave::New(int moduleID, int* waveformData, int waveformPoints, double sampleRate);int SD Wave::New(int moduleID, char* waveformFile, int fileType, int waveformPoints, double sampleRate);
LabVIEW
SD Wave NewFromArray.vi SD Wave NewFromFile.vi
54 / 60 Rev. 1.4 (April 10, 2012)
SD-PXE-DIO-H0003
2.3.2 Delete
This function removes a waveform created with the New function.
ADVANCED:
Onboard waveforms: Waveforms are removed from the PC RAM only, not from the module onboard RAM.
Compatibility
Programming Libraries v0.9 or newer
Parameters
NameType
DescriptionC C++ LabVIEW ProcessFlow
Inputs
waveformID int - - Waveform identifier (returned by New)
errorIn - - - If it contains an error, the function will not be executed anderrorIn will be passed to errorOut
Outputs
errorOut int int - See error codes in Table 9 on page 58
C Function
int SD Wave Delete(int waveformID);
C++ Function
int SD Wave::Delete()
LabVIEW
SD Wave Delete.vi
Rev. 1.4 (April 10, 2012) 55 / 60
SD-PXE-DIO-H0003
2.4 DAQ Events
2.4.1 DAQeventRun
This event is signaled when the Data Acquisition Block n (Section 1.4 on page 13) has started or resumed acquisition.
eventNumber
1024+(n*10) where n is the DAQ number
Parameters
GenericName
Event-specificName
TypeDescriptionC C++ LabVIEW
buffer0 - void* void* Not used in this event
buffer1 - void* void* Not used in this event
Table 5: EventWaitFor and Callback function parameters (Section 2.2.29 on page 50, Section 2.2.32 on page 53) for aDAQeventRun event
2.4.2 DAQeventStop
This event is signaled when the Data Acquisition Block n (Section 1.4 on page 13) has been paused.
eventNumber
1024+(n*10)+1 where n is the DAQ number
Parameters
GenericName
Event-specificName
TypeDescriptionC C++ LabVIEW
buffer0 - void* void* Not used in this event
buffer1 - void* void* Not used in this event
Table 6: EventWaitFor and Callback function parameters (Section 2.2.29 on page 50, Section 2.2.32 on page 53) for aDAQeventStop event
2.4.3 DAQeventTrigger
This event is signaled when the Data Acquisition Block n (Section 1.4 on page 13) starts digital words acquisition as aresult of a trigger.
eventNumber
1024+(n*10)+2 where n is the DAQ number
Parameters
GenericName
Event-specificName
TypeDescriptionC C++ LabVIEW
buffer0 - void* void* Not used in this event
buffer1 - void* void* Not used in this event
Table 7: EventWaitFor and Callback function parameters (Section 2.2.29 on page 50, Section 2.2.32 on page 53) for aDAQeventTrigger event
56 / 60 Rev. 1.4 (April 10, 2012)
SD-PXE-DIO-H0003
2.4.4 DAQeventDataReady
This event is signaled when the Data Acquisition Block n (Section 1.4 on page 13) has a new digital words buffer available.
eventNumber
1024+(n*10)+3 where n is the DAQ number
Parameters
GenericName
Event-specificName
TypeDescriptionC C++ LabVIEW
buffer0 DAQdata int* int* Array that contains the captured digital words
buffer1 - void* void* Not used in this event
Table 8: EventWaitFor and Callback function parameters (Section 2.2.29 on page 50, Section 2.2.32 on page 53) for aDAQeventDataReady event
Rev. 1.4 (April 10, 2012) 57 / 60
SD-PXE-DIO-H0003
2.5 Error Codes
error errorDescription
-1 Wrong module slot
-2 Wrong module chassis
-2 Wrong serial number
-3 Wrong devicesID
-4 Wrong channel
-5 Wrong clock configuration
others No error
Table 9: Software error codes
58 / 60 Rev. 1.4 (April 10, 2012)
SD-PXE-DIO-H0003
References
[1] Signadyne VirtualKnob, Software Front Panels. Product Website.
[2] Signadyne Programming Libraries for Virtual Instrumentation. Product Website.
[3] Signadyne ProcessFlow, Hard Virtual Instrument (HVI) Programming Environment. Product Website.
[4] SD-PXE-DIO-H0001, 32 Channels, 800 Mbps, Digital I/O PXI Express Module. Product Website.
[5] SD-PXE-DIO-H0002, 64 Channels, 800 Mbps, Digital I/O PXI Express Module. Product Website.
[6] SD-PXE-DIO-H0004, 32 Channels, 1 Gbps, Differential Digital I/O PXIe Module. Product Website.
Rev. 1.4 (April 10, 2012) 59 / 60
SD-PXE-DIO-H0003
SD-PXE-DIO-H000316 Channels, 1 Gbps, Differential Digital I/O PXI Express Module
Rev. 1.4 (April 10, 2012)
Signadyne and its subsidiaries reserve the right to makecorrections, modifications, enhancements, improvements,and other changes to its products and services at any time.
Information delivered by Signadyne is believed to be ac-curate and reliable. However, no responsibility is assumedby Signadyne for its use, nor for any infringements of patentsor other rights of third parties that may result from its use.
No license is granted by implication or otherwise underany patent or patent rights of Signadyne.
Trademarks and registered trademarks are the propertyof their respective owners.
c©2012 Signadyne. All rights reserved.
www.signadyne.com
60 / 60 Rev. 1.4 (April 10, 2012)