Forigo / Mbed 2 deprecated FORIGO_Modula_V7_3_VdcStep_DICEMBRE2020

Dependencies:   mbed X_NUCLEO_IHM03A1_for

Committer:
francescopistone
Date:
Mon Jun 06 08:21:47 2022 +0000
Revision:
51:51b5498e00c5
Parent:
50:144a92eeddb9
versione fotocellula testata

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nerit 3:a469bbd294b5 1 /*
nerit 3:a469bbd294b5 2 variabili generali di programma e set iniziali
nerit 3:a469bbd294b5 3 */
nerit 3:a469bbd294b5 4
nerit 34:eb04f4f41dfd 5 uint32_t ildato=0;
nerit 50:144a92eeddb9 6 uint32_t holdInSpeed=0;
nerit 50:144a92eeddb9 7 uint32_t holdInDc=0;
nerit 50:144a92eeddb9 8 uint32_t holdInSD=0;
nerit 50:144a92eeddb9 9 uint32_t holdInTB=0;
nerit 3:a469bbd294b5 10 // SET INIZIALI DI MACCHINA
nerit 3:a469bbd294b5 11 bool canDataCheckEnable=false; // a true per attivare il controllo del quinconce anche con dati CAN
nerit 24:2b5e749e26b2 12 int speedFromPick = 1; // definisce se il controllo di velocità della ruota di semina è gestita dai becchi (set a 1) o dai fori sul disco (set a 0)
nerit 8:310f9e4eac7b 13 bool encoder=true; // true quando montato motore DC con encoder incorporato
nerit 3:a469bbd294b5 14 // NOTA: SE ENCODER=TRUE ALLORA SPEEDFROMPICK DEVE ESSERE MESSO A 0
nerit 3:a469bbd294b5 15 int tamburoStandard=1; // a 1 per tamburo parallelo alla ruota di semina, a 0 per zucca
nerit 3:a469bbd294b5 16 int cambiaStep=0;
nerit 31:92a9e183be8e 17 int oldTractStop=0;
nerit 32:cfc3d7420fa5 18 bool tagliaNylonAttivo=false;
nerit 33:81b406a911b6 19 bool oldTagliaNylon=false;
nerit 3:a469bbd294b5 20
nerit 3:a469bbd294b5 21 bool tankLevelEnable = false;
nerit 3:a469bbd294b5 22 bool seedSensorEnable=false;
nerit 29:25a875d09817 23 bool drumSelect=false; /// forzato a true per Germania
nerit 3:a469bbd294b5 24 bool currentCheckEnable=false;
nerit 3:a469bbd294b5 25 uint8_t cellsCountSet=1;
nerit 28:0534c86365ec 26 //int aspettareSincro=0;
nerit 28:0534c86365ec 27 //int tbFermo=0;
nerit 3:a469bbd294b5 28
nerit 3:a469bbd294b5 29 // VARIABILI DI PROGRAMMA
nerit 3:a469bbd294b5 30 int zeroRequestBuf=0;
nerit 3:a469bbd294b5 31 int runRequestBuf=0;
nerit 3:a469bbd294b5 32
nerit 3:a469bbd294b5 33 // define cycle variable related to the external command
nerit 3:a469bbd294b5 34 int oldTractorSpeedRead=0;
nerit 3:a469bbd294b5 35 int startCycle=0; // activate motors and functions
nerit 3:a469bbd294b5 36 int enableCycle=0; // enable regular cycle
nerit 3:a469bbd294b5 37 int zeroCycle=0; // azzeramento motori richiesto
nerit 3:a469bbd294b5 38 int OldStartCycle=0; // use for triggering command change
nerit 3:a469bbd294b5 39 int OldEnableCycle=0;
nerit 3:a469bbd294b5 40 int oldZeroCycle=0; // memoria azzeramento motori su richiesta
nerit 3:a469bbd294b5 41 int zeroCycleEnd=0; // ciclo di azzeramento completato
nerit 3:a469bbd294b5 42 int zeroTrigger=0;
nerit 3:a469bbd294b5 43 int TBzeroPinInput=0; // segnale invertito micro tamburo
nerit 3:a469bbd294b5 44 int seedWheelZeroPinInput=0; // segnale invertito sensore ruota di semina
nerit 3:a469bbd294b5 45 int SD_faultA=0;
nerit 3:a469bbd294b5 46 int SD_faultB=0;
nerit 3:a469bbd294b5 47 int DC_brake=1; // comando gestione frenatura motore DC
nerit 3:a469bbd294b5 48 int DC_forward=1; // comando gestione direzione motore DC
nerit 3:a469bbd294b5 49
nerit 3:a469bbd294b5 50 int oldFaseLavoro=0;
nerit 3:a469bbd294b5 51
nerit 3:a469bbd294b5 52 // define logic internal variables
nerit 3:a469bbd294b5 53 double tractorSpeed_MtS_timed=0.0f; // tractor speed calculated from pulse interval time
nerit 10:9e70619e97ab 54 double oldLocalTractorSpeed=0.0f;
nerit 3:a469bbd294b5 55 double speedForDisplay[5]={0.0f,0.0f,0.0f,0.0f,0.0f};
nerit 3:a469bbd294b5 56 double totalSpeed=0.0f;
nerit 3:a469bbd294b5 57 double OLDpulseSpeedInterval=1000.01f; // tractor speed calculated from pulse interval time
nerit 3:a469bbd294b5 58 double pulseDistance=0.0f; // linear space between pulse
nerit 3:a469bbd294b5 59 double pulseDistanceCalc=0.0f;
nerit 3:a469bbd294b5 60 double speedPerimeter=0.0f; // perimeter of tractor speed wheel
nerit 3:a469bbd294b5 61 double seedPerimeter=0.0f; // perimeter of seed wheel
nerit 3:a469bbd294b5 62 double mediaSpeed[5]={0.0f,0.0f,0.0f,0.0f,0.0f};
nerit 3:a469bbd294b5 63 int pntMedia=0;
nerit 3:a469bbd294b5 64 int actualPulseReadTimer=0; // timer read at previous pulse
nerit 3:a469bbd294b5 65 double pulseSpeedInterval=0.0f; // delta time of pulse
nerit 3:a469bbd294b5 66 int lastPulseRead=0;
nerit 3:a469bbd294b5 67 int oldLastPulseRead=0;
nerit 3:a469bbd294b5 68 int pulseRised=0; // pulse from speed wheel occured. Define when is possible to determine speed of up down motor.
nerit 3:a469bbd294b5 69 int pulseRised1 = 0;
nerit 3:a469bbd294b5 70 int pulseRised2 = 0;
nerit 13:d1030d4e51a8 71 int dcEncoderCnt=0;
nerit 13:d1030d4e51a8 72 double seedWheelDcPulse=0.0f;
nerit 13:d1030d4e51a8 73 double frazioneImpulsi=0.0f;
nerit 3:a469bbd294b5 74
nerit 3:a469bbd294b5 75 double rapportoRuote = 0.0f;
nerit 3:a469bbd294b5 76 double TBrpm = 0.0f;
nerit 3:a469bbd294b5 77 double TBfrequency = 0.0f;
nerit 3:a469bbd294b5 78 double TBperiod = 0.0f;
nerit 3:a469bbd294b5 79 double oldPeriodoTB = 0.0f;
nerit 3:a469bbd294b5 80 int SDzeroCyclePulse=0;
nerit 3:a469bbd294b5 81 int TBzeroCyclePulse=0;
nerit 3:a469bbd294b5 82 int SDzeroed=0;
nerit 3:a469bbd294b5 83 int TBzeroed=0;
nerit 3:a469bbd294b5 84 int oldOnSDzero=0;
nerit 3:a469bbd294b5 85 int oldOnTBzero=0;
nerit 3:a469bbd294b5 86 int oldOffSDzero=0;
nerit 3:a469bbd294b5 87 int oldOffTBzero=0;
nerit 3:a469bbd294b5 88 int SDzeroPinTrig=0;
nerit 3:a469bbd294b5 89 int TBzeroPinTrig=0;
nerit 3:a469bbd294b5 90 int SDzeroDebounced=0;
nerit 3:a469bbd294b5 91 int SDrunZero=0;
nerit 3:a469bbd294b5 92 int TBrunZero=0;
nerit 3:a469bbd294b5 93 int syncroCheck=0;
nerit 3:a469bbd294b5 94 double memoStepTB=0.0f;
nerit 3:a469bbd294b5 95 double erroreSyncro=0.0f;
nerit 3:a469bbd294b5 96 double errorePercentuale=1.0f;
nerit 3:a469bbd294b5 97 int oldSeedWheelZeroPinInput=0;
nerit 3:a469bbd294b5 98 int oldTBzeroPinInput=0;
nerit 3:a469bbd294b5 99 int stopCicloTB = 0;
nerit 3:a469bbd294b5 100 int startCicloTB = 0;
nerit 3:a469bbd294b5 101 int cicloTbinCorso = 0;
nerit 3:a469bbd294b5 102 int beccoPronto =0;
nerit 3:a469bbd294b5 103 int memoIntraPick=0;
nerit 3:a469bbd294b5 104
nerit 3:a469bbd294b5 105 double realGiroSD = 0.0f;
nerit 3:a469bbd294b5 106 double tempoBecco = 0.0f;
nerit 3:a469bbd294b5 107 double frequenzaReale = 0.0f;
nerit 3:a469bbd294b5 108 double semiPeriodoReale = 0.0f;
nerit 3:a469bbd294b5 109 double tempoTraBecchi_mS = 0.0f;
nerit 3:a469bbd294b5 110 double tempoGiroSD = 0.0f;
nerit 3:a469bbd294b5 111
nerit 3:a469bbd294b5 112 // variable for speed and step calculation
nerit 3:a469bbd294b5 113 uint32_t prePosSD=0; // actual position of seed wheel (step of motor)
nerit 3:a469bbd294b5 114 uint32_t SDactualPosition=0; // actual position of seed wheel (step of motor)
nerit 3:a469bbd294b5 115 uint32_t TBactualPosition=0;
nerit 3:a469bbd294b5 116 uint32_t TBpassPosition=0;
nerit 3:a469bbd294b5 117 uint32_t TBoldPosition=0;
nerit 3:a469bbd294b5 118 uint32_t posForQuinc=0;
nerit 3:a469bbd294b5 119
nerit 3:a469bbd294b5 120 int cycleStopRequest=0; // when cycle end request the zero of SD and UD
nerit 3:a469bbd294b5 121
nerit 3:a469bbd294b5 122 double duty_DC=0.0f;
nerit 3:a469bbd294b5 123 double oldDuty_DC=0.0f;
nerit 3:a469bbd294b5 124
nerit 3:a469bbd294b5 125 double dcActualDuty = 0.0f; // valore di lavoro del duty cycle
nerit 3:a469bbd294b5 126 double olddcActualDuty = 0.0f; // valore di lavoro del duty cycle
nerit 3:a469bbd294b5 127 double correzione = 0.0f;
nerit 3:a469bbd294b5 128 double periodo =0.0f;
nerit 3:a469bbd294b5 129 double ePpos = 0.0f;
nerit 3:a469bbd294b5 130 int aspettaStart=1;
nerit 3:a469bbd294b5 131 int countCicli=0;
nerit 3:a469bbd294b5 132 uint32_t fase = 0;
nerit 14:e2b5efa06c41 133 double loLimitSpeed=0.01f;
nerit 14:e2b5efa06c41 134 double hiLimitSpeed=0.01f;
nerit 3:a469bbd294b5 135
nerit 3:a469bbd294b5 136 int clocca=0;
nerit 3:a469bbd294b5 137 int enableSpeed=0;
nerit 3:a469bbd294b5 138 double speedOfSeedWheel =0.0f;
nerit 3:a469bbd294b5 139 int lowSpeed = 0;
nerit 3:a469bbd294b5 140 double valore=0.0f;
nerit 3:a469bbd294b5 141 //char val1[8]={0,0,0,0,0,0,0,0};
nerit 3:a469bbd294b5 142
nerit 3:a469bbd294b5 143 uint8_t enableSimula=0;
nerit 3:a469bbd294b5 144 uint8_t speedSimula=0;
nerit 3:a469bbd294b5 145 uint8_t avviaSimula=0;
nerit 3:a469bbd294b5 146 double oldSimulaSpeed=0.0f;
nerit 3:a469bbd294b5 147 int selezionato =0;
nerit 3:a469bbd294b5 148 int simOk=0;
nerit 20:4a400a4cc419 149 uint8_t speedStepp=0;
nerit 20:4a400a4cc419 150 int simStepper=0;
nerit 20:4a400a4cc419 151 bool oldSimStepper=false;
nerit 20:4a400a4cc419 152 double simStepSpeed=0.0f;
nerit 20:4a400a4cc419 153 double oldSimStepSpeed=0.1f;
nerit 3:a469bbd294b5 154
nerit 12:b0fc1d313813 155 int correggiCorrente=0;
nerit 3:a469bbd294b5 156 float SD_CurrentAnalog=0.0f; // valore di corrente sull'ingresso
nerit 3:a469bbd294b5 157 float SD_CurrentScaled=0.0f; // valore di corrente convertito in scala
nerit 3:a469bbd294b5 158 float SD_CurrentFactor=40.0f; // fattore di scala sensore 40mV/A
nerit 3:a469bbd294b5 159 float SD_CurrentPeak=0.0f; // valore massimo corrente
nerit 3:a469bbd294b5 160 float SD_CurrentMid=0.0f; // valore medio corrente
nerit 3:a469bbd294b5 161 float SD_CurrentLast=0.0f; // valore precedente corrente
nerit 3:a469bbd294b5 162 float SD_CurrentStart=0.0f; // valore a vuoto corrente (circa il 50% della tensione di alimentazione del sensore)
nerit 3:a469bbd294b5 163 bool reduceCurrent=false;
nerit 3:a469bbd294b5 164 bool incrementCurrent=false;
nerit 3:a469bbd294b5 165 double boostDcOut=0.0f;
nerit 3:a469bbd294b5 166
nerit 3:a469bbd294b5 167 float SD_analogMatrix[21]={0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f};
nerit 3:a469bbd294b5 168 int SD_analogIndex[11]={0,0,0,0,0,0,0,0,0,0};
nerit 3:a469bbd294b5 169 int frenata=0;
nerit 3:a469bbd294b5 170 int accensione=1;
nerit 3:a469bbd294b5 171 double SDsectorStep =0.0f;
nerit 3:a469bbd294b5 172 double TBsectorStep = 0.0f;
nerit 3:a469bbd294b5 173 double KcorT = 0.0f;
nerit 3:a469bbd294b5 174
nerit 3:a469bbd294b5 175 int trigSD=0;
nerit 3:a469bbd294b5 176 int trigTB=0;
nerit 3:a469bbd294b5 177 int inhibit=0;
nerit 3:a469bbd294b5 178 int trigCicli=0;
nerit 3:a469bbd294b5 179 int avvicinamento=0;
nerit 3:a469bbd294b5 180 int lowSpeedRequired=0;
nerit 3:a469bbd294b5 181
nerit 3:a469bbd294b5 182 uint8_t alarmHighRegister=0x00;
nerit 3:a469bbd294b5 183 uint8_t alarmLowRegister=0x00;
nerit 3:a469bbd294b5 184 double TBgiroStep=0.0f;
nerit 3:a469bbd294b5 185 int firstStart=1;
nerit 3:a469bbd294b5 186 int noSDzeroRequest=0;
nerit 3:a469bbd294b5 187 int timeHole=0;
nerit 10:9e70619e97ab 188 double memoTimeHole=0;
nerit 3:a469bbd294b5 189 int lockStart=0;
nerit 31:92a9e183be8e 190 bool alarmEnable=false;
nerit 3:a469bbd294b5 191
nerit 3:a469bbd294b5 192 uint8_t quincStart=0;
nerit 3:a469bbd294b5 193 uint8_t oldQuincIn=0;
nerit 3:a469bbd294b5 194 double scostamento = 0.0f;
nerit 3:a469bbd294b5 195 uint8_t quincEnable=0;
nerit 3:a469bbd294b5 196 uint8_t quincCnt=0;
nerit 3:a469bbd294b5 197 double percento=0.0f;
nerit 3:a469bbd294b5 198 uint32_t masterSinc=0;
nerit 3:a469bbd294b5 199 uint32_t mast2_Sinc=0;
nerit 3:a469bbd294b5 200 bool quincClock=false;
nerit 3:a469bbd294b5 201 double oldQuincTimeSD=0.0f;
nerit 3:a469bbd294b5 202 uint8_t sincroQui=0;
nerit 3:a469bbd294b5 203 uint8_t quincPIDminus=0;
nerit 3:a469bbd294b5 204 uint8_t quincPIDplus=0;
nerit 3:a469bbd294b5 205 uint8_t quincLIMminus=0;
nerit 3:a469bbd294b5 206 uint8_t quincLIMplus=0;
nerit 3:a469bbd294b5 207 double memoCorrCorr=0.0f;
nerit 3:a469bbd294b5 208 double speedFromMaster=0.0f;
nerit 3:a469bbd294b5 209 uint8_t quincSector=0;
nerit 3:a469bbd294b5 210 uint8_t canDataCheck=0;
nerit 3:a469bbd294b5 211 double tempoBecchiPerQuinc=0.0f;
nerit 3:a469bbd294b5 212 int countPicks=0;
nerit 3:a469bbd294b5 213 uint8_t quinconceActive=0;
nerit 3:a469bbd294b5 214 uint8_t oldQuinconceOut=0;
nerit 3:a469bbd294b5 215
nerit 3:a469bbd294b5 216 double stepGrado = 0.0f;
nerit 3:a469bbd294b5 217 double TBfaseStep =0.0f;
nerit 19:231b8931cabc 218 double angoloPh=22.0f;
nerit 19:231b8931cabc 219 double angoloAv=4.0f;
nerit 3:a469bbd294b5 220
nerit 3:a469bbd294b5 221 uint8_t checkSDrotation=0;
nerit 3:a469bbd294b5 222 uint8_t comandiDaCan=0;
nerit 3:a469bbd294b5 223 uint8_t azzeraDaCan=0;
nerit 3:a469bbd294b5 224 uint8_t loadDaCan=0;
nerit 3:a469bbd294b5 225 uint8_t loadDaCanInCorso=0;
nerit 3:a469bbd294b5 226 uint8_t cntCellsForLoad=0;
nerit 3:a469bbd294b5 227 uint8_t trigRepos=0;
nerit 3:a469bbd294b5 228 uint8_t forzaFase=0;
nerit 3:a469bbd294b5 229 uint8_t erroreTamburo=0;
nerit 3:a469bbd294b5 230 uint8_t cntCellsForReload=0;
nerit 3:a469bbd294b5 231 uint8_t cntTbError=0;
nerit 3:a469bbd294b5 232
nerit 3:a469bbd294b5 233 uint8_t cellsCounterLow=0;
nerit 3:a469bbd294b5 234 uint8_t cellsCounterHig=0;
nerit 3:a469bbd294b5 235 uint8_t pickCounterLow=0;
nerit 3:a469bbd294b5 236 uint8_t pickCounterHig=0;
nerit 3:a469bbd294b5 237 uint8_t seedSee=0;
nerit 3:a469bbd294b5 238
francescopistone 51:51b5498e00c5 239 uint32_t seed_counter=0;
francescopistone 51:51b5498e00c5 240
nerit 3:a469bbd294b5 241 uint8_t cntCellsCorrect=0;
nerit 10:9e70619e97ab 242 uint8_t cntSpeedError=0;
nerit 3:a469bbd294b5 243
nerit 3:a469bbd294b5 244 uint8_t all_semiFiniti = 0; // semi finiti (generato dal relativo sensore)
nerit 3:a469bbd294b5 245 uint8_t all_pickSignal = 0; // errore segnale becchi (generato dal tempo tra un becco ed il successivo)
nerit 3:a469bbd294b5 246 uint8_t all_cellSignal = 0; // errore segnale celle (generato dal sensore tamburo )
nerit 3:a469bbd294b5 247 uint8_t all_lowBattery = 0; // allarme batteria (valore interno di tritecnica)
nerit 3:a469bbd294b5 248 uint8_t all_overCurrDC = 0; // sovracorrente motore DC (generato dal sensore di corrente)
nerit 3:a469bbd294b5 249 uint8_t all_stopSistem = 0; // sistema in stop (a tempo con ruota ferma)
nerit 3:a469bbd294b5 250 uint8_t all_upElements = 0; // elementi sollevati (generato dal relativo sensore)
nerit 3:a469bbd294b5 251 uint8_t all_noSeedOnCe = 0; // fallanza di semina (manca il seme nella cella)
nerit 3:a469bbd294b5 252 uint8_t all_cfgnErrors = 0; // errore di configurazione (incongruenza dei parametri impostati)
nerit 3:a469bbd294b5 253 uint8_t all_noDcRotati = 0; // ruota di semina bloccata (arriva la velocità ma non i becchi)
nerit 3:a469bbd294b5 254 uint8_t all_noStepRota = 0; // tamburo di semina bloccato (comando il tamburo ma non ricevo il sensore)
nerit 3:a469bbd294b5 255 uint8_t all_speedError = 0; // errore sensore velocità (tempo impulsi non costante)
nerit 3:a469bbd294b5 256 uint8_t all_noSpeedSen = 0; // mancanza segnale di velocità (sento i becchi ma non la velocita)
nerit 3:a469bbd294b5 257 uint8_t all_no_Zeroing = 0; // mancato azzeramento sistema (generato dal timeout del comando motore DC)
nerit 3:a469bbd294b5 258 uint8_t all_genericals = 0; // allarme generico
nerit 3:a469bbd294b5 259 uint8_t resetComandi=0;
nerit 3:a469bbd294b5 260
nerit 3:a469bbd294b5 261 //uint32_t spazioCoperto=0;