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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Strings über schnittstelle definieren (Verständnisproblem)

  1. #1
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.620
    Danke
    777
    Erhielt 647 Danke für 493 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi zusammen

    Ich habe gerade ein Verständnisproblem.

    Wenn ich

    einen FC mache der so aussieht
    Code:
    IF (0 < FIND(IN1:=#EmpfangString, IN2:=#BefehlString)) THEN
    wobei die Variablen in der Schnittstelle als String deklariert sind.
    Und den FB aufrufe mit
    EmpfangString := #String;
    BefehlString := 'TEST';

    Dann ist die Bedingung nicht erfüllt.

    Wenn ich im FC aber so handhabe.
    Code:
    IF (0 < FIND(IN1:=#EmpfangString, IN2:='TEST')) THEN
    Dann ist die Bedingung erfüllt.

    über EmpfangString kommt ein String 'tibetitabTESTtia' rein.
    Wieso ist die Bedingung oben nicht erfüllt über die Schnittstelle müsste der String doch genau gleich übergeben werden?

    mfG René
    Zitieren Zitieren Strings über schnittstelle definieren (Verständnisproblem)  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.401 Danke für 2.001 Beiträge

    Standard

    Hallo René,

    ist der Befehlsstring ein in dem aufrufen Baustein deklarierter String oder eine direkte Zuweisung an der Schnittstelle des Bausteins ?

    Gruß
    Larry

  3. #3
    Avatar von vollmi
    vollmi ist gerade online Erfahrener Benutzer
    Themenstarter
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.620
    Danke
    777
    Erhielt 647 Danke für 493 Beiträge

    Standard

    Code:
    "Befehl"(BefehlString:='TEST', 
    Empfangsstring:=#Empfangsstring;
    Der Befehlsstring soll direkt beim Aufruf an der Schnittstelle als Text eben z.B. 'TEST' eingegeben werden können.
    Und danach soll dann im Baustein im Empfangsstring gesucht werden.

    Ich will Find also in einen Baustein packen welcher dann noch einige Funktionen ausführen soll.

    Wenn ich find direkt im aufrufenden Baustein verwende dann funktionierts wie ich mir das vorstelle.

    mfG René

  4. #4
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.401 Danke für 2.001 Beiträge

    Standard

    ... und wenn du statt "TEST" einen deklarierten String (z.B. aus dem Lokaldatenbereich des aufrufenden Bausteins), der als Inhalt "TEST" hat, nimmst dann geht es vermutlich auch ...

  5. #5
    Avatar von vollmi
    vollmi ist gerade online Erfahrener Benutzer
    Themenstarter
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.620
    Danke
    777
    Erhielt 647 Danke für 493 Beiträge

    Standard

    interessanterweise nur wenn ich ihn im Aufrufenden Baustein im STAT deklariere.

    Im TEMP nicht.

    Und ich wollte ja eben genau nicht 200 Variablen im Aufrufenden Baustein deklarieren müssen sondern das direkt am aufzurufenden Baustein eingeben. Wie wenn ich direkt FIND aufgerufen hätte.

    mfG René

  6. #6
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.401 Danke für 2.001 Beiträge

    Standard

    damit das funktioniert muss immer eine lokale Kopie des eingehenden Strings angelegt werden. Das sollte SCL aber von selber machen.
    Ich weiß jetzt nicht, ob Step7-Classic das richtig machen würde, ich nehme das aber mal an, das es so ist, denn sonst hätte ich in der Vergangenheit damit schon öfter mal Probleme bekommen.
    So wie es aussieht hast du hier also ein neues "Feature" von TIA aufgedeckt. Ich denke mal nicht, dass du hier einen Fehler gemacht hast und würde dir vorschlagen, Herrn Siemens mal damit zu behelligen ...

    Gruß
    Larry

  7. #7
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.686 Danke für 1.225 Beiträge

    Standard

    Was hast du denn für eine Steuerung: 300/400, 1200 oder 1500?
    Bei Step7 konnte man bei einem FC Strings als Parameter nicht an unterlagerte Bausteine weiterleiten. Die musste man erst auf Temp-Variablen umkopieren. Zeig mal ein vollständiges Beispiel.

  8. #8
    Avatar von vollmi
    vollmi ist gerade online Erfahrener Benutzer
    Themenstarter
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.620
    Danke
    777
    Erhielt 647 Danke für 493 Beiträge

    Standard

    Danke euch. Ich probiere Es später mal mit einem FB.
    Es ist eine 300er.

    Strings sind leider nicht mein täglich Brot. Bzw bisher hab ich sowas direkt in einem Baustein abgehandelt. Jetzt möchte ich das halt sauber aufgliedern, in Treiber, Funktionen und Inhalt.

    Mit freundlichen Grüßen René

  9. #9
    Avatar von vollmi
    vollmi ist gerade online Erfahrener Benutzer
    Themenstarter
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.620
    Danke
    777
    Erhielt 647 Danke für 493 Beiträge

    Standard

    Zitat Zitat von vollmi Beitrag anzeigen
    Danke euch. Ich probiere Es später mal mit einem FB.
    Es ist eine 300er.
    Also ich habe das jetzt ausgiebig getestet. Es reicht also im FC eine Kopie im Stat anzulegen und mit := den Eingang zuzuweisen.

    Code:
    FUNCTION "IKS_Bef_ZE_ZA" : Void{ S7_Optimized_Access := 'FALSE' }
    VERSION : 0.1
       VAR_INPUT 
          Empfangsstring : String;
          Befehlsstring : String;
       END_VAR
    
    
       VAR_IN_OUT 
          Befehl : Int;
       END_VAR
    
    
       VAR_TEMP 
          Dummyval : Int;
          Befehlsstring_Temp : String;
       END_VAR
    
    
    
    
    BEGIN
    	#Befehlsstring_Temp := #Befehlsstring;
    	
    	IF   (0 < FIND(IN1:=#Empfangsstring, IN2:=#Befehlsstring_Temp)) AND  (0 < FIND(IN1:=#Empfangsstring, IN2:='ZE')) THEN
    	  #Befehl := 5;
    	ELSIF  (0 < FIND(IN1:=#Empfangsstring, IN2:=#Befehlsstring_Temp)) AND  (0 < FIND(IN1:=#Empfangsstring, IN2:='ZA')) THEN
    	  #Befehl := 4;
    	END_IF;
    	
    END_FUNCTION
    Der Aufruf
    Code:
    "IKS_Bef_ZE_ZA"(Empfangsstring:=#Empfangsstring,                Befehlsstring:='MA01',
                    Befehl:="Master"._DBW_86_0);
    Als String kommt im Aufrufenden Programm im Empfangsbuffer dann etwas an wie
    "NSBFMA01ZE" und entsprechend soll dann der INT Wert auf den Befehlsspeicher geschrieben werden. Nach Aufruf des Bausteins wird der Empfangsbuffer gelöscht.

    mfg René

  10. #10
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von vollmi Beitrag anzeigen
    Also ich habe das jetzt ausgiebig getestet. Es reicht also im FC eine Kopie im Stat anzulegen und mit := den Eingang zuzuweisen.
    Ne, du hast die Kopie im Temp angelegt und dich wohl verschrieben.
    Hm, wieder was gelernt und das für eigenartig empfunden. Das ist nicht schön, dass man den String extra umkopieren muß, aber wohl nicht zu ändern.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

Ähnliche Themen

  1. strings über TCP verschicken S1200 Profinet
    Von FoxMulder im Forum Hochsprachen - OPC
    Antworten: 6
    Letzter Beitrag: 23.04.2013, 10:41
  2. Antworten: 2
    Letzter Beitrag: 09.12.2009, 13:29
  3. S5 Programmierung über virtuelle Schnittstelle
    Von Anonymous im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 11.01.2006, 18:55
  4. winCC über Profibus Schnittstelle
    Von Anonymous im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 23.01.2005, 16:32
  5. Mit CP340 Strings über RS232 versenden
    Von Malte im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 31.10.2003, 09:38

Lesezeichen

Berechtigungen

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