Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Kann mir jemand das in C für die Keil-IDE übersetzen? Kategorie: Programmierung (von Erich - 27.06.2006 11:25)
Ich nutze:
C-Control II Unit, CC2-Application-Board, OSOPT V3.0




//------------
  thread main
//------------
{


  ports.getcount(3);
  ports.getcount(1);
  ports.getcount(2);
  lcdext.init();



/*-------------------------------------------------------------------------

Index 0 bezieht sich auf aufwickelnden Motor
Index 1 bezieht sich auf Faser-lenkenden Motor
Index 2 bezieht sich auf abwickelnden Motor


a, b und c werden noch festgelegt
-------------------------------------------------------------------------*/



  int
  timPer,
  RAbstand, TrommelBreite, VWickel, LWickel,
  Hoehe[3],
  tTor,
  Puls0[3], Puls1[3], Puls2[3],
  TrommelAbstand, Trommelbreite, counter, count1, count2, boolturn, turncount, ok, stopp, temp;

  float
   a, b, c, FD, increment, decrement;

  long
  timerPuls, timerTor, tA, tAvgl, laenge, Lagen, laengencount, lagencount,
  port0cnt[3], port1cnt[3], port2cnt[3];

  string s;


  ports.getcount(1);
  ports.getcount(2);
  ports.getcount(3);

  ports.deact(8);
  ports.deact(9);
  ports.deact(10);
  ports.deact(11);
  ports.deact(12);

  boolturn = 0;
  increment = 0;
  decrement = 1;

  timPer = 3000;
  plm.setperiod(0, timPer);
  plm.setperiod(1, timPer);
  plm.setperiod(2, timPer);

  counter = 0;
  count1 = 0;
  count2 = 0;
  turncount = 0;
  a = 2; b = 1; c = 1;

  port1cnt = 0;
  port2cnt = 0;

  loop
  {
    plm.out(1,0);
    if ports.get(12) != 0
      break;
  }

  plm.out(1, 1500);

  plm.out(0, 0);
  plm.out(2, 0);

  Puls1[0] = 1500; Puls1[1] = 1500; Puls1[2] = 1500;
  Puls0[0] = 0;  Puls0[1] = 0;  Puls0[2] = 0;
  Puls2[0] = 0;  Puls2[1] = 0;  Puls2[2] = 0;

  lagencount = 0;
  laengencount = 0;

  timerPuls = system.timer();
  tAvgl = system.timer();
  timerTor = system.timer ();

  tTor = 1500;
  tA = 500; // Abtastzeit

  ok = 0;

  loop
  {
     if (ok == 1)
       break;

     laenge = 0;
     s = "Laenge dm?";
     lcdext.goto(1, 0);
     lcdext.print(s);
     laenge = 50*keyboardmod.getvalue(2,0);
     lcdext.clear();

     Lagen = 0;
     if laenge == 0
     {
       s = "Lagen";
       lcdext.goto(1, 0);
       lcdext.print(s);
       Lagen = keyboardmod.getvalue(2,0);
       lcdext.clear();
     }

     TrommelAbstand = 0;
     while(1==1)
     {
       if (TrommelAbstand != 0)
         break;

       s = "TrAbst mm";
       lcdext.goto(1, 0);
       lcdext.print(s);
       TrommelAbstand = 125*(keyboardmod.getvalue(2,0)- 28);
       lcdext.clear();
     }

     Trommelbreite = 0;
     loop
     {
       if (Trommelbreite != 0)
         break;
       s = "TrBreit mm";
       lcdext.goto(1, 0);
       lcdext.print(s);
       TrommelBreite = TrommelAbstand + 125*keyboardmod.getvalue(2,0);
       lcdext.clear();
     }

     FD = 0;
     loop
     {
       if (FD != 0)
         break;
       s = "Faserd. in um?";
       lcdext.goto(1, 0);
       lcdext.print(s);
       FD = keyboardmod.getvalue(2,0)/4000;
       lcdext.clear();
     }

     s = "1 = ok";
     lcdext.goto(1, 0);
     lcdext.print(s);
     ok = keyboardmod.getvalue(2,0);
     lcdext.clear();
  }
 
  counter = ports.getcount(2);

// Wickelführung: Position anfahren
  temp = 0;
//  while temp < TrommelAbstand
  loop
  {
    temp = temp + ports.getcount(1);
    plm.out(1, 2300);
    if temp >= TrommelAbstand
      break;
  }

  plm.out(1, 1500);

//Zähler auf Null setzen


  stopp = 0;

//  while stopp == 0;
  loop
  {
    if (stopp != 0)
      break;
//Abbruchbedinungen:
    if ((Hoehe[0] < 100) and (increment == 1))
    or ((Lagen != 0) and (lagencount == Lagen))
    or ((laenge != 0) and (laenge <= counter))
      stopp = 1;


//Steuerung der gebenden Trommel abhängig von der Höhe des Abstandsmessers

    if ((system.timer()-tA) >= tAvgl);
    {
      Hoehe[0] = ports.adc(0) - 500;
        //500 wird etwa die Mitte sein... also das Soll
// Achtung! Hier umgekehrt verfahren!!!! bei steigender Höhe Puls erhöhen!
// ==> + Hoehe[0] und - den Rest!
      Puls2[0] = Puls2[2] + a*Hoehe[0] - b*Hoehe[1] - c*Hoehe[2];
//--------------------------
/* hier Regelalgorithmus für die Kraft (PID)
 als Basis wird diese digitale Ã?bertragungsfunktion verwendet:

 v[k] = v[k-2] - a*u[k] + b*u[k-1] + c*u[k-2]

 wobei a = (R1*R2*C1*C2 + 2*R1*C1*tA + 2*R2*C2*tA)/(2*R0*C2*tA)
       b = (R1*R2*C1*C2)/(2*R0*C2*tA)
       c = (4*R1*R2*C1*C2 - 2*R1*C1*tA - 2*R2*C2*tA)/(2*R0*C2*tA)
 die Schaltung, aus der ich diese Algorithmen per bilinearer/Tustin-
 Transformation zusammengestöpselt habe, sind auf dem Link ganz unten zu ersehen
 */

//--------------------------
//Achtung: Reihenfolge



      Hoehe[2] = Hoehe[1];
      Hoehe[1] = Hoehe[0];
      tAvgl = system.timer();
      plm.out(2, Puls2[0]);
    }
// Abtasten - Encoder der "Zugtrommel". Steuerung der Wickelführung
// abhängig von der Faserstärke. Vergleich mit Encoderwert der Wickelführung
    if ((system.timer()-tTor) >= timerTor);
    {
      port0cnt[0] = ports.getcount(3)/51;
      count1 = ports.getcount(1)/128;
      if boolturn == 0
        turncount = turncount + count1;
      if boolturn == 1
        turncount = turncount - count1;
      port1cnt[0] = count1 - port0cnt[0] * (FD);// *x/y nicht vergessen!!!!!
// p1i soll p0i*x/y ... FD ist die Faserstärke, "4" die Schneckensteigung -
// also das Umdrehungsverhältnis
      Puls1[0] = Puls1[2] - a*port1cnt[0] + b*port1cnt[1] + c*port1cnt[2];

      if (Puls1[0] > 100)
        Puls1[0] = 100;
//--------------------------
// hier "standard"Regelalgorithmus (PID)
//--------------------------
//Achtung: Reihenfolge!
      Puls1[2] = Puls1[1];
      Puls1[1] = Puls1[0];
      port1cnt[2] = port1cnt[1];
      port1cnt[1] = port1cnt[0];
      timerTor = system.timer();

// so: und um boolturn zu setzen, muss die verfahrene Strecke genau per interrupts abgezählt worden sein.
// dann wird abgefragt, ob der Zählerstand einem "RAbstand + RBreite" entspricht
      if (turncount > Trommelbreite) //fiktive Trommelwerte!
      {
        boolturn = 1;
        lagencount = lagencount + 1;
      };
      if (turncount < TrommelAbstand)
      {
        boolturn = 0;
        lagencount = lagencount + 1;
      };

      if (boolturn == 0)
        plm.out(1, Puls1[0]);
      else
        plm.out(1, timPer - Puls1[0]);

// Abtasten des "Selbstbau-Encoders" an der Führungsrolle.
// Steuerung der Zugtrommel
      count2 = ports.getcount(2);
// Längenmessung - auch hier wäre eine genaue Zählung unheimlich praktisch
      counter = counter + count2;
      if ((counter + (5*count2)) >= laenge)
        decrement = decrement - 0.2; /////////////////////////////////////////////////////////////////////
      if (decrement < 0)
        decrement = 0;
      port2cnt[0] = count2 - decrement*3; //Sollwert soll per Poti eingestellt werden

// Geschwindigkeit langsam senken:

//--------------------------
// hier "standard"-Regelalgorithmus (PID)
//--------------------------
      Puls0[0] = Puls0[2] - a*port2cnt[0] + b*port2cnt[1] + c*port2cnt[2];
//Motor "0" wird ja von Eingang "2" beeinflusst
      Puls0[2] = Puls0[1];
      Puls0[1] = Puls0[0];
      port2cnt[2] = port2cnt[1];
      port2cnt[1] = port2cnt[0];
      timerTor = system.timer();
// mit increment wird versucht, die Maschine langsam anzufahren
      if (increment < 1)
        increment = increment + 0.05; //////////////////////////////////////////////////////////////////////
      plm.out(0, increment*Puls0[0]);
    }
  }
  plm.out(1, 3000);
  lcdext.clear();
  s = "Laenge: ";
  str.putint(s, counter);
  lcdext.goto(1, 0);
  lcdext.print(s);
  s = "Lagen: ";
  str.putint(s, lagencount);
  lcdext.goto(2, 0);
  lcdext.print(s);
  sleep 3000;
  plm.out(1, 1500);

  halt;
}



