fix(flows): tømning bruger aldrig marksiloer; kan en silo ikke tage imod, prøves den næste (op til 3) før parkering med last (v1.60.6.0)
This commit is contained in:
@@ -132,6 +132,7 @@ ADFlowWagons.EMPTY_MIN_LITERS = 100
|
||||
ADFlowWagons.EMPTY_TIMEOUT_MS = 600000
|
||||
ADFlowWagons.EMPTY_STALL_MS = 45000 -- ved målet uden at læsset falder så længe = målet er fuldt
|
||||
ADFlowWagons.EMPTY_NEAR_M = 40 -- m fra aflæsningsmarkøren tæller som "ved målet"
|
||||
ADFlowWagons.MAX_DUMP_ATTEMPTS = 3 -- siloer der prøves før vognen parkeres med last
|
||||
|
||||
-- s = {nearTarget, sinceChangeMs}
|
||||
function ADFlowWagons.isStalled(s)
|
||||
@@ -145,7 +146,11 @@ function ADFlowWagons.emptyStep(stage, s)
|
||||
return s.hasTarget and "target" or "dump"
|
||||
end
|
||||
if (s.elapsedMs or 0) >= ADFlowWagons.EMPTY_TIMEOUT_MS then return "giveUp" end
|
||||
if s.stalled and cargo >= ADFlowWagons.EMPTY_MIN_LITERS then return stage == "target" and "dump" or "giveUp" end
|
||||
if s.stalled and cargo >= ADFlowWagons.EMPTY_MIN_LITERS then
|
||||
if stage == "target" then return "dump" end
|
||||
-- silo der ikke kunne tage imod: prøv den næste (op til MAX_DUMP_ATTEMPTS)
|
||||
return (s.dumpAttempts or 0) < ADFlowWagons.MAX_DUMP_ATTEMPTS and "dump" or "giveUp"
|
||||
end
|
||||
if s.adActive then return "wait" end
|
||||
if cargo < ADFlowWagons.EMPTY_MIN_LITERS then return "home" end
|
||||
if stage == "target" then return "dump" end
|
||||
@@ -404,7 +409,11 @@ local function startDump(adEnv, vehicle, state)
|
||||
local isReachable = function(markerId)
|
||||
return ADUnloadWait == nil or ADUnloadWait.hasRouteTo == nil or ADUnloadWait.hasRouteTo(adEnv, vehicle, markerId)
|
||||
end
|
||||
local ok, marker, why = pcall(ADLoadSwap.findDumpMarker, adEnv, vehicle, fillType, cargo, nil, isReachable, nil, nil, true)
|
||||
-- marksiloer er ikke tømmesteder (de er til markens høst); siloer der allerede fejlede springes over
|
||||
local okSet, fieldSilos = pcall(function() return ADFieldSilos ~= nil and ADFieldSilos.fieldSiloPlaceableSet(adEnv) or nil end)
|
||||
state.triedMarkers = state.triedMarkers or {}
|
||||
local ok, marker, why = pcall(ADLoadSwap.findDumpMarker, adEnv, vehicle, fillType, cargo, nil, isReachable,
|
||||
okSet and fieldSilos or nil, state.triedMarkers, true)
|
||||
if not ok or marker == nil then
|
||||
Logging.warning(ADFlowWagons.LOG_PREFIX .. "'%s' har stadig %d l %s — intet sted at aflæsse (%s); parkeres med last",
|
||||
tostring(ADRuns.vehicleLabel(vehicle)), math.floor(cargo), fillName(fillType), tostring(ok and why or marker))
|
||||
@@ -413,6 +422,8 @@ local function startDump(adEnv, vehicle, state)
|
||||
end
|
||||
state.stage, state.since = "dump", nowMs
|
||||
state.markerId, state.markerName, state.lastCargo = marker.id, marker.name, nil
|
||||
state.dumpAttempts = (state.dumpAttempts or 0) + 1
|
||||
state.triedMarkers[marker.id] = true
|
||||
ADFieldWork.startAd(adEnv, vehicle, adEnv.AutoDrive.MODE_DELIVERTO, marker.id, nil, fillType)
|
||||
Logging.info(ADFlowWagons.LOG_PREFIX .. "'%s' aflæsser resten (%d l %s) ved %s før parkering",
|
||||
tostring(ADRuns.vehicleLabel(vehicle)), math.floor(cargo), fillName(fillType), tostring(marker.name))
|
||||
@@ -551,7 +562,7 @@ local function tickEmptying(adEnv)
|
||||
else
|
||||
local stalled = stalledAt(adEnv, vehicle, state, cargo)
|
||||
local action = ADFlowWagons.emptyStep(state.stage, {cargo = cargo, adActive = module ~= nil and module:isActive(),
|
||||
elapsedMs = nowMs - state.since, stalled = stalled})
|
||||
elapsedMs = nowMs - state.since, stalled = stalled, dumpAttempts = state.dumpAttempts})
|
||||
if stalled and action ~= "wait" then
|
||||
Logging.info(ADFlowWagons.LOG_PREFIX .. "'%s' kan ikke aflæsse ved %s (fuldt?) — videre", tostring(ADRuns.vehicleLabel(vehicle)),
|
||||
tostring(state.markerName))
|
||||
|
||||
Reference in New Issue
Block a user