TIA VAR Typ BCD oder Byte beschreiben

DaWinci

Level-1
Beiträge
4
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Abend zusammen,

im Rahmen eines Technikerprojekts, binden meine Projektpartner und ich einen Kuka Roboter in einer bestehende Industrie 4.0 Anlage ein (ETS Didaktik).

Wir haben eine Kommunikation zwischen der SPS und dem Kuka Roboter Erfolgreich hinzugefügt. Auch die Programme lassen sich via der Cell manuell via schalten der Ein/Ausgänge abfahren.

Nun zu meinem Problem, ich versuche den Roboter in einen bestehenden Ablauf einzubinden. Alles ist soweit machbar bis auf eine Variable. Die Variable ist vom Datentypen Byte oder BCD. Die Logik die ich einbinden möchte ist folgende:

Wenn „E1“ = 1, dann Variable „PGNO“ = BCD#1
Aber wenn „E2“= 1, dann Variable „PGNO“ = BCD#2


Kann mir jemand eventuell dabei weiterhelfen ?

Mit freundlichen Grüßen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Und was soll gelten, wenn E1 = 0 und/oder E2 = 0 ?
Schreibe eine Wahrheitstabelle für die 4 möglichen Kombinationen auf, dann siehst Du schon, wie das verknüpft werden muß.
 
Welche Sprache/Steuerung?
Es ist eine Siemens S7. Den Ablauf der Industriestraße haben wir in Graph programmiert, bis TIA V17.

Wir/Ich sind am besten mit Graph/FUP vertraut, aber gerne lerne ich weiteres dazu! :)



Und was soll gelten, wenn E1 = 0 und/oder E2 = 0 ?
Schreibe eine Wahrheitstabelle für die 4 möglichen Kombinationen auf, dann siehst Du schon, wie das verknüpft werden muß.

Es geht mir nicht um die Verknüpfung oder die Verschaltung der einzelnen Eingänge, sondern wie ich in TIA einer VAR einen bestimmten Werten zuweise. (Binär/BCD). :)


Mit freundlichen Grüßen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Es geht mir nicht um die Verknüpfung oder die Verschaltung der einzelnen Eingänge, sondern wie ich in TIA einer VAR einen bestimmten Werten zuweise. (Binär/BCD). :)
Uns geht es darum, zu erfahren, was Du mit ...
Wenn „E1“ = 1, dann Variable „PGNO“ = BCD#1
Aber wenn „E2“= 1, dann Variable „PGNO“ = BCD#2
... meinst.
Was ist BCD#1, was BCD#2?

Zwei beliebige, beispielhafte BCD-Zahlen?
Und Du willst "nur" wissen, wie man eine Zahl zuweist bzw. kopiert?
Am einfachsten geht es in SCL mit ':='.
Fast so einfach in FUP oder KOP mit MOVE (s.o., Haralds Beitrag #5).

PS:
Aus reiner Neugier: Berechnest Du die Werte und wandelst sie dann zum Schluss noch in BCD um?
Immerhin kann ein Byte 2 BCD-Stellen aufnehmen, zumindest, wenn man nicht eine Stelle für ein Vorzeichen benutzt bzw. freihalten muss.
Hast Du Glück und benötigst Du nur 1 Stelle und musst folglich gar nichts wandeln, sondern allenfalls auf das Auftreten von "PseudoTetraden" prüfen?
 
BCD#1, BCD#2 sind (getypte) Konstanten wie 16#AFFE, 2#10101, INT#1, L#123456789, REAL#3.14, S5T#120MS
Danke, Harald. Das kannte ich noch nicht.
Für mich sind BCD-Zahlen diejenigen, die mit 16# anfangen und nichts enthalten, was keine Ziffern ('0' bis '9') sind (ausser evtl. etwas, das als Vorzeichen gemeint ist oder zur "VorNullenUnterdrückung" dient oder als DezimalKomma oder TrennZeichen ... ;) ).
'A' bis 'F' sind die besagten PseudoTetraden.

PS:
Ich hoffe, Siemens belässt es bei den getypten BCD-Konstanten. Nicht, dass demnächst noch etliche weitere Codierungen getypt werden, z.B. Gray, Exces3, ... :ROFLMAO:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
1) TIA Hilfe aufrufen
2) Suchen nach: move
3) Thema: "Verschieben, STEP7 : FUP"
4) lesen
Werde morgen sobald ich wieder in der Schule bin nach „Move“ suchen, Dankeschön! :)


Uns geht es darum, zu erfahren, was Du mit ...

... meinst.
Was ist BCD#1, was BCD#2?

Zwei beliebige, beispielhafte BCD-Zahlen?
Und Du willst "nur" wissen, wie man eine Zahl zuweist bzw. kopiert?
Am einfachsten geht es in SCL mit ':='.
Fast so einfach in FUP oder KOP mit MOVE (s.o., Haralds Beitrag #5).

PS:
Aus reiner Neugier: Berechnest Du die Werte und wandelst sie dann zum Schluss noch in BCD um?
Immerhin kann ein Byte 2 BCD-Stellen aufnehmen, zumindest, wenn man nicht eine Stelle für ein Vorzeichen benutzt bzw. freihalten muss.
Hast Du Glück und benötigst Du nur 1 Stelle und musst folglich gar nichts wandeln, sondern allenfalls auf das Auftreten von "PseudoTetraden" prüfen?

Tut mir leid für meine schwammige Formulierung.. ich versuche es mal erneut :)

Der Kuka Roboter greift bei einem Auto EXT Modus auf die system eigene Datei namens Cell zu. In dieser Cell Datei ist ein Switch/Case Konstrukt.

