TIA Eingangswort ab Basisadresse lesen....wie macht man das am besten....

Tmbiz

Level-2
Beiträge
583
Reaktionspunkte
15
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, ich habe eine Waage von der ich Diverse Signale bekomme und auch wieder schreiben muss. Ich habe eine Logik die bei mir Logik Waage heisst. Diese Logik möchte ich für 1-4 Waagen nutzen. Daher kann ich in dem Baustein in dem die Logik steht, keine Direkte Adresse nutzen. Ich möchte aber auch nicht eine grosses Interface bauen. Ich stelle mir vor, dass ich eine Basisadresse habe und eine Logik mir ab dieser Adresse dann die Bits ausliesst.

AWL:
Code:
CALL  #Aufruf_Logik_Waage_1
         BasisAdresse :=256
         IQ           :=#waageIF_1

      CALL  #Aufruf_Logik_Waage_2
         BasisAdresse :=356
         IQ           :=#waageIF_2

Die Daten Bereiche sind so aufgeteilt:

zur Steuerung von der Waage kommen:

2 Word 256...289
1 Byte 260
1 Byte 261
1 Byte 262
1 Byte 263

von der Steuerung zur Waage:

2 Word 265...259
2 Word 260...263
1 Word 264...265
2 Word 266...269
1 Word 270...271
1 Word 272...273
2 Word 274...277
2 Word 278...281
2 Word 282...285

Für die Waage Nr. 2 geht das dann ab 365 los usw.

Ich möchte nun gerne in SCL eine Logik haben, die nach einem entsprechenden Muster die Daten einliesst. Wie muss ich das machen?
 
Erstell' Dir für Deine Waage je einen UDT mit der Datenzusammensetzung für Ein- und Ausgänge.
Den legst Du in der Variablentabelle auf die jeweils erste Adresse der Hardware-Ein- bzw -Ausgänge der jeweiligen Waage und kannst dann voll symbolisch arbeiten, ohne Dich um den Rest kümmern zu müssen.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Unbenannt.jpg

Ja ich habe schon eine PLC Datentyp mit meiner Interface.

Zum Test ist dort
Brutto
Netto

Ich kann also im meiner LogikWaage

diesen Aufruf machen:
IQ.Netto oder IQ.Brutto oder IQ.Status.Bereit

Aber wie mache ich die Zuordnung
von z.B. von der

Ich möchte nun IQ.Nette mit dem Wert beschreiben, der vom Eingang Basisadresse kommt.
 
Diesen Datentyp weist du in einer Variablentabelle der Anfangsadresse deiner Waage zu:
In meinem Fall ein Datentyp, der aus zwei Word-Variablen besteht und auf EW2 bis EW5 liegt.

udt.PNG

Du brauchst für Eingangs und Ausgangsdaten einen eigenen Datentyp.
 
Diesen Datentyp weist du in einer Variablentabelle der Anfangsadresse deiner Waage zu:
In meinem Fall ein Datentyp, der aus zwei Word-Variablen besteht und auf EW2 bis EW5 liegt.

Anhang anzeigen 41164

Du brauchst für Eingangs und Ausgangsdaten einen eigenen Datentyp.

Aber dann habe ich doch wieder eine absolute Adresse ich möchte ohne viel Aufwand, denn Baustein LogikWaage kopieren können und dann nur noch am Aufruf die Basisadresse eingeben. Dann soll es von allein gehen. Ich brauche daher im Baustein eine Logik, die mir alles einliesst, was ab 256.0 kommt und auf die entsprechenden Speicher schreibt.


Die Logik ist immer die gleiche die Logik verarbeitet immer das was von Eingang Basisadresse kommt. Das kann ja nach Aufruf der Logik bei EW 256, 356, 456, 556 kommen und schreibt es dann auf IQ.WageIF1.Brutto

Wenn ich das so mache wie du gesagt hast, muss ich verschiedene varianten von Logik machen. Einmal für Waage1 und Waage2 usw.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wir verwenden dafür immer get_io und set_io. So kommst du via Namen der Waage auf die IO's. Welche Adresse die dann haben ist absolut egal. Das ist danach voll Symbolisch. Weil du hast absolut Recht, in der Symbolischen Programmierung gibt es keine Adressen mehr...
 
Wenn ich das so mache wie du gesagt hast, muss ich verschiedene varianten von Logik machen. Einmal für Waage1 und Waage2 usw.

Wieso? Du kannst den FB ja immer verwenden, nur weist du ihm einmal die in der Variablentabelle deklarierten Daten für Waage1 zu, beim nächsten Aufruf für Waage2 usw.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe es nun so gemacht

Hier meine Code in SCL:

