You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
4.2 KiB
92 lines
4.2 KiB
6 years ago
|
# This test requires that the Agilent IVI-COM Driver for Agilent546XX
|
||
|
# is installed. It is not requires to have a physical instrument
|
||
|
# connected, the driver is used in simulation mode.
|
||
|
import unittest
|
||
|
from comtypes.test import ResourceDenied
|
||
|
from comtypes.client import CreateObject
|
||
|
from comtypes import GUID
|
||
|
from comtypes.safearray import _midlSAFEARRAY
|
||
|
from ctypes import c_double, POINTER
|
||
|
|
||
|
try:
|
||
|
GUID.from_progid("Agilent546XX.Agilent546XX")
|
||
|
except WindowsError:
|
||
|
pass
|
||
|
|
||
|
else:
|
||
|
class Test(unittest.TestCase):
|
||
|
def test(self):
|
||
|
# The point of this test is the ReadWaveform method below,
|
||
|
# which takes several [in, out] arguments.
|
||
|
agDrvr = CreateObject("Agilent546XX.Agilent546XX")
|
||
|
|
||
|
# XXX XXX XXX The following call crashes hard with an accessviolation when
|
||
|
# the OANOCACHE environ variable is set.
|
||
|
import os
|
||
|
if "OANOCACHE" in os.environ:
|
||
|
print("Cannot test. buggy COM object?")
|
||
|
return
|
||
|
|
||
|
# Initialize the driver in simulation mode. Resource descriptor is ignored.
|
||
|
agDrvr.Initialize("", False, False, "Simulate=true")
|
||
|
# Initialize driver. Edit resource descriptor for your system.
|
||
|
# agDrvr.Initialize("GPIB0::7::INSTR", False, False, "QueryInstrStatus=true")
|
||
|
|
||
|
from comtypes.gen import IviScopeLib
|
||
|
iviDrvr = agDrvr.QueryInterface(IviScopeLib.IIviScope)
|
||
|
|
||
|
# Get driver Identity properties. Driver initialization not required.
|
||
|
## print "Identifier:", iviDrvr.Identity.Identifier
|
||
|
## print " Revision:", agDrvr.Identity.Revision
|
||
|
## print "Description:", agDrvr.Identity.Description
|
||
|
|
||
|
# Get instrument Identity properties.
|
||
|
## print "InstrumentModel: ", agDrvr.Identity.InstrumentModel
|
||
|
## print " FirmwareRevision: ", agDrvr.Identity.InstrumentFirmwareRevision
|
||
|
## print " SerialNumber: ", agDrvr.System.SerialNumber
|
||
|
|
||
|
# Setup for a measurement. Reset in this case.
|
||
|
agDrvr.Utility.Reset()
|
||
|
|
||
|
pMeasurement = agDrvr.Measurements.Item("UserChannel1")
|
||
|
# ReadWaveform() takes a sweep and reads the data.
|
||
|
#
|
||
|
# Definition generated for ReadWaveform():
|
||
|
#COMMETHOD([helpstring(u'Acquires and returns a waveform on the configured channels.')],
|
||
|
# HRESULT, 'ReadWaveform',
|
||
|
# ( ['in'], Agilent546XXTimeOutEnum, 'MaxTime' ),
|
||
|
# ( ['in', 'out'], POINTER(_midlSAFEARRAY(c_double)), 'pWaveformArray' ),
|
||
|
# ( ['in', 'out'], POINTER(c_double), 'pInitialX' ),
|
||
|
# ( ['in', 'out'], POINTER(c_double), 'pXIncrement' )),
|
||
|
|
||
|
# [in, out] arguments are now optional (comtypes
|
||
|
# constructs an empty default value when nothing is
|
||
|
# passed).
|
||
|
psaWaveform = _midlSAFEARRAY(c_double).create([])
|
||
|
self._check_result(pMeasurement.ReadWaveform(20000))
|
||
|
self._check_result(pMeasurement.ReadWaveform(20000, pInitialX=9.0))
|
||
|
self._check_result(pMeasurement.ReadWaveform(20000, pXIncrement=9.0, pInitialX=3.0))
|
||
|
self._check_result(pMeasurement.ReadWaveform(20000))
|
||
|
self._check_result(pMeasurement.ReadWaveform(20000, []))
|
||
|
self._check_result(pMeasurement.ReadWaveform(20000, pWaveformArray = []))
|
||
|
self._check_result(pMeasurement.ReadWaveform(20000, psaWaveform))
|
||
|
self._check_result(pMeasurement.ReadWaveform(20000, pXIncrement=9.0))
|
||
|
|
||
|
def _check_result(self, xxx_todo_changeme):
|
||
|
# ReadWaveform, in simulation mode, returns three values:
|
||
|
#
|
||
|
# - a safearray containing 100 random double values,
|
||
|
# unpacked and returned as tuple
|
||
|
# - the initial_x value: 0.0
|
||
|
# - the x_increment value: 0.0
|
||
|
(array, initial_x, x_increment) = xxx_todo_changeme
|
||
|
self.assertEqual(len(array), 100)
|
||
|
self.assertFalse([x for x in array if not isinstance(x, float)])
|
||
|
self.assertEqual(initial_x, 0.0)
|
||
|
self.assertEqual(x_increment, 0.0)
|
||
|
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
unittest.main()
|