github.com/archlabjp/eeslism-go@v0.0.0-20231109122333-4bb7bfcdf292/eeslism/eedayslib.go (about)

     1  package eeslism
     2  
     3  const MAXINT_DAY = -999.0
     4  const MININT_DAY = 999.0
     5  
     6  func svdyint(vd *SVDAY) {
     7  	vd.M = 0.0
     8  	vd.Mn = MININT_DAY
     9  	vd.Mx = MAXINT_DAY
    10  	vd.Hrs = 0
    11  	vd.Mntime = -1
    12  	vd.Mxtime = -1
    13  }
    14  
    15  func svdaysum(time int64, control ControlSWType, v float64, vd *SVDAY) {
    16  	if control != '0' {
    17  		vd.M += v
    18  		vd.Hrs++
    19  		minmark(&vd.Mn, &vd.Mntime, v, time)
    20  		maxmark(&vd.Mx, &vd.Mxtime, v, time)
    21  	}
    22  	if time == 2400 && vd.Hrs > 0 {
    23  		vd.M /= float64(vd.Hrs)
    24  	}
    25  }
    26  
    27  func svmonsum(Mon int, Day int, time int, control ControlSWType, v float64, vd *SVDAY, Dayend int, SimDayend int) {
    28  	MoNdTt := int64(1000000*Mon + 10000*Day + time)
    29  
    30  	if control != '0' {
    31  		vd.M += v
    32  		vd.Hrs++
    33  		minmark(&vd.Mn, &vd.Mntime, v, MoNdTt)
    34  		maxmark(&vd.Mx, &vd.Mxtime, v, MoNdTt)
    35  	}
    36  
    37  	if IsEndDay(Mon, Day, Dayend, SimDayend) && vd.Hrs > 0 && time == 2400 {
    38  		vd.M /= float64(vd.Hrs)
    39  	}
    40  }
    41  
    42  /* ------------------------------------ */
    43  
    44  func qdyint(Qd *QDAY) {
    45  	Qd.H = 0.0
    46  	Qd.C = 0.0
    47  	Qd.Hmx = 0.0
    48  	Qd.Cmx = 0.0
    49  	Qd.Hhr = 0
    50  	Qd.Chr = 0
    51  	Qd.Hmxtime = -1
    52  	Qd.Cmxtime = -1
    53  }
    54  
    55  func qdaysum(time int64, control ControlSWType, Q float64, Qd *QDAY) {
    56  	if control != '0' {
    57  		if Q > 0.0 {
    58  			Qd.H += Q
    59  			maxmark(&Qd.Hmx, &Qd.Hmxtime, Q, time)
    60  			Qd.Hhr++
    61  		} else if Q < 0.0 {
    62  			Qd.C += Q
    63  			minmark(&Qd.Cmx, &Qd.Cmxtime, Q, time)
    64  			Qd.Chr++
    65  		}
    66  	}
    67  
    68  	if time == 2400 {
    69  		Qd.H *= Cff_kWh
    70  		Qd.C *= Cff_kWh
    71  	}
    72  }
    73  
    74  func qmonsum(Mon int, Day int, time int, control ControlSWType, Q float64, Qd *QDAY, Dayend int, SimDayend int) {
    75  	MoNdTt := int64(1000000*Mon + 10000*Day + time)
    76  
    77  	if control != '0' {
    78  		if Q > 0.0 {
    79  			Qd.H += Q
    80  			maxmark(&Qd.Hmx, &Qd.Hmxtime, Q, MoNdTt)
    81  			Qd.Hhr++
    82  		} else if Q < 0.0 {
    83  			Qd.C += Q
    84  			minmark(&Qd.Cmx, &Qd.Cmxtime, Q, MoNdTt)
    85  			Qd.Chr++
    86  		}
    87  	}
    88  
    89  	if IsEndDay(Mon, Day, Dayend, SimDayend) && time == 2400 {
    90  		Qd.H *= Cff_kWh
    91  		Qd.C *= Cff_kWh
    92  	}
    93  }
    94  
    95  // 日集計関数。非運転時にも集計を行う
    96  func qdaysumNotOpe(time int64, Q float64, Qd *QDAY) {
    97  	if Q > 0.0 {
    98  		Qd.H += Q
    99  		maxmark(&Qd.Hmx, &Qd.Hmxtime, Q, time)
   100  		Qd.Hhr++
   101  	} else if Q < 0.0 {
   102  		Qd.C += Q
   103  		minmark(&Qd.Cmx, &Qd.Cmxtime, Q, time)
   104  		Qd.Chr++
   105  	}
   106  
   107  	if time == 2400 {
   108  		Qd.H *= Cff_kWh
   109  		Qd.C *= Cff_kWh
   110  	}
   111  }
   112  
   113  func qmonsumNotOpe(Mon int, Day int, time int, Q float64, Qd *QDAY, Dayend int, SimDayend int) {
   114  	MoNdTt := int64(1000000*Mon + 10000*Day + time)
   115  
   116  	if Q > 0.0 {
   117  		Qd.H += Q
   118  		maxmark(&Qd.Hmx, &Qd.Hmxtime, Q, MoNdTt)
   119  		Qd.Hhr++
   120  	} else if Q < 0.0 {
   121  		Qd.C += Q
   122  		minmark(&Qd.Cmx, &Qd.Cmxtime, Q, MoNdTt)
   123  		Qd.Chr++
   124  	}
   125  
   126  	if IsEndDay(Mon, Day, Dayend, SimDayend) && time == 2400 {
   127  		Qd.H *= Cff_kWh
   128  		Qd.C *= Cff_kWh
   129  	}
   130  }
   131  
   132  /* ------------------------------------ */
   133  
   134  func edyint(Ed *EDAY) {
   135  	Ed.D = 0.0
   136  	Ed.Mx = 0.0
   137  	Ed.Hrs = 0
   138  	Ed.Mxtime = -1
   139  }
   140  
   141  func edaysum(time int, control ControlSWType, E float64, Ed *EDAY) {
   142  	if control != '0' {
   143  		Ed.D += E
   144  		maxmark(&Ed.Mx, &Ed.Mxtime, E, int64(time))
   145  		Ed.Hrs++
   146  	}
   147  
   148  	if time == 2400 {
   149  		Ed.D *= Cff_kWh
   150  	}
   151  }
   152  
   153  func emonsum(Mon, Day, time int, control ControlSWType, E float64, Ed *EDAY, Dayend, SimDayend int) {
   154  	var MoNdTt int64 = int64(1000000*Mon + 10000*Day + time)
   155  
   156  	if control != OFF_SW {
   157  		Ed.D += E
   158  		maxmark(&Ed.Mx, &Ed.Mxtime, E, MoNdTt)
   159  		Ed.Hrs++
   160  	}
   161  
   162  	if IsEndDay(Mon, Day, Dayend, SimDayend) && time == 2400 {
   163  		Ed.D *= Cff_kWh
   164  	}
   165  }
   166  
   167  func emtsum(Mon, Day, time int, control ControlSWType, E float64, Ed *EDAY) {
   168  	if control != OFF_SW {
   169  		Ed.D += E
   170  	}
   171  }
   172  
   173  func minmark(minval *float64, timemin *int64, v float64, time int64) {
   174  	if v <= *minval {
   175  		*timemin = time
   176  		*minval = v
   177  	}
   178  }
   179  
   180  func maxmark(maxval *float64, timemax *int64, v float64, time int64) {
   181  	if v >= *maxval {
   182  		*timemax = time
   183  		*maxval = v
   184  	}
   185  }