Electronic Engineer Discuss

Title: DSO2000 Series SCPI Programmers Manual [Print this page]

Author: WisdomAugust    Time: 2021-6-1 14:41
Title: DSO2000 Series SCPI Programmers Manual
Chapter 1 Programming Overview
Install IO software

This oscilloscope can communicate with PC via USB. The following will introduce how to use IO LibSuite
software to remotely control the oscilloscope through USB interface.
Operation steps:
1. Install Keysight IO LibSuite software. Log in to the keysight official website to download IO LibSuite
software, and then follow the instructions to install.








Author: WisdomAugust    Time: 2021-6-1 14:44
[attach]4379[/attach]

[attach]4380[/attach]


Author: WisdomAugust    Time: 2021-6-2 08:15
Edited by WisdomAugust at 2021-6-2 08:16

2. Connect and configure the interface parameters of the instrument.
The DSO2000 series can communicate with a PC via USB. This manual uses USB as an example.

[size=10.5000pt](1) Connect the device
Connect the USB Device interface on the rear panel of the oscilloscope to the USB Host interface
of the computer using a USB data cable.


(2) Install the USB driver
The PC will automatically install the oscilloscope driver [At the same time, the USB Device icon will
be displayed on the oscilloscope]. Open the device manager to view the device as follows:

[attach]4381[/attach]




Author: WisdomAugust    Time: 2021-6-3 08:16
Edited by WisdomAugust at 2021-6-3 08:17

(3) Search for device resources
Open IO, the software will automatically search for the instrument resources currently connected
to the PC via the USB interface. You can also click “Rescan” to search.


[attach]4400[/attach]



Author: WisdomAugust    Time: 2021-6-4 13:34
(4) View device resources
The searched resources will appear in the “USB” directory, and display the model and USB interface
information of the instrument, as shown in the figure above. For example: DSO2C10 (USB0::0x049F
::0x505E::111::0::INSTR).
(5) Remote control
Click Send Commands To This Instrument to open "Interactive IO", open the remote command control
panel, you can send commands and read data through this panel.

[attach]4401[/attach]



Author: WisdomAugust    Time: 2021-6-5 09:37
Remote control method

[size=10.5000pt]1. User-defined programming

The user can program and control the oscilloscope through the standard SCPI (Standard Commands
for Programmable Instruments) commands. For a detailed description of commands and programming,
please refer to "Chapter 3 Programming Examples".

2. Send SCPI commands using PC software

Users can use PC software to send commands to remotely control the oscilloscope. It is recommended
to use the IO software provided by Keysight.



Author: WisdomAugust    Time: 2021-6-7 11:14
Introduction to SCPI commands
SCPI (abbreviation of Standard Commands for Programmable Instruments), that is, the standard
command set of programmable instruments (programmable instruments). SCPI is a standardized
instrument based on the existing standards IEEE 488.1 and IEEE 488.2, and following the floating
-point arithmetic rules of the IEEE 754 standard, ISO 646 information exchange 7-bit coded symbols
(equivalent to ASCII programming) and other standards Programming language. SCPI commands
are tree-like hierarchies, including multiple subsystems, and each subsystem consists of a root
keyword and one or more hierarchical keywords.



Author: WisdomAugust    Time: 2021-7-1 08:24
Command format
Commands usually begin with a colon ":". Keywords are separated by a colon ":", and keywords are followed by optional parameter settings. A question mark "?" is added after the command line to indicate that this function is being queried. The command keyword and the first parameter are separated by a space.
For example:
:ACQuire:TYPE
:ACQuire:TYPE?
ACQuire is the root keyword of the command, and TYPE is the second-level keyword. The
command line starts with a colon ":", and the keywords of each level are separated with a
colon ":". indicates a parameter that can be set. The question mark "?" Indicates a query.
Command keyword: ACQuire: TYPE and parameter are separated by spaces.
In some commands with parameters, multiple parameters are usually separated by a comma ",",
for example:
[:TRACe[<n>]]ATA:VALue volatile,<points>,<data>



Author: WisdomAugust    Time: 2021-7-3 08:24
Symbol Description
The following symbols are not sent with the command.
[size=10.5000pt]1. Braces {}
The contents of the braces are parameter options. Parameter items are usually separated by a
vertical bar "|". When using a command, you must select one of the parameters.
2. Vertical bar |
Vertical bar is used to separate multiple parameter options. One of the parameters must be
selected when using the command.
3. Square brackets []
The content in square brackets is omissible.
4. Triangle brackets <>
The parameters in the triangle brackets must be replaced with a valid value.



Author: WisdomAugust    Time: 2021-7-5 08:13
Command abbreviation
All commands are not case sensitive, you can use all uppercase or lowercase. But if you want to
abbreviate, you must enter all capital letters in the command format.

For example:
:MEASure:ADISplay? Can be abbreviated to :MEAS:ADIS?



Author: WisdomAugust    Time: 2021-7-6 08:17
Chapter 2 Command System

1. CHANnel<n> Command Subsystem
:CHANnel<n> commands are used to set or query the vertical system parameters such as bandwidth
limit, coupling, vertical scale, and vertical offset of the analog channel of the oscilloscope.

Command List
l CHANnel<n>: BWLimit
l CHANnel<n>: COUPling
l CHANnel<n>: DISPlay
l CHANnel<n>: INVert
l CHANnel<n>: OFFSet
l CHANnel<n>: SCALe
l CHANnel<n>: PROBe
l CHANnel<n>: VERNier




Author: WisdomAugust    Time: 2021-7-7 08:18
Edited by WisdomAugust at 2021-7-7 08:20

