Merge remote-tracking branch 'origin/main'

main
Rice 2 weeks ago
commit 97689f3d74

@ -155,11 +155,12 @@ func getDeviceStatus2Real(rpc towgo.JsonRpcConnection) {
} }
d := new(DeviceStatus) d := new(DeviceStatus)
d.DeviceStatus = *read d.DeviceStatus = *read
loopCount := configuredLoopCount() scanLoopCount := configuredLoopCount()
d.ScanDeviceCount = loopCount displayLoopCount := monitorDisplayLoopCount()
loops := make([]DeviceStatusLoop, loopCount) d.ScanDeviceCount = scanLoopCount
loops := make([]DeviceStatusLoop, displayLoopCount)
var wg sync.WaitGroup var wg sync.WaitGroup
for i := 0; i < loopCount; i++ { for i := 0; i < displayLoopCount; i++ {
idx := i idx := i
wg.Add(1) wg.Add(1)
go func() { go func() {
@ -175,10 +176,12 @@ func getDeviceStatus2Real(rpc towgo.JsonRpcConnection) {
loop.A = parametersRead.DCCurrent loop.A = parametersRead.DCCurrent
kw := float64(loop.V*loop.A) / 1000 kw := float64(loop.V*loop.A) / 1000
loop.Kw = float32(math.Round(kw*1000) / 1000) loop.Kw = float32(math.Round(kw*1000) / 1000)
loop.Faults = m9z.BuildLoopFaults(uint(idx+1), parametersRead.AlarmStatus, parametersRead.AlarmCode) if idx < scanLoopCount {
loop.HasFault = len(loop.Faults) > 0 loop.Faults = m9z.BuildLoopFaults(uint(idx+1), parametersRead.AlarmStatus, parametersRead.AlarmCode)
loop.FaultMsg = joinLoopFaultMessages(loop.Faults) loop.HasFault = len(loop.Faults) > 0
loop.FaultCode = joinLoopFaultCodes(loop.Faults) loop.FaultMsg = joinLoopFaultMessages(loop.Faults)
loop.FaultCode = joinLoopFaultCodes(loop.Faults)
}
} }
loops[idx] = loop loops[idx] = loop
}() }()
@ -191,7 +194,7 @@ func getDeviceStatus2Real(rpc towgo.JsonRpcConnection) {
return d.Loops[i].Index < d.Loops[j].Index return d.Loops[i].Index < d.Loops[j].Index
}) })
for _, loop := range d.Loops { for _, loop := range d.Loops {
if loop.HasFault { if loop.HasFault && loop.Index < scanLoopCount {
recordLoopFaults(cuid, uint(loop.Index+1), loop.V, loop.Faults) recordLoopFaults(cuid, uint(loop.Index+1), loop.V, loop.Faults)
} }
} }
@ -200,14 +203,15 @@ func getDeviceStatus2Real(rpc towgo.JsonRpcConnection) {
} }
func buildDemoDeviceStatus2() *DeviceStatus { func buildDemoDeviceStatus2() *DeviceStatus {
const loopCount = 10 displayLoopCount := monitorDisplayLoopCount()
scanLoopCount := configuredLoopCount()
d := &DeviceStatus{ d := &DeviceStatus{
ScanDeviceCount: loopCount, ScanDeviceCount: scanLoopCount,
Loops: make([]DeviceStatusLoop, loopCount), Loops: make([]DeviceStatusLoop, displayLoopCount),
} }
d.Mode = 0 d.Mode = 0
d.DeviceTime = time.Now().UTC() d.DeviceTime = time.Now().UTC()
for i := 0; i < loopCount; i++ { for i := 0; i < displayLoopCount; i++ {
relayOpen := i%2 == 0 relayOpen := i%2 == 0
pwm := uint8(35 + i*5) pwm := uint8(35 + i*5)
d.Relays[i] = relayOpen d.Relays[i] = relayOpen
@ -226,17 +230,19 @@ func buildDemoDeviceStatus2() *DeviceStatus {
kw := float64(loop.V*loop.A) / 1000 kw := float64(loop.V*loop.A) / 1000
loop.Kw = float32(math.Round(kw*1000) / 1000) loop.Kw = float32(math.Round(kw*1000) / 1000)
switch i { if i < scanLoopCount {
case 0: switch i {
loop.Faults = m9z.BuildLoopFaults(uint(i+1), 0x01, "01 00") case 0:
case 1: loop.Faults = m9z.BuildLoopFaults(uint(i+1), 0x01, "01 00")
loop.Faults = m9z.BuildLoopFaults(uint(i+1), 0x02, "02 00") case 1:
case 6: loop.Faults = m9z.BuildLoopFaults(uint(i+1), 0x02, "02 00")
loop.Faults = m9z.BuildLoopFaults(uint(i+1), 0x04, "04 03") case 6:
case 8: loop.Faults = m9z.BuildLoopFaults(uint(i+1), 0x04, "04 03")
loop.Faults = m9z.BuildLoopFaults(uint(i+1), 0x03, "03 00") case 8:
default: loop.Faults = m9z.BuildLoopFaults(uint(i+1), 0x03, "03 00")
loop.Faults = m9z.BuildLoopFaults(uint(i+1), 0x02, "02 00") default:
loop.Faults = m9z.BuildLoopFaults(uint(i+1), 0x02, "02 00")
}
} }
loop.HasFault = len(loop.Faults) > 0 loop.HasFault = len(loop.Faults) > 0
loop.FaultMsg = joinLoopFaultMessages(loop.Faults) loop.FaultMsg = joinLoopFaultMessages(loop.Faults)

@ -9,6 +9,10 @@ func configuredLoopCount() int {
return scanConfigManager.GetLoopCount() return scanConfigManager.GetLoopCount()
} }
func monitorDisplayLoopCount() int {
return maxLoopCount
}
func normalizeLoopCount(loopCount int) int { func normalizeLoopCount(loopCount int) int {
if loopCount <= 0 { if loopCount <= 0 {
return defaultLoopCount return defaultLoopCount

@ -22,3 +22,35 @@ func TestNormalizeLoopCount(t *testing.T) {
}) })
} }
} }
func TestMonitorDisplayLoopCountAlwaysUsesMaxLoopCount(t *testing.T) {
if got := monitorDisplayLoopCount(); got != maxLoopCount {
t.Fatalf("monitorDisplayLoopCount() = %d, want %d", got, maxLoopCount)
}
}
func TestBuildDemoDeviceStatus2KeepsDisplayLoopsIndependentFromScanCount(t *testing.T) {
scanConfigManager.mu.Lock()
oldLoopCount := scanConfigManager.loopCount
scanConfigManager.loopCount = 6
scanConfigManager.mu.Unlock()
t.Cleanup(func() {
scanConfigManager.mu.Lock()
scanConfigManager.loopCount = oldLoopCount
scanConfigManager.mu.Unlock()
})
status := buildDemoDeviceStatus2()
if got := len(status.Loops); got != monitorDisplayLoopCount() {
t.Fatalf("len(status.Loops) = %d, want %d", got, monitorDisplayLoopCount())
}
if got := status.ScanDeviceCount; got != 6 {
t.Fatalf("status.ScanDeviceCount = %d, want 6", got)
}
if !status.Loops[5].HasFault {
t.Fatal("status.Loops[5].HasFault = false, want true for the last scanned loop")
}
if status.Loops[6].HasFault {
t.Fatal("status.Loops[6].HasFault = true, want false outside the scan loop count")
}
}

Loading…
Cancel
Save