Einzelnen Beitrag anzeigen

Bonimahoni

Registriert seit: 21. Jul 2010
10 Beiträge
 
Turbo Delphi für Win32
 
#1

Berechnung von Produktionsintervallen

  Alt 23. Jul 2010, 08:46
Servus,

ich verzweifel gerade ein bisschen an einem Programm was ich schreibe.

Die GUI sieht folgendermaßen aus:

http://img175.imageshack.us/f/guicu.jpg/

Die Funktion sollte so sein:

Mitarbeiter gibt in das Feld Anfangszeit eine Uhrzeit ein [Format in zB. 0630 da keine Ahnung wie ich mit TTime Format rechnen kann.] Die Zeit wird in Industriezeit umgerechnet damit ich rechnen kann.

Wenn der Mitarbeiter z.B. 0730 eingibt muss in das Label Montag_1_Impuls_1 07:30 eingegeben werden und in das nächste Montag_1_Impuls_2 09:30.

Dabei gibt es aber noch feste Pausen und eine festen Arbeitszeitraum die bedacht werden müssen.
Gearbeitet wird immer nur von 06:00 bis 14:00 Uhr. Pausen sind einmal von 07:30 bis 07:35, 09:00 bis 09:15 und 11:30 bis 12:10.

Eigentlich muss noch dazu das Schulungen bedacht werden müssen. Ist z.B. am Montag eine Schulung von 8:00 bis 8:30 sollte der zweite Taktimpuls um eine halbe Stunden verschoben werden. Das hab ich aber mal nicht beachtet, da ich so schon Probleme habe.


Meine Fragen:
  • Wie bekomme ich es hin das ich eine Normale Uhrzeit eingeben kann ala 07:30 und damit die einzelnen Impulse berechnet werden können.
  • Wie mache ich es das die Restzeit richtig übernommen wird? Findet mein Taktimpuls zB. um 13:30 statt muss zum nächsten Tag 30min mit übernommen werden also fängt der erste Impuls erst um 7:30 statt
  • Wie beachte ich Schulungen?

Gebe ich zB. 0600 an rechnet er alles richtig durch sollte aber 0630 angegeben werden stimmts nicht

Hier der Code für Montag und Dienstag sonst wird es unübersichtlich:

Delphi-Quellcode:
procedure TForm_Dateneingabe.Ausfuehren_TaktplanungClick(Sender: TObject);

var

Intzeit : integer ;
Startzeit : real;
i : integer;
Summe : real ; //entspr. Taktimpuls i
Taktzeit : real;
Anfangszeit : integer;
Pause1 : real ;
Pause2 : real ;
Pause3 : real ;

a : real ; //Hilfsvariable
b : real ; //Hilfsvariable
h : real; //Hilfsvariable
Uebertrag : real ;

begin

Pause1 := 0.08 ;
Pause2 := 0.33 ;
Pause3 := 1.00 ;


Intzeit := StrToInt(Eingabe_Anfangszeit_h.text) ;

Startzeit := Intzeit ;

Startzeit := Startzeit / 100 ;

a := trunc(Startzeit);
    b := Startzeit - a ;
   Startzeit := a + b * 10/6 ;

//Montag


for i := 0 to 3 do
begin

  Taktzeit := 2 ;
  Summe := Startzeit + Taktzeit * i ;

  if (Summe >= 7.50) and (Summe < 9.00) then Summe := Summe + Pause1 else
  if (Summe >= 9.00) and (Summe <= 11.50) then Summe := Summe + Pause2 ;
  if (Summe > 11.50) then Summe := Summe + Pause3 ;

  if i = 0 then
          begin
          a := trunc(Startzeit);
          b := Startzeit - a ;
          h := a + b * 6/10 ;
          Mo_1_Impuls_1.caption := FloatToStr(h*100) ;
        end;

  if i = 1 then
    begin
    a := trunc(Summe);
    b := Summe - a ;
    Summe := a + b * 6/10 ;
    Mo_1_Impuls_2.caption := FloatToStr(round(Summe*100));
   end;

  if i = 2 then
    begin
    a := trunc(Summe);
    b := Summe - a ;
    Summe := a + b * 6/10 ;
    Mo_1_Impuls_3.caption := FloatToStr(round(Summe*100)) ;
   end;

   if i = 3 then
    begin
    a := trunc(Summe);
    b := Summe - a ;
    Summe := a + b * 6/10 ;
    //if Summe*100 >= 1400 then
    //Mo_1_Impuls_4.caption := '' else
    Mo_1_Impuls_4.caption := FloatToStr(round(Summe*100)) ;
   end;
end;

//Dienstag

a := trunc(Summe);
b := Summe - a ;
Summe := a + b * 10/6 ;

uebertrag := sqrt(sqr(Summe-14)) ;
if uebertrag >= 2 then uebertrag := uebertrag - 2;
Startzeit := 6 ;
Startzeit := uebertrag + Startzeit ;

for i := 0 to 3 do
begin

  Taktzeit := 2 ;
  Summe := Startzeit + Taktzeit * i ;

  if (Summe >= 7.50) and (Summe < 9.00) then Summe := Summe + Pause1 else
  if (Summe >= 9.00) and (Summe <= 11.50) then Summe := Summe + Pause2 ;
  if (Summe > 11.50) then Summe := Summe + Pause3 ;

  if i = 0 then
    begin
          a := trunc(Startzeit);
          b := Startzeit - a ;
          h := a + b * 6/10 ;
          Di_1_Impuls_1.caption := FloatToStr(h*100) ;
    end;

  if i = 1 then
    begin
    a := trunc(Summe);
    b := Summe - a ;
    Summe := a + b * 6/10 ;
    Di_1_Impuls_2.caption := FloatToStr(round(Summe*100));
   end;

  if i = 2 then
    begin
    a := trunc(Summe);
    b := Summe - a ;
    Summe := a + b * 6/10 ;
    Di_1_Impuls_3.caption := FloatToStr(round(Summe*100)) ;
   end;

   if i = 3 then
    begin
    a := trunc(Summe);
    b := Summe - a ;
    Summe := a + b * 6/10 ;
    if Summe*100 >= 1400 then
    Di_1_Impuls_4.caption := 'else
    Di_1_Impuls_4.caption := FloatToStr(round(Summe*100)) ;
   end;
end.
Vielen Dank für eure Hilfe!
Miniaturansicht angehängter Grafiken
guicu.jpg  

Geändert von mkinzler (23. Jul 2010 um 08:55 Uhr) Grund: Bild in den Anhang gepackt
  Mit Zitat antworten Zitat