AWG_outdated.py 2.68 KiB
from pyspcm import *
from spcm_tools import *
import sys
#
# **************************************************************************
# Class for controlling the AWG
#
# User must install the AWG driver for Windows 8/9/10/11, found in
# https://spectrum-instrumentation.com/support/downloads.php
# Look under model M4i 6622-x8
#
# The python module provided in pyspcm is in essence a c/c++ wrapper,
# hence the use of ctype variables in this code.
# **************************************************************************
#
class AWG:
def __init__(self):
self.hCard = None # holds the spcm card instance, this is used by all spcm calls
self.cardType = int32(0)
self.serialNumber = int32(0)
self.sampleRate = int64(0)
self.memSize = int64(0)
self.fncType = int32(0)
def open(self, remote=False):
# check for remote connection
if remote:
self.hCard = spcm_hOpen(create_string_buffer(b'TCPIP::192.168.1.10::inst0::INSTR'))
else:
self.hCard = spcm_hOpen(create_string_buffer(b'/dev/spcm0'))
if self.hCard is None:
sys.stdout.write("no card found...\n")
else:
# initialize variables
spcm_dwGetParam_i32(self.hCard, SPC_PCITYP, byref(self.cardType))
spcm_dwGetParam_i32(self.hCard, SPC_PCISERIALNO, byref(self.serialNumber))
spcm_dwGetParam_i32(self.hCard, SPC_FNCTYPE, byref(self.fncType))
spcm_dwGetParam_i64(self.hCard, SPC_SAMPLERATE, byref(self.sampleRate))
spcm_dwGetParam_i64(self.hCard, SPC_PCIMEMSIZE, byref(self.memSize))
name = szTypeToName(self.cardType.value)
sys.stdout.write("Found: {0} sn {1:05d}\n".format(name, self.serialNumber.value))
sys.stdout.write("Sample Rate: {:.1f} MHz\n".format(self.sampleRate.value / 1000000))
sys.stdout.write("Memory size: {:.0f} MBytes\n".format(self.memSize.value / 1024 / 1024))
def close(self):
spcm_vClose(self.hCard)
# Check if an error has occurred, return 1 if true
def checkError(self, customMsg=None):
toPrint = 0
msg = "Checking error at " + customMsg + " ... "
if customMsg is not None:
toPrint = 1
sys.stdout.write(msg)
errReg = uint32(0)
errVal = int32(0)
errText = ''
errCode = spcm_dwGetErrorInfo_i32(self.hCard, byref(errReg), byref(errVal), errText)
if errCode:
if toPrint:
sys.stdout.write(errText)
else:
sys.stdout.write(msg + errText)
return 1
elif toPrint:
sys.stdout.write("no error\n")
return 0