TIA Hardwareaddressen in ein Array abspeichern

Zuviel Werbung?
-> Hier kostenlos registrieren
Das ist mir schon klar aber am amfang möchte ich es nicht alles auf einmal machen deswegen probiere ich es schrittweisse.

Es kommt ja nich darauf an ob es ein4*4 oder 7*6 dah muss man ja nur die zahlen ändern:)
Die eingabe werde ich mit 16 schaltern lösen (2byte oder ein word)
Am anfang möchte ich mitt bool arbeiten danach mit int.
Der lösungsansatzt vom ronin ist gut aber ich kann es mir nicht vorstellrn wie ich anfangen soll:)
Deswegen bin ich zu euch gekommen.


Gruss
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Zuerst einmal musst Du dir über die Funktionen deiner Ein- und Ausgänge Gedanken machen, also wie genau soll das ganze funktionieren. Eine Smboltabelle wäre ein guter Anfang. Ansonsten hilft es ungemein wenn du dir so ein 4Gewinnt Spiel
besorgst und einfach mal so ein Spiel Schritt für Schritt durchgehst. Dabei musst du Dir ein Steuerungskonzept erarbeiten. Also wie du die einzelnen Handlungen lösen willst. Dabei wird Dir dann z.B. auffallen, das du das Spiel ja erstmal aufbauen musst. Das könntest du beispielsweise mit einem Schalter realiseren. Ist der Schalter EIN kann das Spiel z.B losgehen, ist der Schalter AUS, wäre das z.B ein Abbruch des Spiels, in dem Fall müsstest du deine Schleife durchgehen und alles auf null setzen. Über jeder Spalte könnte ich mir dann z.B. einen Taster für den Steineinwurf vorstellen, ein weiterer Schalter könnte signalisieren was für ein Stein (Rot oder Gelb) eingeworfen wird...

Wenn die Symbolik und das Steuerungskonzept steht, kannste anfangen mit programmieren.

PS: Hast du WinCCFlexible und PLCSIM und kennst dich damit aus? Wenn ja könntest du das ganze ja auch mit einer richtigen Visualisierung lösen, vor allem ohne das du dir um die Hardware Gedanken machen musst.
Das ganze könntest Du dann auf einem PC oder Laptop vorführen mit der intergrierten Simulation und Runtime.
 
Vielen Dank für deine Antwort ich werde mein Projekt noch einmal durchgehen.
Im anhang findest du eine Skizze wie es aussehen soll.
Ich möchte es mit einem SIMIT Modell arbeiten (Eine Simulationssoftware von Siemens)

Programm_unterteilungen:

- Eingänge in INT umwandeln
- Auswertung wer gewonnen hat
- Spieler wechsel
- Reseten

Wenn ich diese 4 Punkte erreicht habe, ist die Software komplett :)

Gruss

Anhang anzeigen VARIANTE_SKIZZE.doc
 
Du solltest Dir auch überlegen wie Du mit Fehleingaben umgehen möchtest. Folgende Fehleingaben fallen mir so auf die schnelle ein.
2 oder mehr Steine werden in einem Zyklus gleichzeitig eingeworfen. Mehrere falsche Steine werden hintereinander eingeworfen.
Folgende Lösungsansätze sehe ich dazu:
1. Du führst die entsprechenden Abfragen durch lässt die Eingabe aber nicht zu.
2. Du löst einen Reset aus und setzt alles zurück.
3. Du lässt die Eingaben erst mal zu und setzt nichts zurück, das Spiel stoppt aber.
4. ...

Eingänge in INT umwandeln interpretiere ich jetzt mal als die Routine des Steineinwurfs wo geprüft werden soll wo ein Stein in deinem ARRAY abgelegt werden soll.
Die eigentliche Umwandlung von BOOL auf INT kannst du mit einer IF Anweisung realisieren.

PS: Im Beitrag 11 hab ich eine sehr gute Anleitung für SCL verlinkt. Auf der Seite 3-1 findest Du ein Schritt für Schritt Beispiel für eine "Messwerterfassung",
denke wenn du das durchgehst und verstanden hast, biste Deinem 4Gewinnt Projekt ein gutes Stück näher gekommen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok danke für deine Antwort.

Das werde ich jetzt beachten. Ich werde jetzt einmal alles durchgehen.
Als erstes werde ich die Simulation aufbauen danach kann ich mit dem Programmieren beschäftigen.
Aber eine Frage habe ich noch.
Wie kann ich ein eingang als INT interpretieren?

Gruss
 
Ein Digitaler Eingang wird automatisch als BOOL deklariert. So könnte dann eine Umwandlung aussehen.

Code:
IF #Eingang_1 AND #Eingang_2 THEN
  #Meine_Integer_Var:= 1;
ELSIF #Eingang_1 THEN
  #Meine_Integer_Var:= 2;
ELSE
  #Meine_Integer_Var:= 0;  
