hi :
I use keysight visa.Installed via Keysight IO Libraries Suite.
I use the method of calling DLL directly. In python 3.6 DLL can be called directly. In python 3.8 DLL cannot be called directly!!!
It runs normally under Python 64 bit. However, it can be written in 32 bits, but the read return is all empty.
My CODE:
from ctypes import *
visa = WinDLL("visa32.dll") # or windll.visa32
strRes=create_string_buffer(256)
status=0
def VISA_Find():
rm_session = c_uint32()
visa.viOpenDefaultRM(byref(rm_session))
expr = b"?*INSTR"
instr_list = c_uint32()
nb = c_uint32()
desc = create_string_buffer(256)
visa.viFindRsrc(rm_session,
expr,
byref(instr_list),
byref(nb),
desc )
if(nb.value>1):
for i in range(nb.value):
visa.viFindNext(instr_list,desc)
print(desc.value)
visa.viClose(rm_session)
def VISA_Send(vi_index,writeFmt):
argparams = c_uint32()
argwriteFmt=bytes(writeFmt, encoding='utf-8')+b'\r\n'
visa.viVPrintf(vi_index, argwriteFmt, byref(argparams))
def VISA_Read(vi_index):
visa.viScanf(vi_index, b'%t', byref(strRes))
return strRes.value
def VISA_Open(viaddress,vi_index):
defrm= c_uint32()
visa.viOpenDefaultRM(byref(defrm))
vi= c_uint32()
visa.viOpen(defrm, viaddress, 0, 0, byref(vi))
vi_index=vi.value
VISA_Send(vi_index, '*IDN?')
VISA_Read(vi_index)
return vi_index