Zuordnung bestimmter Merkmaleund erneuter Zugriff darauf

Paula

Level-1
Beiträge
8
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich arbeite mit einer Simantic 300 und S7.
Bei mir laufen Teile über ein Förderband. Zu Beginn soll dem Teil eine Nummer und eine Farbe zugeordnet werden z.B.:
Teil1 = weiß
Teil2 = schwarz, etc.
Im späteren Verlauf soll dann die Farbe mit dem Ist-Zusatnd verglichen werden, wofür ich aber durch die die Teilnummer (die ich durch Zählen herausbekomme) wieder auf die Soll-Farbe zugreifen muss.

Kann ich zwei Merkmale (Teilnummer und Farbe) einander in S7 zuordnen?
Wie geht das und wie greife ich danach wieder darauf zu?

Für den Fall dass das gar nicht geht, stünde mir auch WinCC zur Verfügung. Aber eigentlich möchte ich es lieber über S7 direkt lösen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Paula schrieb:
Hallo,

ich arbeite mit einer Simantic 300 und S7.
Bei mir laufen Teile über ein Förderband. Zu Beginn soll dem Teil eine Nummer und eine Farbe zugeordnet werden z.B.:
Teil1 = weiß
Teil2 = schwarz, etc.
Im späteren Verlauf soll dann die Farbe mit dem Ist-Zusatnd verglichen werden, wofür ich aber durch die die Teilnummer (die ich durch Zählen herausbekomme) wieder auf die Soll-Farbe zugreifen muss.

Kann ich zwei Merkmale (Teilnummer und Farbe) einander in S7 zuordnen?
Wie geht das und wie greife ich danach wieder darauf zu?

Für den Fall dass das gar nicht geht, stünde mir auch WinCC zur Verfügung. Aber eigentlich möchte ich es lieber über S7 direkt lösen.

Ich denke, dass es mit S7 sehr schwer wird... Vorallem wenn man es flexibel und erweiterbar gestalten will. Ich würde da jetzt zu WinCC + SQL Datenbank + Scripts greifen.
 
Wieviele Teile sind denn in der Anlage?
Wenn es überschaubar ist und du die Teilenummerierung dann wieder mit 1 beginnen kannst, wenn das 1.Teil aus der Anlage rausgelaufen ist, kannst du es ganz einfach über einen Datenbaustein machen.

Bsp:

100 Teile passen in die Anlage
1. Teil: DB100.DBW0 --> Int 5 für Farbe Weiß
2. Teil: DB100.DBW2 --> Int 3 für Farbe Blau
3. Teil: DB100.DBW4 --> Int 5 für Farbei Weiß
...

Die Adresse im DB kannst du über Berechnung mit der Zählnummer und indirekter Adressierung ermitteln.

Du kannst im DB auch ein Array anlegen und dann über die Array-Nummer auf die Daten zugreifen.
 
Ralle schrieb:
Wieviele Teile sind denn in der Anlage?
Wenn es überschaubar ist und du die Teilenummerierung dann wieder mit 1 beginnen kannst, wenn das 1.Teil aus der Anlage rausgelaufen ist, kannst du es ganz einfach über einen Datenbaustein machen.

Bsp:

100 Teile passen in die Anlage
1. Teil: DB100.DBW0 --> Int 5 für Farbe Weiß
2. Teil: DB100.DBW2 --> Int 3 für Farbe Blau
3. Teil: DB100.DBW4 --> Int 5 für Farbei Weiß
...

Die Adresse im DB kannst du über Berechnung mit der Zählnummer und indirekter Adressierung ermitteln.

Du kannst im DB auch ein Array anlegen und dann über die Array-Nummer auf die Daten zugreifen.

Gut, wenn die Teile überschaubar sind, dann sicherlich, aber es ist nicht flexibel und beliebig erweiterbar!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
die Teileanzahl ist tatsächlich sehr überschaubar. Maximal 20 Teile.
Der Vorschlag war also, den Farben bestimmte Integerwerte zuzuordnen und diese in einem DB zu speichern, richtig?

