TIA Hilfe beim programmcode (scl)

bkizilkaya

Level-1
Beiträge
93
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Tag
Ich bin zur zeit an einem 4 gewinnt an der arbeit und habe schwirigkeiten beim programm.
Das ganze werde ich mit einem SIMIT-Modell simulieren deswegen keine Hardwareprobleme. Die Eingänge sind 7 Schalter und ein Reset.
Dann habe ich noch 2 Ausgangswörter.
Am anfang möchte ich nur mit einem Spieler testen d.h. ich versuche alle LED nur Grün auf zu leuchten.
Ich muss an dem SIMIT-Modell nur die Ausgangswörter geben das heist der Einte ist für die Horizontal und der andere Vertikal. Wenn ich jetzt zum Beispiel ein 1 und 1 als wort rausgebe dann ist der Schnittpunkt von den Beiden gemeint.
Habe zwei Arrays weil der einte ist für alles d.h. er speichert die Zustände von den beiden Spieler. Und der Andere ist nur für den Grünen der Rote array fehlt deswegen nicht beachten.
Ich habe jetzt angefangen zu programmieren, aber es funktioniert einfach nicht.

Code:
IF #eingang_1 = TRUE THEN       
  #horizontal:= 1;        
  ELSIF       
  #eingang_2 = TRUE THEN        
  #horizontal:= 2;        
  ELSIF       
  #eingang_3 = TRUE THEN        
  #horizontal:= 3;        
  ELSIF       
  #eingang_4 = TRUE THEN        
  #horizontal:= 4;        
  ELSIF       
  #eingang_5 = TRUE THEN        
  #horizontal:= 5;        
  ELSIF       
  #eingang_6 = TRUE THEN        
  #horizontal:= 6;        
  ELSIF       
  #eingang_7 = TRUE THEN        
  #horizontal:= 7;
END_IF;    
 
       
#x:=#horizontal;        
#y:=#vertikal;        
       
FOR #x := 1 TO 7 BY 1 DO            // Alles mit Null füllen        
  FOR #y := 1 TO 6 BY 1 DO;       
    #LED_Speicher[#y,#x] := 0;        
  END_FOR;          
END_FOR;        
       
FOR #y := 1 TO 6 BY 1 DO        
  IF #y = 0  THEN       
    #Grüner_speicher[#horizontal,#vertikal] := 1;
   END_IF;       
END_FOR;

Wenn ihr noch weiter Angaben braucht bescheid geben.
 
Code:
FOR #y := 1 TO 6 BY 1 DO        
  IF #y = 0  THEN       
    #Grüner_speicher[#horizontal,#vertikal] := 1;
   END_IF;       
END_FOR;
Erklär' mal, was Du hier programmieren wolltest.

#y soll lt. FOR-Schleife Werte von 1 bis 6 annehmen und innerhalb dieser Schleife fragst Du ab, ob #y=0 ist.
Damit kannst Du Dir die ganze Schleife sparen, denn #y ist nie 0, sondern 1 bis 6!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
#x:=#horizontal;        
#y:=#vertikal;        
       
FOR #x := 1 TO 7 BY 1 DO            // Alles mit Null füllen        
  FOR #y := 1 TO 6 BY 1 DO;       
    #LED_Speicher[[COLOR="#FF0000"]#y,#x[/COLOR]] := 0;        
  END_FOR;          
END_FOR;        
       
FOR #y := 1 TO 6 BY 1 DO        
  IF #y = 0  THEN       
    #Grüner_speicher[[COLOR="#FF0000"]#horizontal,#vertikal[/COLOR]] := 1;
   END_IF;       
END_FOR;

Außerdem könnte hier das Array vertauscht sein.
 
Guten Tag

Es tut mir leid das ich wenig angaben hatte im Anhang findet ihr eine Skizze.

Das programm soll so laufen zuerst werde ich alle LED auf null setzen d.h. alle ausgangswörter = 0

Danach wenn ich irgend ein schalter betätige dann sucht es einen leeren platz (LED) von der entsprechenden Vertikale.

Ich hoffe ihr versteht es.

Gruss





Anhang anzeigen Skizze.doc
 
Ich hoffe ihr versteht es.
Wir verstehen schon, wollen aber nicht Deine Arbeit machen.
Das nützt Dir ja nicht so viel.
;)


Was mir mehr Sorgen macht - verstehst Du, was Du da programmierst?
Da Du auf beide Antworten nicht mal reagierst, vermute ich mal, das dem nicht so ist!

