fix(forsyning): rest ved fuldt mål køres til run'ets andet mål med mest plads før Wait; staldes læssestationer er aldrig kilde for halm/foder (kun output) (v1.18.6.0)
This commit is contained in:
@@ -119,6 +119,27 @@ local function isAtUnloadTarget(adEnv, vehicle)
|
||||
end
|
||||
|
||||
-- Står køretøjet ved målet med rest-læs, som målet ikke kan tage? Så find et Wait-punkt.
|
||||
ADUnloadWait.MIN_FREE_FOR_OTHER_TARGET = 1000
|
||||
|
||||
-- Det af run'ets ANDRE mål der tager varen og har mest fri plads (≥ MIN_FREE_FOR_OTHER_TARGET) og vej.
|
||||
local function findOtherTargetForRest(adEnv, vehicle, fillType, currentId)
|
||||
local run = ADRunsController ~= nil and ADRunsController.getRunForVehicle ~= nil and ADRunsController.getRunForVehicle(vehicle) or nil
|
||||
if run == nil or (run.kind or "supply") ~= "supply" or vehicle.ad.stateModule.setSecondMarkerByWayPointId == nil then
|
||||
return nil
|
||||
end
|
||||
local best, bestFree = nil, ADUnloadWait.MIN_FREE_FOR_OTHER_TARGET - 1
|
||||
for _, targetId in ipairs(ADRunsController.getRunTargets(run)) do
|
||||
if targetId ~= currentId then
|
||||
local free = ADSmartPickup.getTargetFreeCapacity(adEnv, vehicle, fillType, false, targetId)
|
||||
if free ~= nil and free > bestFree and hasRouteTo(adEnv, vehicle, targetId) then
|
||||
local marker = adEnv.ADGraphManager.getMapMarkerByWayPointId ~= nil and adEnv.ADGraphManager:getMapMarkerByWayPointId(targetId) or nil
|
||||
best, bestFree = {id = targetId, name = marker ~= nil and marker.name or tostring(targetId)}, free
|
||||
end
|
||||
end
|
||||
end
|
||||
return best, bestFree
|
||||
end
|
||||
|
||||
local function startWaiting(adEnv, task)
|
||||
local vehicle = task.vehicle
|
||||
-- Kun "fremme ved målet". At AD stadig regner vognen som aflæssende (isActiveAtTrigger)
|
||||
@@ -157,6 +178,17 @@ local function startWaiting(adEnv, task)
|
||||
return
|
||||
end
|
||||
|
||||
-- Run med flere mål: resten køres til det af run'ets andre mål der har mest plads til varen,
|
||||
-- før der ventes (en 2,4M l-vogn kan ellers aldrig komme af med resten ved én svinesti)
|
||||
local other, otherFree = findOtherTargetForRest(adEnv, vehicle, fillType, target.id)
|
||||
if other ~= nil then
|
||||
vehicle.ad.stateModule:setSecondMarkerByWayPointId(other.id)
|
||||
redirect(task, other.id)
|
||||
Logging.info(ADUnloadWait.LOG_PREFIX .. "'%s': %s er fuld — resten (%.0f l %s) køres til %s (%.0f l fri)", tostring(ADRuns.vehicleLabel(vehicle)), tostring(target.name), rest,
|
||||
g_fillTypeManager ~= nil and tostring(g_fillTypeManager:getFillTypeNameByIndex(fillType)) or tostring(fillType), tostring(other.name), otherFree)
|
||||
return
|
||||
end
|
||||
|
||||
local isReachable = function(candidate)
|
||||
return hasRouteBothWays(adEnv, vehicle, candidate.marker.id, task.destinationID)
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user