wäre echt super nett!


    Antwort schreiben


Antworten:

Re: Kann mir jemand das in C für die Keil-IDE übersetzen? (von mike DK - 4.07.2006 9:06)
    Re: Kann mir jemand das in C für die Keil-IDE übersetzen? (von Erich - 4.07.2006 9:57)
Re: Kann mir jemand das in C für die Keil-IDE übersetzen? (von Tmaniac - 3.07.2006 13:33)
    Wie flasht man das Teil überhaupt? (von Erich - 4.07.2006 18:47)
        Re: Wie flasht man das Teil überhaupt? (von TManiac - 6.07.2006 10:16)
            Re: Wie flasht man das Teil überhaupt? (von Erich - 6.07.2006 16:02)
                Re: Wie flasht man das Teil überhaupt? (von TManiac - 9.07.2006 19:44)
                    Re: Wie flasht man das Teil überhaupt? (von Erich - 10.07.2006 8:45)
                       Re: Wie flasht man das Teil überhaupt? (von TManiac - 10.07.2006 13:40)
                          Re: Wie flasht man das Teil überhaupt? (von Erich - 10.07.2006 22:31)
                          Re: Wie flasht man das Teil überhaupt? (von Holger - 10.07.2006 16:00)
                             Re: Wie flasht man das Teil überhaupt? (von Erich - 10.07.2006 22:32)
                                Re: Wie flasht man das Teil überhaupt? (von Holger - 10.07.2006 23:08)
                                   Re: Wie flasht man das Teil überhaupt? (von Erich - 11.07.2006 23:57)
                                     Re: Wie flasht man das Teil überhaupt? (von Holger - 12.07.2006 8:39)
                                       Re: Wie flasht man das Teil überhaupt? (von Erich - 13.07.2006 2:31)
                                         Re: Wie flasht man das Teil überhaupt? (von Holger - 13.07.2006 9:09)
                                           Re: Wie flasht man das Teil überhaupt? (von Erich - 13.07.2006 9:39)
                                             Re: Wie flasht man das Teil überhaupt? (von André H. - 13.07.2006 11:28)
                                               Re: Wie flasht man das Teil überhaupt? (von Erich - 13.07.2006 12:59)
                                                 Re: Wie flasht man das Teil überhaupt? (von Holger - 13.07.2006 13:33)
                                                   Re: Wie flasht man das Teil überhaupt? (von Erich - 13.07.2006 14:20)
                                                     Re: Wie flasht man das Teil überhaupt? (von Holger - 13.07.2006 18:28)
                                                       Re: Wie flasht man das Teil überhaupt? (von Erich - 13.07.2006 19:16)
                                                         Re: Wie flasht man das Teil überhaupt? (von Holger - 13.07.2006 19:22)
                                                           Re: Wie flasht man das Teil überhaupt? (von Erich - 13.07.2006 19:29)
                                                             Re: Wie flasht man das Teil überhaupt? (von Holger - 13.07.2006 19:31)
                                                               Re: Wie flasht man das Teil überhaupt? (von Erich - 13.07.2006 19:45)
                                                                 Re: Wie flasht man das Teil überhaupt? (von Leo - 18.07.2006 11:56)
                                                                   Re: Wie flasht man das Teil überhaupt? (von Erich - 18.07.2006 12:28)
    Re: Kann mir jemand das in C für die Keil-IDE übersetzen? (von Erich - 3.07.2006 14:10)
Ach ja!!! (von Erich - 28.06.2006 9:52)
    Hallo?!? Wo sind denn die Keil-Spezialisten? (von Erich - 29.06.2006 0:11)
        *seufz* Keil is unbeliebt, was? Wie bringe ich dann mein Programm zum LAUFEN? (von Erich - 30.06.2006 20:03)
            Ja weiß denn keiner, warums ned geht? (von Erich - 5.07.2006 11:18)