DIAdem

cancel
Showing results for 
Search instead for 
Did you mean: 

Python 32bit cannot read the return value by viScanf

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

 

 

 



0 Kudos
Message 1 of 1
(1,206 Views)