def launchMeasurements(Mon, iterationsPerScenario): engine = sampleEngine.SampleEngine(Mon) engine.ConsoleOutput(False) engine.setTriggerChannel( sampleEngine.channels.timeStamp ) #Start and stop judged by the timestamp channel. scenarios = [[ "../CrashReporting/scenarios/crashlytics-release.sh", "ruben.soccerlab.crashlytics" ]] """ ["../Analytics/scenarios/firebase-release.sh", "ruben.soccerlab.google"], ["../Analytics/scenarios/flurry-release.sh", "ruben.soccerlab.flurry"], ["../Analytics/scenarios/google-release.sh", "ruben.soccerlab.google"], ["../CrashReporting/scenarios/crashlytics-release.sh", "ruben.soccerlab.crashlytics"], ["../CrashReporting/scenarios/newrelic-release.sh", "ruben.soccerlab.newrelic"], ["../CrashReporting/scenarios/acra-release.sh", "ruben.soccerlab.acra"], """ for scenario in scenarios: for i in range(iterationsPerScenario): launchScenario(engine, scenario[0], Mon, i) clearPhoneState(scenario[1]) Mon.closeDevice()
def testHVPM(serialno=None,Protocol=pmapi.USB_protocol()): HVMON = HVPM.Monsoon() HVMON.setup_usb(serialno,Protocol) print("HVPM Serial Number: " + repr(HVMON.getSerialNumber())) HVMON.fillStatusPacket() HVMON.setVout(3) HVengine = sampleEngine.SampleEngine(HVMON) #Output to CSV HVengine.enableCSVOutput("HV Main Example " + str(serialno) + ".csv") #Turning off periodic console outputs. HVengine.ConsoleOutput(True) #Setting all channels enabled HVengine.enableChannel(sampleEngine.channels.MainCurrent) HVengine.enableChannel(sampleEngine.channels.MainVoltage) #HVengine.enableChannel(sampleEngine.channels.USBCurrent) #HVengine.enableChannel(sampleEngine.channels.USBVoltage) #HVengine.enableChannel(sampleEngine.channels.AuxCurrent) HVengine.enableChannel(sampleEngine.channels.timeStamp) #Setting trigger conditions numSamples=sampleEngine.triggers.SAMPLECOUNT_INFINITE HVengine.setStartTrigger(sampleEngine.triggers.GREATER_THAN,0) HVengine.setStopTrigger(sampleEngine.triggers.GREATER_THAN,600) HVengine.setTriggerChannel(sampleEngine.channels.timeStamp) #Actually start collecting samples HVengine.startSampling(numSamples) #startSampling() continues until the trigger conditions have been met, and then ends automatically. HVMON.closeDevice();
def testCPP(serialno=None, Protocol=pmapi.CPP_Backend_Protocol()): HVMON = HVPM.Monsoon() HVMON.Protocol = Protocol #HVMON.setup_usb(serialno, Protocol) Protocol.Connect(1, serialno) print("HVPM Serial Number: " + repr(Protocol.getValue(op.OpCodes.getSerialNumber, 1))) HVMON.setVout(3.7) HVengine = sampleEngine.SampleEngine(HVMON) HVengine.enableCSVOutput("HV Main Example3.csv") HVengine.ConsoleOutput(True) HVengine.enableChannel(sampleEngine.channels.MainCurrent) HVengine.enableChannel(sampleEngine.channels.MainVoltage) numSamples = sampleEngine.triggers.SAMPLECOUNT_INFINITE HVengine.setStartTrigger(sampleEngine.triggers.GREATER_THAN, 0) HVengine.setStopTrigger(sampleEngine.triggers.GREATER_THAN, 10) HVengine.setTriggerChannel(sampleEngine.channels.timeStamp) HVengine.startSampling(numSamples, 1) #Protocol.startSampling(1250,10000) #packets = Protocol.BulkRead() Protocol.closeDevice()
def __init__(self): self.HVMON = HVPM.Monsoon() self.HVMON.setup_usb() print("HVPM Serial Number: " + repr(self.HVMON.getSerialNumber())) self.HVMON.fillStatusPacket() self.HVengine = sampleEngine.SampleEngine(self.HVMON) self.HVengine.ConsoleOutput(False) self.HVengine.disableCSVOutput()
def collectPowerData(hash, sample_time, voltage, num_iters): serialno = _getSerialno(hash) if serialno is not None: getLogger().info("Collecting current from " "monsoon {} for {}".format(str(serialno), hash)) # wait till all actions are performed sleep(1) Mon = HVPM.Monsoon() Mon.setup_usb(serialno) # Need to sleep to be functional correctly sleep(0.2) getLogger().info("Setup Vout") Mon.setVout(voltage) getLogger().info("Setup setPowerupTime") Mon.setPowerupTime(60) getLogger().info("Setup setPowerUpCurrentLimit") Mon.setPowerUpCurrentLimit(14) getLogger().info("Setup setRunTimeCurrentLimit") Mon.setRunTimeCurrentLimit(14) # main channel getLogger().info("Setup setVoltageChannel") Mon.setVoltageChannel(0) engine = sampleEngine.SampleEngine(Mon) getLogger().info("Setup enableCSVOutput") # we may leak the file content f = tempfile.NamedTemporaryFile(delete=False) f.close() filename = f.name engine.enableCSVOutput(filename) getLogger().info("Setup ConsoleOutput") engine.ConsoleOutput(False) sleep(1) # 200 us per sample num_samples = sample_time / 0.0002 getLogger().info("startSampling on {}".format(filename)) engine.startSampling(num_samples) engine.disableCSVOutput() getLogger().info("Written power data to file: {}".format(filename)) # retrieve statistics from the power data getLogger().info("Reading data from CSV file") power_data = _getPowerData(filename) getLogger().info("Calculating the benchmark data range from " "{} data points".format(len(power_data))) start_idx, end_idx = _calculatePowerDataRange(power_data) getLogger().info("Collecting data from " "{} to {}".format(start_idx, end_idx)) getLogger().info("Benchmark time: " "{} - {} s".format(power_data[start_idx]["time"], power_data[end_idx]["time"])) data = _retrievePowerData(power_data, start_idx, end_idx, num_iters) data["power_data"] = filename return data
def testHVPM(serialno=None, Protocol=pmapi.USB_protocol()): HVMON = HVPM.Monsoon() HVMON.setup_usb(serialno, Protocol) print("HVPM Serial Number: " + repr(HVMON.getSerialNumber())) HVMON.fillStatusPacket() HVMON.setVout(3) HVengine = sampleEngine.SampleEngine(HVMON) #Output to CSV HVengine.enableCSVOutput("HV Main Example.csv") #Turning off periodic console outputs. HVengine.ConsoleOutput(True) #Setting all channels enabled HVengine.enableChannel(sampleEngine.channels.MainCurrent) HVengine.enableChannel(sampleEngine.channels.MainVoltage) HVengine.enableChannel(sampleEngine.channels.USBCurrent) HVengine.enableChannel(sampleEngine.channels.USBVoltage) HVengine.enableChannel(sampleEngine.channels.AuxCurrent) HVengine.enableChannel(sampleEngine.channels.timeStamp) #Setting trigger conditions numSamples = sampleEngine.triggers.SAMPLECOUNT_INFINITE HVengine.setStartTrigger(sampleEngine.triggers.GREATER_THAN, 0) HVengine.setStopTrigger(sampleEngine.triggers.GREATER_THAN, 5) HVengine.setTriggerChannel(sampleEngine.channels.timeStamp) #Actually start collecting samples HVengine.startSampling(numSamples) #startSampling() continues until the trigger conditions have been met, and then ends automatically. #Measurements are automatically saved to the filename passed in enableCSVOutput() #Disable CSV Output HVengine.disableCSVOutput() #Collect another 5 seconds worth of samples HVengine.startSampling(numSamples) #Get those samples as a Python list samples = HVengine.getSamples() #Samples has the format [[timestamp], [mainCurrent], [usbCurrent], [auxCurrent], [mainVolts],[usbVolts]] #Use sampleEngine.channel to select the appropriate list index. timestamp = samples[sampleEngine.channels.timeStamp] mainCurrent = samples[sampleEngine.channels.MainCurrent] auxCurrent = samples[sampleEngine.channels.AuxCurrent] usbCurrent = samples[sampleEngine.channels.USBCurrent] mainVoltage = samples[sampleEngine.channels.MainVoltage] usbVoltage = samples[sampleEngine.channels.USBVoltage] #Perform analysis on the resulting data. For example, in order to calculate, perform the following: #mainCurrent is given in mA. Divide by 1000 to convert to Amps scaledMainCurrent = [x / 1000 for x in mainCurrent] #Element-wise multiply to produce Watts. Power = Current * Voltage. mainPower = np.multiply(scaledMainCurrent, mainVoltage) #When finished, close the device. HVMON.closeDevice()
def testLVPM(serialno=None, Protcol=pmapi.USB_protocol()): Mon = LVPM.Monsoon() Mon.setup_usb(serialno, Protcol) print("LVPM Serial number: " + repr(Mon.getSerialNumber())) Mon.fillStatusPacket() Mon.setVout(4) engine = sampleEngine.SampleEngine(Mon) engine.enableCSVOutput("Main Example.csv") engine.ConsoleOutput(True) #test main channels testTime = 2 numSamples = sampleEngine.triggers.SAMPLECOUNT_INFINITE #Don't stop based on sample count, continue until the trigger conditions have been satisfied. engine.setStartTrigger(sampleEngine.triggers.GREATER_THAN, 0) #Start when we exceed 0 s engine.setStopTrigger(sampleEngine.triggers.GREATER_THAN, testTime) #Stop when we exceed 5 s. engine.setTriggerChannel( sampleEngine.channels.timeStamp ) #Start and stop judged by the timestamp channel. engine.startSampling(numSamples) engine.disableChannel(sampleEngine.channels.MainCurrent) engine.disableChannel(sampleEngine.channels.MainVoltage) #Disable Main channels #engine.disableChannel(sampleEngine.channels.MainCurrent) #engine.disableChannel(sampleEngine.channels.MainVoltage) #engine.setStartTrigger(sampleEngine.triggers.GREATER_THAN,5) #engine.setStopTrigger(sampleEngine.triggers.GREATER_THAN,10) #engine.setTriggerChannel(sampleEngine.channels.timeStamp) #Take measurements from the USB Channel #Mon.setVout(0) #Set USB Passthrough mode to 'on,' since it defaults to 'auto' and will turn off when sampling mode begins. #Mon.setUSBPassthroughMode(op.USB_Passthrough.On) #Enable USB channels #engine.enableChannel(sampleEngine.channels.USBCurrent) #engine.enableChannel(sampleEngine.channels.USBVoltage) #engine.enableCSVOutput("USB Test.csv") #engine.startSampling(5000) #Enable every channel, take measurements #engine.enableChannel(sampleEngine.channels.MainVoltage) #engine.enableChannel(sampleEngine.channels.MainCurrent) #Enable Aux channel #engine.enableChannel(sampleEngine.channels.AuxCurrent) #Mon.setVout(4.3) #engine.enableCSVOutput("All Test.csv") #engine.startSampling(5000) #Enable every channel, take measurements, and retrieve them as a Python list. #engine.disableCSVOutput() #engine.startSampling(5000) #samples = engine.getSamples() Mon.closeDevice()
def __init__(self): self.power = 0 self.voltage = 0 self.current = 0 self.power_data = [] self.voltage_data = [] self.current_data = [] self.Mon = HVPM.Monsoon() self.Mon.setup_usb() self.engine = sampleEngine.SampleEngine(self.Mon) self.engine.disableCSVOutput() self.engine.ConsoleOutput(False)
def __create_engine(self): HVMON = HVPM.Monsoon() HVMON.setup_usb() print("HVPM Serial Number: " + repr(HVMON.getSerialNumber())) HVMON.fillStatusPacket() #HVMON.setVout(device_voltage) HVengine = sampleEngine.SampleEngine(HVMON) HVengine.ConsoleOutput(False) HVengine.disableCSVOutput() #HVengine.enableChannel(sampleEngine.channels.MainCurrent) #HVengine.enableChannel(sampleEngine.channels.MainVoltage) #HVengine.enableChannel(sampleEngine.channels.timeStamp) return HVMON, HVengine
def main(): global engine # Setup the Power Monitor. power_monitor_device = HVPM.Monsoon() power_monitor_device.setup_usb() power_monitor_device.setDefaultScaleValues() # Create a sampling engine engine = sampleEngine.SampleEngine(power_monitor_device) # Set output to stdout depending on the CLI option -s. Default is False engine.ConsoleOutput(FLAGS.s) # Set the filename for the output CSV file. Default is sample.csv in pwd. if FLAGS.o: engine.enableCSVOutput(FLAGS.o) # We can define two different termination conditions. # First: time, second: number of samples. # Therefore, we have to define the timestamp as the channel for the time condition. # Than, start the measurement immediately and set the stop trigger to 30, # which will terminate the measurement after 30 seconds per default. # Finally, do not terminate the measurement after a number of samples. engine.setTriggerChannel(sampleEngine.channels.timeStamp) engine.setStartTrigger(sampleEngine.triggers.GREATER_THAN, 0) engine.setStopTrigger(sampleEngine.triggers.GREATER_THAN, sampleEngine.triggers.SAMPLECOUNT_INFINITE) num_samples = sampleEngine.triggers.SAMPLECOUNT_INFINITE # If the -t parameter is set, set the stop trigger to the given seconds. if FLAGS.t: engine.setStopTrigger(sampleEngine.triggers.GREATER_THAN, FLAGS.t) # If the -n parameter is set, set the maximum sample number to the given numnber. if FLAGS.n: num_samples = FLAGS.n engine.disableChannel(sampleEngine.channels.MainCurrent) engine.disableChannel(sampleEngine.channels.MainVoltage) if FLAGS.u: power_monitor_device.setUSBPassthroughMode(op.USB_Passthrough.On) else: power_monitor_device.setUSBPassthroughMode(op.USB_Passthrough.Off) engine.enableChannel(sampleEngine.channels.USBCurrent) engine.enableChannel(sampleEngine.channels.USBVoltage) # Finally, start the measuremen. engine.startSampling(num_samples)
def testCSVOutput(serialno=None, Protocol=pmapi.USB_protocol()): """Test case 2: CSV Output.""" #Setting all channels enabled Mon = HVPM.Monsoon() Mon.setup_usb(serialno, Protocol) Engine = sampleEngine.SampleEngine(Mon) Engine.ConsoleOutput(False) Engine.enableChannel(sampleEngine.channels.MainCurrent) Engine.enableChannel(sampleEngine.channels.MainVoltage) Engine.enableChannel(sampleEngine.channels.USBCurrent) Engine.enableChannel(sampleEngine.channels.USBVoltage) Engine.enableChannel(sampleEngine.channels.AuxCurrent) Engine.enableChannel(sampleEngine.channels.timeStamp) Engine.enableCSVOutput("Test3.csv") Engine.startSampling( 3000000, 100) #Collect 10 minutes worth of samples a 1/100 granularity Mon.closeDevice()
def testHVPM(serialno=None, Protocol=pmapi.USB_protocol()): HVMON = HVPM.Monsoon() HVMON.setup_usb(serialno, Protocol) print("HVPM Serial Number: " + repr(HVMON.getSerialNumber())) HVMON.fillStatusPacket() HVMON.setVout(3) HVengine = sampleEngine.SampleEngine(HVMON) HVengine.enableCSVOutput("HV Main Example.csv") HVengine.ConsoleOutput(True) numSamples = sampleEngine.triggers.SAMPLECOUNT_INFINITE #Don't stop based on sample count, continue until the trigger conditions have been satisfied. HVengine.setStartTrigger(sampleEngine.triggers.GREATER_THAN, 0) #Start when we exceed 0 s HVengine.setStopTrigger(sampleEngine.triggers.GREATER_THAN, 5) #Stop when we exceed 5 s. HVengine.setTriggerChannel( sampleEngine.channels.timeStamp ) #Start and stop judged by the timestamp channel. HVengine.startSampling(numSamples) HVMON.closeDevice()
def testDisconnectBug(serialno=None, Protocol=pmapi.USB_protocol()): """Test for start sampling disconnect bug. This is the normal use case for customers who encounter the bug. In an ideal solution, it will pass.""" Mon = HVPM.Monsoon() Mon.setup_usb(serialno, Protocol) Engine = sampleEngine.SampleEngine(Mon) Engine.ConsoleOutput(False) i = 0 for i in range(5000): i += 1 try: Engine.startSampling(10) print(i) except usb.core.USBError as e: print("Expected error hit. Reconnecting") print(e.backend_error_code) Mon.Reconnect() Mon.stopSampling() Mon.closeDevice()
def __init__(self, plot, plot_win, file_IO, USB_PANEL): self.p = plot self.w1 = plot_win self.file_io = file_IO self.data = [] self.time_data = [] self.temp_data = 0 self.idx = 0 self.is_start = True self.usb_panel = USB_PANEL super(PowerMonitorHandler, self).__init__() self.Mon = HVPM.Monsoon() self.Mon.setup_usb() self.Mon.setVout(4.0) self.engine = sampleEngine.SampleEngine(self.Mon) self.engine.signal_samp_trigger.connect(self.pass_through2) self.engine.enableChannel(sampleEngine.channels.USBCurrent) self.Mon.setUSBPassthroughMode(op.USB_Passthrough.On) self.engine.disableCSVOutput() self.engine.ConsoleOutput(False) self.numSamples = sampleEngine.triggers.SAMPLECOUNT_INFINITE
def testListOutput(serialno=None, Protocol=pmapi.USB_protocol()): """Test case 1. Basic connection, outputs as a Python list.""" Mon = HVPM.Monsoon() Mon.setup_usb(serialno, Protocol) Engine = sampleEngine.SampleEngine(Mon) Engine.ConsoleOutput(False) numSamples = 5000 Engine.startSampling(numSamples) samples = Engine.getSamples() timestamp = samples[sampleEngine.channels.timeStamp] mainCurrent = samples[sampleEngine.channels.MainCurrent] auxCurrent = samples[sampleEngine.channels.AuxCurrent] usbCurrent = samples[sampleEngine.channels.USBCurrent] mainVoltage = samples[sampleEngine.channels.MainVoltage] usbVoltage = samples[sampleEngine.channels.USBVoltage] #Do something with this information pass
def testDisconnectBugSevere(serialno=None, Protocol=pmapi.USB_protocol()): """This will force the disconnect bug to occur in a short period of time. This one doesn't necessarily need to pass, but an ideal fix would allow it to do so.""" Mon = HVPM.Monsoon() Mon.setup_usb(serialno, Protocol) Engine = sampleEngine.SampleEngine(Mon) Engine.ConsoleOutput(False) i = 0 for i in range(5000): i += 1 try: Mon.StartSampling() Mon.stopSampling() print(i) except usb.core.USBError as e: print("Expected error hit. Reconnecting") print(e.backend_error_code) Mon.Reconnect() Mon.stopSampling() Mon.closeDevice()
def testVoltageBug(serialno=None, Protocol=pmapi.USB_protocol()): """If a command is sent to the Power Monitor to setVout while it is in sample mode, there is a high probability the voltage will be set to a random value, and the unit will crash. During normal operation, this can occur if setVout is called immediately after stopSampling(). Depending on the timing, the unit might not actually be out of sample mode when the setVout command is received.""" Mon = HVPM.Monsoon() Mon.setup_usb(serialno, Protocol) Engine = sampleEngine.SampleEngine(Mon) Engine.ConsoleOutput(False) i = 0 reconnects = 0 Mon.setVout(0.8) for i in range(5000): i += 1 Engine.startSampling(50) Mon.setVout(0.8) samples = Engine.getSamples() voltage = np.array(samples[sampleEngine.channels.MainVoltage]) if (np.any(voltage > 1.0)): #Here we're checking to see if there's a condition where it didn't fail, but the voltage is still wrong. #This should probably never happen, but let's be sure about that. print("Error, voltage is wrong") assert (False) print(i) Mon.closeDevice()
def main(): #Standard setup HVMON = HVPM.Monsoon() HVMON.setup_usb() print("HVPM Serial Number: " + repr(HVMON.getSerialNumber())) HVMON.fillStatusPacket() HVMON.setVout(2.5) HVengine = sampleEngine.SampleEngine(HVMON) HVengine.ConsoleOutput(False) #Puts the Power monitor in sample mode, and starts collecting samples automatically. HVengine.periodicStartSampling() for i in range(5): #Collect the most recent 100 samples samples = HVengine.periodicCollectSamples(100) #samples has the same format as returned by getSamples(): [[timestamp], [mainCurrent], [usbCurrent], [auxCurrent], [mainVolts],[usbVolts]] print("iteration " + repr(i) + " samples collected " + repr(len(samples[0]))) time.sleep(1) #Represents doing something else for a bit. #In order to change parameters like voltage and USB passthrough mode, the unit needs to exit sample mode. HVengine.periodicStopSampling() HVMON.setVout(4.0) #Use CSV output HVengine.enableCSVOutput("periodicExample.csv") #Restart tests after changing. HVengine.periodicStartSampling() for i in range(5): #CSV output consumes samples, so we can't use them as a python list. #Samples are automatically appended to the end of the csv file HVengine.periodicCollectSamples(100) print("CSV out, iteration " + repr(i)) time.sleep(1) #When testing is concluded, stop sampling, turn off voltage, and close the device. HVengine.periodicStopSampling(closeCSV=True) HVMON.setVout(0) HVMON.closeDevice()
def testHVPM(serialno=None, Protocol=pmapi.USB_protocol()): HVMON = HVPM.Monsoon() HVMON.setup_usb(serialno, Protocol) print("HVPM Serial Number: " + repr(HVMON.getSerialNumber())) HVMON.setPowerUpCurrentLimit(8) HVMON.setRunTimeCurrentLimit(8) HVMON.fillStatusPacket() #HVMON.calibrateVoltage() HVMON.setVout(1) HVengine = sampleEngine.SampleEngine(HVMON) #Output to CSV #HVengine.enableCSVOutput("HV Main Example2.csv") #Turning off periodic console outputs. HVengine.ConsoleOutput(True) #Setting all channels enabled HVengine.enableChannel(sampleEngine.channels.MainCurrent) HVengine.enableChannel(sampleEngine.channels.MainVoltage) #HVengine.enableChannel(sampleEngine.channels.USBCurrent) #HVengine.enableChannel(sampleEngine.channels.USBVoltage) #HVengine.enableChannel(sampleEngine.channels.AuxCurrent) #HVengine.enableChannel(sampleEngine.channels.timeStamp) #Setting trigger conditions numSamples = sampleEngine.triggers.SAMPLECOUNT_INFINITE HVengine.setStartTrigger(sampleEngine.triggers.GREATER_THAN, 0) HVengine.setStopTrigger(sampleEngine.triggers.GREATER_THAN, 60) HVengine.setTriggerChannel(sampleEngine.channels.timeStamp) #Actually start collecting samples HVengine.startSampling(numSamples, 1) #startSampling() continues until the trigger conditions have been met, and then ends automatically. #Measurements are automatically saved to the filename passed in enableCSVOutput() #Disable CSV Output #HVengine.disableCSVOutput() #Collect another 5 seconds worth of samples #HVengine.startSampling(numSamples) #Get those samples as a Python list #samples = HVengine.getSamples() #Samples has the format [[timestamp], [mainCurrent], [usbCurrent], [auxCurrent], [mainVolts],[usbVolts]] #Use sampleEngine.channel to select the appropriate list index. #timestamp = samples[sampleEngine.channels.timeStamp] #mainCurrent = samples[sampleEngine.channels.MainCurrent] #auxCurrent = samples[sampleEngine.channels.AuxCurrent] #usbCurrent = samples[sampleEngine.channels.USBCurrent] #mainVoltage = samples[sampleEngine.channels.MainVoltage] #usbVoltage = samples[sampleEngine.channels.USBVoltage] #Perform analysis on the resulting data. For example, in order to calculate, perform the following: #mainCurrent is given in mA. Divide by 1000 to convert to Amps #scaledMainCurrent = [x / 1000 for x in mainCurrent] #Element-wise multiply to produce Watts. Power = Current * Voltage. #mainPower = np.multiply(scaledMainCurrent, mainVoltage) #When finished, close the device. #print("Firmware version: ", HVMON.statusPacket.firmwareVersion) #print("auxCoarseOffset: ", HVMON.statusPacket.auxCoarseResistorOffset) #print("auxCoarseScale: ", HVMON.statusPacket.auxCoarseScale) #print("auxFineOffset: ", HVMON.statusPacket.auxFineResistorOffset) #print("auxFineScale: ", HVMON.statusPacket.auxFineScale) print("dacCalHigh: ", HVMON.statusPacket.dacCalHigh) print("dacCalLow: ", HVMON.statusPacket.dacCalLow) #print("hardwareModel: ", HVMON.statusPacket.hardwareModel) #print("mainCoarseOffset: ", HVMON.statusPacket.mainCoarseResistorOffset) #print("mainCoarseScale: ", HVMON.statusPacket.mainCoarseScale) #print("mainCoarseZeroOffset: ", HVMON.statusPacket.mainCoarseZeroOffset) #print("mainFineResistorOffset: ", HVMON.statusPacket.mainFineResistorOffset) #print("mainFineScale: ", HVMON.statusPacket.mainFineScale) #print("mainFineZeroOffset: ", HVMON.statusPacket.mainFineZeroOffset) print("powerupCurrentLimit: ", HVMON.statusPacket.powerupCurrentLimit) #print("powerupTime: ", HVMON.statusPacket.powerupTime) #print("protocolVersion: ", HVMON.statusPacket.protocolVersion) print("runtimeCurrentLimit: ", HVMON.statusPacket.runtimeCurrentLimit) print("serialNumber: ", HVMON.statusPacket.serialNumber) #print("temperature: ", HVMON.statusPacket.temperature) #print("temperatureLimit: ", HVMON.statusPacket.temperatureLimit) #print("usbCoarseResistorOffset: ", HVMON.statusPacket.usbCoarseResistorOffset) #print("usbCoarseScale: ", HVMON.statusPacket.usbCoarseScale) #print("usbCoarseZeroOffset: ", HVMON.statusPacket.usbCoarseZeroOffset) #print("usbFineResistorOffset: ", HVMON.statusPacket.usbFineResistorOffset) #print("usbFineScale: ", HVMON.statusPacket.usbFineScale) #print("usbFineZeroOffset: ", HVMON.statusPacket.usbFineZeroOffset) #print("usbPassthroughMode: ", HVMON.statusPacket.usbPassthroughMode) HVMON.closeDevice()
type=float, default=float("inf"), help="threshold to trigger sampling, unit is mA") args = parser.parse_args() sample_number = args.number_of_samples if args.number_of_samples > 0 else sampleEngine.triggers.SAMPLECOUNT_INFINITE monsoon_model = args.monsoon_model if monsoon_model.startswith('l') or monsoon_model.startswith('w'): monsoon = LVPM.Monsoon() # white else: monsoon = HVPM.Monsoon() monsoon.setup_usb() print("Monsoon Power Monitor Serial number: {}".format( monsoon.getSerialNumber())) engine = sampleEngine.SampleEngine(monsoon) trigger = args.trigger if args.save_file: dir_name = os.path.dirname(args.save_file) if not os.path.exists(dir_name): os.makedirs(dir_name) if trigger < float("inf"): # set trigger engine.disableCSVOutput() # global csv_name csv_file = args.save_file csv_file_handle = open(csv_file, 'w') else: engine.enableCSVOutput(args.save_file) else: engine.disableCSVOutput()
import Monsoon.LVPM as LVPM import Monsoon.sampleEngine as sampleEngine import Monsoon.Operations as op Mon = LVPM.Monsoon() Mon.setup_usb() Mon.setVout(4.0) engine = sampleEngine.SampleEngine(Mon) engine.enableCSVOutput("Main Example.csv") engine.ConsoleOutput(True) numSamples = 50000 #sample for one second engine.startSampling(numSamples) #Diable Main channels engine.disableChannel(sampleEngine.channels.MainCurrent) engine.disableChannel(sampleEngine.channels.MainVoltage) #Take measurements from the USB Channel Mon.setVout(0) #Set USB Passthrough mode to 'on,' since it defaults to 'auto' and will turn off when sampling mode begins. Mon.setUSBPassthroughMode(op.USB_Passthrough.On) #Enable USB channels engine.enableChannel(sampleEngine.channels.USBCurrent) engine.enableChannel(sampleEngine.channels.USBVoltage) engine.enableCSVOutput("USB Test.csv") engine.startSampling(5000) #Enable every channel, take measurements engine.enableChannel(sampleEngine.channels.MainVoltage) engine.enableChannel(sampleEngine.channels.MainCurrent) #Enable Aux channel
class MonsoonDAQ: # print("Monsoon Set up...") # 이거 뭐지..왜 돌지 mymon = LVPM.Monsoon() mymon.setup_usb() myengine = sampleEngine.SampleEngine(mymon) myengine.disableCSVOutput() myengine.ConsoleOutput(False) print("Monsoon Setting Finished...") def __init__(self): pass def getsamples(self): global count global bc print("getSamples() start...") self.myengine.startSampling(5000) mysamples1 = self.myengine.getSamples() self.myengine.startSampling(5000) mysamples2 = self.myengine.getSamples() self.myengine.startSampling(5000) mysamples3 = self.myengine.getSamples() self.myengine.startSampling(5000) mysamples4 = self.myengine.getSamples() self.myengine.startSampling(5000) mysamples5 = self.myengine.getSamples() self.myengine.startSampling(5000) mysamples6 = self.myengine.getSamples() self.myengine.startSampling(5000) mysamples7 = self.myengine.getSamples() self.myengine.startSampling(5000) mysamples8 = self.myengine.getSamples() self.myengine.startSampling(5000) mysamples9 = self.myengine.getSamples() self.myengine.startSampling(5000) mysamples10 = self.myengine.getSamples() # sample 중에서 전류채널은 [1]입니다. API guide 참고 mysamples_5 = mysamples1[1] + mysamples3[1] + mysamples5[ 1] + mysamples7[1] + mysamples9[1] mysamples_10 = mysamples_5 \ + mysamples2[1] + mysamples4[1] + mysamples6[1] + mysamples8[1] + mysamples10[1] print("getSamples() end...") # 샘플 처리 시작 sample_mean = numpy.mean(mysamples_5) sample_std = numpy.std(mysamples_5) sig_50 = 0.6745 * sample_std sig_40 = 0.4 * sample_std sig_20 = 0.2 * sample_std val_count50 = 0 mycurrents50 = 0 val_count40 = 0 mycurrents40 = 0 val_count20 = 0 mycurrents20 = 0 for i in range(len(mysamples_5)): if mysamples_5[i] < sample_mean + sig_50 and mysamples_5[ i] > sample_mean - sig_50: mycurrents50 = mycurrents50 + mysamples_5[i] val_count50 += 1 if mysamples_5[i] < sample_mean + sig_40 and mysamples_5[ i] > sample_mean - sig_40: mycurrents40 = mycurrents40 + mysamples_5[i] val_count40 += 1 if mysamples_5[i] < sample_mean + sig_20 and mysamples_5[ i] > sample_mean - sig_20: mycurrents20 = mycurrents20 + mysamples_5[i] val_count20 += 1 current50 = mycurrents50 / val_count50 current40 = mycurrents40 / val_count40 current20 = mycurrents20 / val_count20 print("[%6d][ 5samples][sig=50]" % count) print(repr(current50)) print("[%6d][ 5samples][sig=40]" % count) print(repr(current40)) print("[%6d][ 5samples][sig=20]" % count) print(repr(current20)) sample_mean = numpy.mean(mysamples_10) sample_std = numpy.std(mysamples_10) sig_50 = 0.6745 * sample_std sig_40 = 0.4 * sample_std sig_20 = 0.2 * sample_std val_count50 = 0 mycurrents50 = 0 val_count40 = 0 mycurrents40 = 0 val_count20 = 0 mycurrents20 = 0 for i in range(len(mysamples_10)): if mysamples_10[i] < sample_mean + sig_50 and mysamples_10[ i] > sample_mean - sig_50: mycurrents50 = mycurrents50 + mysamples_10[i] val_count50 += 1 if mysamples_10[i] < sample_mean + sig_40 and mysamples_10[ i] > sample_mean - sig_40: mycurrents40 = mycurrents40 + mysamples_10[i] val_count40 += 1 if mysamples_10[i] < sample_mean + sig_20 and mysamples_10[ i] > sample_mean - sig_20: mycurrents20 = mycurrents20 + mysamples_10[i] val_count20 += 1 current50 = mycurrents50 / val_count50 current40 = mycurrents40 / val_count40 current20 = mycurrents20 / val_count20 print("[%6d][10samples][sig=50]" % count) print(repr(current50)) print("[%6d][10samples][sig=40]" % count) print(repr(current40)) print("[%6d][10samples][sig=20]" % count) print(repr(current20)) ac = datetime.utcnow().strftime('%H:%M:%S.%f') print("[%s] " % ac, "[%s]" % bc) bc = ac print("Get ready for the next measurements...") threading.Timer(8.777, self.getsamples).start() count += 1