feat(marker): halm efter høst — hakkes, samles op til silo eller presses til baller + ballesamler (CP BALE_FINDER); græsvalg også ved græs-mål
This commit is contained in:
@@ -166,6 +166,9 @@ end
|
||||
-- Hvilken vare markens trin fører til lager: skår (ensilage), tørskår (hø) eller høstet afgrøde.
|
||||
function ADFieldWork.storeFillType(field, info)
|
||||
if field.stage == "harvesting" then return info.harvestFillType end
|
||||
if field.stage == "strawCollecting" or field.stage == "baling" or field.stage == "baleCollecting" then
|
||||
return g_fillTypeManager:getFillTypeIndexByName("STRAW")
|
||||
end
|
||||
local product = ADFieldModel.product(field.plan, field.kind or info.kind)
|
||||
return product == "hay" and info.hay or info.windrow
|
||||
end
|
||||
@@ -202,11 +205,11 @@ local function coursesOf(fieldId)
|
||||
return ADFieldJobs.courses[fieldId]
|
||||
end
|
||||
|
||||
-- Kurset et trin skal genbruge ("mower"/"rake"): gemt kopi, ellers maskinens nuværende kursus.
|
||||
-- Kurset et trin skal genbruge ("mower"/"rake"/"harvester"): gemt kopi, ellers maskinens nuværende kursus.
|
||||
local function sourceCourse(adEnv, field, source)
|
||||
local saved = coursesOf(field.id)[source]
|
||||
if saved ~= nil then return saved end
|
||||
local vehicleId = source == "rake" and field.rakeVehicleId or field.mowVehicleId
|
||||
local vehicleId = source == "rake" and field.rakeVehicleId or source == "harvester" and field.harvestVehicleId or field.mowVehicleId
|
||||
if vehicleId == nil then return nil end
|
||||
for _, vehicle in ipairs(ADRunsController.getFarmVehicles(adEnv)) do
|
||||
if ADRunsController.getVehicleId(vehicle) == vehicleId then return ADCpBridge.getCourse(vehicle) end
|
||||
@@ -435,6 +438,51 @@ local function beginUnloader(adEnv, field, info, assignment)
|
||||
assignment.handle = handle
|
||||
end
|
||||
|
||||
-- Ballesamler: Courseplays ballefinder; fuld vogn tømmes af AutoDrive i nærmeste ballelager (palleskur der
|
||||
-- tager halmballer), som læssevognen. Uden lager stopper den når den er fuld.
|
||||
local function beginBaleCollector(adEnv, field, info, assignment)
|
||||
local vehicle = assignment.vehicle
|
||||
local farmId = vehicle:getOwnerFarmId()
|
||||
local straw = g_fillTypeManager:getFillTypeIndexByName("STRAW")
|
||||
local isReachable = function(markerId) return ADUnloadWait.hasRouteTo(adEnv, vehicle, markerId) end
|
||||
local store = ADSources.findPalletStore(adEnv, vehicle, straw, nil, isReachable, farmId)
|
||||
if store ~= nil then
|
||||
pcall(function()
|
||||
local module = stateModule(vehicle)
|
||||
module:setMode(adEnv.AutoDrive.MODE_PICKUPANDDELIVER)
|
||||
module:setFirstMarkerByWayPointId(info.markerId)
|
||||
module:setSecondMarkerByWayPointId(store.wayPointId)
|
||||
module:setStartHelper(true)
|
||||
module.usedHelper = helperCp(adEnv)
|
||||
enableParkAtJobFinished(vehicle)
|
||||
module:raiseDirtyFlag()
|
||||
end)
|
||||
assignment.adHandlesEnd = true
|
||||
log(field.id, "ballesamler '%s' kører fulde læs til %s", ADRuns.vehicleLabel(vehicle), tostring(store.name))
|
||||
else
|
||||
log(field.id, "intet ballelager med plads og vej fundet — ballesamleren stopper når den er fuld")
|
||||
end
|
||||
local point = info.points[1] or {x = info.x, z = info.z}
|
||||
assignment.phase = "starting"
|
||||
assignment.since = now()
|
||||
local handle, err = ADCpBridge.startBaleFinder(vehicle, point.x, point.z, function(ok, reason)
|
||||
if ok then
|
||||
assignment.phase = "working"
|
||||
assignment.since = now()
|
||||
log(field.id, "Courseplay startet (ballesamler)")
|
||||
else
|
||||
ADFieldWork.release(assignment)
|
||||
fail(field.id, "ballesamler: " .. tostring(reason))
|
||||
end
|
||||
end)
|
||||
if handle == nil then
|
||||
ADFieldWork.release(assignment)
|
||||
fail(field.id, "ballesamler: " .. tostring(err))
|
||||
return
|
||||
end
|
||||
assignment.handle = handle
|
||||
end
|
||||
|
||||
-- Multi-tool: følgere venter på lederens kursus for trinnet og kopierer det med deres bane.
|
||||
local function courseOptions(adEnv, field, assignment)
|
||||
local source = ADFieldModel.courseSource(field, assignment.role)
|
||||
@@ -459,6 +507,12 @@ end
|
||||
local function beginWork(adEnv, field, info, assignment)
|
||||
local vehicle = assignment.vehicle
|
||||
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)
|
||||
if assignment.role == "harvester" then
|
||||
local keepStraw = field.plan.straw == "collect" or field.plan.straw == "bale"
|
||||
ADCpBridge.setStrawSwath(vehicle, keepStraw)
|
||||
end
|
||||
local opts, source = courseOptions(adEnv, field, assignment)
|
||||
if opts == nil then
|
||||
-- følger uden lederens kursus endnu
|
||||
@@ -504,6 +558,9 @@ local function beginWork(adEnv, field, info, assignment)
|
||||
elseif assignment.role == "rake" then
|
||||
note(field.id, {rakeVehicleId = assignment.vehicleId})
|
||||
rememberCourse(field, "rake", vehicle)
|
||||
elseif assignment.role == "harvester" then
|
||||
note(field.id, {harvestVehicleId = assignment.vehicleId})
|
||||
rememberCourse(field, "harvester", vehicle)
|
||||
end
|
||||
if assignment.leader and (assignment.groupSize or 1) > 1 then
|
||||
rememberCourse(field, field.stage, vehicle)
|
||||
|
||||
Reference in New Issue
Block a user