Ejemplo n.º 1
0
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()
Ejemplo n.º 2
0
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();
Ejemplo n.º 3
0
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()
Ejemplo n.º 4
0
 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()
Ejemplo n.º 5
0
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
Ejemplo n.º 6
0
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()
Ejemplo n.º 7
0
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()
Ejemplo n.º 8
0
 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)
Ejemplo n.º 9
0
 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
Ejemplo n.º 10
0
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)
Ejemplo n.º 11
0
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()
Ejemplo n.º 12
0
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()
Ejemplo n.º 13
0
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()
Ejemplo n.º 14
0
 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
Ejemplo n.º 15
0
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
Ejemplo n.º 16
0
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()
Ejemplo n.º 17
0
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()
Ejemplo n.º 18
0
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()
Ejemplo n.º 19
0
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()
Ejemplo n.º 20
0
                        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()
Ejemplo n.º 21
0
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
Ejemplo n.º 22
0
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