Example: Test rack end-to-end demo.
"""Example: Test rack end-to-end demo.
Demonstrates publishing measurements/commands to a dataset (Nominal Core publisher).
"""
import time
from nominal_instro.instruments import NominalDAQ, NominalELoad, NominalPSU
from nominal_instro.instruments.daq.types import DAQVendor, Direction
from nominal_instro.instruments.eload.types import LoadMode
from nominal_instro.lib import ConnectConfig, SerialConfig
# Demo assumes a power supply output is connected to the inputs of an electronic load.
# Demo assumes there is a DAQ monitoring this line.
DATASET_RID = "<dataset_rid>" # Replace with your dataset RID.
def main():
try:
# ====== SETUP =========
# Define instruments
daq = NominalDAQ.create(
name="myDAQ",
vendor=DAQVendor.KEYSIGHT_34980,
resource=ConnectConfig(visa_resource="USB0::0x0957::0x0507::MY44001757::INSTR"),
dataset_rid=DATASET_RID,
)
psu = NominalPSU.auto_create(
name="myPSU",
num_channels=2,
resource=ConnectConfig(visa_resource="USB0::0xFFFF::0x9115::800422020766920015::INSTR"),
dataset_rid=DATASET_RID,
)
eload = NominalELoad.auto_create(
name="myELoad",
resource=ConnectConfig("ASRL19::INSTR", serial_config=SerialConfig(baud_rate=9600)),
dataset_rid=DATASET_RID,
)
# Open instruments
daq.open()
psu.open()
eload.open()
# Configure DAQ
daq.configure_analog_channel(direction=Direction.INPUT, physical_channel="1010", alias="psu_v")
daq.configure_ai_sample_rate(sample_rate=1000)
# Start the DAQ to monitor the power supply/eload prior to using it
daq.start()
time.sleep(2) # Let's chill...for fun. Grab a drink
# Ensure powersupply is in a known state
psu.output_enable(False, channel=1)
psu.set_voltage(0, channel=1)
psu.set_current_limit(1.5, channel=1)
time.sleep(2) # More fun. More drinks.
# Ensure eload is in a known state
eload.output_enable(False)
eload.set_mode(LoadMode.CR) # Constant Resistance
eload.set_level(10) # Ohms
# Start the power supply and eload monitoring
psu.background_interval = 0.1
eload.background_interval = 0.1
psu.start()
eload.start()
time.sleep(2) # More time to drink and chill
# Power up the power supply
psu.output_enable(True, channel=1)
time.sleep(2) # Drink up, it's time to do work.
# ========= THE TEST =========
# Ramp up the PSU voltage
eload.output_enable(True)
for voltage in range(10):
psu.set_voltage(voltage)
time.sleep(1)
# Now keep the psu the same level and ramp up the eload resistance
for resistance in range(10, 100, 10):
eload.set_level(resistance)
time.sleep(1)
# ========== END TEST =======
finally:
# ==== CLEANUP =======
# Put the test stand into a safe state
eload.output_enable(False)
psu.output_enable(False)
time.sleep(3) # give space so that shutdown is observed
eload.close()
psu.close()
daq.close()
if __name__ == "__main__":
main()