# xDevs.com Python test GPIB app 
# http://xdevs.com/guide/ni_gpib_rpi/
import sys
#import Gpib
import time
import vxi11

timegap = 3600

#inst = vxi11.Instrument("192.168.1.10", "gpib0,3") #Gpib.Gpib(0,3) # Instrument GPIB Address = 17
#inst.timeout = 60
#inst.clear()
insta = vxi11.Instrument("192.168.1.10", "gpib0,1") #Gpib.Gpib(0,3) # Instrument GPIB Address = 17
insta.timeout = 60
insta.clear()
instb = vxi11.Instrument("192.168.1.12", "gpib0,11") #Gpib.Gpib(0,3) # Instrument GPIB Address = 17
instb.timeout = 60
instb.clear()
instc = vxi11.Instrument("192.168.1.12", "gpib0,18") #Gpib.Gpib(0,3) # Instrument GPIB Address = 17
instc.timeout = 60

#inst = Gpib.Gpib(0, 3, 60) #Gpib.Gpib(0,3) # Instrument GPIB Address = 17
#insta = Gpib.Gpib(0, 2, 60) #Gpib.Gpib(0,3) # Instrument GPIB Address = 17
#instb = Gpib.Gpib(0, 10, 60) #Gpib.Gpib(0,3) # Instrument GPIB Address = 17
#instc = Gpib.Gpib(0, 11, 60) #Gpib.Gpib(0,3) # Instrument GPIB Address = 17

#inst.write("*CLR")
#inst.write("DISP ON")
#inst.write("DISP MSG,\"                 \"")
#inst.write("TEMP?")
#print ("\rTemp?\r")
#data = inst.read()
#print data

'''
inst.write("RESET")
inst.write("END ALWAYS")
inst.write("PRESET NORM")
inst.write("OFORMAT ASCII")
inst.write("ID?")
data = inst.read()
print ("IDa = %s" % data)
'''
insta.write("RESET")
insta.write("END ALWAYS")
insta.write("PRESET NORM")
insta.write("OFORMAT ASCII")
insta.write("ID?")
data = insta.read()
print ("IDa = %s" % data)

instb.write("RESET")
instb.write("END ALWAYS")
instb.write("PRESET NORM")
instb.write("OFORMAT ASCII")
instb.write("ID?")
data = instb.read()
print ("IDb = %s" % data)

instc.write("END ALWAYS")
instc.write("PRESET NORM")
instc.write("OFORMAT ASCII")
instc.write("ID?")
data = instc.read()
print ("IDc = %s" % data)

def log_data_pre(ins, files, id):
    ins.write("TEMP?")
    print ("\r%s Temp?\r" % id)
    data = ins.read()
    print (data)
    #o1.write (time.strftime("%d/%m/%Y-%H:%M:%S;") + (("TEMP? = ") + data + "\r\n"))
    ins.write("CAL? 1,1")
    data = ins.read()
    #print ("\r%s CAL? 1,1\r" % id)
    #print (data)
    #o1.write (time.strftime("%d/%m/%Y-%H:%M:%S;") + (("CAL? 1,1 = ") + data + "\r\n"))
    ins.write("CAL? 2,1")
    data = ins.read()
    #print ("\r%s CAL? 2,1\r" % id)
    #print (data)
    #o1.write (time.strftime("%d/%m/%Y-%H:%M:%S;") + (("CAL? 2,1 =") + data + "\r\n"))
    ins.write("CAL? 72")
    data = ins.read()
    #print ("\r%s CAL? 72\r" % id)
    #print (data)
    #o1.write (time.strftime("%d/%m/%Y-%H:%M:%S;") + (("CAL? 72 = ") + data + "\r\n"))

