Hallo
Wie der Titel schon sagt möchte ich von der SPS (Ausgangswort, Datentyp Word) einen Integer Wert auf den Roboter Eingang (= ein Eingangswort mit Datentyp Word) übergeben. Nun meine Frage wie kann ich diesen Roboter Eingang mit dem übergebenen Integer wert von der SPS auf eine Variable zuweisen die mein Switch Case steuert?
Gruß
Frozen
übergabe sps INT Wert an Variable für Switch Case
- Frozen1909
- Erledigt
-
-
Hallo,
du kannst dies versuchen
SIGNAL wert_von_sps $IN[1] TO $IN[16]
SWITCH wert_von_sps -
Das geht mit einer Signalvereinbarung
SIGNAL Variable $IN[1] TO $IN[10] == Binär
-
Spiral das hab ich schon probiert hat aber nicht geklapt, habe den wert von der sps BCD16 auf dem Roboter Eingang übergeben, die Bits wurden gesetzt.
@run
das == bedeutet doch gleichheit/identisch? ist also eine Vergleichsoperation ich möchte den wert direkt auf die Variable schreiben um je nach INT wert das Switch Case 1, 2, 3... aufzurufen
oder ist in der KRL == eine Variablenzuweisung? -
Du vereinbarst eine Signal Variable. Diese nimmt den Binärcode von der SPS auf.
Diese variable kannst du im Switch auswerten.Gesendet von meinem SM-G900F mit Tapatalk
-
Das Beispiel von Spiral muss funktionieren, sonst ist irgendwas anderes faul.
Man kann sich den Wert der Eingänge auch über 'Anzeige-Variable-Einzeln' live ansehen, dort einfach den Namen 'wert_von_sps' eintragen.
Meistens ist da high-/lowbyte vertauscht, da muss man dann entweder in der E/A-Verschaltung im Roboter, oder in der SPS vor dem Rausschreiben (per TAW, bei Siemens-SPS) tauschen. -
Ich würde den wert nicht als BCD übergeben sondern in Integer wandeln und übergeben, dann muss es wie von Spiral aufgezeigt funktionieren!
Ansonsten, wie Hermann geschrieben hat, liegt es an den vertauschten Bytes welches du dann in der SPS mit TAW vor der Übergabe drehen musst. -
[size=2]Danke das mit den High und low bit vertauschen hat geklappt.[/size]
[size=2]Noch ein frage habe ich wie kann die Switch Case variable welche von dem SPS eingang übergeben wird neu Initialisiert werden?[/size]
[size=2]Der Wert auf dem SPS Eingang wird immer dann aktualisiert wenn der Roboter das Bauteil Platziert hat und soll dan das nächste teile vom Platz zwei holen usw.[/size]
[size=2] [/size][size=2]mein Programm ist so aufgebaut: (BecherNr= die INT Variable welche mit dem SPS Eingangswort beschrieben wird)[/size] -
Aus einer Loop Schleife kann man nur mittels EXIT rausspringen. GOTO Anweisungen funktionieren in diesem Fall nicht.
-
ok das hätte ich abgeändert doch wie schaffe ich es das die BecherNr Variable immer neu aktualisiert wird damit er nicht immer das selbe Case abfährt?
-
Da versagt die Glaskugel.
Für eine Antwort sollte man wissen wie die Variable BecherNr deklalriert ist.
Wenn das in etwa so
Signal BecherNr $in[1] to $in[16]
sein sollte, dann wird die automatisch aktualisiert. Dann muss man nur darauf achten, dass vor dem Abarbeiten der Instruktion Switch BecherNr die Eingänge den richtigen Wert haben. Da kann man sich recht leicht ein Timingproblem einhandeln, wenn das ganze im Vorlauf durchgeführt wird. Für einen Test vor dem Switch mal ein Wait Sec 1 einfügen. Das stoppt den Vorlauf, und die SPS hat etwas Zeit den Wert neu zu setzen. -
Hallo Hermann
danke für den hinweis mit dem vorlaufzeiger das probiere ich gleich mal aus
das SPS Signal und die INT Variable habe ich in der config.dat deklariert
Bild: https://picload.org/view/rpdpclll/configdat.png.html -
Die INT Variable am Anfang auf Null setzen, danach in einer repeat UNTIL Schleife abfragen ob ein Wert von der SPS gekommen ist. Wenn UNTIL TRUE, dann das Programm fortsetzen.
Gesendet von meinem SM-G900F mit Tapatalk
-
Danke für den tip mit repeat, nun ich habe den Fehler gefunden. Die Becher Nummer wurde nur einmal initialisiert da ich sie ganz oben im FOLD USER INI deklariert habe. Nun habe ich das in der Schleife gemacht und davor wie Hermann sagte ein Wait eingebaut nun Funktioniert es. Vielen Dank für eure Hilfe.
meine Frage noch ob ich die Repeat Schleife auch mit eine EXIT verlassen kann. Bzw. das geht mit 2 Exit Kriterien? Oder sollte ich besser beim LOOP bleiben? -
Ja, das geht. ist aber unpraktisch. EXIT sollte man besser nur bei LOOP verwenden.
Erstelle ein Benutzerkonto oder melde dich an um zu kommentieren
Du musst ein Benutzerkonto haben um einen Kommentar hinterlassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Geht einfach!
Neues Benutzerkonto erstellen