Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: Was für Zykluszeiten muß ich einstellen? An was kann es liegen? Kategorie: Programmierung C (von PeterS - 27.06.2008 8:53)
Als Antwort auf Was für Zykluszeiten muß ich einstellen? An was kann es liegen? von Markus - 27.06.2008 1:28

Hi,

was mir sofort auffällt:

1. Man startet die Threads nur einmal, die Endlosschleife kommt dahinter.
2. ThreadDelay wird in 10ms Schritten abgegeben: Ein Wert von 1000 wartet daher 10 Sekunden


Gruss Peter

> Hallo ,
>
>
> ich hab eine Regelung für eine Industriegeschierspülmaschine gebaut.
>
> Dazu habe ich zwei Programme geschrieben die in Multithreading zusammen arbeiten sollen.
>
> Das eine arbeitet das Spülprogramm ab.
> Gestartet wird es wenn eingeschaltet und die Tür geschlossen wird.
> 62 Sekunden waschen, 10 Sekunden abtropfen und 8 Sekunden. klarspülen
> Nach dem ansteuern der Aktoren versetze ich den Thread die entsprechenden Sekunden in den schlaf (Thread_Delay).
> Wenn die Tür geöffnet wird soll das Waschprogramm unterbrochen werden.(ISR)
>
> Das zweite Programm soll alle 5 Sekunden 2 Temperaturen erfassen und dementsprechend die Heizungen schalten.
> Die gemessenen Temperaturen werden über den  I2C Digital-analog Umsetzer (TDA8444) auf die beiden LED-Bargraf dargestellt
>
> Einzeln laufen beide Programme ohne Probleme.
> In Multithreading nicht richtig. Das Spülprogramm wird gar nicht abgearbeitet.
> Die Temperatur wir gemessen, wird aber falsch auf den LEDs ausgegeben.
>
> Was für Zykluszeiten mu� ich einstellen?
> An was kann es liegen?
> Sind  die ADC und I2C zugriffe die Ursache?
> Hat jemand eine Idee wie ich die ISR schreiben mu� wenn sie das Spülprogramm abbrechen soll wenn die Tür geöffnet wird.
> Springen ist ja nicht möglich!
>
> void main(void)
> {
>     while(true)                        
>     {
>      
>      Thread_Start(1,temp_thread)
>      Thread_Start(2,spuell_thread);
>     }                                  
> }
>
> void temp_thread(void)
> {
>  Variablen
>   while(1)
>   {
>    Thread_Lock(1);              Tread wechsel während AD wandeln unterbinden
>
>   ADC_Set(ADC_VREF_VCC,0);
>   ad_wert0=ADC_Read();
>   ADC_Set(ADC_VREF_VCC,1);
>   ad_wert1=ADC_Read();
>   ADC_Disable();
>   Thread_Lock(0);                
>  -------
> Auswerten von ad_wert 0 und 1  
> --------
> Thread_Lock(1);        LED bar über I2C ansteuern
>    I2C_Init(I2C_100kHz );
>    I2C_Start();                                
>    I2C_Write(0x40);                        
>    I2C_Write(0x00);                  
>    I2C_Write(adress0);   LED_BAR 1
>    I2C_Write(adress1);   LED_BAR  2
>    I2C_Stop();
> Thread_Lock(0);
>   }
> }
>
> void spuell_thread (void)
> {
> while(eingeschaltet?)
>   {
>      if(tür zu?)
>      {
>        Ventile ansteuern,Pumpen einschalten     waschen
>          
> Thread_Delay (62000);                               62 Sekunden spülen
>      
> Ventile schliessen,Pumpen ausschalten           abtropfen
>  
> Thread_Delay (10000);        10 Sekunden abtropfen
> Ventile öffnen, pumpen einschalten                    klarspülen
> Thread_Delay (8000);                     8 Sekunden klarspülen
>
> Ventile schliessen,Pumpen ausschalten..
> }}}
>
>
>


    Antwort schreiben


Antworten:

Re: Was für Zykluszeiten muß ich einstellen? An was kann es liegen? (von Markus - 27.06.2008 13:10)
    Re: Was für Zykluszeiten muß ich einstellen? An was kann es liegen? (von PeterS - 27.06.2008 15:04)