fix: læs-bytte — Wait-logik kun ved AD's aflæsningsmål; frisk rest ved bytte

This commit is contained in:
2026-09-22 23:20:49 +02:00
parent 5da3e81f3e
commit 5414371f72
3 changed files with 23 additions and 0 deletions
+3
View File
@@ -42,6 +42,9 @@ end
-- Nærmeste silo med plads til resten og vejnet til/fra; siloer der allerede har varen foretrækkes. -- Nærmeste silo med plads til resten og vejnet til/fra; siloer der allerede har varen foretrækkes.
function ADLoadSwap.findDumpMarker(adEnv, vehicle, fillType, rest, homeWayPointId, isReachable) function ADLoadSwap.findDumpMarker(adEnv, vehicle, fillType, rest, homeWayPointId, isReachable)
if vehicle.rootNode == nil then
return nil
end
local farmId = ADSmartPickup.getFarmId(vehicle) local farmId = ADSmartPickup.getFarmId(vehicle)
local homeStation = ADSmartPickup.getUnloadStationAtWayPointId(adEnv, homeWayPointId, farmId) local homeStation = ADSmartPickup.getUnloadStationAtWayPointId(adEnv, homeWayPointId, farmId)
local x, _, z = getWorldTranslation(vehicle.rootNode) local x, _, z = getWorldTranslation(vehicle.rootNode)
+8
View File
@@ -107,6 +107,12 @@ local function startWaiting(adEnv, task)
if not vehicle.ad.drivePathModule:isTargetReached() or vehicle.ad.trailerModule:isActiveAtTrigger() then if not vehicle.ad.drivePathModule:isTargetReached() or vehicle.ad.trailerModule:isActiveAtTrigger() then
return return
end end
-- Efter et bytte er opgavens mål en silo, ikke AD's rigtige aflæsningsmål (anden markør);
-- der skal AD bare læsse af som normalt, uden Wait-logik.
local target = vehicle.ad.stateModule.getSecondMarker ~= nil and vehicle.ad.stateModule:getSecondMarker() or nil
if target == nil or task.destinationID ~= target.id then
return
end
local fillType, rest = getRestLoad(adEnv, vehicle) local fillType, rest = getRestLoad(adEnv, vehicle)
if fillType == nil or rest < ADUnloadWait.MIN_REST_LITERS then if fillType == nil or rest < ADUnloadWait.MIN_REST_LITERS then
return return
@@ -150,6 +156,8 @@ local function updateWaiting(adEnv, task, wait, dt)
release(vehicle) release(vehicle)
return return
end end
-- Friske tal til evt. bytte og til tilbage-loggen — ikke dem fra da ventningen startede.
wait.fillType, wait.rest = fillType, rest
local free, capacity = ADSmartPickup.getTargetFreeCapacity(adEnv, vehicle, fillType) local free, capacity = ADSmartPickup.getTargetFreeCapacity(adEnv, vehicle, fillType)
if free == nil or not ADSupplyPlanner.canUnloadRest(free, rest, capacity) then if free == nil or not ADSupplyPlanner.canUnloadRest(free, rest, capacity) then
if ADLoadSwap ~= nil then if ADLoadSwap ~= nil then
+12
View File
@@ -819,6 +819,18 @@ UnloadTask.update(st5, 16)
UnloadTask.update(st5, ADLoadSwap.CHECK_INTERVAL_MS + 1) UnloadTask.update(st5, ADLoadSwap.CHECK_INTERVAL_MS + 1)
check("S5 én vare -> bliver", st5.destinationID, 40) check("S5 én vare -> bliver", st5.destinationID, 40)
-- S6: efter bytte til siloen skal traktoren blive der (ikke sendes til et nyt Wait-punkt,
-- fordi siloen fejlagtigt tolkes som "målet er fuldt")
buildSwapWorld()
local sv6, st6 = makeUnloadingVehicle("Fastrac Silo", 526, 5000, 35000)
UnloadTask.update(st6, 16)
UnloadTask.update(st6, ADLoadSwap.CHECK_INTERVAL_MS + 1)
local mark6 = #logLines
UnloadTask.update(st6, 16)
UnloadTask.update(st6, 16)
check("S6 bliver ved siloen efter bytte", st6.destinationID, 21)
check("S6 ingen ny Wait-omdirigering", countLogsSince(mark6, "venter ved"), 0)
-- ==== E: eksponerede opslag (bruges af runs-controller og læs-bytte) ==== -- ==== E: eksponerede opslag (bruges af runs-controller og læs-bytte) ====
local eDriver = buildCowWorld() local eDriver = buildCowWorld()
check("E1 aflæsningsstation ved waypoint", ADSmartPickup.getUnloadStationAtWayPointId(FS25_AutoDrive, 30, 1), unloadStations[1]) check("E1 aflæsningsstation ved waypoint", ADSmartPickup.getUnloadStationAtWayPointId(FS25_AutoDrive, 30, 1), unloadStations[1])