1.1 CHANnel<n>:BWLimit
Command
:CHANnel<n>:BWLimit <type>
:CHANnel<n>:BWLimit?
Description
Set or query the parameters of bandwidth limit for the indicated channel.
Parameters
:<type>::= {{1 | ON} | {0 | OFF}
:<n>::= {1 | 2 | 3 | 4}
State
?OFF: Turn off the 20MHz bandwidth limit, and the high-frequency components contained in the measured signal can pass.
?ON: Turn on the bandwidth limitation, and the high-frequency components contained in the signal under test are attenuated.
Turning on bandwidth limiting reduces waveform noise, but attenuates high-frequency components.
Return
The query returns [size=10.5000pt]0 or [size=10.5000pt]1[size=10.5000pt].
Example
:CHANnel1:BWLimit 1 /*Enable 20MHz bandwidth limit*/
:CHANnel1:BWLimit? /*The query returns 1*/





Author: WisdomAugust    Time: 2021-7-8 08:19
Edited by WisdomAugust at 2021-7-8 08:21

1.2 CHANnel<n>:COUPling
Command
:CHANnel<n>:COUPling <coupling>
:CHANnel<n>:COUPling?
Description
Set or query the[size=10.5000pt] connection of the indicated channel signal.
Parameters
:<coupling> ::= {AC | DC | GND}
:<n>::= {1 | 2 | 3 | 4}
State
?AC: The DC component of the signal under test is blocked.
?DC: Both the DC and AC components of the signal under test can pass.
?GND: Both the DC and AC components of the signal under test are blocked
Return
The query returns AC,DC,GND
Example
:CHANnel1:COUPling AC /*Select AC coupling mode*/
:CHANnel1:COUPling? /*Query returns AC*/






Author: WisdomAugust    Time: 2021-7-9 11:46
Edited by WisdomAugust at 2021-7-9 11:48

1.3 CHANnel<n>: DISPlay
Command
:CHANnel<n>: DISPlay <bool>
:CHANnel<n>: DISPlay?
Description
Turn on or off the specified channel or query the switch status of the specified channel.
Parameters
:<bool> ::= {{1 | ON} | {0 | OFF}}
:<n>::= {1 | 2 | 3 | 4}
Return
The query returns [size=10.5000pt]0 or [size=10.5000pt]1[size=10.5000pt].
Example
:CHANnel1: DISPlay ON /*Turn on CH1*/
:CHANnel1: DISPlay? /*The query returns 1*/

1.4 CHANnel<n>:INVert
Command
:CHANnel<n>:INVert <bool>
:CHANnel<n>:INVert?
Description
Turn the waveform inversion of the specified channel on or off or query the switching status of the waveform inversion of the specified channel.
Parameters
:<bool> ::= {{1 | ON} | {0 | OFF}}
:<n>::= {1 | 2 | 3 | 4}
Return
The query returns [size=10.5000pt]0 or [size=10.5000pt]1[size=10.5000pt].
Example
:CHANnel1:INVert ON /*Turn on the waveform inversion of CH1*/
:CHANnel1:INVert? /*The query returns 1*/






Author: WisdomAugust    Time: 2021-8-2 11:41
Edited by WisdomAugust at 2021-8-2 11:42

1.5 CHANnel<n>:OFFSet
Command
:CHANnel<n>:OFFSet <offset> [<suffix>]
:CHANnel<n>:OFFSet?
Description
Sets or queries the vertical displacement of the specified channel. The default unit is V.
Parameters
:<offset> ::= Vertical offset value in NR3 format
:<suffix> ::= {V | mV}
:<n>::= {1 | 2 | 3 | 4}
State
?The set vertical displacement value is affected by the vertical gear and probe ratio.
?The range of legal values varies with the vertical scale and probe ratio. If 21 / 136 you set an offset outside the legal range, the offset value will be automatically set to the closest legal value.
Return
The query returns the vertical displacement value in scientific notation.
Example
:CHANnel1:OFFSet 1V /*Set the vertical offset of CH1 to 1V*/
:CHANnel1:OFFSet? /*The query returns 1*/

1.6 CHANnel<n>:SCALe
Command
:CHANnel<n>:SCALe <scale> [<suffix>]
:CHANnel<n>:SCALe?
Description
Sets or queries the vertical scale of the specified channel. The default unit is V.
Parameters
:<scale> ::=vertical units per division in NR3 format
:<suffix> ::= {V | mV}
:<n>::= {1 | 2 | 3 | 4}
State
?CHANnel<n>:SCALe command to setup each channel’s vertical scale.The settable range of the vertical scale is related to the currently set probe ratio (set by the:
?CHANnel : PROBe command).
Return
The query returns the vertical scale value in scientific notation.
Example
:CHANnel1:SCALe 1V /*Set the vertical scale to 1V*/
:CHANnel1:SCALe?/*The query returns 1.000e + 00*/






Author: WisdomAugust    Time: 2021-8-3 08:35
Edited by WisdomAugust at 2021-8-9 15:04

1.7 CHANnel<n>: PROBe
Command
:CHANnel<n>: PROBe <atten>
:CHANnel<n>: PROBe?
Description
Set or query the probe factor of the specified channel.
Parameters
:<atten> ::= {1 | 10 | 100 | 1000}
:<n>::= {1 | 2 | 3 | 4}
State
?Set the probe factor, which is displayed after multiplying the acquired signal by a specified multiple (does not affect the actual amplitude of the signal).
?Setting the probe ratio affects the settable range of the current vertical scale.
Return
The query returns the probe attenuation ratio in scientific notation.
Example
:CHANnel1: PROBe 10 /*Set the probe attenuation ratio to 10X*/
:CHANnel1: PROBe? /*The query returns 1.000000e + 01*/

1.8 CHANnel<n>:VERNier
Command
:CHANnel<n>:VERNier <bool>
:CHANnel<n>:VERNier?
Description
Turn the fine adjustment function of the vertical scale of the specified channel on or off, or query the status of the fine adjustment function of the vertical scale of the specified channel.
Parameters
:<bool> ::= {{1 | ON} | {0 | OFF}}
:<n>::= {1 | 2 | 3 | 4}
State
The trim setting is off by default. At this time, you can only set the vertical scale in 1-2-5 steps, that is, 500u, 1mV, 2mV, 5mV, 10mV ... 10V (probe ratio is 1X). When the trim setting is on, you can further adjust the vertical scale within a smaller range to improve vertical resolution. If the amplitude of the input waveform is slightly larger than the full scale in the current scale, and the amplitude displayed by the waveform of the next gear is slightly lower, you can use fine adjustment to improve the waveform display amplitude to facilitate observation of signal details.
Return
The query returns 1 or 0.
Example
:CHANnel1:VERNier ON /*Turn on the fine adjustment function of CH1 vertical scale*/
:CHANnel1:VERNier? /*The query returns 1*/








Author: WisdomAugust    Time: 2021-8-4 08:58
Edited by WisdomAugust at 2021-8-9 15:04

2. TIMebase Command Subsystem
Command List
l TIMebase:WINDow:ENABle
l TIMebase:WINDow: POSition
l TIMebase:WINDow:SCALe
l TIMebase: POSition
l TIMebase:SCALe
l TIMebase:RANGe
l TIMebase:MODE

2.1 TIMebase:WINDow:ENABle
Command
:TIMebase:WINDow:ENABle <bool>
:TIMebase:WINDow:ENABle?
Description
Turn on or off the dual window function, or query the status of the dual window[size=10.5000pt].
Parameters
:<bool> ::= {{1 | ON} | {0 | OFF}
State
The dual window mode can be used to zoom in a section of the waveform horizontally in order to view the waveform details.
Return
The query returns ON or Off[size=10.5000pt].
Example
:TIMebase:WINDow:ENABle ON /*Turn on delayed scanning*/
:TIMebase:WINDow:ENABle? /*The query returns 1*/






Author: WisdomAugust    Time: 2021-8-5 09:14
Edited by WisdomAugust at 2021-8-9 15:03

2.2 TIMebase:WINDow: POSition
Command
:TIMebase:WINDow: POSition <pos value>
:TIMebase:WINDow: POSition?
Description
Set or query horizontal position of the zoomed view of the main scan[size=10.5000pt].
Parameters
:<pos value> ::= The value of the horizontal position (in seconds)
State
The main scan range and the horizontal position of the main scan determine the range of this command. The value of this command must keep the zoomed view window within the main scan range.
Return
Returns the position of the current horizontal window in the zoomed view in scientific notation.
Example
:TIMebase:WINDow: POSition 0.001 /*Set the horizontal position to 0.001s*/
:TIMebase:WINDow: POSition? /*The query returns1.000e-03*/
2.3 TIMebase:WINDow:SCALe
Command
:TIMebase:WINDow:SCALe <scale_value>
:TIMebase:WINDow:SCALe?
Description
Set or query the horizontal scale of the sub-window (microseconds/div).
Parameters
:<sacle_value> ::= The current number of microseconds per grid of the[size=10.5000pt] subwindow[size=10.5000pt].
State
The main scan scale determines the range of this command, the maximum value is half of the main scan scale[size=10.5000pt].
Return
Return the time base gear of the sub-window in scientific notation[size=10.5000pt].
Example
:TIMebase:WINDow:SCALe 0.0005 /*Set the delay time base to 500us*/
:TIMebase:WINDow:SCALe? /*The query returns 5.000e-4*/










Author: WisdomAugust    Time: 2021-8-6 08:39
Edited by WisdomAugust at 2021-8-9 15:02

2.4 TIMebase: POSition
Command
:TIMebase: POSition <pos value>
:TIMebase: POSition?
Description
Set or query the main time base offset[size=10.5000pt].
Parameters
:<pos value> ::= offset value (in second).
Return
Return the main time base offset value in scientific notation.
Example
:TIMebase: POSition 0.0002 /*Set main time base to 200us*/
:TIMebase: POSition? /*The query returns 2.000e-4*/
2.5TIMebase:SCALe
Command
:TIMebase:SCALe <scale value>
:TIMebase:SCALe?
Description
Set or query the horizontal scale of the main window (seconds/div).
Parameters
:<scale value> ::= The current number of seconds per grid in the main window
Return
Return to the main window time base gear in scientific notation[size=10.5000pt].
Example
:TIMebase:SCALe 0.0005 /*Set the main time base to 500us*/
:TIMebase:SCALe? /*The query returns 5.000e-4*/







Author: WisdomAugust    Time: 2021-8-9 14:57
Edited by WisdomAugust at 2021-8-9 15:00

2.6 TIMebase:RANGe
Command
:TIMebase:RANGe <range value>
:TIMebase:RANGe?
Description
Set or query the full-scale horizontal time of the main window[size=10.5000pt].
Parameters
:<range value> ::= range value (in second).
Return
Return the full-scale time base range of the main window in scientific notation[size=10.5000pt].
Example
:TIMebase:RANGe 0.0016 /*Set main time base to100us*/
:TIMebase:RANGe? /*The query returns 1.600e-03*/
2.7TIMebase:MODE
Command
:TIMebase:MODE <value>
:TIMebase:MODE?
Description
Sets or queries the horizontal time base mode.
Parameters
:<value> ::= <MAIN | XY | ROLL>
State
?MAIN: YT mode
?XY: XY mode
?ROLL: ROLL mode
Return
The query returns MAIN, XY, or ROLL.
Example
:TIMebase:MODE XY /*Set the horizontal time base mode to XY mode*/
:TIMebase:MODE? /*The query returns XY*/





Author: WisdomAugust    Time: 2021-8-10 09:40
Edited by WisdomAugust at 2021-8-10 09:44

3. ACQuire Command Subsystem
Command List
l ACQuire: POINts
l ACQuire:TYPE
l ACQuire:SRATe?
l ACQuire:COUNt


3.1 ACQuire: POINts
Command
:ACQuire: POINts <value>
:ACQuire: POINts?
Description
Set or query the storage depth of the oscilloscope[size=10.5000pt].
Parameters
:<value> ::= [size=10.5000pt]memory depth value.
State
value                                
Memory depth
4000
4K
40000
40K
400000
400K
4000000
4M
8000000
8M
Return
The query returns the actual number of points (integer).
Example
:ACQuire: POINts 4000 /*Set memory depth to 4k*/
:ACQuire: POINts? /*The query returns[size=10.5000pt] 4000*/








Author: WisdomAugust    Time: 2021-9-1 14:54
Edited by WisdomAugust at 2021-9-1 14:56

3.2 ACQuire:TYPE
Command
:ACQuire:TYPE <value>
:ACQuire:TYPE?
Description
Set or query the acquisition method of oscilloscope samples
Parameters
:<value> ::= < NORMal | AVERage | PEAK | HRESolution>
State
?NORMal (normal): In this mode, the oscilloscope samples the signal at equal
time intervals to reconstruct the waveform. For most waveforms, using this
mode produces the best display results.
?AVERages: In this mode, the oscilloscope averages waveforms that have been 18 / 136
sampled multiple times to reduce random noise on the input signal and
improve vertical resolution. The number of averages can be set by the: ACQuire:
AVERages command. The higher the number of averages, the lower the noise
and the higher the vertical resolution, but the slower the response of the
displayed waveform to waveform changes.
?PEAK (Peak Detection): In this mode, the oscilloscope collects the maximum
and minimum values of the sampling interval signal to obtain the signal
envelope or narrow pulses that may be lost. Using this mode can avoid aliasing
of the signal, but the display noise is relatively large.
?HRESolution (high resolution): This mode uses an oversampling technique to
average the neighboring points of the sampled waveform to reduce random
noise on the input signal and produce a smoother waveform on the screen. It is
usually used when the sampling rate of the digitizer is higher than the storage
rate of the acquisition memory.
Return
The query returns NORM, AVERage, PEAK, or HRESolution.
Example
:ACQuire:TYPE AVERage[size=10.5000pt] /*Set the acquisition method to average*/
:ACQuire:TYPE?[size=10.5000pt] /*The query returns AVERage*/





Author: WisdomAugust    Time: 2021-9-2 11:57
Edited by WisdomAugust at 2021-9-2 12:00

3.3 ACQuire:SRATe?
Command
:ACQuire:SRATe?
Description
Query the current sampling rate.
State
The number of waveform points sampled per second.
Return
The query returns the sample rate as a real number.
Example
:ACQuire:SRATe?[size=10.5000pt] /*The query returns 1.25e+06*/


3.4 ACQuire:COUNt
Command
:ACQuire:COUNt <value>
:ACQuire:COUNt?
Description
Set or query the average number of times in the average acquisition mode
Parameters
:<value> ::= <4|8|16|32|64|128>
Return
The query returns current average times.
Example
:ACQuire:COUNt  64 /*Set the average number to 64*/
:ACQuire:COUNt? /*The query returns 64*/






Author: WisdomAugust    Time: 2021-9-3 13:53
4. TRIGger Command Subsystem
Command List
l TRIGger:FORCe
l TRIGger:MODE
l TRIGger:STATus?
l TRIGger:SWEep
l TRIGger:HOLDoff
l TRIGger:EDGe
l TRIGger: PULSe
l TRIGger:SLOPe
l TRIGger:TV
l TRIGger:TIMeout
l TRIGger:WINDOw
l TRIGger:INTERVAl
l TRIGger:UNDER_Am
l TRIGger:UART
l TRIGger:CAN
l TRIGger: LIN
l TRIGger:IIC
l TRIGger:SPI
l TRIGger: PATTern




Author: WisdomAugust    Time: 2021-9-6 08:23
Edited by WisdomAugust at 2021-9-6 08:26

4.1 TRIGger:FORCe
Command
:TRIGger:FORCe
Description
Select or query the force trigger.
State
Even if the trigger conditions are not met, this command will let the oscilloscope acquire waveforms
4.2TRIGger:MODE
Command
:TRIGger:MODE <mode>
:TRIGger:MODE?
Description
Select or query the trigger type.
Parameters
:<mode> ::= < EDGE | PULSe | TV | SLOPe | TIMeout | WINdow | PATTern | INTerval | UNDerthrow | UART | LIN | CAN | SPI | IIC>
Return
Return EDGE, PULSe, TV, SLOPe, TIMeout, WINdow, PATTern, INTerval, UNDerthrow, UART, LIN, CAN, SPI, IIC
Example
:TRIGger:MODE SLOPe[size=10.5000pt] /*Set the trigger type to slope trigger*/
:TRIGger:MODE? /*The query returns SLOPe*/
4.3TRIGger:STATus?
Command
:TRIGger:STATus?
Description
Query the current trigger status.
Return
Return TRIGed, NOTRIG




Author: WisdomAugust    Time: 2021-9-7 10:13
Edited by WisdomAugust at 2021-9-7 10:49

4.4 TRIGger:SWEep
Command
:TRIGger:SWEep <value>
:TRIGger:SWEep?
Description
Set or query the trigger mode.
Parameters
:<value> ::= < AUTO | NORMal | SINGle>
State
?AUTO: Automatic triggering, waveform display regardless of whether trigger
conditions are met.
?NORMal: Normal trigger, display the waveform when the trigger condition is
met, keep the original waveform display when the trigger condition is not met,
and wait for the next trigger.
?SINGle: Single trigger. The oscilloscope waits for the trigger, displays the
waveform when the trigger conditions are met, and then stops.
Return
The query returns AUTO, NORMal, or SINGle.
Example
:TRIGger:SWEep SINGle[size=10.5000pt] /*Select single trigger mode*/
:TRIGger:SWEep?[size=10.5000pt] /*The query returns SINGle*/
4.5 TRIGger:HOLDoff
Command
:TRIGger:HOLDoff <value>
:TRIGger:HOLDoff?
Description
Set or query the holdoff time.
Parameters
:<value> ::= Trigger holdoff time (in second)
State
Trigger holdoff can stably trigger complex waveforms (such as pulse series).
Holdoff time is the time the oscilloscope waits to re-enable the trigger circuit.
The oscilloscope will not trigger until the holdoff time is over.
When the trigger method is video trigger, timeout trigger, setup hold, UART,
LIN, CAN, IIC or SPI, this setting is not available.
Return
The query returns the trigger holdoff time in scientific notation.
Example
:TRIGger:HOLDoff 0.0000002[size=10.5000pt] /*Set trigger holdoff time to 200ns*/
:TRIGger:HOLDoff?[size=10.5000pt] /*The query returns 2.000000e-07*/





Author: WisdomAugust    Time: 2021-9-8 11:04
Edited by WisdomAugust at 2021-9-8 11:06

4.6 TRIGger:EDGe
Command List
l TRIGger:EDGe:SOURce
l TRIGger:EDGe:SLOPe
l TRIGger:EDGeEVel


4.6.1 TRIGger:EDGe:SOURce
Command
:TRIGger:EDGe:SOURce <source>
:TRIGger:EDGe:SOURce?
Description
Set or query the trigger source for edge trigger.
Parameters
:<source> ::= < CHANnel1 | CHANnel2 | CHANnel3 | CHANnel4 | EXT/10>
Return
The query returns CHANnel1, CHANnel2, CHANnel3, CHANnel4, EXT/10
Example
:TRIGger:EDGe:SOURce CHANnel1[size=10.5000pt] / * Set the trigger source to CH1 * /
:TRIGger:EDGe:SOURce?[size=10.5000pt] / * The query returns CHANnel1 * /





Author: WisdomAugust    Time: 2021-9-9 09:45
Edited by WisdomAugust at 2021-9-9 09:48

4.6.1 TRIGger:EDGe:SLOPe
Command
:TRIGger:EDGe:SLOPe <slope>
:TRIGger:EDGe:SLOPe?
Description
Set or query the type of edge trigger.
Parameters
:<slope> ::= < RISIng| FALLing | EITHer >
State
?RISIng: rising edge
?FALLing: falling edge
?EITHer: rising or falling edge
Return
The query returns RISIng, FALLing, EITHer
Example
:TRIGger:EDGe:SLOPe RISIng /*Set the edge type to rising edge*/
:TRIGger:EDGe:SLOPe? /*The query returns RISIng*/


4.6.2 TRIGger:EDGe: LEVel
Command
:TRIGger:EDGe: LEVel <level>
:TRIGger:EDGe: LEVel?
Description
Set or query the trigger level when the edge triggers.
Parameters
:<level> ::= trigger level ( unit is V)
Return
The query returns the trigger level value in scientific notation.
Example
:TRIGger:EDGe: LEVel 0.16 /*Set the trigger level to 160mV*/
:TRIGger:EDGe: LEVel? /*The query returns 1.600e-1*/








Author: WisdomAugust    Time: 2021-10-8 16:31
Edited by WisdomAugust at 2021-10-8 16:38

4.6.3 TRIGger:EDGe: LEVel
Command
:TRIGger:EDGe: LEVel <level>
:TRIGger:EDGe: LEVel?
Description
Set or query the trigger level when the edge triggers.
Parameters
:<level> ::= trigger level ( unit is V)
Return
The query returns the trigger level value in scientific notation.
Example
:TRIGger:EDGe: LEVel 0.16 /*Set the trigger level to 160mV*/
:TRIGger:EDGe: LEVel? /*The query returns 1.600e-1*/





4.7 TRIGger: PULSe
Command List
l TRIGger: PULSe:SOURce
l TRIGger: PULSe: POLarity
l TRIGger: PULSe:WHEN
l TRIGger: PULSe:WIDth
l TRIGger: PULSe: LEVel


4.7.1 TRIGger: PULSe:SOURce

Command
:TRIGger: PULSe:SOURce <source>
:TRIGger: PULSe:SOURce?
Description
Set or query the trigger source of the pulse width trigger.
Parameters
:<source> ::= < CHANnel1 | CHANnel2 | CHANnel3 | CHANnel4>
Return
The query returns CHANnel1, CHANnel2, CHANnel3, CHANnel4
Example
:TRIGger: PULSe:SOURce CHANnel1 /*set trigger source to CH1*/
:TRIGger: PULSe:SOURce? /*The query returns CHANnel1*/







Author: WisdomAugust    Time: 2021-10-9 08:16
Edited by WisdomAugust at 2021-10-9 08:23

4.7.2 TRIGger: PULSe: POLarity
Command
:TRIGger: PULSe: POLarity <polarity>
:TRIGger: PULSe: POLarity?
Description
Set or query the trigger polarity of pulse width trigger
Parameters
:<polarity> ::= < POSItive | NEGAtive>
State
POSItive: Positive pulse trigger
NEGAtive: negative pulse trigger
Return
The query returns POSItive, NEGAtive
Example
:TRIGger: PULSe: POLarity POSItive /*Set positive pulse trigger*/
:TRIGger: PULSe: POLarity? /*The query returns POSItive*/

4.7.3 TRIGger: PULSe:WHEN
Command
:TRIGger: PULSe:WHEN <when>
:TRIGger: PULSe:WHEN?
Description
Set or query the trigger conditions for pulse width trigger.
Parameters
<when> ::= < EQUAl| NEQUal| GREAt| LESS>
State
?EQUAl = (equal to time value): Only when the positive or negative pulse width
of the input signal is equal to the set pulse width can it trigger. [Pulse width error is 5%] NEQUal! = (Not equal to time value): Only when the positive or negative pulse width of the input signal is not equal to the set pulse width, can the [pulse
width error be 5%] be triggered. GREAt > (greater than the time value): Only when the positive or negative pulse width of the input signal is greater than the set pulse width can it trigger [pulse width error is 5%].
?LESS <(less than time value): Only when the positive or negative pulse width of
the input signal is less than the set pulse width can the [pulse width error be
5%] be triggered.
Return
The query returns EQUAl, NEQUal, GRAt, LESS
Example
:TRIGger: PULSe:WHEN NEQUal /*Set trigger condition to NEQUal*/
:TRIGger: PULSe:WHEN? /*The query returns NEQUal*/






Author: WisdomAugust    Time: 2021-10-11 09:33
Edited by WisdomAugust at 2021-10-11 09:36

4.7.4 TRIGger: PULSe: WIDth
Command
:TRIGger: PULSe:WIDth <value>
:TRIGger: PULSe:WIDth?
Description
Set or query the pulse width triggering time.
Parameters
:<value> ::=pulse width trigger (in second)
Return
The query returns the pulse width value in scientific notation
Example
:TRIGger: PULSe:WIDth 0.000003 /*Set the pulse width value to 3μs*/
:TRIGger: PULSe:WIDth? /*The query returns 3.000000e-06*/


4.7.5 TRIGger: PULSe: LEVel
Command
:TRIGger: PULSe: LEVel <level>
:TRIGger: PULSe: LEVel?
Description
Set or query the trigger level when pulse width trigger.
Parameters
:<level> ::=trigger level value ( in V)
Return
The query returns the trigger level value in scientific notation.
Example
:TRIGger: PULSe: LEVel 0.16 /*Set the trigger level to 160mV*/
:TRIGger: PULSe: LEVel? /*The query returns 1.600000e-01*/






Author: WisdomAugust    Time: 2021-10-12 10:12
Edited by WisdomAugust at 2021-10-12 10:23

4.8 TRIGger:SLOPe
Command List
l TRIGger:SLOPe:SOURce
l TRIGger:SLOPe: POLarity
l TRIGger:SLOPe:WHEN
l TRIGger:SLOPe:WIDth
l TRIGger:SLOPe:ALEVel
l TRIGger:SLOPe:BLEVel


4.8.1 TRIGger:SLOPe:SOURce
Command
:TRIGger:SLOPe:SOURce <source>
:TRIGger:SLOPe:SOURce?
Description
Set or query the trigger source of slope trigger
Parameters
:<source> ::= < CHANnel1 | CHANnel2 | CHANnel3 | CHANnel4>
Return
The query returns CHANnel1, CHANnel2, CHANnel3, CHANnel4
Example
:TRIGger:SLOPe:SOURce CHANnel1 /*Set trigger source to CH1*/
:TRIGger:SLOPe:SOURce? /*The query returns CHANnel1*/


4.8.2 TRIGger:SLOPe: POLarity
Command
:TRIGger:SLOPe: POLarity <polarity>
:TRIGger:SLOPe: POLarity?
Description
Set or query the trigger polarity of the slope trigger.
Parameters
:<polarity> ::= < POSItive | NEGAtive>
State
POSItive: Positive slope trigger
NEGAtive: negative slope trigger
Return
The query returns POSItive, NEGAtive
Example
:TRIGger:SLOPe: POLarity POSItive /*Set positive slope trigger*/
:TRIGger:SLOPe: POLarity? /*The query returns POSItive*/







Author: suser    Time: 2021-10-13 04:01
Good job!
Thank you!
I hope you can also take care to fix some user reported bugs on that thread:
https://www.eevblog.com/forum/te ... dso2x1x-models/775/

Good  luck!

Author: WisdomAugust    Time: 2021-10-13 08:15
Edited by WisdomAugust at 2021-10-13 08:20

4.8.3 TRIGger:SLOPe:WHEN
Command
:TRIGger:SLOPe:WHEN <when>
:TRIGger:SLOPe:WHEN?
Description
Set or query the trigger condition of the slope trigger.
Parameters
:<when> ::= < EQUAl| NEQUal| GREAt| LESS>
State
?EQUAl = (equal to time value): Only when the positive or negative pulse width
of the input signal is equal to the set pulse width can it trigger. [Pulse width
error is 5%]
?NEQUal! = (Not equal to time value): Only when the positive or negative pulse
width of the input signal is not equal to the set pulse width, can the [pulse
width error be 5%] be triggered.
?GREAt > (greater than the time value): Only when the positive or negative pulse width of the input signal is greater than the set pulse width can it trigger
[pulse width error is 5%].
?LESS <(less than time value): Only when the positive or negative pulse width of
the input signal is less than the set pulse width can the [pulse width error be
5%] be triggered.
Return
The query returns EQUAl, NEQUal, GRAt, LESS
Example
:TRIGger:SLOPe:WHEN NEQUal /*Set trigger condition to NEQUal*/
:TRIGger:SLOPe:WHEN? /*The query returns NEQUal*/


4.8.4 TRIGger:SLOPe:WIDth
Command
:TRIGger:SLOPe:WIDth <value>
:TRIGger:SLOPe:WIDth?
Description
Set or query the trigger condition of the slope trigger.
Parameters
:<value> ::=trigger condition value (in second)
Return
The query returns the time value in scientific notation.
Example
:TRIGger:SLOPe:WIDth 0.000003 /*Set the width value to 3μs*/
:TRIGger:SLOPe:WIDth? /*The query returns 3.000000e-06*/






Author: WisdomAugust    Time: 2021-10-14 08:21
Edited by WisdomAugust at 2021-10-14 08:23

4.8.5 TRIGger:SLOPe:ALEVel
Command
:TRIGger:SLOPe:ALEVel <level>
:TRIGger:SLOPe:ALEVel?
Description
Set or query the upper limit of the trigger level when the slope triggers.
Parameters
:<level> ::=trigger level upper limit value (in V)
Return
The query returns the upper limit value of the trigger level in scientific notation.
Example
:TRIGger:SLOPe:ALEVel 0.16 /*Set the trigger level to 160mV*/
:TRIGger:SLOPe:ALEVel? /*The query returns 1.600000e-01*/


4.8.6 TRIGger:SLOPe:BLEVel
Command
:TRIGger:SLOPe:BLEVel <level>
:TRIGger:SLOPe:BLEVel?
Description
Set or query the lower limit of the trigger level when the slope triggers.
Parameters
:<level> ::=trigger level lower limit value (in V)
Return
The query returns the lower limit value of the trigger level in scientific notation.
Example
:TRIGger:SLOPe:BLEVel 0.16 /*Set the trigger level to lower limit*/
:TRIGger:SLOPe:BLEVel? /*The query returns 1.600000e-01*/





Author: WisdomAugust    Time: 2021-11-1 09:11
Edited by WisdomAugust at 2021-11-2 09:47

4.9 TRIGger:TV
Command List
l TRIGger:TV:SOURce
l TRIGger:TV: POLarity
l TRIGger:TV:MODE
l TRIGger:TV: LINE
l TRIGger:TV:STANdard
l TRIGger:VIDeo: LEVel

4.9.1 TRIGger:TV:SOURce
Command
:TRIGger:TV:SOURce <source>
:TRIGger:TV:SOURce?
Description
Select or query the trigger source of the video trigger.
Parameters
:<source> ::= < CHANnel1 | CHANnel2 | CHANnel3 | CHANnel4>
Return
[size=10.5000pt]The query returns CHANnel1, C[size=10.5000pt]HANnel2, C[size=10.5000pt]HANnel3, C[size=10.5000pt]HANnel4
Example
[size=10.5000pt]:TRIGger:TV:SOURce CHANnel1 /*Settrigger source to CH1*/
[size=10.5000pt]:TRIGger:TV:SOURce? /*The query returns C[size=10.5000pt]HANnel1*/


4.9.2 TRIGger:TV: POLarity
Command
:TRIGger:TV: POLarity <polarity>
:TRIGger:TV: POLarity?
Description
Select or query the video polarity when the video is triggered.
Parameters
:<polarity> ::= < POSItive | NEGAtive>
State
POSItive: Positive video trigger
NEGAtive: negative video trigger
Return
The query returns POSItive, NEGAtive.
Example
[size=10.5000pt]:TRIGger:TV: POLarity POSItive /*Set the video polarity to positive polarity*/
[size=10.5000pt]:TRIGger:TV: POLarity? /*Query returns P[size=10.5000pt]OSItive*/









Author: WisdomAugust    Time: 2021-11-2 09:49
Edited by WisdomAugust at 2021-11-2 10:10

4.9.3 TRIGger:TV: MODE
Command
:TRIGger:TV:MODE <mode>
:TRIGger:TV:MODE?
Description
Set or query the synchronization type when the video is triggered.
Parameters
:<mode> ::= < ALINes|LINEs|FIEld1|FIEld2|AFIelds>
State
ALINes: trigger on all horizontal sync pulses.
LINEs: For NTSC and PAL / SECAM video standards, trigger on a specified line in the odd or even field.
FIDld1: Trigger on the rising edge of the first sawtooth wave in the odd field.
FIDld2: Trigger on the first rising edge of the sawtooth wave in the even field.
Return
[size=10.5000pt]The query retuns ALINes, LINEs, FIEld1, FIEld2, AFlelds
Example
[size=10.5000pt]:TRIGger:TV:MODE FIEld1 /*Set the synchronization type to an odd field*/
[size=10.5000pt]:TRIGger:TV:MODE? /* The query returns[size=10.5000pt] [size=10.5000pt]FIEld1*/



4.9.4 TRIGger:TV:
LINE

Command
:TRIGger:TV: LINE <line>
:TRIGger:TV: LINE?
Description
Sets or queries the line number when the synchronization type is the specified line when the video is triggered.
Parameters
[size=10.5000pt]:<line> ::= the line number of the specified line
State
?NTSC:1-525
?PAL/SECAM:1-625
Return
The query returns an integer.
Example
[size=10.5000pt]:TRIGger:TV: LINE 100 /*Set the line number to 100*/
[size=10.5000pt]:TRIGger:TV: LINE? /*The query returns 100*/








Author: WisdomAugust    Time: 2021-11-3 09:06
[attach]4641[/attach]


Author: WisdomAugust    Time: 2021-11-4 08:17
Edited by WisdomAugust at 2021-11-5 08:21

4.10 TRIGger:TIMeout
Command List
l TRIGger:TIMeout:SOURce
l TRIGger:TIMeout: LEVel
l TRIGger:TIMeout:WIDth
l TRIGger:TIMeout: POLarity


[attach]4643[/attach]






Author: WisdomAugust    Time: 2021-11-5 08:23
[attach]4644[/attach]


Author: WisdomAugust    Time: 2021-11-6 10:07
4.11 TRIGger:WINDOw



Command List
l TRIGger:WINDOw:SOURce
l TRIGger:WINDOw:ALEVel
l TRIGger:WINDOw:BLEVel


[attach]4647[/attach]




Author: WisdomAugust    Time: 2021-11-8 08:11
[attach]4648[/attach]
4.12 TRIGger:INTERVAl
Command List
l TRIGger:INTERVAl:SOURce
l TRIGger:INTERVAl:SLOp
l TRIGger:INTERVAl:WHEN
l TRIGger:INTERVAl:TIME
l TRIGger:INTERVAl:ALEVel


[attach]4649[/attach]






Author: WisdomAugust    Time: 2021-12-1 08:19
[attach]4678[/attach]


Author: WisdomAugust    Time: 2021-12-7 11:20
[attach]4692[/attach]


Author: WisdomAugust    Time: 2021-12-8 08:58
[size=10.5000pt]4.13 TRIGger:UNDER_Am

Runt trigger is used to trigger a pulse that has crossed one trigger level but not another trigger level.

Command List
l TRIGger:UNDER_Am:SOURce
l TRIGger:UNDER_AmOLarity
l TRIGger:UNDER_Am:WHEN
l TRIGger:UNDER_Am:TIME
l TRIGger:UNDER_Am:ALEVel
l TRIGger:UNDER_Am:BLEVel

[attach]4694[/attach]



Author: WisdomAugust    Time: 2021-12-9 11:28
[attach]4696[/attach]


Author: WisdomAugust    Time: 2021-12-10 11:19
[attach]4698[/attach]


Author: WisdomAugust    Time: 2021-12-13 09:23
4.14 TRIGger:UART
Command List

l TRIGger:UART: SOURce
l TRIGger:UART: CONdition
l TRIGger:UART: BAUd
l TRIGger:UART: ALEVel
l TRIGger:UART: DATA
l TRIGger:UART: WIDTh
l TRIGger:UART: PARIty

[attach]4702[/attach]




Author: WisdomAugust    Time: 2022-1-4 08:18
[attach]4769[/attach]


Author: WisdomAugust    Time: 2022-1-5 08:52
[attach]4774[/attach]


Author: WisdomAugust    Time: 2022-1-6 09:56
[attach]4781[/attach]


Author: WisdomAugust    Time: 2022-1-7 09:22
[attach]4785[/attach]


Author: WisdomAugust    Time: 2022-1-10 08:12
[attach]4787[/attach]


Author: WisdomAugust    Time: 2022-1-11 08:06
[attach]4792[/attach]


Author: WisdomAugust    Time: 2022-1-12 08:22
[attach]4794[/attach]


Author: WisdomAugust    Time: 2022-2-10 08:26
Edited by WisdomAugust at 2022-2-10 08:28

4.16 RIGger: LIN
Command List

l TRIGger: LIN: SOURce
l TRIGger: LIN: IDLe
l TRIGger: LIN:BAUd
l TRIGger: LIN:CONdition
l TRIGger: LIN:ID
l TRIGger: LIN: DATA
l TRIGger: LIN:ALEVel


[attach]4863[/attach]






Author: WisdomAugust    Time: 2022-2-11 10:46
[attach]4865[/attach]


Author: WisdomAugust    Time: 2022-2-14 08:17
[attach]4882[/attach]


Author: WisdomAugust    Time: 2022-2-15 09:32
[attach]4884[/attach]


Author: WisdomAugust    Time: 2022-2-16 08:38
4.17 TRIGger:IIC
Command List

l TRIGger:IIC:SDA:SOURce
l TRIGger:IIC:SCL:SOURce
l TRIGger:IIC:CONdition
l TRIGger:IIC:ADDer
l TRIGger:IIC: DATA
l TRIGger:IIC:ALEVel
l TRIGger:IIC:BLEVel

[attach]4886[/attach]





Author: WisdomAugust    Time: 2022-2-17 08:09
[attach]4890[/attach]


Author: WisdomAugust    Time: 2022-3-1 13:07
[attach]4902[/attach]


Author: WisdomAugust    Time: 2022-3-2 14:18
[attach]4903[/attach]


Author: WisdomAugust    Time: 2022-3-3 08:18
[attach]4905[/attach]


Author: WisdomAugust    Time: 2022-3-4 11:36
[attach]4906[/attach]


Author: WisdomAugust    Time: 2022-3-7 09:02
[attach]4908[/attach]


Author: WisdomAugust    Time: 2022-3-8 08:56
[attach]4911[/attach]


Author: WisdomAugust    Time: 2022-3-10 08:33
[attach]4920[/attach]


Author: morgan_flint    Time: 2022-4-1 16:14
Hello, WisdomAugust! Thank you very much for this tutorial!

I received my DSO2D10 a few days ago and wanted to try the "remote control" from PC, but I have a doubt about what software to install.

On Hantek's website downloads page, there's a link to a file called HantekDSO2000_Ver1.0.3.zip, which contains IOLibSuite_17_2_20605_2.exe dated 03/07/2016. This is the one you're using in this tutorial.

But, on the other hand, in the user manual (chapter 4) there's a link to a Keysight's download page (which ends redirected here), where you can find Keysight IO Libraries Suite 2022 and Keysight Secure Instrument Communication Expert.

Keysight IO Libraries Suite 2022 seems to be the updated version of the software on Hantek's page, so maybe this should be the better option unless the scope's internal firmware is not compatible with this update.

So I'd like to ask for your advice. Is Keysight IO Libraries Suite 2022 an updated version of the software you're using? Is it compatible with DSO2000 series?

Thank you very much!

Author: WisdomAugust    Time: 2022-4-2 13:45
morgan_flint replied at 2022-4-1 16:14
Hello, WisdomAugust! Thank you very much for this tutorial!

I received my DSO2D10 a few days ago an ...

Hello!

Both versions Keysight IO are compatible with our scope's internal firmware.

Best Regard,

Author: morgan_flint    Time: 2022-4-4 01:31
Edited by morgan_flint at 2022-4-5 01:24
WisdomAugust replied at 2022-4-2 13:45
Hello!

Both versions Keysight IO are compatible with our scope's internal firmware.

Thank you!

Although I posted on another thread, as this is a specific thread for SCPI commands, I think it's good to repeat it here.

There are two undocumented commands related to system time and date:
Command: SYSTem:TIME?Description: Query system time
Return: System time and date year;month;day;hour;min;sec
Example: :SYSTem:TIME? /*The query returns 1970;01;01;00;10;37
Command: SYSTem:SET:TIME <time>Description: Set system time
Parameter: <time> ::= <year;month;day;hour;min;sec;>
Example: :SYSTem:SET:TIME 2022;4;2;20;12;0;

I think they are very convenient because setting the time and date makes that the screen captures saved to USB are correctly labeled as DSO_MM_dd_hh_mm_ss.BMP where MM=month, dd=day, hh=hour, mm=minute, and ss=second. Also, the file properties (modification and creation date) will be correctly set.
If you don't set the time, the scope starts on 00:00:00 01/01/1970 and the captures name will be DSO_01_01_hh_mm_ss.bmp, hh:mm:ss being the time the system has been powered on, and modification date will not be set on file properties, making it difficult to sort, find or classify them in the future, unless you rename them by hand on the fly.



Author: WisdomAugust    Time: 2022-4-6 08:15
[attach]5024[/attach]


Author: WisdomAugust    Time: 2022-4-7 08:14
[attach]5027[/attach]


Author: WisdomAugust    Time: 2022-4-8 08:24
[attach]5032[/attach]


Author: WisdomAugust    Time: 2022-4-11 08:29
[attach]5040[/attach]


Author: WisdomAugust    Time: 2022-4-12 15:16
[attach]5043[/attach]


Author: WisdomAugust    Time: 2022-4-15 11:25
[attach]5047[/attach]


Author: WisdomAugust    Time: 2022-5-8 00:44
[attach]5060[/attach]


Author: WisdomAugust    Time: 2022-5-9 16:38
[attach]5062[/attach]


Author: WisdomAugust    Time: 2022-5-10 16:33
[attach]5067[/attach]


Author: WisdomAugust    Time: 2022-5-11 16:23
7. WAVeform Command Subsystem

Command-List

WAVeformATA: ALL?

[attach]5069[/attach]


Author: WisdomAugust    Time: 2022-5-12 16:06
[attach]5071[/attach]


Author: WisdomAugust    Time: 2022-5-13 16:02
[attach]5073[/attach]


Author: WisdomAugust    Time: 2022-6-1 17:22
9. CURSor Command Subsystem
CURSor command is used to measure the X-axis value (such as time) and Y-axis value (such as
voltage) of the screen waveform.
Command-List

l CURSor:MODE
l CURSor:MANual:TYPE
l CURSor:MANual:SOURce
l CURSor:MANual:AX
l CURSor:MANual:AXValue?
l CURSor:MANual:AY
l CURSor:MANual:AYValue?
l CURSor:MANual:BX
l CURSor:MANual:BXValue?
l CURSor:MANual:BY
l CURSor:MANual:BYValue?
l CURSor:TRACk:SOURcea
l CURSor:TRACk:SOURceb
l CURSor:TRACk:AX
l CURSor:TRACk:AXValue?
l CURSor:TRACk:AY?
l CURSor:TRACk:AYValue?
l CURSor:TRACk:BX
l CURSor:TRACk:BXValue?
l CURSor:TRACk:BY?
l CURSor:TRACk:BYValue?



Author: WisdomAugust    Time: 2022-6-2 16:12
[attach]5097[/attach]


Author: WisdomAugust    Time: 2022-6-6 17:32
[attach]5098[/attach]


Author: WisdomAugust    Time: 2022-6-7 16:11
[attach]5101[/attach]


Author: WisdomAugust    Time: 2022-6-8 18:36
[attach]5103[/attach]


Author: WisdomAugust    Time: 2022-6-9 16:30
[attach]5106[/attach]


Author: WisdomAugust    Time: 2022-7-1 16:55
[attach]5121[/attach]


Author: WisdomAugust    Time: 2022-7-2 19:57
[attach]5124[/attach]


Author: WisdomAugust    Time: 2022-7-4 16:05
[attach]5128[/attach]


Author: WisdomAugust    Time: 2022-7-5 16:08
[attach]5131[/attach]


Author: WisdomAugust    Time: 2022-7-6 16:10
[attach]5132[/attach]


Author: WisdomAugust    Time: 2022-7-7 21:08
[attach]5134[/attach]


Author: WisdomAugust    Time: 2022-8-1 16:18
[attach]5147[/attach]


Author: WisdomAugust    Time: 2022-8-2 16:13
[attach]5148[/attach]


Author: WisdomAugust    Time: 2022-8-3 16:16
[attach]5149[/attach]


Author: WisdomAugust    Time: 2022-8-4 16:07
[attach]5150[/attach]


Author: WisdomAugust    Time: 2022-8-5 16:33
[attach]5152[/attach]






Welcome to Electronic Engineer Discuss (https://www.eediscuss.com/) Powered by Discuz! X3.2