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
def confirmrelaystate(self): conncheck = tagClient.readTags([self.relayTag]) if conncheck == self.connected: return True else: print("relay state discrepancy found")
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))
def sumCurrents(self): inftags = [] for edge in self.edges: if edge.currentTag is not None and len(edge.currentTag) > 0: inftags.append(edge.currentTag) if len(inftags) > 0: infcurrents = tagClient.readTags(inftags) total = 0 for edge in self.edges: if edge.currentTag is not None and len(edge.currentTag) > 0: if edge.startNode is self: total -= infcurrents.get(edge.currentTag) elif edge.endNode is self: total += infcurrents.get(edge.currentTag) else: pass return total
def sumCurrents(self): inftags = [] for edge in self.interzonaledges: inftags.append(edge.currentTag) if len(inftags) > 0: infcurrents = tagClient.readTags(inftags) print("inftags: {inf}".format(inf = inftags)) total = 0 for edge in self.interzonaledges: if edge.startNode in self.nodes: total -= infcurrents.get(edge.currentTag) elif edge.endNode in self.nodes: total += infcurrents.get(edge.currentTag) else: pass print "total: {tot} after {nam}".format(tot = total,nam=edge.name) return total
def addVoltageOffset(self, deltavoffset): voffset = tagClient.readTags([self.noLoadVoltage]) voffset += deltavoffset tagClient.writeTags([self.noLoadVoltage], [voffset])
def measureVoltage(self): tag = self.voltageTag tagval = tagClient.readTags([tag]) self.tagCache[tag] = (tagval, datetime.now()) return tagval
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
def disconnect(self): #disconnect power from the source tagClient.writeTags([self.relayTag], [False]) #read tag to confirm write success return tagClient.readTags([self.relayTag])
def getUnregI(self): tagName = self.unregItag value = tagClient.readTags([tagName]) return value
def getRegV(self): tagName = self.regVtag #call to CIP wrapper value = tagClient.readTags([tagName]) return value
def getClosed(self): #return self.closed retval = tagClient.readTags([self.tagName]) retval = not retval self.closed = retval return retval
def getChargeVoltage(self): return tagClient.readTags([self.chargeVoltageTag])
def measureCurrent(self): tag = self.currentTag tagval = tagClient.readTags([tag]) self.tagCache[tag] = (tagval, datetime.now()) return tagval
def getVoltage(self): return tagClient.readTags([self.voltageTag])
def getIrradiance(self): irradiance = .1 * tagClient.readTags([self.solarTag], "SG") irradiance += random.normalvariate(0, .04) return irradiance
def measurePower(self): tagvals = tagClient.readTags([self.currentTag, self.voltageTag]) power = tagvals[self.currentTag]*tagvals[self.voltageTag] self.tagCache[self.powerTag] = (power, datetime.now()) return power
def getCurrent(self): return tagClient.readTags([self.currentTag])
def getDischargeCurrent(self): return tagClient.readTags([self.dischargeCurrentTag])