Source code for pyccapt.control.core.baking_loging

import time
from datetime import datetime
from threading import Thread
import matplotlib.animation as animation
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from matplotlib import style

try:
    from mcculw import ul
    from mcculw.enums import InfoType, BoardInfo, TcType, TempScale, TInOptions
except Exception as e:
    print('Cannot import mcculw library')
    print(e)

# local imports
from pyccapt.control.devices.pfeiffer_gauges import TPG362


[docs] def daq_tc(): """ This function performs DAQ operations related to temperature measurement and control. """ device_to_show = "USB-TC" board_num = 0 print("Looking for Board 0 in InstaCal to be {0} series...".format(device_to_show)) try: board_name = ul.get_board_name(board_num) except Exception as e: if ul.ErrorCode(1): print("\nNo board found at Board 0.") print(e) return else: if device_to_show in board_name: print("{0} found as Board number {1}.\n".format(board_name, board_num)) ul.flash_led(board_num) else: print("\nNo {0} series found as Board 0. Please run InstaCal.".format(device_to_show)) return try: channel = 1 ul.set_config(InfoType.BOARDINFO, board_num, channel, BoardInfo.CHANTCTYPE, TcType.K) ul.set_config(InfoType.BOARDINFO, board_num, channel, BoardInfo.TEMPSCALE, TempScale.CELSIUS) ul.set_config(InfoType.BOARDINFO, board_num, channel, BoardInfo.ADDATARATE, 60) except Exception as e: print('\n', e)
[docs] def read(): """ This function reads data from sensors and logs it. """ tpg = TPG362(port='COM5') unit = tpg.pressure_unit() index = 0 while True: print('-----------', index, 'seconds', '--------------') gauge_bc, _ = tpg.pressure_gauge(1) gauge_mc, _ = tpg.pressure_gauge(2) board_num = 0 channel_list = ['MC_NEG', 'MC_Det', 'Mc_Top', 'MC_Gate', 'BC_Top', 'BC_Pump'] value_temperature = [] for i in range(6): options = TInOptions.NOFILTER val = float(ul.t_in(board_num, i, TempScale.CELSIUS, options)) value_temperature.append(round(val, 3)) value_temperature = np.array(value_temperature, dtype=np.dtype(float)) new_row = [ now.strftime("%d-%m-%Y"), datetime.now().strftime('%H:%M:%S'), gauge_mc, gauge_bc, value_temperature[0], value_temperature[1], value_temperature[2], value_temperature[3], value_temperature[4], value_temperature[5], ] data.loc[len(data)] = new_row time.sleep(1) index = index + 1 if index % 20 == 0: try: data.to_csv(file_name, sep=';', index=False) except: data.to_csv(file_name_backup, sep=';', index=False) print('csv File cannot be saved') print('close the csv file')
[docs] def animate(i): """ Animation function for plotting. """ time = data['Time'].to_numpy() MC_NEG = data['MC_NEG'].to_numpy() MC_Det = data['MC_Det'].to_numpy() Mc_Top = data['Mc_Top'].to_numpy() MC_Gate = data['MC_Gate'].to_numpy() BC_Top = data['BC_Top'].to_numpy() BC_Pump = data['BC_Pump'].to_numpy() MC_vacuum = data['MC_vacuum'].to_numpy() BC_vacuum = data['BC_vacuum'].to_numpy() ax1.clear() ax2.clear() ax1.plot(time[-20:], MC_NEG[-20:], label='MC_NEG', color='b') ax1.plot(time[-20:], MC_Det[-20:], label='MC_Det', color='g') ax1.plot(time[-20:], Mc_Top[-20:], label='Mc_Top', color='r') ax1.plot(time[-20:], MC_Gate[-20:], label='MC_Gate', color='c') ax1.plot(time[-20:], BC_Top[-20:], label='BC_Top', color='m') ax1.plot(time[-20:], BC_Pump[-20:], label='BC_Pump', color='y') ax2.plot(time[-20:], MC_vacuum[-20:], label='MC_vacuum', color='orange') ax2.plot(time[-20:], BC_vacuum[-20:], label='BC_vacuum', color='darkviolet') ax1.set_title('Baking Temperature') ax2.set_title('Baking Vacuum') ax1.set_ylabel('Temperature (C)') ax2.set_ylabel('Vacuum (mbar)') ax1.legend(loc='upper right') ax2.legend(['MC_vacuum', 'BC_vacuum'], loc='upper right')
# Previously these module-level lines created a matplotlib figure at # IMPORT time -- anyone who did ``from pyccapt.control.core import # baking_loging`` (or a sibling that does ``from ... import *``) popped # a figure window. ``animate`` and ``plot_baking`` need ``fig/ax1/ax2``, # so we lazy-create them inside the ``__main__`` block below (and keep # module-level names initialised to None so the symbols stay importable). style.use('fivethirtyeight') fig = None # set under __main__ guard ax1 = None ax2 = None
[docs] def plot_baking(df, window=0): """ Plot baking data. """ MC_NEG = df['MC_NEG'].to_numpy() MC_Det = df['MC_Det'].to_numpy() Mc_Top = df['Mc_Top'].to_numpy() MC_Gate = df['MC_Gate'].to_numpy() BC_Top = df['BC_Top'].to_numpy() BC_Pump = df['BC_Pump'].to_numpy() MC_vacuum = df['MC_vacuum'].to_numpy() BC_vacuum = df['BC_vacuum'].to_numpy() time = np.arange(0, len(BC_vacuum)) ax1.plot(time[window:], MC_NEG[window:], label='MC_NEG', color='b') ax1.plot(time[window:], MC_Det[window:], label='MC_Det', color='g') ax1.plot(time[window:], Mc_Top[window:], label='Mc_Top', color='r') ax1.plot(time[window:], MC_Gate[window:], label='MC_Gate', color='c') ax1.plot(time[window:], BC_Top[window:], label='BC_Top', color='m') ax1.plot(time[window:], BC_Pump[window:], label='BC_Pump', color='y') ax2.plot(time[window:], MC_vacuum[window:], label='MC_vacuum', color='orange') ax2.plot(time[window:], BC_vacuum[window:], label='BC_vacuum', color='darkviolet') ax1.set_title('Baking') ax1.set_ylabel('Temperature (C)') ax2.set_ylabel('Vacuum (mbar)') ax1.set_xlabel('Time (0.5 s)') ax2.set_xlabel('Time (0.5 s)') ax1.legend(loc='upper right') ax2.legend(['MC_vacuum', 'BC_vacuum'], loc='upper right') plt.show()
if __name__ == '__main__': # Lazy-create the matplotlib figure here so importing this module # does not pop a window. ``animate`` references these names as # globals; the script context binds them before FuncAnimation runs. fig = plt.figure() ax1 = fig.add_subplot(2, 1, 1) ax2 = fig.add_subplot(2, 1, 2) # Set recording and plotting flags recording = True ploting = False if recording: # Get current date and time for file names now = datetime.now() now_time = now.strftime("%d-%m-%Y_%H-%M-%S") # Create file names file_name = 'baking_logging_%s.csv' % now_time file_name_backup = 'backup_baking_logging_%s.csv' % now_time # Create an empty DataFrame to store data data = pd.DataFrame( columns=['data', 'Time', 'MC_vacuum', 'BC_vacuum', 'MC_NEG', 'MC_Det', 'Mc_Top', 'MC_Gate', 'BC_Top', 'BC_Pump'] ) # Create and start a thread for data reading thread_read = Thread(target=read) thread_read.daemon = True thread_read.start() # Create and start animation ani = animation.FuncAnimation(fig, animate, interval=1000) plt.show() try: data.to_csv(file_name, sep=';', index=False) except: data.to_csv(file_name_backup, sep=';', index=False) if ploting: # Read data from CSV file df = pd.read_csv('baking_logging_13-01-2023_11-48-02.csv', sep=';') # Plot data plot_baking(df, window=0) # Print DataFrame print(df)