def changeReserve(self, newPower, voffset): print("changereserve") self.setpoint = newPower droopCoeff = self.setpoint / (self.noLoadVoltage - self.refVoltage) tagClient.writeTags([self.droopCoeffTag, self.noLoadVoltageTag], [droopCoeff, self.noLoadVoltage + voffset], "source")
def ramp(self, setpoint, maxStep=.5, disconnectWhenFinished=False): tag = self.pSetpointTag currentSetpoint = tagClient.readTags([tag], "source") diff = setpoint - currentSetpoint if diff > maxStep: currentSetpoint += maxStep elif diff < -maxStep: currentSetpoint -= maxStep else: currentSetpoint += diff tagClient.writeTags([tag], [currentSetpoint], "source") 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))
def openRelay(self): if (self.type == "load" and self.branch == "main") or self.type == "source": tagClient.writeTags([self.tagName], [False], "grid") elif self.type == "load" and self.branch != "main": tagClient.writeTags([self.tagName], [False], "load") self.closed = False print("open relay")
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, "source") #close relay and connect source self.connected = self.connect() return self.connected
def closeRelay(self): if self.type == "infrastructure": tagClient.writeTags([self.tagName], [False], "load") elif (self.type == "load" and self.branch == "main") or self.type == "source": tagClient.writeTags([self.tagName], [True], "grid") elif self.type == "load" and self.branch != "main": tagClient.writeTags([self.tagName], [True], "load") print("close relay") self.closed = True
def connectSoft(self, mode, setpoint): ch = self.channelNumber if mode == "Vreg": tagClient.writeTags([self.vSetpointTag], [0], "source") tags = [ self.battSelectTag, self.powerSelectTag, self.swingSelectTag ] tagClient.writeTags([tags], [False, False, True], "source") tagClient.writeTags([self.relayTag], [True], "source") tagClient.writeTags([self.vSetpointTag], [setpoint], "source") elif mode == "Preg": tagClient.writeTags([self.pSetpointTag], [0], "source") tags = [ self.battSelectTag, self.powerSelectTag, self.swingSelectTag ] tagClient.writeTags([tags], [False, True, False], "source") tagClient.writeTags([self.relayTag], [True], "source") self.ramp(setpoint) elif mode == "BattCharge": tags = [self.pSetpointTag, self.battSelectTag] tagClient.writeTags([tags], [0, True], "source") tag = "SOURCE_{d}_BatteryReqCharge".format(d=self.channelNumber) tagClient.writeTags([tag], [True], "source") tagClient.writeTags([self.pSetpointTag], [setpoint], "source") else: print("CHANNEL{ch} received a bad mode request: {mode}".format( ch=self.channelNumber, mode=mode)) if tagClient.readTags([self.relayTag], "source"): self.connected = True return True else: self.connected = False return False
def addVoltageOffset(self, deltavoffset): voffset = tagClient.readTags([self.noLoadVoltage], "source") voffset += deltavoffset tagClient.writeTags([self.noLoadVoltage], [voffset], "source")
def setVoltageOffset(self, voffset): tagClient.writeTags([self.noLoadVoltageTag], [self.noLoadVoltage + voffset], "source")
def changeSetpoint(self, newPower): print("changeSetpoint") self.setpoint = newPower droopCoeff = self.setpoint / (self.noLoadVoltage - self.refVoltage) tagClient.writeTags([self.droopCoeffTag], [droopCoeff], "source")
def connect(self): tagClient.writeTags([self.relayTag], [True], "grid") #read tag to confirm write success self.connected = tagClient.readTags([self.relayTag], "grid") #self.connected = True return self.connected
def disconnectsourceSoft(self): #change setpoint to zero tagClient.writeTags([self.pSetpointTag], [0], "source") #callback and keep calling back until the current is almost zero now = datetime.now() Core.schedule(now + timedelta(seconds=1), self.waitForSettle)
def disconnect(self): #disconnect power from the source tagClient.writeTags([self.relayTag], [False], "grid") #read tag to confirm write success print(self.relayTag) return tagClient.readTags([self.relayTag], "grid")
def connectCustomer(self): tagClient.writeTags([self.relayTag],[True],"load") print("connect customer") print("relay {relaytag} status: {status}".format(relaytag = self.relayTag, status = tagClient.readTags([self.relayTag],"load")))