fix: læs-bytte — Wait-logik kun ved AD's aflæsningsmål; frisk rest ved bytte
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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])
|
||||||
|
|||||||
Reference in New Issue
Block a user