def create_value_federate(deltat=1.0, fedinitstring="--federates=1"): logger.debug("Creating federateinfo") fedinfo = h.helicsFederateInfoCreate() logger.debug("Setting name") status = h.helicsFederateInfoSetFederateName(fedinfo, "MarketSim") assert status == 0 logger.debug("Setting core type") status = h.helicsFederateInfoSetCoreTypeFromString(fedinfo, "zmq") assert status == 0 logger.debug("Setting init string") status = h.helicsFederateInfoSetCoreInitString(fedinfo, fedinitstring) assert status == 0 logger.debug("Setting time delta") status = h.helicsFederateInfoSetTimeDelta(fedinfo, deltat) assert status == 0 logger.debug("Setting logging level") status = h.helicsFederateInfoSetLoggingLevel(fedinfo, 1) assert status == 0 logger.debug("Creating CombinationFederate") fed = h.helicsCreateCombinationFederate(fedinfo) return fed
def AddFederate(broker, core_type="zmq", count=1, deltat=1.0, name_prefix="fed"): # Create Federate Info object that describes the federate properties # fedinfo = h.helicsFederateInfoCreate() # Set Federate name # status = h.helicsFederateInfoSetFederateName(fedinfo, name_prefix) # Set core type from string # status = h.helicsFederateInfoSetCoreTypeFromString(fedinfo, "zmq") # Federate init string # fedinitstring = "--broker=mainbroker --federates={}".format(count) status = h.helicsFederateInfoSetCoreInitString(fedinfo, fedinitstring) # Set the message interval (timedelta) for federate. Note th# # HELICS minimum message time interval is 1 ns and by default # it uses a time delta of 1 second. What is provided to the # setTimedelta routine is a multiplier for the default timedelta. # Set one second message interval # status = h.helicsFederateInfoSetTimeDelta(fedinfo, deltat) status = h.helicsFederateInfoSetLoggingLevel(fedinfo, 1) mFed = h.helicsCreateMessageFederate(fedinfo) return mFed
def mFed(): import helics as h initstring = "1 --name=mainbroker" fedinitstring = "--broker=mainbroker --federates=1" deltat = 0.01 helicsversion = h.helicsGetVersion() # Create broker # broker = h.helicsCreateBroker("zmq", "", initstring) isconnected = h.helicsBrokerIsConnected(broker) if isconnected == 1: pass # Create Federate Info object that describes the federate properties # fedinfo = h.helicsFederateInfoCreate() # Set Federate name # status = h.helicsFederateInfoSetFederateName(fedinfo, "TestA Federate") # Set core type from string # status = h.helicsFederateInfoSetCoreTypeFromString(fedinfo, "zmq") # Federate init string # status = h.helicsFederateInfoSetCoreInitString(fedinfo, fedinitstring) # Set the message interval (timedelta) for federate. Note th# # HELICS minimum message time interval is 1 ns and by default # it uses a time delta of 1 second. What is provided to the # setTimedelta routine is a multiplier for the default timedelta. # Set one second message interval # status = h.helicsFederateInfoSetTimeDelta(fedinfo, deltat) status = h.helicsFederateInfoSetLoggingLevel(fedinfo, 1) mFed = h.helicsCreateMessageFederate(fedinfo) yield mFed status = h.helicsFederateFinalize(mFed) status, state = h.helicsFederateGetState(mFed) assert state == 3 while (h.helicsBrokerIsConnected(broker)): time.sleep(1) h.helicsFederateFree(mFed) h.helicsCloseLibrary()
def setup(self, ID): """ID needs to be a list that contains all the T&D interface nodes.""" try: # read solar mapping self.solarData=np.genfromtxt(dirName+'/data/solar_diffusion_map.csv',\ delimiter=',') self.ID = ID # set up comm with helics self.fi = fi = h.helicsFederateInfoCreate() # create info obj status = h.helicsFederateInfoSetFederateName(fi, "pyPflow") status = h.helicsFederateInfoSetCoreTypeFromString(fi, "zmq") status = h.helicsFederateInfoSetCoreInitString(fi, "--federates=1") status = h.helicsFederateInfoSetTimeDelta( fi, 300) # 5 min dispatch interval status = h.helicsFederateInfoSetLoggingLevel(fi, 1) self.vf = vf = h.helicsCreateValueFederate(fi) self.pub = pub = h.helicsFederateRegisterGlobalPublication( vf, "adaptive_volt_var", "string", "") self.sub = sub = {} for entry in ID: # subscribe to all IDs sub['pyGld_' + str(entry)] = h.helicsFederateRegisterSubscription( vf, 'pyGld_' + str(entry), "string", "") status = h.helicsFederateEnterExecutionMode(vf) # Read schema f = open(dirName + '/data/schema_case9.json') self.data = eval(f.read()) f.close() # add V in schema for all subscriptions for entry in ID: self.data['mpc']['get']['V'].append([entry, 0, 0]) # run initial PFLOW (base case condition as read from .m file) self.socket.send_string(json.dumps( self.data)) # send instructions to pflow self.msgFromPflow = eval( self.socket.recv()) # receive data from pflow except: PrintException()
def create_value_federate(deltat=1.0, fedinitstring="--federates=1"): fedinfo = h.helicsFederateInfoCreate() status = h.helicsFederateInfoSetFederateName(fedinfo, "TestB Federate") assert status == 0 status = h.helicsFederateInfoSetCoreTypeFromString(fedinfo, "zmq") assert status == 0 status = h.helicsFederateInfoSetCoreInitString(fedinfo, fedinitstring) assert status == 0 status = h.helicsFederateInfoSetTimeDelta(fedinfo, deltat) assert status == 0 status = h.helicsFederateInfoSetLoggingLevel(fedinfo, 1) assert status == 0 fed = h.helicsCreateCombinationFederate(fedinfo) return fed
def setup(self, fedName='pyGld', portNum=12000, ID=5): try: fedName += '_' + str(ID) self.fedName = fedName # setup helics self.fi = fi = h.helicsFederateInfoCreate() # create info obj status = h.helicsFederateInfoSetFederateName(fi, fedName) status = h.helicsFederateInfoSetCoreTypeFromString(fi, "zmq") status = h.helicsFederateInfoSetCoreInitString(fi, "--federates=1") status = h.helicsFederateInfoSetTimeDelta( fi, 300) # 5 min dispatch interval self.vf = vf = h.helicsCreateValueFederate(fi) self.pub = h.helicsFederateRegisterGlobalPublication( vf, fedName, "string", "") self.sub = h.helicsFederateRegisterSubscription( vf, "adaptive_volt_var", "string", "") status = h.helicsFederateEnterExecutionMode(vf) # setup worker self.pyGldWorker.setup(portNum=portNum, ID=ID) except: PrintException()
# Set Federate name # status = h.helicsFederateInfoSetFederateName(fedinfo, "TestA Federate") # Set core type from string # status = h.helicsFederateInfoSetCoreTypeFromString(fedinfo, "zmq") # Federate init string # status = h.helicsFederateInfoSetCoreInitString(fedinfo, fedinitstring) # Set the message interval (timedelta) for federate. Note th# # HELICS minimum message time interval is 1 ns and by default # it uses a time delta of 1 second. What is provided to the # setTimedelta routine is a multiplier for the default timedelta. # Set one second message interval # status = h.helicsFederateInfoSetTimeDelta(fedinfo, deltat) status = h.helicsFederateInfoSetLoggingLevel(fedinfo, 1) # Create value federate # vfed = h.helicsCreateValueFederate(fedinfo) print("PI SENDER: Value federate created") # Register the publication # pub = h.helicsFederateRegisterGlobalPublication(vfed, "testA", "double", "") print("PI SENDER: Publication registered") # Enter execution mode # status = h.helicsFederateEnterExecutionMode(vfed) print("PI SENDER: Entering execution mode")