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.
ORPA-pyOpenRPA/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/comtypes/test/test_agilent.py

92 lines
4.2 KiB

# 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()