Skip to content

Commit 7e6404d

Browse files
author
vikrants
committed
Bug fix for AWHP and room layout on on Simulink Canvas getNonRotatedRoomVertices. Some other associated files have changed too due to check introduced for Apartment rotation in getNonRotatedRoomVertices
1 parent ba89d07 commit 7e6404d

13 files changed

Lines changed: 92 additions & 97 deletions

File tree

Components/Libraries/+AirWaterHeatPump/AirWaterHeatPump.ssc

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -73,11 +73,11 @@ component (Propagation = blocks) AirWaterHeatPump
7373
value(seasonalCOPvalE,'1'), ...
7474
value(seasonalCOPvalF,'1')],'1'};
7575
capacityVector = {[value(nominalCapacityA,'W'), ...
76-
value(nominalCapacityA,'W'), ...
77-
value(nominalCapacityA,'W'), ...
78-
value(nominalCapacityA,'W'), ...
79-
value(nominalCapacityA,'W'), ...
80-
value(nominalCapacityA,'W')], 'W'};
76+
value(nominalCapacityB,'W'), ...
77+
value(nominalCapacityC,'W'), ...
78+
value(nominalCapacityD,'W'), ...
79+
value(nominalCapacityE,'W'), ...
80+
value(nominalCapacityF,'W')], 'W'};
8181
airTemperatureVector = 273 + [-2 -2 7 7 35 35];
8282
waterTemperatureVector = 273 + [55 65 35 45 18 7];
8383
waterSpHeat = {4186, 'J/kg/K'};
-6.79 KB
Binary file not shown.
-37.7 KB
Binary file not shown.

Components/WorkflowUtilities/BuildingCreator/SupportingFiles/addBlockConcatSignalPS.m

Lines changed: 27 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -21,27 +21,32 @@ function addBlockConcatSignalPS(NameValueArgs)
2121
set_param(blkNameConcatPort(1,count),'Side','left');
2222
end
2323
end
24-
25-
newBlk = 0;
26-
blkNameConcatNew = strings(1,count-1);
27-
for i = 1:count-1
28-
newBlk = newBlk+1;
29-
blkNameConcatNew(1,i) = strcat(NameValueArgs.BlkName,'/concat',num2str(newBlk));
30-
add_block(NameValueArgs.LibBlockPath.concatPS,blkNameConcatNew(1,i),'Position',[50+newBlk*50 50*i+10 70+newBlk*50 50*i+10+20]);
31-
set_param(blkNameConcatNew(1,i),'catColumns',NameValueArgs.ConcatColumns)
32-
end
33-
34-
simscape.addConnection(blkNameConcatPort(1,1),"port",blkNameConcatNew(1,1),"I1");
35-
simscape.addConnection(blkNameConcatPort(1,2),"port",blkNameConcatNew(1,1),"I2");
36-
37-
for i = 1:newBlk-1
38-
simscape.addConnection(blkNameConcatNew(1,i),"O",blkNameConcatNew(1,i+1),"I1");
39-
simscape.addConnection(blkNameConcatPort(1,i+2),"port",blkNameConcatNew(1,i+1),"I2");
24+
25+
if count > 1
26+
newBlk = 0;
27+
blkNameConcatNew = strings(1,count-1);
28+
for i = 1:count-1
29+
newBlk = newBlk+1;
30+
blkNameConcatNew(1,i) = strcat(NameValueArgs.BlkName,'/concat',num2str(newBlk));
31+
add_block(NameValueArgs.LibBlockPath.concatPS,blkNameConcatNew(1,i),'Position',[50+newBlk*50 50*i+10 70+newBlk*50 50*i+10+20]);
32+
set_param(blkNameConcatNew(1,i),'catColumns',NameValueArgs.ConcatColumns)
33+
end
34+
35+
simscape.addConnection(blkNameConcatPort(1,1),"port",blkNameConcatNew(1,1),"I1");
36+
simscape.addConnection(blkNameConcatPort(1,2),"port",blkNameConcatNew(1,1),"I2");
37+
38+
if newBlk > 1
39+
for i = 1:newBlk-1
40+
simscape.addConnection(blkNameConcatNew(1,i),"O",blkNameConcatNew(1,i+1),"I1");
41+
simscape.addConnection(blkNameConcatPort(1,i+2),"port",blkNameConcatNew(1,i+1),"I2");
42+
end
43+
end
44+
45+
blkNameConcatPortOut = strcat(NameValueArgs.BlkName,'/v');
46+
add_block(NameValueArgs.LibBlockPath.connPort,blkNameConcatPortOut,'Position',[50+newBlk*50+100 50*i+10 70+newBlk*50+150 50*i+10+20]);
47+
48+
set_param(blkNameConcatPortOut,'Orientation','left');
49+
set_param(blkNameConcatPortOut,'Side','right');
50+
simscape.addConnection(blkNameConcatNew(1,end),"O",blkNameConcatPortOut,"port");
4051
end
41-
42-
blkNameConcatPortOut = strcat(NameValueArgs.BlkName,'/v');
43-
add_block(NameValueArgs.LibBlockPath.connPort,blkNameConcatPortOut,'Position',[50+newBlk*50+100 50*i+10 70+newBlk*50+150 50*i+10+20]);
44-
set_param(blkNameConcatPortOut,'Orientation','left');
45-
set_param(blkNameConcatPortOut,'Side','right');
46-
simscape.addConnection(blkNameConcatNew(1,end),"O",blkNameConcatPortOut,"port");
4752
end

