Beispiel #1
0
def test_pdcontrol():
    vec = PdControl()
    print(vec.sound_speed_mode)
    vec.sound_speed = 1489.0
    print(vec.sound_speed)
    print(vec.salinity)
    print(vec.sound_speed_mode)
Beispiel #2
0
def test_pdcontrol():
    vec = PdControl()
    print(vec.sound_speed_mode)
    vec.sound_speed = 1489.0
    print(vec.sound_speed)
    print(vec.salinity)
    print(vec.sound_speed_mode)
Beispiel #3
0
 def __init__(self):
     QtCore.QThread.__init__(self)
     print("Vectrino reset thread initialized")
     self.vec = PdControl()
     self.comport = "COM2"
     self.isconnected = self.vec.connected
     self.vecstatus = "Vectrino disconnected "
     self.enable = True
     print("Vectrino thread init done")
Beispiel #4
0
 def __init__(self):
     QtCore.QThread.__init__(self)
     print("Vectrino reset thread initialized")
     self.vec = PdControl()
     self.comport = "COM2"
     self.isconnected = self.vec.connected
     self.vecstatus = "Vectrino disconnected "
     self.enable = True
     print("Vectrino thread init done")
Beispiel #5
0
 def __init__(self,
              maxvel=2.5,
              usetrigger=True,
              record=False,
              salinity=0.0):
     QtCore.QThread.__init__(self)
     print("Vectrino thread initialized")
     self.vec = PdControl()
     self.vecdata = self.vec.data
     self.usetrigger = usetrigger
     self.maxvel = maxvel
     self.comport = "COM2"
     self.record = record
     self.isconnected = self.vec.connected
     self.savepath = ""
     self.vecstatus = "Vectrino disconnected "
     self.enable = True
     self.salinity = salinity
     print("Vectrino thread init done")
Beispiel #6
0
class ResetThread(QtCore.QThread):
    """Thread for resetting Vectrino"""
    def __init__(self):
        QtCore.QThread.__init__(self)
        print("Vectrino reset thread initialized")
        self.vec = PdControl()
        self.comport = "COM2"
        self.isconnected = self.vec.connected
        self.vecstatus = "Vectrino disconnected "
        self.enable = True
        print("Vectrino thread init done")

    def run(self):
        self.vec.serial_port = self.comport
        self.vec.connect()
        tstart = time.time()
        self.timeout = False
        self.vecstatus = "Connecting to Vectrino..."
        while not self.vec.connected:
            time.sleep(0.3)
            if time.time() - tstart > 10:
                print("Vectrino timed out")
                self.timeout = True
                break
        if not self.timeout:
            self.vec.stop()
            self.vecstatus = "Vectrino connected "
            while self.vec.state != "Confirmation mode":
                time.sleep(0.3)
            print("Vectrino in data confirmation mode")
            self.stop()
        
    def stop(self):
        self.vec.stop_disk_recording()
        self.vec.stop()
        while self.vec.state != "Command mode":
            time.sleep(0.3)
        self.vec.disconnect()
        self.vecstatus = "Vectrino disconnected "        
Beispiel #7
0
class ResetThread(QtCore.QThread):
    """Thread for resetting Vectrino"""
    def __init__(self):
        QtCore.QThread.__init__(self)
        print("Vectrino reset thread initialized")
        self.vec = PdControl()
        self.comport = "COM2"
        self.isconnected = self.vec.connected
        self.vecstatus = "Vectrino disconnected "
        self.enable = True
        print("Vectrino thread init done")

    def run(self):
        self.vec.serial_port = self.comport
        self.vec.connect()
        tstart = time.time()
        self.timeout = False
        self.vecstatus = "Connecting to Vectrino..."
        while not self.vec.connected:
            time.sleep(0.3)
            if time.time() - tstart > 10:
                print("Vectrino timed out")
                self.timeout = True
                break
        if not self.timeout:
            self.vec.stop()
            self.vecstatus = "Vectrino connected "
            while self.vec.state != "Confirmation mode":
                time.sleep(0.3)
            print("Vectrino in data confirmation mode")
            self.stop()

    def stop(self):
        self.vec.stop_disk_recording()
        self.vec.stop()
        while self.vec.state != "Command mode":
            time.sleep(0.3)
        self.vec.disconnect()
        self.vecstatus = "Vectrino disconnected "
Beispiel #8
0
 def __init__(self, maxvel=2.5, usetrigger=True, record=False, salinity=0.0):
     QtCore.QThread.__init__(self)
     print("Vectrino thread initialized")
     self.vec = PdControl()
     self.vecdata = self.vec.data
     self.usetrigger = usetrigger
     self.maxvel = maxvel
     self.comport = "COM2"
     self.record = record
     self.isconnected = self.vec.connected
     self.savepath = ""
     self.vecstatus = "Vectrino disconnected "
     self.enable = True
     self.salinity = salinity
     print("Vectrino thread init done")
Beispiel #9
0
 def __init__(self, acs_hcomm, U, tsr, y_R, z_H, 
              turbine_properties, nidaq=True, vectrino=True, vecsavepath="",
              fbg=False, fbg_properties={}, settling=False, vec_salinity=0.0):
     """Turbine tow run object."""
     QtCore.QThread.__init__(self)        
     self.hc = acs_hcomm
     self.U = float(U)
     self.tsr = tsr
     self.y_R = y_R
     self.z_H = z_H
     self.R = turbine_properties["radius"]
     self.H = turbine_properties["height"]
     self.vectrino = vectrino
     self.nidaq = nidaq 
     self.fbg = fbg
     self.settling = settling
     self.build_acsprg()
     self.acsdaqthread = daqtasks.AcsDaqThread(self.hc)
     self.maxvel = U*1.3
     self.usetrigger = True
     self.vecsavepath = vecsavepath
     self.recordvno = True
     self.vecstatus = "Vectrino disconnected "
     self.autoaborted = False
     self.aborted = False
     self.vec_salinity = vec_salinity
     
     commit = check_output(["git", "rev-parse", "--verify", "HEAD"])[:-1]
     
     self.metadata = {"Tow speed (m/s)" : float(U),
                      "Tip speed ratio" : tsr, 
                      "Time created" : time.asctime(),
                      "TurbineDAQ version" : commit}
     
     if self.vectrino:
         self.vec = PdControl()
         self.metadata["Vectrino metadata"] = {"y/R": y_R, "z/H": z_H}
         
     if self.nidaq:
         self.daqthread = daqtasks.NiDaqThread(usetrigger=self.usetrigger)
         self.nidata = self.daqthread.data
         self.metadata["NI metadata"] = self.daqthread.metadata
     
     if self.fbg:
         self.fbgthread = daqtasks.FbgDaqThread(fbg_properties, 
                                                usetrigger=self.usetrigger)
         self.metadata["FBG metadata"] = self.fbgthread.metadata
         self.fbgdata = self.fbgthread.data
Beispiel #10
0
Created on Wed May 29 18:17:57 2013

@author: Pete
"""

from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4 import QtGui
import PyQt4.Qwt5 as Qwt
from mainwindow import *
import sys
import matplotlib.pyplot as plt
import numpy as np
from nortek.controls import PdControl, list_serial_ports

pd = PdControl()


# Set up a thread for the connection process
class ConThread(QThread):
    finished = QtCore.pyqtSignal()

    def __init__(self):
        QThread.__init__(self)
        self.isconnected = pd.is_connected()

    def run(self):
        pd.connect()
        self.isconnected = pd.is_connected()
        self.finished.emit()
Beispiel #11
0
    def __init__(self,
                 acs_hcomm,
                 U,
                 tsr,
                 y_R,
                 z_H,
                 turbine_properties,
                 nidaq=True,
                 vectrino=True,
                 vecsavepath="",
                 fbg=False,
                 fbg_properties={},
                 settling=False,
                 vec_salinity=0.0):
        """Turbine tow run object."""
        QtCore.QThread.__init__(self)
        self.hc = acs_hcomm
        self.U = float(U)
        self.tsr = tsr
        self.y_R = y_R
        self.z_H = z_H
        self.R = turbine_properties["radius"]
        self.H = turbine_properties["height"]
        self.vectrino = vectrino
        self.nidaq = nidaq
        self.fbg = fbg
        self.settling = settling
        self.build_acsprg()
        self.acsdaqthread = daqtasks.AcsDaqThread(self.hc)
        self.maxvel = U * 1.3
        self.usetrigger = True
        self.vecsavepath = vecsavepath
        self.recordvno = True
        self.vecstatus = "Vectrino disconnected "
        self.autoaborted = False
        self.aborted = False
        self.vec_salinity = vec_salinity

        commit = check_output(["git", "rev-parse", "--verify", "HEAD"])[:-1]

        self.metadata = {
            "Tow speed (m/s)": float(U),
            "Tip speed ratio": tsr,
            "Time created": time.asctime(),
            "TurbineDAQ version": commit
        }

        if self.vectrino:
            self.vec = PdControl()
            self.metadata["Vectrino metadata"] = {"y/R": y_R, "z/H": z_H}

        if self.nidaq:
            self.daqthread = daqtasks.NiDaqThread(usetrigger=self.usetrigger)
            self.nidata = self.daqthread.data
            self.metadata["NI metadata"] = self.daqthread.metadata

        if self.fbg:
            self.fbgthread = daqtasks.FbgDaqThread(fbg_properties,
                                                   usetrigger=self.usetrigger)
            self.metadata["FBG metadata"] = self.fbgthread.metadata
            self.fbgdata = self.fbgthread.data
Beispiel #12
0
class TurbineTow(QtCore.QThread):
    towfinished = QtCore.pyqtSignal()

    def __init__(self,
                 acs_hcomm,
                 U,
                 tsr,
                 y_R,
                 z_H,
                 turbine_properties,
                 nidaq=True,
                 vectrino=True,
                 vecsavepath="",
                 fbg=False,
                 fbg_properties={},
                 settling=False,
                 vec_salinity=0.0):
        """Turbine tow run object."""
        QtCore.QThread.__init__(self)
        self.hc = acs_hcomm
        self.U = float(U)
        self.tsr = tsr
        self.y_R = y_R
        self.z_H = z_H
        self.R = turbine_properties["radius"]
        self.H = turbine_properties["height"]
        self.vectrino = vectrino
        self.nidaq = nidaq
        self.fbg = fbg
        self.settling = settling
        self.build_acsprg()
        self.acsdaqthread = daqtasks.AcsDaqThread(self.hc)
        self.maxvel = U * 1.3
        self.usetrigger = True
        self.vecsavepath = vecsavepath
        self.recordvno = True
        self.vecstatus = "Vectrino disconnected "
        self.autoaborted = False
        self.aborted = False
        self.vec_salinity = vec_salinity

        commit = check_output(["git", "rev-parse", "--verify", "HEAD"])[:-1]

        self.metadata = {
            "Tow speed (m/s)": float(U),
            "Tip speed ratio": tsr,
            "Time created": time.asctime(),
            "TurbineDAQ version": commit
        }

        if self.vectrino:
            self.vec = PdControl()
            self.metadata["Vectrino metadata"] = {"y/R": y_R, "z/H": z_H}

        if self.nidaq:
            self.daqthread = daqtasks.NiDaqThread(usetrigger=self.usetrigger)
            self.nidata = self.daqthread.data
            self.metadata["NI metadata"] = self.daqthread.metadata

        if self.fbg:
            self.fbgthread = daqtasks.FbgDaqThread(fbg_properties,
                                                   usetrigger=self.usetrigger)
            self.metadata["FBG metadata"] = self.fbgthread.metadata
            self.fbgdata = self.fbgthread.data

    def build_acsprg(self):
        """Create the ACSPL+ program for running the run.
        This run should send a trigger pulse."""
        if self.settling:
            endpos = 9.0
        else:
            endpos = 0.0
        self.acs_prg = acsprgs.turbine_tow_prg(self.U,
                                               self.tsr,
                                               self.R,
                                               endpos=endpos)

    def setvecconfig(self):
        self.vec.start_on_sync = self.usetrigger
        self.vec.sync_master = not self.usetrigger
        self.vec.sample_on_sync = False
        self.vec.sample_rate = 200
        self.vec.coordinate_system = "XYZ"
        self.vec.power_level = "High"
        self.vec.transmit_length = 3
        self.vec.sampling_volume = 3
        self.vec.sound_speed_mode = "measured"
        self.vec.salinity = self.vec_salinity

        if self.maxvel <= 4.0 and self.maxvel > 2.5:
            self.vec.vel_range = 0
        elif self.maxvel <= 2.5 and self.maxvel > 1.0:
            self.vec.vel_range = 1
        elif self.maxvel <= 1.0 and self.maxvel > 0.3:
            self.vec.vel_range = 2
        elif self.maxvel <= 0.3 or self.settling:
            self.vec.vel_range = 3
        self.vec.set_config()
        self.metadata["Vectrino metadata"]["Velocity range (index)"] = \
                self.vec.vel_range
        self.metadata["Vectrino metadata"]["Sample rate (Hz)"] = \
                self.vec.sample_rate
        self.metadata["Vectrino metadata"]["Coordinate system"] = \
                self.vec.coordinate_system
        self.metadata["Vectrino metadata"]["Salinity (ppt)"] = \
                self.vec.salinity
        self.metadata["Vectrino metadata"]["Transmit length"] = \
                self.vec.transmit_length
        self.metadata["Vectrino metadata"]["Sampling volume"] = \
                self.vec.sampling_volume
        print("Vectrino configuration set")

    def run(self):
        """Start the run. Comms should be open already with the controller."""
        if acsc.getOutput(self.hc, 1, 16):
            acsc.setOutput(self.hc, 1, 16, 0)
        if self.vectrino:
            acsc.enable(self.hc, 0)
            acsc.enable(self.hc, 1)
            while not acsc.getMotorState(self.hc, 0)["enabled"] or not \
                    acsc.getMotorState(self.hc, 1)["enabled"]:
                self.msleep(100)
            acsc.toPoint(self.hc, None, 0, self.y_R * self.R)
            acsc.toPoint(self.hc, None, 1, self.z_H * self.H)
            while not acsc.getMotorState(self.hc, 0)["in position"] or not \
                    acsc.getMotorState(self.hc, 1)["in position"]:
                self.msleep(300)
            print("y- and z-axes in position")
            acsc.disable(self.hc, 0)
            acsc.disable(self.hc, 1)
            self.vec.serial_port = "COM2"
            self.vec.connect()
            tstart = time.time()
            self.timeout = False
            self.vecstatus = "Connecting to Vectrino..."
            while not self.vec.connected:
                self.msleep(300)
                if time.time() - tstart > 10:
                    print("Vectrino timed out")
                    self.timeout = True
                    break
            if not self.timeout:
                self.vec.stop()
                self.setvecconfig()
                if self.recordvno:
                    self.vec.start_disk_recording(self.vecsavepath)
                self.vec.start()
                self.vecstatus = "Vectrino connected "
                while self.vec.state != "Confirmation mode":
                    self.msleep(100)
                print("Vectrino in data collection mode")
                print("Waiting 6 seconds")
                self.sleep(6)
                self.daqthread.start()
                if self.fbg:
                    self.fbgthread.start()
                self.start_motion()
        elif self.nidaq:
            self.daqthread.start()
            if self.fbg:
                self.fbgthread.start()
            self.start_motion()
        else:
            # Start motion
            self.start_motion()

    def start_motion(self):
        self.acsdaqthread.start()
        nbuf = 19
        acsc.loadBuffer(self.hc, nbuf, self.acs_prg, 2048)
        acsc.enable(self.hc, 4)
        acsc.enable(self.hc, 5)
        acsc.runBuffer(self.hc, nbuf)
        prgstate = acsc.getProgramState(self.hc, nbuf)
        while prgstate == 3:
            time.sleep(0.3)
            prgstate = acsc.getProgramState(self.hc, nbuf)
        self.acsdaqthread.stop()
        if self.nidaq:
            self.daqthread.clear()
            print("NI tasks cleared")
        if self.fbg:
            self.fbgthread.stop()
        if self.vectrino:
            if self.settling:
                # Wait 10 minutes to measure tank settling time
                print("Waiting 10 minutes")
                t0 = time.time()
                dt = 0.0
                while not self.aborted and dt < 600:
                    time.sleep(0.5)
                    dt = time.time() - t0
            if self.recordvno:
                self.vec.stop_disk_recording()
            self.vec.stop()
            self.vec.disconnect()
        print("Tow finished")
        if self.vectrino:
            if self.vec.state == "Not connected":
                self.vecstatus = "Vectrino disconnected "
            print("Resetting Vectrino")
            self.reset_vec()
        self.towfinished.emit()

    def reset_vec(self):
        self.vec.connect()
        self.vec.stop_disk_recording()
        self.vec.stop()
        self.vec.disconnect()
        self.vec.data = {}
        print("Vectrino reset")

    def abort(self):
        """This should stop everything."""
        print("Aborting turbine tow")
        self.aborted = True
        acsc.stopBuffer(self.hc, 19)
        acsc.halt(self.hc, 0)
        acsc.halt(self.hc, 1)
        acsc.halt(self.hc, 4)
        acsc.halt(self.hc, 5)

    def autoabort(self):
        """This should stop everything and return carriage and turbine back
        to zero."""
        self.autoaborted = True
        acsc.stopBuffer(self.hc, 19)
        acsc.halt(self.hc, 0)
        acsc.halt(self.hc, 1)
        acsc.halt(self.hc, 4)
        acsc.halt(self.hc, 5)
        acsc.toPoint(self.hc, None, 4, 0.0)
        acsc.setVelocity(self.hc, 5, 0.5)
        acsc.toPoint(self.hc, None, 5, 0.0)
# -*- coding: utf-8 -*-
"""
Created on Mon Aug 12 22:59:01 2013