Die Kuka Auto Extern E/A habe ich bereits in mein TIA Programm eingebunden. Dort ist ein interner Eingang (Roboter Seite) vom Typ VAR (laut Kuka selbst).

Diese Variable heißt „PGNO“ und ist auf der Roboter Seite als Eingang (Typ VAR) deklariert.

( SPS Ausgang -> = -> Roboter Eingang)

Den Ausgang (“PGNO”) auf der SPS Seite habe ich als %QB128, Datentypen Byte deklariert.

Wenn die Variable „PGNO“ den Wert 1, sprich Binär 00000001 bekommt, spielt sich im oben genannten Switch/case Konstrukt, case 1 ab.

Kriegt die Variable den Wert 2 -> 00000010, dann wird case 2 abgespielt.

Nun wollte ich folgende Logik aufbauen:

Wenn (Beispiel) %M1.0 (Typ Bool) = 1, dann %QB128 = 00000001

Wenn (Beispiel) %M2.0 (Typ Bool) = 1, dann %QB128 = 00000010


Leider kenne ich mich nicht gut genug mit TIA bzw. Step 7 aus um die richtigen Operanden /Bausteine zu benutzen. Mein Lehrer/Dozent konnte mir hierbei auch leider nicht helfen.

Vielen Dank für eure bisherigen Antworten. :)

Mit freundlichen Grüßen
 
Danke für die ausführliche Antwort! Deine Formulierung war gar nicht so schwammig. Ich kannte die Schreibweise BCD#1 etc. noch nicht. :oops:

Wieder eine dumme Frage meinerseits:
Was soll in Deinem Beispiel passieren, wenn %M1.0 und %M2.0 beide 0 (= FALSE) bzw. beide 1 (= TRUE) sind?
 
Wenn beide FALSE, dann %QB128 = 00000000.

Wenn beide TRUE, dann %QB128 = 00000000.

Also quasi eine XOR Verknüpfung.


Edit: @PN/DP: Mit Move hat es geklappt, vielen Dank! :)
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
BCD# ist mir auch neu! :geek:

PGNO ist ja für die Programmnummer

Hier mal noch die Signalabläufe für verschiedene Möglichkeiten der Betriebsart. Falls euch das noch zusätzlich hilft:
 

Anhänge

  • AUT_EXT_SIGNAL.pdf
    1,3 MB · Aufrufe: 3
Wenn „E1“ = 1, dann Variable „PGNO“ = BCD#1
Aber wenn „E2“= 1, dann Variable „PGNO“ = BCD#2
Wenn beide FALSE, dann %QB128 = 00000000.

Wenn beide TRUE, dann %QB128 = 00000000.

Das kann man in FUP so programmieren:
Code:
    +-----+
    |  X  |                           +--------+
E1--|     |                           |  MOVE  |
E2--|     |---+----------------------o|EN      |
    +-----+   |                       |        |
              |                    0--|IN  OUT1|--PGNO
              |                       +--------+
              |
              |        +-----+
              |        |  &  |        +--------+
              +--------|     |        |  MOVE  |
              |    E1--|     |--------|EN      |
              |        +-----+        |        |
              |                    1--|IN  OUT1|--PGNO
              |                       +--------+
              |
              |        +-----+
              |        |  &  |        +--------+
              +--------|     |        |  MOVE  |
                   E2--|     |--------|EN      |
                       +-----+        |        |
                                   2--|IN  OUT1|--PGNO
                                      +--------+

Es bietet sich auch an, im FUP-Programm ein SCL-Netzwerk einzufügen und in SCL zu programmieren:
Code:
// SCL Variante A

IF NOT(E1 XOR E2) THEN
    PGNO := 0;
ELSIF E1 THEN
    PGNO := 1;
ELSIF E2 THEN
    PGNO := 2;
END_IF;


// SCL Variante B

IF E1 AND NOT E2 THEN
    PGNO := 1;
ELSIF E2 AND NOT E1 THEN
    PGNO := 2;
ELSE
    PGNO := 0;
END_IF;

Übrigens: BCD#1 = 1 (dez) und BCD#2 = 2 (dez)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Irgendwo habe ich das schonmal gesehen, doch zumindest bis V15.1 scheint TIA das wohl nicht zu kennen. Der Sinn ist aber klar.
BCD#1 = 1 dez, BCD#2 = 2 dez, BCD#11 = 17 dez
Sicher? Ich hätte jetzt 11 dez und B hex gesagt oder habe ich die Beschreibung hier falsch verstanden?
Nachtrag: @PN/DP hat recht, 17 dez ist richtig. Laut TIA V18 Doku gibt es das Konstrukt aber schon seit V13 SP1 und seit V14 mit leicht anderer Funktionsweise.
 
Zuletzt bearbeitet:
BCD ist aber nicht gleich Hex, sondern "Binär codierte Dezimalzahl" ist Hex ohne die Pseudo-Tetraden, die in Hex mit Buchstaben codiert sind.
Je ein Nibble von 4 Bits codiert eine Dezimalziffer 0..9. Pseudo-Tetraden 16#A .. 16#F sind ungültig/verboten.
Ein Zähler, der in BCD zählt, springt von BCD#9 (9 dez) auf BCD#10 (16 dez)
Code:
BCD#1  =  1 dez = 2#0000_0001
BCD#2  =  2 dez = 2#0000_0010
BCD#11 = 17 dez = 2#0001_0001
 
Zuletzt bearbeitet:
Zurück
Oben