Components/WorkflowUtilities/BuildingCreator/SupportingFiles/createBuildingComponentFromPartFile.m

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
msgDisplayCount = displayDiagnostics(ErrorMsg="Completed reading building part file",ErrorMsgNum=msgDisplayCount,Diagnostics=NameValueArgs.Diagnostics);
2020

2121
[nApt, nRooms] = getNumAptAndRoomsFromFloorPlan(apartment3D);
22+
2223
if NameValueArgs.ModelType == "Heat Load Analysis"
2324
for i = 1:nApt
2425
for j = 1:nRooms(i,1)
@@ -55,7 +56,7 @@
5556
msgDisplayCount = displayDiagnostics(ErrorMsg=strcat("Opened model ",NameValueArgs.BuildingLibraryName,".slx to create building library"),ErrorMsgNum=msgDisplayCount,Diagnostics=NameValueArgs.Diagnostics);
5657

5758
topFloorLevelNum = apartment3D.apartment1.room1.geometry.dim.topFloorLevelNum;
58-
59+
5960
% Initialize data to store block paths for the model
6061
mdlBlkPath = initializeModelBlockPathMatrices(BuildingModel=apartment3D);
6162
% Create subsystem for ground, roof, floors, and building floor level plans
@@ -90,23 +91,26 @@
9091
for idx = 1:size(listofRooms,1)
9192
i = listofRooms(idx,1);
9293
j = listofRooms(idx,2);
93-
9494
% mdlBlkPath.nodesPerFloorLvl(:,i): i=1 stores # Thermal Nodes
9595
% i=2 stores # TL nodes
9696
mdlBlkPath.nodesPerFloorLvl(floorLevelNum,1) = mdlBlkPath.nodesPerFloorLvl(floorLevelNum,1)+1;
9797
% The room or floorplan might have been rotated (XML definition) and hence
9898
% it is important to realign them to X-Y axis.
9999
roomJvert = getNonRotatedRoomVertices(Apartment=apartment3D,NumberApartment=i,NumberRoom=j);
100100
mdlBlkPath.areaNameRoom(i,j) = strcat(mdlBlkPath.blkNameFloorLevel(floorLevelNum,1),"/A",num2str(i),"R",num2str(j)," (",apartment3D.("apartment"+i).("room"+j).name,")");
101-
nonRotatedLoc = [roomJvert(1,:),roomJvert(3,:)]*scaleToPlot;
101+
min_X = min(roomJvert(:,1));min_Y = min(roomJvert(:,2));
102+
max_X = max(roomJvert(:,1));max_Y = max(roomJvert(:,2));
103+
nonRotatedLoc = [min_X,min_Y,max_X,max_Y]*scaleToPlot;
104+
% nonRotatedLoc = [roomJvert(1,:),roomJvert(3,:)]*scaleToPlot;
102105
mdlBlkPath.areaNameRoomLoc(i,j) = num2str(nonRotatedLoc);
103106
areaColor = [0.99*max(0.9,rand(1)) 0.88*max(0.9,rand(1)) 0.99*max(0.9,rand(1)) 0.88*max(0.9,rand(1))];
104107
add_block("built-in/Area",mdlBlkPath.areaNameRoom(i,j),"Position",nonRotatedLoc,"BackgroundColor", mat2str(areaColor));
105108
% To plot rooms, you must first find their non-rotated vertices and data
106109
% that align along the X and Y axes.
107-
delX = (nonRotatedLoc(1,3)-nonRotatedLoc(1,1))*accomodateWall; % Calculate delX from diagonal vertices
108-
delY = (nonRotatedLoc(1,4)-nonRotatedLoc(1,2))*accomodateWall; % Calculate delY from diagonal vertices
110+
delX = abs(nonRotatedLoc(1,3)-nonRotatedLoc(1,1))*accomodateWall; % Calculate delX from diagonal vertices
111+
delY = abs(nonRotatedLoc(1,4)-nonRotatedLoc(1,2))*accomodateWall; % Calculate delY from diagonal vertices
109112
roomJvertNonRotated = [nonRotatedLoc(1,1)+delX, nonRotatedLoc(1,2)+delY,nonRotatedLoc(1,3)-delX, nonRotatedLoc(1,4)-delY];
113+
110114
roomNameDisp = apartment3D.("apartment"+i).("room"+j).name;
111115
if floorLevelNum == 1
112116
mdlBlkPath.areaNameGround(i,j) = addFloorOrRoofElement(WallName=strcat("Ground_A",num2str(i),"R",num2str(j),"(",roomNameDisp,")"),...
@@ -413,7 +417,7 @@
413417
mdlBlkPath.blkNameWallExternal(rangeExtWalls,1) = mdlBlkPath.blkNameExtWall(:,1);
414418

415419
end
416-
420+
417421
if sum(mdlBlkPath.nodesPerFloorLvl(:,2)) > 0
418422
noTLnodesDefined = false;
419423
else
@@ -447,7 +451,7 @@
447451

448452
msgDisplayCount = displayDiagnostics(ErrorMsg="Added pipe network to supply coolant/heating fluid to building",ErrorMsgNum=msgDisplayCount,Diagnostics=NameValueArgs.Diagnostics);
449453
end
450-
454+
451455
% Add connection between floors, through wall elements
452456
connectLevelThroughFloors(ListOfFloors=mdlBlkPath.blkNameFloorConn(:,1),...
453457
listofLevels=mdlBlkPath.blkNameFloorLevel(:,1));
@@ -514,8 +518,6 @@
514518
simscape.addConnection(mdlBlkPath.nameArrayNodesInletBldg,"Amb",portA,"port","autorouting","off");
515519
simscape.addConnection(mdlBlkPath.nameArrayNodesOutletBldg,"Amb",portA,"port","autorouting","off");
516520
end
517-
% simscape.addConnection(mdlBlkPath.blkNameFloorConn(topFloorLevelNum+1,1),"Top",portA,"port","autorouting","smart");
518-
519521

520522
collateBuildingTemperatureData(CanvasPath=mdlBlkPath.libBuildingPath,...
521523
ConnectToBlock=mdlBlkPath.blkNameFloorLevel,ConnectToBlockPort="T",...
@@ -524,7 +526,7 @@
524526
BlockIndices=[(1:topFloorLevelNum)',ones(1,topFloorLevelNum)'],ConnectionOrder="reverse");
525527

526528
displayDiagnostics(ErrorMsg="Collate temperature signals for all rooms of the building",ErrorMsgNum=msgDisplayCount,Diagnostics=NameValueArgs.Diagnostics);
527-
529+
528530
% Rotate ports for main library block and add icon.
529531
hndl = get_param(mdlBlkPath.libBuildingPath,"PortHandles");
530532
if ~noTLnodesDefined

Components/WorkflowUtilities/BuildingCreator/SupportingFiles/getNonRotatedRoomVertices.m

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,17 @@
99
NameValueArgs.NumberRoom (1,1) {mustBeNonnegative}
1010
end
1111

12-
theta = NameValueArgs.Apartment.("apartment"+NameValueArgs.NumberApartment).("room"+NameValueArgs.NumberRoom (1,1)).geometry.dim.theta;
13-
if theta == 0
14-
roomJvert = NameValueArgs.Apartment.("apartment"+NameValueArgs.NumberApartment).("room"+NameValueArgs.NumberRoom (1,1)).floorPlan.Vertices;
12+
tht = NameValueArgs.Apartment.("apartment"+NameValueArgs.NumberApartment).("room"+NameValueArgs.NumberRoom).geometry.dim.theta;
13+
if NameValueArgs.Apartment.("apartment"+NameValueArgs.NumberApartment).("room"+NameValueArgs.NumberRoom).geometry.dim.floorPlanRotation == 0
14+
len = NameValueArgs.Apartment.("apartment"+NameValueArgs.NumberApartment).("room"+NameValueArgs.NumberRoom).geometry.dim.length;
15+
wid = NameValueArgs.Apartment.("apartment"+NameValueArgs.NumberApartment).("room"+NameValueArgs.NumberRoom).geometry.dim.width;
16+
vrt = NameValueArgs.Apartment.("apartment"+NameValueArgs.NumberApartment).("room"+NameValueArgs.NumberRoom).geometry.dim.vertex;
17+
roomModel = addNewRoomToFloorPlan(vrt,wid,len,tht,"Temp");
18+
roomJvert = roomModel.floorPlan.Vertices;
1519
else
16-
roomJvert = NameValueArgs.Apartment.("apartment"+NameValueArgs.NumberApartment).("room"+NameValueArgs.NumberRoom (1,1)).floorPlan.rotate(-theta).Vertices;
20+
% Entire floor plan might have been rotated and hence this step
21+
% (and not re-creating vertices as when tht is zero). The rotation
22+
% vertex and the room vertex may not necessarily be the same.
23+
roomJvert = NameValueArgs.Apartment.("apartment"+NameValueArgs.NumberApartment).("room"+NameValueArgs.NumberRoom).floorPlan.rotate(360-tht).Vertices;
1724
end
1825
end

Components/WorkflowUtilities/BuildingCreator/createBuildingLibraryAndParameterize.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151
saveBuildingLibrary(ModelName=NameValueArgs.BuildingLibraryName,...
5252
ModelData=buildingBlockLayout,...
5353
AddToProjectPath=true,...
54-
AddIcon=false);
54+
AddIcon=true);
5555
elseif NameValueArgs.SaveModel == "Create Model and Save"
5656
saveBuildingLibrary(ModelName=NameValueArgs.BuildingLibraryName,...
5757
ModelData=buildingBlockLayout,...

Components/WorkflowUtilities/BuildingDesign/SupportingFiles/addNewRoomToFloorPlan.m

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,5 @@
1717
roomModel.geometry.dim.width = wid;
1818
roomModel.geometry.dim.vertex = vertex;
1919
roomModel.geometry.dim.theta = theta;
20+
roomModel.geometry.dim.floorPlanRotation = 0;
2021
end

Components/WorkflowUtilities/BuildingDesign/copyMoveRotateForNewApartment.m

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
end
4545
roomName = NameValueArgs.Apartment.("room"+num2str(i)).name;
4646
roomModel = addNewRoomToFloorPlan(vertex,width,length,theta,roomName);
47+
roomModel.geometry.dim.floorPlanRotation = degVal;
4748
oneAptUnit = [oneAptUnit,roomModel];
4849
end
4950
newApartment = defineSingleApartmentUnit(Apartment=oneAptUnit,Tol=NameValueArgs.Tol);

Components/WorkflowUtilities/Misc/BuildingAnalysis/readBuildingDataXML.m

Lines changed: 0 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -117,34 +117,4 @@
117117
dataStruct = addBackFloorPlanToRoom(dataStruct,i,j);
118118
end
119119
end
120-
121-
% % re-construct geoLocation()
122-
% location = fileContent.README.Location;
123-
% degLatitude = fileContent.README.Latitude;
124-
% degLongitude = fileContent.README.Longitude;
125-
% stdTimeZone = fileContent.README.StdTimeZone;
126-
% geoLocation = table(degLatitude,degLongitude,stdTimeZone,...
127-
% 'VariableNames',{'Latitude','Longitude','Meredian (Time Zone)'},...
128-
% 'RowNames',location);
129-
%
130-
% t1 = fileContent.README.StartTime;
131-
% t2 = fileContent.README.EndTime;
132-
% datetimeVec = t1:hours(1):t2;
133-
%
134-
% disp(strcat('Location:',geoLocation.Row));
135-
% disp('Simulation Duration:');
136-
% disp(strcat('*** Start Time : ',string(datetimeVec(1,1))));
137-
% disp(strcat('*** End Time : ',string(datetimeVec(1,end))));
138-
% % dateStringDisp = strcat(': ',string(datetimeVec(1,1)),' --> ',string(datetimeVec(1,end)));
139-
140-
% roomNameList = [];
141-
% for j = 1:nRooms(1,1)
142-
% if j>1
143-
% roomNameList = strcat(dataStruct.apartment1.("room"+j).name,', ',roomNameList);
144-
% else
145-
% roomNameList = dataStruct.apartment1.("room"+j).name;
146-
% end
147-
% end
148-
% roomNameList = strcat("*** Room Names in Building : ",roomNameList);
149-
% disp(roomNameList);
150120
end

0 commit comments

Comments
 (0)