def log_data_after(ins, files, id):
    #files.write (time.strftime("%d/%m/%Y-%H:%M:%S;") + (("ACAL DCV DONE\r\n")))
    ins.write("TEMP?")
    print ("\r%s Temp?\r" % id)
    data = ins.read()
    print (data)
    files.write (time.strftime("%d/%m/%Y-%H:%M:%S;") + (("TEMP? = ") + data + "|"))
    ins.write("CAL? 1,1")
    data = ins.read()
    #print ("\r%s CAL? 1,1\r" % id)
    #print (data)
    files.write (time.strftime("%d/%m/%Y-%H:%M:%S;") + (("CAL? 1,1 = ") + data  + "|"))
    ins.write("CAL? 2,1")
    data = ins.read()
    #print ("\r%s CAL? 2,1\r" % id)
    #print (data)
    files.write (time.strftime("%d/%m/%Y-%H:%M:%S;") + (("CAL? 2,1 = ") + data + "|"))

    ins.write("CAL? 78")
    data = ins.read()
    #print ("\r%s CAL? 78\r" % id)
    #print (data)
    files.write (time.strftime("%d/%m/%Y-%H:%M:%S;") + (("CAL? 78 R10kG = ") + data + "|"))

    ins.write("CAL? 79")
    data = ins.read()
    #print ("\r%s CAL? 79\r" % id)
    #print (data)
    files.write (time.strftime("%d/%m/%Y-%H:%M:%S;") + (("CAL? 79 R100kG = ") + data + "|"))

    ins.write("CAL? 71")
    data = ins.read()
    #print ("\r%s CAL? 71\r" % id)
    #print (data)
    files.write (time.strftime("%d/%m/%Y-%H:%M:%S;") + (("CAL? 71 DCV1G = ") + data + "|"))

    ins.write("CAL? 70")
    data = ins.read()
    #print ("\r%s CAL? 70\r" % id)
    #print (data)
    files.write (time.strftime("%d/%m/%Y-%H:%M:%S;") + (("CAL? 70 DCV100mG = ") + data + "|"))

    ins.write("CAL? 86")
    data = ins.read()
    #print ("\r%s CAL? 86\r" % id)
    #print (data)
    files.write (time.strftime("%d/%m/%Y-%H:%M:%S;") + (("CAL? 87 R1kGO = ") + data + "|"))

    ins.write("CAL? 87")
    data = ins.read()
    #print ("\r%s CAL? 87\r" % id)
    #print (data)
    files.write (time.strftime("%d/%m/%Y-%H:%M:%S;") + (("CAL? 87 R10kGO = ") + data + "|"))

    ins.write("CAL? 176")
    data = ins.read()
    #print ("\r%s CAL? 176\r" % id)
    #print (data)
    files.write (time.strftime("%d/%m/%Y-%H:%M:%S;") + (("CAL? 176 ACAL TEMP = ") + data + "|"))

    ins.write("CAL? 59")
    data = ins.read()
    #print ("\r%s CAL? 59\r" % id)
    #print (data)
    files.write (time.strftime("%d/%m/%Y-%H:%M:%S;") + (("CAL? 59 CAL 10V TEMP = ") + data + "|"))
    
    ins.write("CAL? 97")
    data = ins.read()
    #print ("\r%s CAL? 97\r" % id)
    #print (data)
    files.write (time.strftime("%d/%m/%Y-%H:%M:%S;") + (("CAL? 97 DCI1mAG = ") + data + "|"))

    ins.write("CAL? 72")
    data = ins.read()
    print ("\r%s CAL? 72\r" % id)
    print (data)
    files.write (time.strftime("%d/%m/%Y-%H:%M:%S;") + (("CAL? 72 = ") + data + "|\r\n"))
    ins.write("BEEP")
    time.sleep(0.1)
    ins.write("BEEP")
    time.sleep(0.5)
    ins.write("BEEP")    
    time.sleep(1)
    ins.write("BEEP")

for cycles in range(0,720):
    with open("/repo/3458/sn20b_3458a_2025data.csv", 'a') as o1:
        with open("/repo/3458/sn20b_3458b_2025data.csv", 'a') as o2:
            with open("/repo/3458/sn20b_3459x_esa3_2025data.csv", 'a') as o3:
                with open("/repo/3458/sn20_3458f_2025data.csv", 'a') as o4:
                    with open("/repo/3458/sn20b_3459xtest_2023_olda3fb_hrs.csv", 'a') as o5:

                        #log_data_pre(inst, o1, "3458A")
                        log_data_pre(insta, o2, "3458B")
                        log_data_pre(instb, o3, "3458C")
                        log_data_pre(instc, o4, "3458F")
                        #log_data_pre(instd, o5, "3459")

                        #inst.write("ACAL ALL")
                        insta.write("ACAL ALL")
                        instb.write("ACAL ALL")
                        instc.write("ACAL ALL")
                        #instd.write("ACAL ALL")
                        time.sleep(860)

                        #log_data_after(inst, o1, "3458A")
                        log_data_after(insta, o2, "3458B")
                        log_data_after(instb, o3, "3458C")
                        log_data_after(instc, o4, "3458F")
                        #log_data_after(instd, o5, "3458M1")

                    o5.close()
                o4.close()
            o3.close()
        o2.close()
    o1.close()

    print ("ACAL cycle %d done" % cycles)
    time.sleep(timegap)    # wait for next 3rd hour
    print ("Waiting for next ACAL cycle\r")