TIA Steckercodierung einlesen und auswerten

Die Variante hat Alles was man braucht.
Nein, deine Variante ist absolut, Slice symolisch. Andert sich irgendeine Adresse im DB oder an den E/A, dann wird das alles automatisch im Code angepasst ( bei symbolisch ). Bei deiner Variante muss man den Code anpassen.
Wenn das genauso einfach geht, kann man das auch mit Slice machen.
Kann mir ja mal jemand zeigen.
Siemens FAQ: Wie können Sie in STEP 7 (TIA Portal) bit-, byte- oder wortweise und symbolisch auf unstrukturierte Datentypen zugreifen?
 
Zuweisung der Einzelbits auf ein Datenwort.Ist recht einfach.
Als Integerwort DB1.DBW0
Als Bsp.
U E0.0
=DB1.dbx1.0
U E0.1
=DB1.dbx1.1
u.s.w.
(...)
Am Ausgang zeige ich dann die Kombination dezimal an.
Dein uralt-Code ist sehr dirty und nicht multitasking-fähig (HMI-Zugriffe! bei S7-400/1200/1500 und ggf. S7-300)
Außerdem geht das nicht mit "optimierten" DB.

Wenn das genauso einfach geht, kann man das auch mit Slice machen.
Kann mir ja mal jemand zeigen.Den programmcode hier schriebt man in 5 Minuten.
So kann man das sauber programmieren (auch in 5 Minuten):
Code:
#tempWordVar := 0;
#tempWordVar.%X0 := E0.0;
#tempWordVar.%X1 := E0.1;
...

"DB1".Steckernummer := WORD_TO_INT(#tempWordVar);

Um aus Bits von mehreren Digitaleingängen einen Zahlenwert zu machen, kann man zunächst die Bits von den (möglicherweise verstreut liegenden) Eingängen in einen Bitstring (WORD) einsammeln. Dann kann das Bitmuster in dem WORD in einen numerischen Wert (eine Zahl) konvertiert (z.B. WORD_TO_INT) und in eine numerische Variable kopiert werden, und dann als Zahl (z.B. Steckernummer oder Index in eine Textliste) verwendet werden.
 
Ja mit dem bin ich ja einvestanden.Da du immer soviel mit Tempvariablen arbeitest.
Kann man die beliebig benutzten, von der Anzahl her?Früher las ich mal das irgendwann der Stapel überläuft.
 
Da du immer soviel mit Tempvariablen arbeitest.
Kann man die beliebig benutzten, von der Anzahl her?Früher las ich mal das irgendwann der Stapel überläuft.
siehe in den technischen Daten der verwendeten CPU die Größe der Lokaldaten, z.B. max. 16 kbyte pro Baustein - das reicht dicke für "beliebig" viele Einzelvariablen ohne groß nachdenken (es sei denn, man arbeitet sehr viel mit z.B. Strings ohne Größenangabe oder große Arrays)

PS: der Stapel/TEMP-Speicher läuft nicht über, der Compiler überwacht die benutzte TEMP-Speicher-Größe und wirft Fehler, falls zu viel benutzt.
 
Zurück
Oben