Krutmatning/beslutsalgoritmJobbar just nu på en ny beslutsalgoritm/beslutslogik.
Det grundläggande problemet med den nuvarande matningen är att den jobbar
intermitent. Först matar den. Då börjar bommen gunga, vilket får till följd att matningen pausar. När bommen lugnat ner sig återstartar matningen, vilket får bommen att börja gunga . . . Ju närmare laddvikten jag kommer, desto mindre bomrörelser accepteras.
Jag håller på att utforma en beslutsalgoritm med ”dynamisk krutmatning”. Den bygger på att jag kontinuerligt gör en
prognos över bommens balansposition. Avståndet mellan den
prognostiserade balanspositionen och
målpositionen sätter en grundhastighet. Ju större avstånd desto högre grundhastighet. Grundhastigheten justeras därefter utifrån olika olika mätvärden:
- Om bommen är på väg uppåt så minskas rotationshastigheten med 20%. Om den är på väg nedåt så ökar rotationshastigheten med 20%. Detta ger i genomsnitt samma matningshastighet men hjälper till att dämpa bommens rörelse.
- Om bommens svängning är kraftig så minskas också matningshastigheten. Ju mindre avståndet är mellan den prognostiserade balanspunkten och målpositionen, desto kraftigare ”straff”. Straffet står också i proportion till hur kraftig bommens rörelse är.
Jag tänker mig att matningen ska ha sex (6) grundlägen:1) Bommen har inte lyft och tidsgränsen för bulkload är ej uppnådd:Absolut högsta matningshastighet (till följd av latenser i systemet leder denna matningshastighet till överladdning om bommen lyfter).
stegmotorhastighet = bulk_load_speed2) Bommen har inte lyft men tidsgränsen för bulkload är uppnådd: Högsta möjliga matningshastighet utan risk för överladdning.
Stegmotorhastighet = high_load_speed3) Bommen har lyft men har ännu ej vänt nedåt (ingen maxpunkt finns):Bommen är fortfarande på väg uppåt. Bommens balanspunkt kan ej prognostiseras. Laddningen pausas.
stegmotorhastighet = 04) Bommen har lyft, maxpunkt finns, bommens beräknade balanspunkt understiger positionen för ”tricklemode”:Matningshastighet bestäms av en kontinuerlig funktion vars variabler är:
- bommens prognostiserade balanspunkt
- bommens rörelseriktning (upp/ner)
- bommens hastighet och acceleration
- differensen mellan bommens senaste min- och maxpunkt
stegmotorhastighet = variabel (roterande), successivt minskande5) Bommens beräknade balanspunkt överstiger positionen för ”tricklemode”, bommens faktiska position understiger målpositionen:Här upphör användandet av
bommens beräknade balanspunkt. Istället tillämpas bommens
faktiska position. Vidare så går krutmatningen över från
rotationsmatning till
vibrationsmatning (se tidigare inlägg). Även detta moment regleras med en kontinuerlig funktion. Vibrationshastigheten regleras steglöst beroende på bommens avstånd till målpositionen samt bommens rörelsehastighet. Endast mycket små och ”mjuka” bomrörelser accepteras (allt annat medför att krutmatningen pausas tills bommen är nästintill helt stilla). Ju närmare målvikten, desto lägre vibrationshastighet och snävare toleranser med avseende på tillåtna bomrörelser.
stegmotorhastighet = variabel (vibrerande), successivt minskande5) Bommens beräknade balanspunkt överstiger positionen för ”tricklemode”, bommens faktiska position är vid eller överstiger målpositionen:Matningen pausar. Är bommen stillastånde tillräckligt länge så är laddningen klar.
Stegmotorhastighet = 0Jag hoppas med detta förfarande både kunna
snabba upp laddcykeln och
öka precisionen. Metoden möjliggör en mer kontinuerlig krutmatning, då systemet inte behöver invänta att bommen stabiliseras för att fatta beslut. Grundtanken är att om laddningen är ”uppenbart långt ifrån färdig” så behöver beslut om matningshastighet inte fattas med någon större noggrannhet. Ju närmare ”målvikten” laddningen kommer, desto noggrannare/försiktigare måste matningen göras. En annan viktig del är att krutmatningen användas för att dämpa bommens rörelser.
Rent mjukvarumässigt så kommer den här ändringen att vara relativt komplicerad. Den berör flera klasser/komponenter och ändrar dessutom en del grundprinciper. Bland annat har stegmotorklassen inte längre 6 fasta rotationshastigheter utan istället en rotations-grundhastighet som kan ”justeras steglöst” samt en dito vibrations-grundhastighet. Därmed kan inte stegmotorklassen hämta de s.k. paustiderna från konfigurationsfilen. Istället fattar våg-objektet beslut om matningen (stop, paus, rotation inkl varv/minut, vibration inkl motsvarande varv/minut). Utifrån de besluten måste stegmotor-objektet själv kontinuerligt beräkna tillämpliga paustider. Med paustid avses här de de tidsintervall som stegmotorn är "stillastående i en fix position" (se tidigare inlägg).
Tankeverksamhet 2 timmar