Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 8 von 8

Thema: Strings in Von einem DB in einem DB

  1. #1
    Registriert seit
    27.12.2011
    Beiträge
    3
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo liebe Nutzergemeinde.

    Ich habe da ein Problem. Ich habe mit WIN CC flex eine Rezepturverwaltung erstellt. Allerdings habe ich 40 diverse Materialien. Bei einem Rezept werden immer max. 7 benötigt. Jetzt wollte ich in SCL einfach ein Abfrage Programmieren indem ich die Menge > 0 Abfrage und dannach den dazugehörigen STRING [20] per BLOCKMOVE übersende.

    Wenn ich die OUTPUT Variable direkt angebe, funktioniert auch alles super. Nur habe ich leider 7 Behälter die ich beschreiben muss. Daher wollte ich eine Schleife nehmen, die ich 7 mal durchlaufe und mit einem array[7] den Index einer Varibale beschreibe. Diese übergege ich dann in den OUTPUT. Leider klappt es nicht über die Variable. Habt ihr vielleicht eine Idee woran es liegen könnte?

    Es ist eine große Zuordnung, aber ich habe immoment keine andere Idee außer diese. Oder muss ich einen FB nehmen, der speichter ja die Zwischenwerte. Allerdings ist dabei das Problem das der Pointer die String variablen nicht übergibt.

    Ich bin echt um jeden Ratschlag dankbar

    FUNCTION FC51 :VOID

    VAR_INPUT
    Mat_Na1: STRING[22];
    Mat_Na2: STRING[22];
    Mat_Na3: STRING[22];
    Mat_Na4: STRING[22];
    Mat_Na5: STRING[22];
    Mat_Na6: STRING[22];
    Mat_Na7: STRING[22];
    Mat_Na8: STRING[22];
    Mat_Na9: STRING[22];
    Mat_Na10: STRING[22];
    Mat_Na11: STRING[22];
    Mat_Na12: STRING[22];
    Mat_Na13: STRING[22];
    Mat_Na14: STRING[22];
    Mat_Na15: STRING[22];
    Mat_Na16: STRING[22];
    Mat_Na17: STRING[22];
    Mat_Na18: STRING[22];
    Mat_Na19: STRING[22];
    Mat_Na20: STRING[22];


    Mat_Nr1:INT;
    Mat_Nr2:INT;
    Mat_Nr3:INT;
    Mat_Nr4:INT;
    Mat_Nr5:INT;
    Mat_Nr6:INT;
    Mat_Nr7:INT;
    Mat_Nr8:INT;
    Mat_Nr9:INT;
    Mat_Nr10:INT;
    Mat_Nr11:INT;
    Mat_Nr12:INT;
    Mat_Nr13:INT;
    Mat_Nr14:INT;
    Mat_Nr15:INT;
    Mat_Nr16:INT;
    Mat_Nr17:INT;
    Mat_Nr18:INT;
    Mat_Nr19:INT;
    Mat_Nr20:INT;
    END_VAR

    VAR_OUTPUT
    Mat_Na_Behaelter1:STRING[22];
    Mat_Na_Behaelter2:STRING[22];
    Mat_Na_Behaelter3:STRING[22];
    Mat_Na_Behaelter4:STRING[22];
    Mat_Na_Behaelter5:STRING[22];
    Mat_Na_Behaelter6:STRING[22];
    Mat_Na_Behaelter7:STRING[22];
    END_VAR

    VAR
    Mat_Na_Be:ARRAY[1..7] OF STRING[22];
    Mat_Na_Be8:STRING[22];
    Mat_Nummer1:INT;
    Mat_Nummer2:INT;
    Mat_Nummer3:INT;
    Mat_Nummer4:INT;
    Mat_Nummer5:INT;
    Mat_Nummer6:INT;
    Mat_Nummer7:INT;
    Mat_Nummer8:INT;
    Mat_Nummer9:INT;
    Mat_Nummer10:INT;
    Mat_Nummer11:INT;
    Mat_Nummer12:INT;
    Mat_Nummer13:INT;
    Mat_Nummer14:INT;
    Mat_Nummer15:INT;
    Mat_Nummer16:INT;
    Mat_Nummer17:INT;
    Mat_Nummer18:INT;
    Mat_Nummer19:INT;
    Mat_Nummer20:INT;
    zaehler:INT;
    iSFCError:INT;
    test:INT;
    END_VAR

    //Zuweisung Eingänge
    Mat_Nummer1:=Mat_Nr1;
    Mat_Nummer2:=Mat_Nr2;
    Mat_Nummer3:=Mat_Nr3;
    Mat_Nummer4:=Mat_Nr4;
    Mat_Nummer5:=Mat_Nr5;
    Mat_Nummer6:=Mat_Nr6;
    Mat_Nummer7:=Mat_Nr7;
    Mat_Nummer8:=Mat_Nr8;
    Mat_Nummer9:=Mat_Nr9;
    Mat_Nummer10:=Mat_Nr10;
    Mat_Nummer11:=Mat_Nr11;
    Mat_Nummer12:=Mat_Nr12;
    Mat_Nummer13:=Mat_Nr13;
    Mat_Nummer14:=Mat_Nr14;
    Mat_Nummer15:=Mat_Nr15;
    Mat_Nummer16:=Mat_Nr16;
    Mat_Nummer17:=Mat_Nr17;
    Mat_Nummer18:=Mat_Nr18;
    Mat_Nummer19:=Mat_Nr19;
    Mat_Nummer20:=Mat_Nr20;



    test:=zaehler;
    FOR zaehler := 1 TO 7 BY 1 DO
    IF Mat_Nummer1 > 0 THEN
    iSFCError:=SFC20(SRCBLK:=Mat_Na1,DSTBLK:=Mat_Na_Behaelter1);
    Mat_Nummer1:=0;
    ELSIF Mat_Nummer2 > 0 THEN
    iSFCError:=SFC20(SRCBLK:=Mat_Na2,DSTBLK:=Mat_Na_Be[zaehler];
    Mat_Nummer2:=0;
    ELSIF Mat_Nummer3 > 0 THEN
    iSFCError:=SFC20(SRCBLK:=Mat_Na3,DSTBLK:=Mat_Na_Be[zaehler]);
    Mat_Nummer3:=0;
    ELSIF Mat_Nummer4 > 0 THEN
    iSFCError:=SFC20(SRCBLK:=Mat_Na4,DSTBLK:=Mat_Na_Be[zaehler]);
    Mat_Nummer4:=0;
    ELSIF Mat_Nummer5 > 0 THEN
    iSFCError:=SFC20(SRCBLK:=Mat_Na5,DSTBLK:=Mat_Na_Be[zaehler]);
    Mat_Nummer5:=0;
    ELSIF Mat_Nummer6 > 0 THEN
    iSFCError:=SFC20(SRCBLK:=Mat_Na6,DSTBLK:=Mat_Na_Be[zaehler]);
    Mat_Nummer6:=0;
    ELSIF Mat_Nummer7 > 0 THEN
    iSFCError:=SFC20(SRCBLK:=Mat_Na7,DSTBLK:=Mat_Na_Be[zaehler]);
    Mat_Nummer7:=0;
    ELSIF Mat_Nummer8 > 0 THEN
    iSFCError:=SFC20(SRCBLK:=Mat_Na8,DSTBLK:=Mat_Na_Be[zaehler]);
    Mat_Nummer8:=0;
    ELSIF Mat_Nummer9 > 0 THEN
    iSFCError:=SFC20(SRCBLK:=Mat_Na9,DSTBLK:=Mat_Na_Be[zaehler]);
    Mat_Nummer9:=0;
    ELSIF Mat_Nummer10 > 0 THEN
    iSFCError:=SFC20(SRCBLK:=Mat_Na10,DSTBLK:=Mat_Na_Be[zaehler]);
    Mat_Nummer10:=0;
    ELSIF Mat_Nummer11 > 0 THEN
    iSFCError:=SFC20(SRCBLK:=Mat_Na11,DSTBLK:=Mat_Na_Be[zaehler]);
    Mat_Nummer11:=0;
    ELSIF Mat_Nummer12 > 0 THEN
    iSFCError:=SFC20(SRCBLK:=Mat_Na12,DSTBLK:=Mat_Na_Be[zaehler]);
    Mat_Nummer12:=0;
    ELSIF Mat_Nummer13 > 0 THEN
    iSFCError:=SFC20(SRCBLK:=Mat_Na13,DSTBLK:=Mat_Na_Be[zaehler]);
    Mat_Nummer13:=0;
    ELSIF Mat_Nummer14 > 0 THEN
    iSFCError:=SFC20(SRCBLK:=Mat_Na14,DSTBLK:=Mat_Na_Be[zaehler]);
    Mat_Nummer14:=0;
    ELSIF Mat_Nummer15 > 0 THEN
    iSFCError:=SFC20(SRCBLK:=Mat_Na15,DSTBLK:=Mat_Na_Be[zaehler]);
    Mat_Nummer15:=0;
    ELSIF Mat_Nummer15 > 0 THEN
    iSFCError:=SFC20(SRCBLK:=Mat_Na15,DSTBLK:=Mat_Na_Be[zaehler]);
    Mat_Nummer15:=0;
    ELSIF Mat_Nummer16 > 0 THEN
    iSFCError:=SFC20(SRCBLK:=Mat_Na16,DSTBLK:=Mat_Na_Be[zaehler]);
    Mat_Nummer16:=0;
    ELSIF Mat_Nummer17 > 0 THEN
    iSFCError:=SFC20(SRCBLK:=Mat_Na17,DSTBLK:=Mat_Na_Be[zaehler]);
    Mat_Nummer17:=0;
    ELSIF Mat_Nummer18 > 0 THEN
    iSFCError:=SFC20(SRCBLK:=Mat_Na18,DSTBLK:=Mat_Na_Be[zaehler]);
    Mat_Nummer18:=0;
    ELSIF Mat_Nummer19 > 0 THEN
    iSFCError:=SFC20(SRCBLK:=Mat_Na19,DSTBLK:=Mat_Na_Be[zaehler]);
    Mat_Nummer19:=0;
    ELSIF Mat_Nummer20 > 0 THEN
    iSFCError:=SFC20(SRCBLK:=Mat_Na20,DSTBLK:=Mat_Na_Be[zaehler]);
    Mat_Nummer20:=0;
    END_IF;


    Mat_Na_Behaelter1:=Mat_Na_Be8;
    Mat_Na_Behaelter2:=Mat_Na_Be[2];
    Mat_Na_Behaelter3:=Mat_Na_Be[3];
    Mat_Na_Behaelter4:=Mat_Na_Be[4];
    Mat_Na_Behaelter5:=Mat_Na_Be[5];
    Mat_Na_Behaelter6:=Mat_Na_Be[6];
    Mat_Na_Behaelter7:=Mat_Na_Be[7];


    test:=zaehler;
    END_FOR;
    Zitieren Zitieren Strings in Von einem DB in einem DB  

  2. #2
    Registriert seit
    06.10.2009
    Ort
    NRW
    Beiträge
    1.572
    Danke
    63
    Erhielt 259 Danke für 219 Beiträge

    Standard

    Du kannst Dir das Leben deutlich leichter machen, wenn Du mit Datentypen (UDT) und ARRAYS arbeitest. Überlege zunächst, was alles zu einer Rezeptur gehört. Das fasst Du in einem UDT zusammen und legst ein Array von diesem UDT an. Dann kannst Du mit der Schleife sehr schön auf die einzelnen Arrayfelder gucken und musst nicht so viel umkopieren. Das spart etwa 80% des aktuellen Codes...
    Meine Motivation läuft nackig mit einem Cocktail über eine Wiese.

  3. Folgender Benutzer sagt Danke zu Tigerente1974 für den nützlichen Beitrag:

    Gelegenheitsnutzer (23.02.2012)

  4. #3
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.405 Danke für 2.002 Beiträge

    Standard

    Hallo,
    ich habe dein Vorhaben nicht wirklich verstanden - sorry ...
    Allerdings würde ich das, was ich verstanden habe, so angehen :
    - Das Ganze als FB erstellen.
    - Die Mat_Na-Strings im Stat-Bereich des FB deklarieren (als Array of String) und die Visu dort die Daten hineinschreiben lassen.

    Dis Ausgabe der Daten (nach welche Kriterium ?) erfolgt nach wohin ?

    Gruß
    Larry

  5. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    Gelegenheitsnutzer (23.02.2012)

  6. #4
    Registriert seit
    02.12.2010
    Beiträge
    4
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ich verstehs auch nicht so ganz falls es dich beruhigt^^ Ich würde mich also ebenfalls über weitere Erläuterungen freuen

  7. #5
    Registriert seit
    06.10.2009
    Ort
    NRW
    Beiträge
    1.572
    Danke
    63
    Erhielt 259 Danke für 219 Beiträge

    Standard

    Formuliere doch erst einmal. Oft versteht man dann auch die Dinge plötzlich, wenn man versucht etwas zu formulieren...

    Wieviele Rezepturen gibt es?

    Was gehört zu einer Rezeptur? (Elemente benennen und Datentyp angeben)
    Meine Motivation läuft nackig mit einem Cocktail über eine Wiese.

  8. #6
    Registriert seit
    27.12.2011
    Beiträge
    3
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo.
    Ich das Problem das ich über Win CC flex eine Rezepturverwaltung machen muss. Soweit kein Problem. Habe da die 40 Materialen in 1 Rezeptur zusammengefasst. Als Datensatz hab ich ca. 40 Mischungen. Wobei eine Mischung nur aus max.7 Materialen bestehen kann.
    Bei der Rezeptverwaltung habe ich allerdings das Problem, das mir dann 34 Materialen mit 0 angezeigt werden. Diese solle ich Herausfiltern.
    Da dachte ich mir es ist vielleicht einfacher die 7 Materialien rauszufiltern. Dazu dient die Abfrage, aber das muss doch noch irgendwie kürzer und schöner gehen. Ich frage einfach ab ob Material 1 - 40 den Wert 0 haben(wobei der Wert in INT gehandhabt wird) Wenn ja so wird der zugehörige Name in einem Ausgabefeld angezeigt.

    Ich hoffe das ich es jetzt verständlicher ausgedrückt habe, wenn nicht bitte nochmal fragen.

  9. #7
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.405 Danke für 2.002 Beiträge

    Standard

    Was verwendest du denn für eine Visu ? Wenn die Script-fähig ist dann könnte man das auch sehr elegant dort erledigen.
    Ansonsten bleibe ich bei dem Vorschlag, die Visu-Daten komplett dem SCL-DB in seine Instanz zu übergeben und sie von dem DB dann (für die Visu) auswerten und umsortieren zu lassen.
    In dem Fall kannst du dann auch (wie schon im Beitrag #2 von Tigerente erwähnt) die SCL-Fähigkeiten hinsichtlich Array's und Schleifen voll ausspielen und dadurch viel durchschaubareren (und kürzeren) Code erzeugen ...

    Gruß
    Larry
    Geändert von Larry Laffer (22.02.2012 um 17:03 Uhr)

  10. #8
    Registriert seit
    27.12.2011
    Beiträge
    3
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ja, die Visu ist Skriptfähig. Ich benutze ein Skript um ein Protokoll zu erstellen.

    Also wäre das auch noch eine Option.

    Aber am schönsten ist es dann doch wohl mit einem UDT.

    Sofern erst mal wieder ein Gang ins Büro

    Ich danke euch allen vielmals.

    Gruß

Ähnliche Themen

  1. Startwert von einem Array in DB
    Von Flo im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 05.03.2010, 14:09
  2. Instanzen von einem S5 Baustein
    Von Anaconda55 im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 04.03.2010, 00:50
  3. Indirekte Adressierung von einem DB
    Von Sirus im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 14.08.2009, 18:08
  4. Ausgang von einem BK9100 aus einem BC9050 steuern
    Von merlin im Forum CODESYS und IEC61131
    Antworten: 2
    Letzter Beitrag: 28.09.2008, 10:51
  5. vergleich von daten in einem DB
    Von Anonymous im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 20.07.2006, 08:12

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •