Exemple #1
0
    def ramp(self, setpoint, maxStep=.5, disconnectWhenFinished=False):
        tag = self.pSetpointTag
        currentSetpoint = tagClient.readTags([tag])
        diff = setpoint - currentSetpoint
        if diff > maxStep:
            currentSetpoint += maxStep
        elif diff < -maxStep:
            currentSetpoint -= maxStep
        else:
            currentSetpoint += diff
        tagClient.writeTags([tag], [currentSetpoint])

        if abs(diff) > .001:
            #schedule a callback, allowing some time for actuation
            sched = datetime.now() + timedelta(seconds=1.5)
            Core.schedule(sched, self.ramp)
            print("{me} is scheduling another ramp call: {cs}".format(
                me=self.channelNumber, cs=currentSetpoint))
            if disconnectWhenFinished == True and setpoint == 0:
                print("ramp with disconnect completed, disconnecting {me}".
                      format(me=self.channelNumber))
                self.disconnect()
        else:
            print("{me} is done ramping to {set}".format(me=self.name,
                                                         set=setpoint))
Exemple #2
0
def cleanup():
    tags = [
        "BRANCH_1_BUS_1_FAULT", "BRANCH_1_BUS_2_FAULT", "BRANCH_2_BUS_1_FAULT",
        "BRANCH_2_BUS_2_FAULT", "CROSSTIE_1_FAULT_1", "CROSSTIE_1_FAULT_2",
        "CROSSTIE_2_FAULT_1", "CROSSTIE_2_FAULT_2", "MAIN_BUS_FAULT"
    ]
    vals = [False] * 9
    tagClient.writeTags(tags, vals)
Exemple #3
0
 def openRelay(self):
     if self.locked:
         print("TRIED TO OPEN LOCKED RELAY {nam}".format(nam=self.tagName))
         return False
     else:
         if self.type == "infrastructure":
             tagClient.writeTags([self.tagName],[True])
         elif self.type == "load" or self.type == "source":
             tagClient.writeTags([self.tagName],[False])
         self.closed = False
         return True
Exemple #4
0
 def connectWithSet(self, setpoint, voffset=0):
     self.setpoint = setpoint
     droopCoeff = self.setpoint / (self.noLoadVoltage - self.refVoltage)
     #set up parameters for droop control
     tags = [self.noLoadVoltageTag, self.droopCoeffTag, self.droopSelectTag]
     values = [
         self.noLoadVoltage + voffset,
         self.setpoint / (self.noLoadVoltage - self.refVoltage), True
     ]
     tagClient.writeTags(tags, values)
     #close relay and connect source
     self.connected = self.connect()
     return self.connected
Exemple #5
0
    def connectSoft(self, mode, setpoint):
        ch = self.channelNumber

        if mode == "Vreg":
            tagClient.writeTags([self.vSetpointTag], [0])
            tags = [
                self.battSelectTag, self.powerSelectTag, self.swingSelectTag
            ]
            tagClient.writeTags([tags], [False, False, True])
            tagClient.writeTags([self.relayTag], [True])
            tagClient.writeTags([self.vSetpointTag], [setpoint])
        elif mode == "Preg":
            tagClient.writeTags([self.pSetpointTag], [0])
            tags = [
                self.battSelectTag, self.powerSelectTag, self.swingSelectTag
            ]
            tagClient.writeTags([tags], [False, True, False])
            tagClient.writeTags([self.relayTag], [True])
            self.ramp(setpoint)
        elif mode == "BattCharge":
            tags = [self.pSetpointTag, self.battSelectTag]
            tagClient.writeTags([tags], [0, True])
            tag = "SOURCE_{d}_BatteryReqCharge".format(d=self.channelNumber)
            tagClient.writeTags([tag], [True])
            tagClient.writeTags([self.pSetpointTag], [setpoint])
        else:
            print("CHANNEL{ch} received a bad mode request: {mode}".format(
                ch=self.channelNumber, mode=mode))

        if tagClient.readTags([self.relayTag]):
            self.connected = True
            return True
        else:
            self.connected = False
            return False
Exemple #6
0
 def addVoltageOffset(self, deltavoffset):
     voffset = tagClient.readTags([self.noLoadVoltage])
     voffset += deltavoffset
     tagClient.writeTags([self.noLoadVoltage], [voffset])
Exemple #7
0
 def setVoltageOffset(self, voffset):
     tagClient.writeTags([self.noLoadVoltageTag],
                         [self.noLoadVoltage + voffset])
Exemple #8
0
 def changeReserve(self, newPower, voffset):
     self.setpoint = newPower
     droopCoeff = self.setpoint / (self.noLoadVoltage - self.refVoltage)
     tagClient.writeTags([self.droopCoeffTag, self.noLoadVoltageTag],
                         [droopCoeff, self.noLoadVoltage + voffset])
Exemple #9
0
 def changeSetpoint(self, newPower):
     self.setpoint = newPower
     droopCoeff = self.setpoint / (self.noLoadVoltage - self.refVoltage)
     tagClient.writeTags([self.droopCoeffTag, self.noLoadVoltageTag],
                         [droopCoeff, self.noLoadVoltage])
Exemple #10
0
 def connect(self):
     tagClient.writeTags([self.relayTag], [True])
     #read tag to confirm write success
     self.connected = tagClient.readTags([self.relayTag])
     #self.connected = True
     return self.connected
Exemple #11
0
 def disconnectSoft(self):
     #change setpoint to zero
     tagClient.writeTags([self.pSetpointTag], [0])
     #callback and keep calling back until the current is almost zero
     now = datetime.now()
     Core.schedule(now + timedelta(seconds=1), self.waitForSettle)
Exemple #12
0
 def disconnect(self):
     #disconnect power from the source
     tagClient.writeTags([self.relayTag], [False])
     #read tag to confirm write success
     return tagClient.readTags([self.relayTag])
Exemple #13
0
def timed_fault(tag, duration):
    tagClient.writeTags([tag], [True], "SG")
    time.sleep(duration)
    tagClient.writeTags([tag], [False], "SG")
Exemple #14
0
def persistent_fault(tag):
    tagClient.writeTags([tag], [True], "SG")
Exemple #15
0
 def connectCustomer(self):
     tagClient.writeTags([self.relayTag],[True])
Exemple #16
0
 def disconnectCustomer(self):
     tagClient.writeTags([self.relayTag],[False])