Noch mal nähere Anmerkungen zu Deinem Programm:
Code:
[FONT=Courier New]
IF #eingang_1 = TRUE THEN       
  #horizontal:= 1;        
  ELSIF       
  #eingang_2 = TRUE THEN        
  #horizontal:= 2;        
  ELSIF       
  #eingang_3 = TRUE THEN        
  #horizontal:= 3;        
  ELSIF       
  #eingang_4 = TRUE THEN        
  #horizontal:= 4;        
  ELSIF       
  #eingang_5 = TRUE THEN        
  #horizontal:= 5;        
  ELSIF       
  #eingang_6 = TRUE THEN        
  #horizontal:= 6;        
  ELSIF       
  #eingang_7 = TRUE THEN        
  #horizontal:= 7;
END_IF;                             [COLOR=#008000]//hier wird #horizontal ein Wert zugewiesen,
                                    //je nachdem, welcher Eingang gesetzt ist.
                                    //sicher nicht die schönste Möglichkeit, aber noch OK[/COLOR]
 
       
#x:=#horizontal;                    [COLOR=#ffa500]//hier wird dieser ermittelte Wert an #x übergeben[/COLOR]        
#y:=#vertikal;                      [COLOR=#ffa500]//hier wird ein Wert an #y übergeben, woher auch immer der kommt
[/COLOR]                                    [COLOR=#ff0000]//diese beiden Zeilen werden durch die nächsten sofort wieder hinfällig,
                                    //weil diese Zuweisungen durch die nächsten beiden FOR-Schleifen sofort
                                    //wieder überschrieben werden[/COLOR]
       
FOR #x := 1 TO 7 BY 1 DO            // Alles mit Null füllen   [COLOR=#ff0000]#x bekommt neue Werte zugewiesen [/COLOR][/FONT][COLOR=#ff0000][FONT=Courier New](löscht die alten!)[/FONT][/COLOR][FONT=Courier New]
  FOR #y := 1 TO 6 BY 1 DO;         //                         [COLOR=#ff0000]#y bekommt neue Werte zugewiesen (löscht die alten!)[/COLOR]                          
    #LED_Speicher[#y,#x] := 0;      [COLOR=#ffa500]//prüfen, ob das Array mit min. [1 ..6, 1 ...7] angelegt wurde
                                    //Siehe Hinweis von Mäuseklavier[/COLOR][/FONT][FONT=Courier New]
  END_FOR;                          [COLOR=#008000]//Das Nullen an sich sollte aber noch klappen, vorausgesetzt Dein Array passt[/COLOR]
END_FOR;        
       
FOR #y := 1 TO 6 BY 1 DO            [COLOR=#008000]// #y bekommt die Werte 1, 2, 3, 4, 5 und 6 der Reihe nach zugewiesen[/COLOR]
  IF #y = 0  THEN                   [COLOR=#ff0000]// #y = 0 ? [B]Wie soll das gehen[/B]?
                                    // Siehst Du eine 0 in der Werte-Aufzählung der FOR-Schleife?[/COLOR]
    #Grüner_speicher[#horizontal,#vertikal] := 1;   [COLOR=#ff0000]//Das wird nie ausgeführt!!!
                                                    //außerdem hast Du hier horizontal und vertikal im Vergleich 
                                                    //zu den Angaben bei LED_Speicher vertauscht?![/COLOR]
[/FONT][FONT=Courier New][COLOR=#ff0000]                                                    //Siehe Hinweis von Mäuseklavier[/COLOR][/FONT][FONT=Courier New]
[/FONT][FONT=Courier New]   END_IF;       
END_FOR;[/FONT]
Du solltest erst mal Deine eigene Logik aufräumen, dann geht's hier sicher auch weiter.



PS: Zeilenweises Kommentieren hilft oft, Logikprobleme zu erkennen! Und zwar auch dem Programmschreiber selbst!

Außerdem gehört zum Code immer auch die Variablendeklaration! Ist bei TIA etwas mühseliger zu posten, aber da hätte Mäuseklavier z.B. nicht nur vermuten müssen, sondern hätte gesehen, ob's passt.
 
Naja ... es gibt in der gleichen Sache noch einen anderen Thread. Da wurden von Thomas und mir gestern auch ein "paar" Probleme aufgezeigt, die in diesen Code immer noch präsent sind.
Vielleicht sind irgendwelche Bemühungen unsererseits, sofern sie nicht die Arbeit für den TE erledigen, "Perlen vor die Säue geworfen" - ich mag mich aber auch täuschen.

@TE:
Eine der wichtigsten Spielregeln hier im Forum ist, wenn man nach Rat fragt, wenigstens über die gegebenen Ratschläge nachzudenken und eventuell auch zu versuchen, sie umzusetzen ...

Gruß
Larry
 
Zurück
Oben