@author: Pete
"""
from __future__ import division
from nortek.controls import PdControl
import time
import matplotlib.pyplot as plt
import numpy as np

vec = PdControl()

vec.serial_port = "COM8"
vec.start_on_sync = False
vec.sync_master = True
vec.sample_rate = 100
vec.vel_range = 2
vec.transmit_length = 3
vec.sampling_volume = 3
vec.salinity = 0.0
vec.power_level = "High"
vec.connect()

while not vec.connected:
    print "Connecting..."
    time.sleep(0.5)    
print "Connected!"

vec.set_config()
Beispiel #14
0
class VectrinoThread(QtCore.QThread):
    """Thread for running Vectrino"""
    collecting = QtCore.pyqtSignal()
    connectsignal = QtCore.pyqtSignal(bool)
    def __init__(self, maxvel=2.5, usetrigger=True, record=False, salinity=0.0):
        QtCore.QThread.__init__(self)
        print("Vectrino thread initialized")
        self.vec = PdControl()
        self.vecdata = self.vec.data
        self.usetrigger = usetrigger
        self.maxvel = maxvel
        self.comport = "COM2"
        self.record = record
        self.isconnected = self.vec.connected
        self.savepath = ""
        self.vecstatus = "Vectrino disconnected "
        self.enable = True
        self.salinity = salinity
        print("Vectrino thread init done")
        
    def setconfig(self):
        self.vec.start_on_sync = self.usetrigger
        self.vec.sync_master = not self.usetrigger
        self.vec.sample_on_sync = False
        self.vec.sample_rate = 200 
        self.vec.transmit_length = 3
        self.vec.sampling_volume = 3
        self.vec.sound_speed_mode = "measured"
        self.vec.salinity = self.salinity
        self.vec.power_level = "High"
        if self.maxvel <= 4.0 and self.maxvel > 2.5:
            self.vec.vel_range = 0
        elif self.maxvel <= 2.5 and self.maxvel > 1.0:
            self.vec.vel_range = 1
        elif self.maxvel <= 1.0 and self.maxvel > 0.3:
            self.vec.vel_range = 2
        self.vec.set_config()
        print("Vectrino configuration set")

    def run(self):
        self.vec.serial_port = self.comport
        self.vec.connect()
        tstart = time.time()
        self.timeout = False
        self.vecstatus = "Connecting to Vectrino..."
        while not self.vec.connected:
            time.sleep(0.5)
            if time.time() - tstart > 10:
                print("Vectrino timed out")
                self.timeout = True
                self.connectsignal.emit(False)
                break
        if not self.timeout:
            self.connectsignal.emit(True)
            self.vec.stop()
            self.setconfig()
            if self.record:
                self.vec.start_disk_recording(self.savepath)
            self.vec.start()
            self.vecstatus = "Vectrino connected "
            while self.vec.state != "Confirmation mode":
                time.sleep(0.1)
            print("Vectrino in data collection mode")
            time.sleep(6)
            self.collecting.emit()
            print("Vectrino collecting")

    def getstatus(self):
        return self.vec.state
        
    def stop(self):
        self.enable = False
        if self.record:
            self.vec.stop_disk_recording()
        self.vec.stop()
        self.vec.disconnect()
        self.vecstatus = "Vectrino disconnected "
Beispiel #15
0
class TurbineTow(QtCore.QThread):
    towfinished = QtCore.pyqtSignal()
    def __init__(self, acs_hcomm, U, tsr, y_R, z_H, 
                 turbine_properties, nidaq=True, vectrino=True, vecsavepath="",
                 fbg=False, fbg_properties={}, settling=False, vec_salinity=0.0):
        """Turbine tow run object."""
        QtCore.QThread.__init__(self)        
        self.hc = acs_hcomm
        self.U = float(U)
        self.tsr = tsr
        self.y_R = y_R
        self.z_H = z_H
        self.R = turbine_properties["radius"]
        self.H = turbine_properties["height"]
        self.vectrino = vectrino
        self.nidaq = nidaq 
        self.fbg = fbg
        self.settling = settling
        self.build_acsprg()
        self.acsdaqthread = daqtasks.AcsDaqThread(self.hc)
        self.maxvel = U*1.3
        self.usetrigger = True
        self.vecsavepath = vecsavepath
        self.recordvno = True
        self.vecstatus = "Vectrino disconnected "
        self.autoaborted = False
        self.aborted = False
        self.vec_salinity = vec_salinity
        
        commit = check_output(["git", "rev-parse", "--verify", "HEAD"])[:-1]
        
        self.metadata = {"Tow speed (m/s)" : float(U),
                         "Tip speed ratio" : tsr, 
                         "Time created" : time.asctime(),
                         "TurbineDAQ version" : commit}
        
        if self.vectrino:
            self.vec = PdControl()
            self.metadata["Vectrino metadata"] = {"y/R": y_R, "z/H": z_H}
            
        if self.nidaq:
            self.daqthread = daqtasks.NiDaqThread(usetrigger=self.usetrigger)
            self.nidata = self.daqthread.data
            self.metadata["NI metadata"] = self.daqthread.metadata
        
        if self.fbg:
            self.fbgthread = daqtasks.FbgDaqThread(fbg_properties, 
                                                   usetrigger=self.usetrigger)
            self.metadata["FBG metadata"] = self.fbgthread.metadata
            self.fbgdata = self.fbgthread.data
        
    def build_acsprg(self):
        """Create the ACSPL+ program for running the run.
        This run should send a trigger pulse."""
        if self.settling:
            endpos = 9.0
        else:
            endpos = 0.0
        self.acs_prg = acsprgs.turbine_tow_prg(self.U, self.tsr, self.R,
                                               endpos=endpos)
                                               
    def setvecconfig(self):
        self.vec.start_on_sync = self.usetrigger
        self.vec.sync_master = not self.usetrigger
        self.vec.sample_on_sync = False
        self.vec.sample_rate = 200
        self.vec.coordinate_system = "XYZ"
        self.vec.power_level = "High"
        self.vec.transmit_length = 3
        self.vec.sampling_volume = 3
        self.vec.sound_speed_mode = "measured"
        self.vec.salinity = self.vec_salinity
        
        if self.maxvel <= 4.0 and self.maxvel > 2.5:
            self.vec.vel_range = 0
        elif self.maxvel <= 2.5 and self.maxvel > 1.0:
            self.vec.vel_range = 1
        elif self.maxvel <= 1.0 and self.maxvel > 0.3:
            self.vec.vel_range = 2
        elif self.maxvel <= 0.3 or self.settling:
            self.vec.vel_range = 3
        self.vec.set_config()
        self.metadata["Vectrino metadata"]["Velocity range (index)"] = \
                self.vec.vel_range
        self.metadata["Vectrino metadata"]["Sample rate (Hz)"] = \
                self.vec.sample_rate
        self.metadata["Vectrino metadata"]["Coordinate system"] = \
                self.vec.coordinate_system
        self.metadata["Vectrino metadata"]["Salinity (ppt)"] = \
                self.vec.salinity
        self.metadata["Vectrino metadata"]["Transmit length"] = \
                self.vec.transmit_length
        self.metadata["Vectrino metadata"]["Sampling volume"] = \
                self.vec.sampling_volume
        print("Vectrino configuration set")

    def run(self):
        """Start the run. Comms should be open already with the controller."""
        if acsc.getOutput(self.hc, 1, 16):
            acsc.setOutput(self.hc, 1, 16, 0)
        if self.vectrino:
            acsc.enable(self.hc, 0)
            acsc.enable(self.hc, 1)
            while not acsc.getMotorState(self.hc, 0)["enabled"] or not \
                    acsc.getMotorState(self.hc, 1)["enabled"]:
                self.msleep(100)
            acsc.toPoint(self.hc, None, 0, self.y_R*self.R)
            acsc.toPoint(self.hc, None, 1, self.z_H*self.H)
            while not acsc.getMotorState(self.hc, 0)["in position"] or not \
                    acsc.getMotorState(self.hc, 1)["in position"]:
                self.msleep(300)
            print("y- and z-axes in position")
            acsc.disable(self.hc, 0)
            acsc.disable(self.hc, 1)
            self.vec.serial_port = "COM2"
            self.vec.connect()
            tstart = time.time()
            self.timeout = False
            self.vecstatus = "Connecting to Vectrino..."
            while not self.vec.connected:
                self.msleep(300)
                if time.time() - tstart > 10:
                    print("Vectrino timed out")
                    self.timeout = True
                    break
            if not self.timeout:
                self.vec.stop()
                self.setvecconfig()
                if self.recordvno:
                    self.vec.start_disk_recording(self.vecsavepath)
                self.vec.start()
                self.vecstatus = "Vectrino connected "
                while self.vec.state != "Confirmation mode":
                    self.msleep(100)
                print("Vectrino in data collection mode")
                print("Waiting 6 seconds")
                self.sleep(6)
                self.daqthread.start()
                if self.fbg:
                    self.fbgthread.start()
                self.start_motion()
        elif self.nidaq:
            self.daqthread.start()
            if self.fbg:
                self.fbgthread.start()
            self.start_motion()
        else:
            # Start motion
            self.start_motion()

    def start_motion(self):
        self.acsdaqthread.start()
        nbuf = 19
        acsc.loadBuffer(self.hc, nbuf, self.acs_prg, 2048)
        acsc.enable(self.hc, 4)
        acsc.enable(self.hc, 5)
        acsc.runBuffer(self.hc, nbuf)
        prgstate = acsc.getProgramState(self.hc, nbuf)
        while prgstate == 3:
            time.sleep(0.3)
            prgstate = acsc.getProgramState(self.hc, nbuf)
        self.acsdaqthread.stop()
        if self.nidaq:
            self.daqthread.clear()
            print("NI tasks cleared")
        if self.fbg:
            self.fbgthread.stop()
        if self.vectrino:
            if self.settling:
                # Wait 10 minutes to measure tank settling time
                print("Waiting 10 minutes")
                t0 = time.time()
                dt = 0.0
                while not self.aborted and dt < 600:
                    time.sleep(0.5)
                    dt = time.time() - t0
            if self.recordvno:
                self.vec.stop_disk_recording()
            self.vec.stop()
            self.vec.disconnect()
        print("Tow finished")
        if self.vectrino:
            if self.vec.state == "Not connected":
                self.vecstatus = "Vectrino disconnected "
            print("Resetting Vectrino")
            self.reset_vec()
        self.towfinished.emit()
        
    def reset_vec(self):
        self.vec.connect()
        self.vec.stop_disk_recording()
        self.vec.stop()
        self.vec.disconnect()
        self.vec.data = {}
        print("Vectrino reset")

    def abort(self):
        """This should stop everything."""
        print("Aborting turbine tow")
        self.aborted = True
        acsc.stopBuffer(self.hc, 19)
        acsc.halt(self.hc, 0)
        acsc.halt(self.hc, 1)
        acsc.halt(self.hc, 4)
        acsc.halt(self.hc, 5)
        
    def autoabort(self):
        """This should stop everything and return carriage and turbine back
        to zero."""
        self.autoaborted = True
        acsc.stopBuffer(self.hc, 19)
        acsc.halt(self.hc, 0)
        acsc.halt(self.hc, 1)
        acsc.halt(self.hc, 4)
        acsc.halt(self.hc, 5)
        acsc.toPoint(self.hc, None, 4, 0.0)
        acsc.setVelocity(self.hc, 5, 0.5)
        acsc.toPoint(self.hc, None, 5, 0.0)
Beispiel #16
0
class VectrinoThread(QtCore.QThread):
    """Thread for running Vectrino"""
    collecting = QtCore.pyqtSignal()
    connectsignal = QtCore.pyqtSignal(bool)

    def __init__(self,
                 maxvel=2.5,
                 usetrigger=True,
                 record=False,
                 salinity=0.0):
        QtCore.QThread.__init__(self)
        print("Vectrino thread initialized")
        self.vec = PdControl()
        self.vecdata = self.vec.data
        self.usetrigger = usetrigger
        self.maxvel = maxvel
        self.comport = "COM2"
        self.record = record
        self.isconnected = self.vec.connected
        self.savepath = ""
        self.vecstatus = "Vectrino disconnected "
        self.enable = True
        self.salinity = salinity
        print("Vectrino thread init done")

    def setconfig(self):
        self.vec.start_on_sync = self.usetrigger
        self.vec.sync_master = not self.usetrigger
        self.vec.sample_on_sync = False
        self.vec.sample_rate = 200
        self.vec.transmit_length = 3
        self.vec.sampling_volume = 3
        self.vec.sound_speed_mode = "measured"
        self.vec.salinity = self.salinity
        self.vec.power_level = "High"
        if self.maxvel <= 4.0 and self.maxvel > 2.5:
            self.vec.vel_range = 0
        elif self.maxvel <= 2.5 and self.maxvel > 1.0:
            self.vec.vel_range = 1
        elif self.maxvel <= 1.0 and self.maxvel > 0.3:
            self.vec.vel_range = 2
        self.vec.set_config()
        print("Vectrino configuration set")

    def run(self):
        self.vec.serial_port = self.comport
        self.vec.connect()
        tstart = time.time()
        self.timeout = False
        self.vecstatus = "Connecting to Vectrino..."
        while not self.vec.connected:
            time.sleep(0.5)
            if time.time() - tstart > 10:
                print("Vectrino timed out")
                self.timeout = True
                self.connectsignal.emit(False)
                break
        if not self.timeout:
            self.connectsignal.emit(True)
            self.vec.stop()
            self.setconfig()
            if self.record:
                self.vec.start_disk_recording(self.savepath)
            self.vec.start()
            self.vecstatus = "Vectrino connected "
            while self.vec.state != "Confirmation mode":
                time.sleep(0.1)
            print("Vectrino in data collection mode")
            time.sleep(6)
            self.collecting.emit()
            print("Vectrino collecting")

    def getstatus(self):
        return self.vec.state

    def stop(self):
        self.enable = False
        if self.record:
            self.vec.stop_disk_recording()
        self.vec.stop()
        self.vec.disconnect()
        self.vecstatus = "Vectrino disconnected "
Beispiel #17
0
# -*- coding: utf-8 -*-
"""
Created on Mon Aug 12 22:59:01 2013

@author: Pete
"""
from __future__ import division
from nortek.controls import PdControl
import time
import matplotlib.pyplot as plt
import numpy as np

vec = PdControl()

vec.serial_port = "COM8"
vec.start_on_sync = False
vec.sync_master = True
vec.sample_rate = 100
vec.vel_range = 2
vec.transmit_length = 3
vec.sampling_volume = 3
vec.salinity = 0.0
vec.power_level = "High"
vec.connect()

while not vec.connected:
    print "Connecting..."
    time.sleep(0.5)
print "Connected!"

vec.set_config()