END_IF;
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das Beispiel sollte Dir ja nur verdeutlichen wie man digitale Signale Abfragen kann und so nach INT kommen kann. Wie du diese Abfrage später gestaltest ist absolut Dir überlassen.
Denke bevor du dann wirklich mit programmieren loslegst, ist es notwendig das Du Dir noch einige Basics aneignest. Kann Dir nur empfehlen das vom Beitrag 25 erwähnte Beispiel mal durchzuackern.
Da wird auf Strukturen und Arrays eingegangen, eine Sortierfunktion programmiert man da auch. Man lernt ein Programm strukturiert aufzubauen... . Das Beispiel ist schon sehr umfangreich, denke aber
das ist genau das was Dir weiter hilft. Ohne einige Grundlagen kriegste sonst dieses 4Gewinnt nie programmiert.
Wenn du die Grundlagen dann hast, kommen von Dir vermutlich auch wesentlich präzisere Fragen, auf die man dann auch gezielter antworten kann.
 
Code:
//Alle Zellen mit Null füllen
IF "Reset" = true THEN 
FOR #x := 1 TO 7 BY 1 DO                 
  FOR #y := 1 TO 6 BY 1 DO        
    #Grün_Speicher[#x,#y] := 0;
    #Rot_Speicher[#x,#y] := 0;
   END_FOR;          
 END_FOR;
END_IF;

// Auswertung ob grüner spieler an der reihe
IF #wahlschalter_rot = true  THEN
  

// Abfrage für die Veränderung von den Schalters
#in1:= #IN;
IF #in1 AND NOT #mem THEN
  #out:= true;
 
  
IF #eingang_1 = TRUE THEN       
  #x:= 1;        
  ELSIF       
  #eingang_2 = TRUE THEN        
  #x:= 2;        
  ELSIF       
  #eingang_3 = TRUE THEN        
  #x:= 3;        
  ELSIF       
  #eingang_4 = TRUE THEN        
  #x:= 4;        
  ELSIF       
  #eingang_5 = TRUE THEN        
  #x:= 5;        
  ELSIF       
  #eingang_6 = TRUE THEN        
  #x:= 6;        
  ELSIF       
  #eingang_7 = TRUE THEN        
  #x:= 7;
ELSE #x := 0;  
END_IF;    

#y:=0;
#Gefunden:= 0;

WHILE #Gefunden = 0  DO
    IF #Grün_Speicher[#x,#y] = 0 AND #Rot_Speicher[#x,#y] = 0 THEN
      #Grün_Speicher[#x,#y] := 1;
         #Gefunden:= 1;
    ELSE
      #y:=#y+1;
      IF #y = 7 THEN
        #Gefunden:= 1;
      END_IF;
    END_IF; 
  END_WHILE;
  
ELSE
  #out:=false;
  
END_IF;

#mem:=#in1;
#horizontal:= #x;
#vertikal := #y;
  
END_IF;


 // Auswertung ob roter spieler an der reihe 
   IF #wahlschalter_grün = true   THEN
 
  // Abfrage für die Veränderung von den Schalters

  #in1:= #IN;
IF #in1 AND NOT #mem THEN
  #out:= true;
 
  
IF #eingang_1 = TRUE THEN       
  #x:= 1;        
  ELSIF       
  #eingang_2 = TRUE THEN        
  #x:= 2;        
  ELSIF       
  #eingang_3 = TRUE THEN        
  #x:= 3;        
  ELSIF       
  #eingang_4 = TRUE THEN        
  #x:= 4;        
  ELSIF       
  #eingang_5 = TRUE THEN        
  #x:= 5;        
  ELSIF       
  #eingang_6 = TRUE THEN        
  #x:= 6;        
  ELSIF       
  #eingang_7 = TRUE THEN        
  #x:= 7;
ELSE #x := 0;  
END_IF;    


#y:=0;
#Gefunden:= 0;
WHILE #Gefunden = 0  DO
    IF #Rot_Speicher[#x,#y] =0 AND #Grün_Speicher[#x,#y] = 0 THEN
      #Rot_Speicher[#x,#y] := 1;
         #Gefunden:= 1;
    ELSE
      #y:=#y+1;
      IF #y = 7 THEN
        #Gefunden:= 1;
      END_IF;
    END_IF; 
  END_WHILE;
  
  ELSE
  #out:=false;
  
END_IF;

#mem:=#in1;
#horizontal:= #x;
#vertikal := #y;

END_IF;

// Auswertung ob grüner_spieler gewonnen hat

Ich habe die Software fast fertig
Mir fehlt noch die Auswertung wer gewonnen hat.

Ich weiss wie aber die Umsetzung ist bei mir die Frage. Vielleicht könnt ihr mir helfen.
 
Code:
FOR INDEX:= 1 TO 5 BY 1 DO
        BIT_TEST:= SEL ( G:= BYTE_TO_INT (TEST_BYTE) >= 240, IN0:= BIT_TEST, IN1:= true);
        TEST_BYTE:= SHL (IN:= TEST_BYTE, N:=1);
    END_FOR;
    
    IF BIT_TEST THEN
        ...;
    END_IF;
kann ich diesen Coder verwenden?
 
Zurück
Oben