From 0c6ea21829fe4bb3fcd58d6792c493391f84a940 Mon Sep 17 00:00:00 2001 From: masterdraco Date: Wed, 23 Sep 2026 03:02:40 +0200 Subject: [PATCH] =?UTF-8?q?debug:=20diagnose-log=20ved=20m=C3=A5l=20med=20?= =?UTF-8?q?last=20(AD-afl=C3=A6sningstilstand,=20fri=20plads,=20dischargeS?= =?UTF-8?q?tate)=20(v1.11.11.0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FS25_ADSmartPickup/adUnloadWait.lua | 36 +++++++++++++++++++++++++++++ FS25_ADSmartPickup/modDesc.xml | 2 +- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/FS25_ADSmartPickup/adUnloadWait.lua b/FS25_ADSmartPickup/adUnloadWait.lua index d35d2d8..1bf1c0b 100644 --- a/FS25_ADSmartPickup/adUnloadWait.lua +++ b/FS25_ADSmartPickup/adUnloadWait.lua @@ -236,7 +236,43 @@ local function updateWaiting(adEnv, task, wait, dt) Logging.info(ADUnloadWait.LOG_PREFIX .. "'%s' kører tilbage fra %s og læsser %.0f l af (målet har %.0f l fri)", tostring(vehicle:getName()), tostring(wait.waitMarker.name), rest, free) end +-- Diagnose (midlertidig): mens en traktor holder ved sit mål med last, logges hvert 15. s hvad +-- AD ser — vognens indhold, målets fri plads, AD's aflæsningstilstand og vognens dischargeState. +ADUnloadWait.DEBUG_INTERVAL_MS = 15000 +local debugTimers = setmetatable({}, {__mode = "k"}) +local function debugAtTarget(adEnv, task, dt) + local vehicle = task.vehicle + local targetReached = vehicle.ad.drivePathModule:isTargetReached() + debugTimers[vehicle] = (debugTimers[vehicle] or ADUnloadWait.DEBUG_INTERVAL_MS) + (dt or 0) + if debugTimers[vehicle] < ADUnloadWait.DEBUG_INTERVAL_MS then + return + end + debugTimers[vehicle] = 0 + local fillType, rest = getRestLoad(adEnv, vehicle) + if fillType == nil or rest < ADUnloadWait.MIN_REST_LITERS then + return + end + local free, capacity = ADSmartPickup.getTargetFreeCapacity(adEnv, vehicle, fillType) + local trailerModule = vehicle.ad.trailerModule + local states = {} + for _, unit in ipairs(adEnv.AutoDrive.getAllDischargeableUnits(vehicle) or {}) do + local object = unit.object + local state = object ~= nil and object.getDischargeState ~= nil and object:getDischargeState() or "?" + local canDischarge = "?" + if object ~= nil and object.getCanDischargeToObject ~= nil and object.getCurrentDischargeNode ~= nil then + local ok, value = pcall(function() return object:getCanDischargeToObject(object:getCurrentDischargeNode()) end) + canDischarge = ok and tostring(value) or "err" + end + table.insert(states, string.format("dischargeState=%s canDischargeToObject=%s", tostring(state), canDischarge)) + end + local fillTypeName = g_fillTypeManager ~= nil and g_fillTypeManager:getFillTypeNameByIndex(fillType) or tostring(fillType) + local distance = adEnv.AutoDrive.getDistanceToUnloadPosition ~= nil and adEnv.AutoDrive.getDistanceToUnloadPosition(vehicle) or -1 + local secondMarker = vehicle.ad.stateModule.getSecondMarker ~= nil and vehicle.ad.stateModule:getSecondMarker() or nil + Logging.info(ADUnloadWait.LOG_PREFIX .. "DEBUG '%s': targetReached=%s taskDest=%s adMål=%s; %.0f l %s på vognen; målet fri=%s/kap=%s; AD isUnloading=%s isLoading=%s afstandTilAflæsning=%.1f; venter=%s; %s", tostring(vehicle:getName()), tostring(targetReached), tostring(task.destinationID), tostring(secondMarker ~= nil and secondMarker.id or nil), rest, tostring(fillTypeName), tostring(free), tostring(capacity), tostring(trailerModule ~= nil and trailerModule.isUnloading), tostring(trailerModule ~= nil and trailerModule.isLoading), tonumber(distance) or -1, tostring(waits[vehicle] ~= nil), table.concat(states, " | ")) +end + function ADUnloadWait.beforeUpdate(adEnv, task, dt) + pcall(debugAtTarget, adEnv, task, dt) local wait = waits[task.vehicle] if wait ~= nil then updateWaiting(adEnv, task, wait, dt) diff --git a/FS25_ADSmartPickup/modDesc.xml b/FS25_ADSmartPickup/modDesc.xml index 1742338..207f52f 100644 --- a/FS25_ADSmartPickup/modDesc.xml +++ b/FS25_ADSmartPickup/modDesc.xml @@ -1,7 +1,7 @@ masterdraco - 1.11.10.0 + 1.11.11.0 <en>AD Smart Pickup</en>