@@ -923,7 +923,7 @@ def _add_EnergyConnectionProfile(self, subject_uri, load: altdss.Load):
923923 else :
924924 self .add_triple (node , f"EnergyConnectionProfile.dss{ attr } " , obj .Name )
925925 if attr in ["Daily" , "Yearly" , "Duty" , "CVRCurve" ]:
926- loadshape_uris .append (self ._add_EnergyConsumerSchedule (subject_uri , obj ))
926+ loadshape_uris .append (self ._add_EnergyConsumerSchedule (subject_uri , loadshape = obj ))
927927 self .uuid_map [f"EnergyConnectionProfile.{ ecp_name } " ] = str (node )
928928 else :
929929 for attr in ["Daily" , "Duty" , "Yearly" , "CVRCurve" ]:
@@ -1105,10 +1105,50 @@ def _add_PhotoVoltaicPhases(self, subject_uri: URIRef, solar: altdss.PVSystem, p
11051105 self .add_triple (node , "PowerElectronicsConnectionPhase.phase" , self .cim [f"SinglePhaseKind.{ ph } " ])
11061106 self .add_triple (node , "PowerElectronicsConnectionPhase.PowerElectronicsConnection" , subject_uri )
11071107
1108+ def _add_CurveData (self , subject_uri : URIRef , sequence : int , value1 : float , value2 : float ):
1109+ node = self .build_cim_obj ("CurveData" , skip_mrid = True )
1110+ self .add_triple (node , "CurveData.xvalue" , sequence + 1 ) # adjust/shift sequence number from 0 to 1.
1111+ self .add_triple (node , "CurveData.y1value" , value1 )
1112+ self .add_triple (node , "CurveData.y2value" , value2 )
1113+ self .add_triple (node , "CurveData.Curve" , subject_uri )
1114+
1115+ def _add_Curve (self , subject_uri : URIRef , loadshape : altdss .LoadShape ):
1116+ if f"Curve.{ loadshape .Name } " not in self .uuid_map :
1117+ node = self .build_cim_obj ("Curve" , name = loadshape .Name )
1118+
1119+ pmult = loadshape .PMult
1120+ qmult = loadshape .QMult
1121+
1122+ if loadshape .UseActual :
1123+ self .add_triple (node , "Curve.y1Unit" , "UnitSymbol.W" )
1124+ self .add_triple (node , "Curve.y2Unit" , "UnitSymbol.VAr" )
1125+ pmult *= 1000
1126+ qmult *= 1000
1127+ else :
1128+ self .add_triple (node , "Curve.y1Unit" , "UnitSymbol.none" )
1129+ self .add_triple (node , "Curve.y2Unit" , "UnitSymbol.none" )
1130+
1131+ if qmult .size == 0 :
1132+ qmult = pmult
1133+
1134+ for i , (p , q ) in enumerate (zip (pmult , qmult )):
1135+ self ._add_CurveData (node , i , p , q )
1136+
1137+ self .uuid_map [f"Curve.{ loadshape .Name } " ] = str (node )
1138+
1139+ return URIRef (self .uuid_map [f"Curve.{ loadshape .Name } " ])
1140+
1141+ def _add_PhotoVoltaicUnit_GenerationProfile (self , subject_uri : URIRef , solar : altdss .PVSystem ):
1142+ profile = getattr (solar , "Daily" )
1143+ if profile is not None :
1144+ node = self ._add_Curve (subject_uri , profile )
1145+ self .add_triple (subject_uri , "PhotoVoltaicUnit.GenerationProfile" , node )
1146+
11081147 def _add_PhotoVoltaicUnit (self , subject_uri : URIRef , solar : altdss .PVSystem ):
11091148 node = self .build_cim_obj ("PhotoVoltaicUnit" , name = f"{ solar .Name } _PVPanels" )
11101149 self .add_triple (node , "PowerElectronicsUnit.minP" , min (solar .pctCutIn , solar .pctCutOut ) / 100.0 * solar .kVA * 1000.0 )
11111150 self .add_triple (node , "PowerElectronicsUnit.maxP" , solar .Pmpp * 1000.0 )
1151+ self ._add_PhotoVoltaicUnit_GenerationProfile (node , solar )
11121152
11131153 self .add_triple (subject_uri , "PowerElectronicsConnection.PowerElectronicsUnit" , node )
11141154
0 commit comments