123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- import pyvisa
- import os
- import re
- from PIL import Image as PILImage
- from IPython.display import Image
- from retry import retry
- DEBUG = True
- # https://siglentna.com/wp-content/uploads/dlm_uploads/2017/10/ProgrammingGuide_forSDS-1-1.pdf
- def get_resource_manager():
- return pyvisa.ResourceManager()
- def list_resources(rm):
- l = rm.list_resources()
- if len(l) > 0:
- print(l)
- else:
- raise Exception("No VISA device detected.")
- def connect(rm, resource):
- sds = rm.open_resource(resource)
- print(sds.query("*IDN?"))
-
- return sds
-
- IMG_PATH = "./img"
-
- def screenshot(sds, name):
- bmpfile = os.path.join(IMG_PATH, name + ".bmp")
- pngfile = os.path.join(IMG_PATH, name + ".png")
-
- sds.write("SCDP")
- res = sds.read_raw()
- with open(bmpfile, 'wb') as f:
- f.write(res)
- # convert to png
- PILImage.open(bmpfile).save(pngfile)
- os.remove(bmpfile)
-
- return Image(filename=pngfile)
- #def get_frequency(sds):
- # res = sds.query("CYMOMETER?")
- # print("{}".format(res))
- def get_vertical(sds, channel):
- cmd = "C{}:Volt_DIV?".format(channel)
- res = sds.query(cmd)
- print("{}".format(res))
- def set_vertical(sds, channel, volt_by_div):
- cmd = "C{}:VDIV {}".format(channel, volt_by_div)
- sds.write(cmd)
- def get_tdiv(sds):
- print(sds.query("TDIV?"))
- def set_tdiv(sds, tdiv):
- cmd = "TDIV {}".format(tdiv)
- sds.write(cmd)
- def autosetup(sds):
- sds.write("ASET")
- def set_phase_measure(sds):
- sds.write("MEAD PHA,C1-C2")
- @retry(Exception)
- def get_phase(sds):
- res = sds.query("C1-C2:MEAD? PHA")
- # C1-C2:MEAD PHA,-75.72degree
- match = re.search(r"PHA,(.*?)degree", res)
- if match:
- return float(match.group(1))
- else:
- raise Exception("Can't read the phase in {}".format(res))
- def set_measure(sds, channel):
- sds.write("PACU PKPK,C{}".format(channel))
- sds.write("PACU FREQ,C{}".format(channel))
- @retry(Exception)
- def get_measure_vpp(sds, channel):
- res = sds.query("C{}:PAVA? PKPK".format(channel))
- # C1:PAVA PKPK,9.04E+00V
- match = re.search(r"PKPK,(.*?)V", res)
- if match:
- return float(match.group(1))
- else:
- raise Exception("Can't read Peak to Peak value in {}".format(res))
- @retry(Exception)
- def get_measure_freq(sds, channel):
- res = sds.query("C{}:PAVA? FREQ".format(channel))
- print("{}".format(res))
-
-
|