Leider habe ich bisher hauptsächlich in FUP programmiert und kenne mich mit den anderen Programmierarten nicht so aus.

Wenn mein Zähler 1 ist für Teil 1 (schwarz), was mache ich dann?
Wie ordne ich meinem Merker Schwarz einen Integerwert zu?

Den Integerwert müsste ich dann mit Lade und Transferbefehlen in den DB schreiben, richtig?
 
Paula schrieb:
Hallo,
die Teileanzahl ist tatsächlich sehr überschaubar. Maximal 20 Teile.
Der Vorschlag war also, den Farben bestimmte Integerwerte zuzuordnen und diese in einem DB zu speichern, richtig?

Leider habe ich bisher hauptsächlich in FUP programmiert und kenne mich mit den anderen Programmierarten nicht so aus.

Wenn mein Zähler 1 ist für Teil 1 (schwarz), was mache ich dann?
Wie ordne ich meinem Merker Schwarz einen Integerwert zu?

Den Integerwert müsste ich dann mit Lade und Transferbefehlen in den DB schreiben, richtig?

Steht SCL zur Verfügung? Damit sollte es sich am einfachsten und übersichtlichsten realisieren lassen.

Ich denke du musst mit Pointern arbeiten...
 
@Paula

Genau so.

Hier mal ein Bsp zum Auslesen der Farbe aus dem DB:

Code:
FUNCTION FC 52 : VOID
TITLE =Farbe laden
//Ermittelt abhängig von der Teilenummer die zugehörige Farbe, 
//
{ S7_language := '7(1) Deutsch (Deutschland)  29.04.2005  10:13:00' }
AUTHOR : Ralle
FAMILY : Teile
NAME : T_Load
VERSION : 0.1

VAR_INPUT
  Teile_Nr : INT ;	       //Teilenummer
  DB_TeileData : INT ;       //Teile-Datenbaustein
  START_DW : INT ;	       //Datenwortnummer mit 1. Teil 
END_VAR
VAR_OUTPUT
  
END_VAR
VAR_IN_OUT
  Farbe : INT ;	       //jeder Farbwert hat einen IntCode 
  ERROR: BOOL;
END_VAR
VAR_TEMP
  Teile_DB : INT ;	
  Adr : DWORD ;
  RETTAR1 : DWORD ;		
END_VAR

BEGIN
NETWORK
TITLE =Farbe laden
      TAR1  #RETTAR1; 

      SET;
      R ERROR;


//      LOAD: NOP   0;

      L     #DB_TeileData ;           //DB mit den Farbwerten
      T     #Teile_DB;                  //muß Temp sein, sonst geht Auf DB nicht

      AUF   DB [#Teile_DB];        //Öffnen des DB mit den Farbwerten

//Zeiger zusammenbasteln

      L     #Teile_Nr;  //Wert kleiner 1 ist Fehler
      L     1;
      <I;   
      SPB   ERRO;

      TAK;   
      L     20;          //Wert > 20 ist Fehler
      >I;    
      SPB   ERRO;                       

      L     #Teile_Nr;
      L     -1;
      +I;    
      L     2;
      *I;    
      L     #START_DW;
      +I;    
      T     #Adr;

      L     P#0.0;
      L     #Adr;
      SLD   3;
      +D;    
      LAR1;              //Adresse des Datenwortes mit dem Wert für Farbe

      L     DBW [AR1,P#0.0];
      T     #Farbe;                        //Farbe wird ausgegeben
SPA ENDE;

ERRO: NOP 0;

       SET;
       S ERROR;

ENDE: NOP 0;

NETWORK
TITLE =Ende

      LAR1  #RETTAR1; 
      BEA   ; 
END_FUNCTION

Das Einlesen geht Analog, nur dort schreibst du

Code:
 L     #Farbe;                        //Farbe wird ausgegeben
 T     DBW [AR1,P#0.0];

Hab das schnell mal als Anregung zusammen geschrieben, könnten noch Schreibfehler im AWL-Code sein, probiers mal.
 
Zurück
Oben