fix(markarbejde): tom sprøjte/spreder/såmaskine fyldes af AutoDrive (LOAD) før marken; uden påfyldning med AD-markør sendes den ikke ud; Courseplay startes aldrig med tom tank (sprøjten kørte F108 tom) (v1.29.2.0)
This commit is contained in:
@@ -288,6 +288,27 @@ local function preflight(field, role)
|
||||
return true
|
||||
end
|
||||
|
||||
ADFieldWork.REFILL_ROLES = {seeder = true, fertilizer = true, limer = true, weeder = true}
|
||||
|
||||
local function fillTypeName(fillType)
|
||||
return g_fillTypeManager ~= nil and g_fillTypeManager:getFillTypeNameByIndex(fillType) or tostring(fillType)
|
||||
end
|
||||
|
||||
-- Før udsendelse: forkert vare af (kalk på, skal gøde), og er sættet tomt, findes påfyldningen.
|
||||
-- Returnerer {fillType, empty, refillId} eller nil (sættet bruger intet fyld: strigle, plov ...).
|
||||
local function refillPlan(adEnv, fieldId, vehicle, role, x, z)
|
||||
if not ADFieldWork.REFILL_ROLES[role] then return nil end
|
||||
local dumped, dumpedName = ADCpBridge.emptySprayerIfWrong(vehicle, role)
|
||||
if dumped > 0 then
|
||||
log(fieldId, "'%s' tømt for %.0f l %s (skal bruges til %s)", ADRuns.vehicleLabel(vehicle), dumped, tostring(dumpedName), tostring(role))
|
||||
end
|
||||
local fillType = ADCpBridge.getRefillFillType(vehicle, role)
|
||||
if fillType == nil then return nil end
|
||||
local empty = ADCpBridge.getRefillLevel(vehicle, fillType) <= 0
|
||||
local refillId = empty and ADFieldWork.findRefillMarker(adEnv, vehicle, fillType, x, z) or nil
|
||||
return {fillType = fillType, empty = empty, refillId = refillId}
|
||||
end
|
||||
|
||||
function ADFieldWork.dispatch(adEnv, field, info, decision)
|
||||
local role = decision.role
|
||||
local ok, reason = preflight(field, role)
|
||||
@@ -319,10 +340,24 @@ function ADFieldWork.dispatch(adEnv, field, info, decision)
|
||||
groupSize = decision.helper and 1 or count, lane = count > 1 and lanes[index] or nil, leader = index == 1,
|
||||
fillType = decision.helper and info.harvestFillType or nil,
|
||||
}
|
||||
local refill = refillPlan(adEnv, field.id, rig.vehicle, role, info.x, info.z)
|
||||
if refill ~= nil and refill.empty and refill.refillId == nil then
|
||||
-- tom og intet sted at fylde op: ud på marken ville den bare køre kurset uden at sprede
|
||||
fail(field.id, string.format("'%s' er tom for %s og der er ingen påfyldning med AutoDrive-markør — fyld den op", rig.label, fillTypeName(refill.fillType)))
|
||||
return
|
||||
end
|
||||
ADFieldJobs.state.assignments[rig.id] = assignment
|
||||
startAd(adEnv, rig.vehicle, adEnv.AutoDrive.MODE_DRIVETO, info.markerId, nil)
|
||||
log(field.id, "%s '%s' sendt til %s (%.1f m%s)", role, rig.label, tostring(info.markerName), rig.width or 0,
|
||||
assignment.lane ~= nil and string.format(", bane %d", assignment.lane) or "")
|
||||
if refill ~= nil and refill.empty then
|
||||
-- AutoDrive LOAD: påfyldningen (2. markør), fyld op, videre til F-markøren (1.) — så Courseplay
|
||||
startAd(adEnv, rig.vehicle, adEnv.AutoDrive.MODE_LOAD, info.markerId, refill.refillId)
|
||||
local marker = adEnv.ADGraphManager:getMapMarkerByWayPointId(refill.refillId)
|
||||
log(field.id, "%s '%s' er tom — fyldes med %s ved %s og kører så til %s", role, rig.label, fillTypeName(refill.fillType),
|
||||
tostring(marker ~= nil and marker.name or refill.refillId), tostring(info.markerName))
|
||||
else
|
||||
startAd(adEnv, rig.vehicle, adEnv.AutoDrive.MODE_DRIVETO, info.markerId, nil)
|
||||
log(field.id, "%s '%s' sendt til %s (%.1f m%s)", role, rig.label, tostring(info.markerName), rig.width or 0,
|
||||
assignment.lane ~= nil and string.format(", bane %d", assignment.lane) or "")
|
||||
end
|
||||
end
|
||||
note(field.id, {reason = false})
|
||||
end
|
||||
@@ -379,11 +414,6 @@ end
|
||||
-- og genstarter CP. Findes ingen påfyldning, stopper sættet når det er tomt ("tom for …", se finish).
|
||||
local function prepareRefill(adEnv, field, info, assignment)
|
||||
local vehicle = assignment.vehicle
|
||||
-- forkert vare på (kalk, skal gøde): tøm først, så AutoDrive fylder den rigtige på
|
||||
local dumped, dumpedName = ADCpBridge.emptySprayerIfWrong(vehicle, assignment.role)
|
||||
if dumped > 0 then
|
||||
log(field.id, "'%s' tømt for %.0f l %s (skal bruges til %s)", ADRuns.vehicleLabel(vehicle), dumped, tostring(dumpedName), tostring(assignment.role))
|
||||
end
|
||||
local fillType = ADCpBridge.getRefillFillType(vehicle, assignment.role)
|
||||
if fillType == nil then return end
|
||||
assignment.refillFillType = fillType
|
||||
@@ -514,6 +544,15 @@ end
|
||||
|
||||
local function beginWork(adEnv, field, info, assignment)
|
||||
local vehicle = assignment.vehicle
|
||||
-- aldrig Courseplay med tom tank (den kører kurset uden at sprede/så)
|
||||
if ADFieldWork.REFILL_ROLES[assignment.role] then
|
||||
local fillType = ADCpBridge.getRefillFillType(vehicle, assignment.role)
|
||||
if fillType ~= nil and ADCpBridge.getRefillLevel(vehicle, fillType) <= 0 then
|
||||
ADFieldWork.release(assignment)
|
||||
fail(field.id, string.format("'%s' er stadig tom for %s ved marken — fyld den op", ADRuns.vehicleLabel(vehicle), fillTypeName(fillType)))
|
||||
return
|
||||
end
|
||||
end
|
||||
if assignment.role == "unloader" then return beginUnloader(adEnv, field, info, assignment) end
|
||||
if assignment.role == "baleCollector" then return beginBaleCollector(adEnv, field, info, assignment) end
|
||||
-- høsteren: halmskår efter planen (hakkes = fra; samles op/presses = skår)
|
||||
|
||||
Reference in New Issue
Block a user