Code:
"ReadWaage_DB"(BasisAdresse:=#BasisAdresse,IQ:=#IQ);
 
#Gewicht := #IQ.Brutto;

Hier mein Code in AWL:

Code:
LAR1  #BasisAdresse
      L PED [ AR1 , P#0.0 ]
      T     #IQ.Brutto

      L PED [ AR1 , P#4.0 ]
      T     #IQ.Netto

Ich übergebe die Basisadresse vom SCL Bautein (EW 256) im Baustein LogikWaage auf den Baustein ReadWaage dort wird meine AWL Code ausgeführt und dann geht es zurück zum SCL Teil Logik Waage.

Das was ich da in AWL mache, möchte ich direkt in SCL machen. Ich möchte keine Übergabe von LogikWaage SCL auf ReadWaage AWL machen.
 
Ja aber das kommt von Aussen. Ich muss dann LogikWaage nur noch mal aufrufen und eine andere Adresse z.B. EW 356.0 eingeben. Die Logik in Baustein ReadWaage und oder Logik Waage wird sich nicht verändern. Ich kann die so oft aufrufen wie ich das will.
 
Es gibt einen Bereich an dem ich sagen muss, dass es eine Absolute Adresse gibt. Aber in der Logik gibt des Programmes gibt es das nicht. Ich möchte aber auch keine grosses Interface und meine ganzen ein und Ausgänge einzeln auf eine Interface legen. Ich möchte einen Start und dann ab da mit einer Logik alles einlesen.
 
Es gibt einen Bereich an dem ich sagen muss, dass es eine Absolute Adresse gibt. Aber in der Logik gibt des Programmes gibt es das nicht. Ich möchte aber auch keine grosses Interface und meine ganzen ein und Ausgänge einzeln auf eine Interface legen. Ich möchte einen Start und dann ab da mit einer Logik alles einlesen.

Jetzt nochmal von Vorne:
Variablentabelle
Waage1 : UDTWaageIN := EW256 ;

Baustein
VAR_IN
Waage_IN : UDTWaageIN ;
END_VAR

Aufruf Baustein
Call Waage
Waage_IN := Waage 1

Fertig. 100% Symbolisch, 100% in der Variablentabelle, Definitiv keine Riesen Schnittstelle.
Wenn es überhaupt was gibt, was bei TIA unstrittig besser ist, dann genau das.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
100% Symbolisch, 100% in der Variablentabelle, Definitiv keine Riesen Schnittstelle.
Bzw. in Bildern:

udt für die INs:
attachment.php


Analog einen Udt für die OUTs...


Diese in der Variablentabelle auf die Hardware legen:

attachment.php



Und der Baustein-Aufruf voll symbolisch:

attachment.php




Keine absoluten Hardwareadressen in irgendwelchen Bausteinen!
 

Anhänge

  • udtIN.jpg
    udtIN.jpg
    15,3 KB · Aufrufe: 158
  • udt VT Hardware.jpg
    udt VT Hardware.jpg
    13,7 KB · Aufrufe: 154
  • udt Aufruf.jpg
    udt Aufruf.jpg
    20,3 KB · Aufrufe: 155
Bzw. in Bildern:

udt für die INs:
attachment.php


Analog einen Udt für die OUTs...


Diese in der Variablentabelle auf die Hardware legen:

attachment.php



Und der Baustein-Aufruf voll symbolisch:

attachment.php




Keine absoluten Hardwareadressen in irgendwelchen Bausteinen!

Ja aber dann kommen doch noch weitere Eingänge

Auf den Eingang Waage1_IN in deinem Beispiel, müssen diese gesamten Daten kommen:

2 Word 265...259
2 Word 260...263
1 Word 264...265
2 Word 266...269
1 Word 270...271
1 Word 272...273
2 Word 274...277
2 Word 278...281
2 Word 282...285
 
Ja aber dann kommen doch noch weitere Eingänge

Auf den Eingang Waage1_IN in deinem Beispiel, müssen diese gesamten Daten kommen:

2 Word 265...259
2 Word 260...263
1 Word 264...265
2 Word 266...269
1 Word 270...271
1 Word 272...273
2 Word 274...277
2 Word 278...281
2 Word 282...285
Musst du halt im entsprechenden UDT (einmalig) entsprechend Eintippen.
Solange das ganze Lückenlos stattfindet (wie bei dir ja offensichtlich der Fall), völlig egal.
In jedem Fall ist und bleibt das ganze genau ein IN und OUT Parameter an der Schnittstelle.

Du kannst auch z.B. die Status-Geschichten, als eine entsprechende Anzahl einzelne Bools eintippen.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja aber dann kommen doch noch weitere Eingänge

Auf den Eingang Waage1_IN in deinem Beispiel, müssen diese gesamten Daten kommen:

2 Word 265...259
2 Word 260...263
1 Word 264...265
2 Word 266...269
1 Word 270...271
1 Word 272...273
2 Word 274...277
2 Word 278...281
2 Word 282...285
Die stehen doch alle im Udt!

Im FB greifst Du mit WaageIn.Word1, WaageIn.Word2 usw. darauf zu.
Und immer noch voll symbolisch!
;)
 
Nein, du gibst ja in der Struktur deines Datentyps an, welche Daten zur Waage gehen bzw. welche von dieser kommen, den UDT legst du auf die Anfangsadresse deiner E/A-Daten, der Rest geht automatisch!
Das funktioniert genau so wie du willst, und innerhalb deines FB greifst du symbolisch auf alle Daten der UDT zu.
 
Zurück
Oben