66
Keysight InfiniiVision M9241/42/43A PXIe Oscilloscopes SCPI Programmer's Guide
4
Sequential (Blocking) vs. Overlapped Commands
Pausing Programs
Until Sequential
(Blocking)
Commands are
Complete
Sequential (blocking) commands do not prevent additional commands from being
sent to the queue or cause the remote program to wait. For example, if your
program does something like:
myScope.WriteString ":DIGitize"
Debug.Print "Signal acquired."
The "Signal acquired" message will be written immediately after the :DIGitize is
sent, not after the acquisition and processing is complete.
To pause the program until a sequential (blocking) command is complete, you
must wait for a query result after the sequential (blocking) command. For example,
in this case:
Public strQueryResult As String
myScope.WriteString ":DIGitize;*OPC?"
strQueryResult = myScope.ReadString
Debug.Print "Signal acquired."
The "Signal acquired" message will be written after the acquisition and processing
is complete. The *OPC? query is appended to :DIGitize with a semi-colon (;), which
essentially ties it to the same thread in the parser. It is immediately dealt with once
:DIGitize finishes and gives a "1" back to the program (whether the program uses it
or not), allowing the program to move on.
When using a query to wait until a sequential (blocking) command is complete, it
is possible for the sequential (blocking) command execution to take longer than
the I/O timeout, in which case, there will be a timeout error while waiting for the
query results. You can increase the I/O timeout or have your program poll the
Status Byte Register using the IO libraries' unblocked ReadSTB function to wait for
execution completion.
Using Device Clear
to Abort a
Sequential
(Blocking)
Command
When sequential (blocking) commands take too long or fail to complete for some
reason, you can send a Device Clear over the bus to clear the input buffer and
output queue, reset the parser, and clear any pending commands.
See Also
•
•
"*ESR (Standard Event Status Register)"
•