2017-07-31 6 views
0

Je souhaite contrôler mon Picoammètre Keithley 6485 en externe en le connectant via RS232toUSB à mon PC Linux (CentOS 6.9) et en écrivant un code en python (version 2.7.13) avec pyvisa:Affectation de valeurs pour write_ascii_values ​​en pyvisa pour port série

comme la sortie d'impression

#! /usr/local/bin/python2.7 
 

 
import sys 
 
import visa 
 
from visa import constants 
 

 
rm = visa.ResourceManager('/usr/local/vxipnp/linux/lib64/libvisa.so') 
 
#open serial connection and set baud to 9600, 8 data bits, CR termination, one stop bit, none parity, no flow control 
 
amm = rm.open_resource('ASRL2::INSTR', baud_rate = 9600, data_bits = 8, write_termination= '\r', read_termination = '\r') 
 
constants.VI_ASRL_STOP_ONE  
 
constants.VI_ASRL_PAR_NONE 
 
constants.VI_ASRL_FLOW_NONE     
 
amm.write("*RST")      # Return 6485 to RST default 
 
amm.write("SYS:ERR:ALL?")    # Return error message 
 
amm.write("TRIG:DEL 0")     # Set trigger delay to zero seconds 
 
amm.write("TRIG:COUNT 2500")   # Set trigger count to 2500 
 
amm.write("SENS:CURR:RANG:AUTO OFF") # Turn auto range off 
 
amm.write("SENS:CURR:NPLC .01")   # Set integration rate to NPLC 0.01 
 
amm.write("SENS:CURR:RANG 2e-7")  # Use 200 nA range 
 
amm.write("SYST:ZCH OFF")    # Turn zero check off 
 
amm.write("SYST:AZER:STAT OFF")   # Turn auto zero off 
 
amm.write("DISP:ENAB OFF")    # Turn Display off 
 
amm.write("*CLS")      # Clear status model 
 
amm.write("TRAC:POIN 2500")    # Set buffer size to 2500 
 
amm.write("TRAC:CLE")     # Clear buffer 
 
amm.write("TRAC:FEED:CONT NEXT")  # Set storage control to start on next reading 
 
amm.write("STAT:MEAS:ENAB 512")   # Enable buffer full measurement event 
 
amm.write("*SRE 1")      # Enable SRQ on buffer full measurement event 
 
amm.write("*OPC?")      # operation complete query (synchronize completion of commands)  
 
amm.write("INIT")      # start taking and storing readings wait for GPIB SRQ line to go true 
 
amm.write("DISP:ENAB ON")    # Turn display on 
 
print(amm.query_ascii_values("TRAC:DATA?")) # Request data from buffer

le problème quand je lance ce script, je viens d'obtenir « 1 », bien qu'il doit être retourné en ASCII comme ceci: lecture, Horodatage, Statut et le message d'erreur après amm.write ("* RST"): -113 en-tête non défini. Donc je pense que les messages et pas transférés correctement.

Je sais que sur l'interface RS-232, seul le format ASCII est autorisé. Mais quand je suis l'exemple dans le pyvisa instruction avec write_ascii_values ​​(texte, valeurs) et en lui affectant une liste, je reçois seulement un message d'erreur de l'erreur de commande de l'appareil -100. Est-ce que quelqu'un peut me dire comment définir correctement les variables dans write_ascii_values ​​ou ce que je fais mal? Mes paramètres pour le périphérique série sont-ils incorrects? Parfois, lorsque j'exécute 2 fois j'obtiens l'erreur "VI_ERROR_ASRL_FRAMING (-1073807253): Une erreur de cadrage s'est produite pendant le transfert." aussi. Je ne sais pas quoi faire.

Merci!

Cordialement, Roland

Répondre

0

IPAC a plusieurs règles de protocole. J'espère pouvoir vous guider à travers la règle "requête".

Si vous demandez à un instrument d'une requête, vous devez lire le résultat dans la mémoire tampon:

amm.write("*RST")      # Return 6485 to RST default 
amm.write("SYS:ERR:ALL?")    # Return error message 
amm.write("TRIG:DEL 0")     # Set trigger delay to zero seconds 

Une fois que vous avez envoyé « SYS: ERR: ALL » l'instrument vous attend pour lire le résultat. Tournez-le à partir d'une commande d'écriture à une requête sinon les commandes suivantes l'erreur et ne fonctionne pas comme prévu:

amm.write("*RST")        # Return 6485 to RST default 
print(amm.query_ascii_values("SYS:ERR:ALL?")) # Return error message 
amm.write("TRIG:DEL 0")       # Set trigger delay to zero seconds 

C'est la même pour l'opération de commande complète:

print(amm.query_ascii_values("*OPC?"))   # operation complete query (synchronize completion of commands) 

* OPC? retournera un '1' quand la commande précédente est terminée.