github.com/archlabjp/eeslism-go@v0.0.0-20231109122333-4bb7bfcdf292/eeslism/blroomvptr.go (about) 1 //This file is part of EESLISM. 2 // 3 //Foobar is free software : you can redistribute itand /or modify 4 //it under the terms of the GNU General Public License as published by 5 //the Free Software Foundation, either version 3 of the License, or 6 //(at your option) any later version. 7 // 8 //Foobar is distributed in the hope that it will be useful, 9 //but WITHOUT ANY WARRANTY; without even the implied warranty of 10 //MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the 11 //GNU General Public License for more details. 12 // 13 //You should have received a copy of the GNU General Public License 14 //along with Foobar.If not, see < https://www.gnu.org/licenses/>. 15 16 package eeslism 17 18 import "errors" 19 20 /* 室及び関連システム変数、内部変数のポインター */ 21 22 func roomvptr(Nk int, key []string, Room *ROOM) (VPTR, error) { 23 var vptr VPTR 24 vptr.Ptr = nil 25 26 if Nk == 2 { 27 switch string(key[1]) { 28 case "Tr": 29 vptr.Ptr = &Room.Tr 30 vptr.Type = VAL_CTYPE 31 case "xr": 32 vptr.Ptr = &Room.xr 33 vptr.Type = VAL_CTYPE 34 case "RH": 35 vptr.Ptr = &Room.RH 36 vptr.Type = VAL_CTYPE 37 case "PMV": 38 vptr.Ptr = &Room.PMV 39 vptr.Type = VAL_CTYPE 40 case "Tsav": 41 vptr.Ptr = &Room.Tsav 42 vptr.Type = VAL_CTYPE 43 case "Tot": 44 vptr.Ptr = &Room.Tot 45 vptr.Type = VAL_CTYPE 46 case "hr": 47 vptr.Ptr = &Room.hr 48 vptr.Type = VAL_CTYPE 49 } 50 } else if Nk == 3 { 51 for i := 0; i < Room.N; i++ { 52 Sd := Room.rsrf[i] 53 if string(key[1]) == Sd.Name { 54 switch string(key[2]) { 55 case "Ts": 56 vptr.Ptr = &Sd.Ts 57 vptr.Type = VAL_CTYPE 58 case "Tmrt": 59 vptr.Ptr = &Sd.Tmrt 60 vptr.Type = VAL_CTYPE 61 case "Te": 62 vptr.Ptr = &Sd.Tcole 63 vptr.Type = VAL_CTYPE 64 } 65 } 66 } 67 } 68 69 if vptr.Ptr == nil { 70 return vptr, errors.New("roomvptr error") 71 } 72 73 return vptr, nil 74 } 75 76 /* ------------------------------------------- */ 77 78 /* 室負荷計算時の設定値ポインター */ 79 80 func roomldptr(load *ControlSWType, key []string, Room *ROOM, idmrk *byte) (VPTR, error) { 81 var err error 82 var i int 83 var Sd *RMSRF 84 var vptr VPTR 85 86 if key[1] == "Tr" { 87 vptr.Ptr = &Room.rmld.Tset 88 vptr.Type = VAL_CTYPE 89 Room.rmld.loadt = load 90 Room.rmld.tropt = 'a' 91 *idmrk = 't' 92 } else if key[1] == "Tot" { 93 vptr.Ptr = &Room.rmld.Tset 94 vptr.Type = VAL_CTYPE 95 Room.rmld.loadt = load 96 Room.rmld.tropt = 'o' 97 *idmrk = 't' 98 } else if key[1] == "RH" { 99 vptr.Ptr = &Room.rmld.Xset 100 vptr.Type = VAL_CTYPE 101 Room.rmld.loadx = load 102 Room.rmld.hmopt = 'r' 103 *idmrk = 'x' 104 } else if key[1] == "Tdp" { 105 vptr.Ptr = &Room.rmld.Xset 106 vptr.Type = VAL_CTYPE 107 Room.rmld.loadx = load 108 Room.rmld.hmopt = 'd' 109 *idmrk = 'x' 110 } else if key[1] == "xr" { 111 vptr.Ptr = &Room.rmld.Xset 112 vptr.Type = VAL_CTYPE 113 Room.rmld.loadx = load 114 Room.rmld.hmopt = 'x' 115 *idmrk = 'x' 116 } else if len(key) > 2 && key[2] == "Ts" { 117 118 for i = 0; i < Room.N; i++ { 119 Sd = Room.rsrf[i] 120 121 if Sd.Name == key[1] { 122 vptr.Ptr = &Sd.Ts 123 vptr.Type = VAL_CTYPE 124 Room.rmld.loadt = load 125 *idmrk = 't' 126 err = nil 127 break 128 } 129 err = errors.New("Surface not found: " + Sd.Name) 130 } 131 } else { 132 err = errors.New("'Tr', 'Tot', 'RH', 'Tdp', 'xr' or '<roomname> Ts' are expected") 133 } 134 135 return vptr, err 136 } 137 138 /* ------------------------------------------- */ 139 140 /* 室負荷計算時のスケジュール設定 */ 141 142 func roomldschd(Room *ROOM) { 143 var Eo *ELOUT 144 var rmld *RMLOAD 145 146 if rmld = Room.rmld; rmld != nil { 147 Eo = Room.cmp.Elouts[0] 148 if rmld.loadt != nil { 149 if Eo == Eo.Eldobj || Eo.Eldobj.Control != OFF_SW { 150 if rmld.Tset > TEMPLIMIT { 151 Eo.Sysv = rmld.Tset 152 Room.Tr = rmld.Tset 153 Eo.Control = LOAD_SW 154 } else { 155 if Room.VAVcontrl != nil { 156 Room.VAVcontrl.Cmp.Control = OFF_SW 157 Room.VAVcontrl.Cmp.Elouts[0].Control = OFF_SW 158 } 159 } 160 } 161 } 162 163 Eo = Room.cmp.Elouts[1] 164 if rmld.loadx != nil { 165 if Eo == Eo.Eldobj || Eo.Eldobj.Control != OFF_SW { 166 switch rmld.hmopt { 167 case 'r': 168 // 相対湿度 169 if rmld.Xset > 0.0 { 170 Eo.Sysv = FNXtr(Room.Tr, rmld.Xset) 171 Eo.Control = LOAD_SW 172 } 173 case 'd': 174 // 露点温度 175 if rmld.Xset > TEMPLIMIT { 176 Eo.Sysv = FNXp(FNPws(rmld.Xset)) 177 Eo.Control = LOAD_SW 178 } 179 case 'x': 180 // 絶対湿度 181 if rmld.Xset > 0.0 { 182 Eo.Sysv = rmld.Xset 183 Eo.Control = LOAD_SW 184 } 185 } 186 } 187 } 188 } 189 }