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

Seite 1 von 4 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 36

Thema: TIA - Softwarestruktur

  1. #1
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.745
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich will mal Testweise unser Programm auf 1500 umstellen. Dazu versuche Ich nun das ganze auch vollsymbolisch etc zu lösen. Nun, wir Programmieren Fördertechnik, und haben für jeden Stellplatz einen DB! Diese Struktur möchten wir auch gerne beibehalten, da ein DB mit einem Platzarray uns zu unflexibel etc erscheint. Auch sehen wir da Schwierigkeiten beim erweitern, und wollen ja auch die Platznamen und nicht ein Arrayindex im Program verwenden.

    Ok, nun zu meinem Problem. Wie gesagt Ich habe einen DB für jeden Platz. Dieser wird als Instanz eines UDTs erzeugt. In den ersten 10 Bytes steht nun der Platzname. Nun habe Ich eine Kopplung welche Telegramme empfängt, welche dann in den entsprechenden Platz DB kopiert werden sollen.

    Dies geht unter AWL so: Ich gehe alle DB's von 1000 bis max durch, vergleiche den Platznamen, wenn gleich trage Ich die Daten in den DB ein! Funz ja alles da Ich indirekt adressieren kann! Ist dies auch mit SCL in TIA und vollsymbolischen DBs möglich?
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten
    Zitieren Zitieren TIA - Softwarestruktur  

  2. #2
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.745
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Keine ne gute Idee?
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  3. #3
    Registriert seit
    05.10.2006
    Beiträge
    324
    Danke
    11
    Erhielt 8 Danke für 7 Beiträge

    Standard

    Du kannst doch das ganze in SCL mit ner z.B. for-Schleife durchlaufen, in der Schleife dann den Platznamen vergleichen falls richtig die Daten eintragen und die Schleife beenden?!?!

  4. #4
    Registriert seit
    09.11.2007
    Ort
    Rhein Main (Darmstadt)
    Beiträge
    663
    Danke
    61
    Erhielt 112 Danke für 80 Beiträge

    Standard

    So wie ich das sehe, musst Du über alle Platz Instanzen iterieren, dort jeweils eine Get Property aufrufen, die Dir den zugehörigen Datenbaustein liefert und dann kommt der Vergleich und wenn gefunden der Datenupdate.

    Die Get Property sollte eine Referenz auf den DB liefern, dann kannst Du direkt auf die Daten zugreifen und schreiben oder Du brauchst auch noch eine Set Property, wenn es "ordentlich" und sicher sein soll.

    So würde ich das in Codesys ST angehen. Wie schon öfters angedeutet mit TIA und Siemens kann es weniger elegant sein, aber nach einigen Programmen mit 1200 und TIA 11 abe ich schnell wieder dieses Feld den Siemens Fans überlassen.
    Als Freelancer immer auf der Suche nach interessanten Projekten.

  5. #5
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.745
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Zitat Zitat von Pico1184 Beitrag anzeigen
    Du kannst doch das ganze in SCL mit ner z.B. for-Schleife durchlaufen, in der Schleife dann den Platznamen vergleichen falls richtig die Daten eintragen und die Schleife beenden?!?!
    Ich will ja die Platznamen nicht in meinem Kopplungsbaustein hinterlegen, sonst muss Ich den Baustein ja bei jeder Analgen anpassen! Im Moment lese Ich diese aus den DBs!
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  6. #6
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.745
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Ja aber wie kann Ich über die Platz Instanzen Iterieren? Die sind ja nicht in einem Array...
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  7. #7
    Registriert seit
    05.10.2006
    Beiträge
    324
    Danke
    11
    Erhielt 8 Danke für 7 Beiträge

    Standard

    Ja aber wie kann Ich über die Platz Instanzen Iterieren? Die sind ja nicht in einem Array...
    Du kannst doch in der Schleife einen Index für die DB Nummer inkrementieren......(aber vollsymbolisch ist das halt nicht)

    Code:
    Platz_DB : INT;
    
    WORD_TO_BLOCK_DB(INT_TO_WORD(Platz_DB)).XXXXX

  8. #8
    Registriert seit
    03.04.2008
    Beiträge
    6.200
    Danke
    237
    Erhielt 815 Danke für 689 Beiträge

    Standard

    Zitat Zitat von Pico1184 Beitrag anzeigen
    Du kannst doch in der Schleife einen Index für die DB Nummer inkrementieren......(aber vollsymbolisch ist das halt nicht)

    Code:
    Platz_DB : INT;
    
    WORD_TO_BLOCK_DB(INT_TO_WORD(Platz_DB)).XXXXX
    Jetzt sind wir so weit:
    Warum auch vollsymbolisch programmieren?

    Ich halte meine Belegung, ob oder ob nicht, in einem DB aus dieser Position in diesem Baustein berechne ich den entsprechenden DB.
    Das geht symbolisch, da die Symbole so angelegt sind.
    Muss mal schauen, ob das noch in TIA geht, habe ich noch nicht.


    bike
    "Any fool can write code that a computer can understand.
    Good programmers write code that humans can understand."
    --Martin Fowler

  9. #9
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.745
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Zitat Zitat von Pico1184 Beitrag anzeigen
    Du kannst doch in der Schleife einen Index für die DB Nummer inkrementieren......(aber vollsymbolisch ist das halt nicht)
    Genau darum gehts mir ja aber! Anders würde Ichs schon hinbekommen!
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Wenn ich dich richtig verstehe, würde man für so etwas einen Zeiger oder Referenzen verwenden.
    Zumindest würde ich mir dann ein Array von Referenzen anlegen, die Adressen (Zeiger) auf die entsprechenden DBs setzen und dann in einer Schleife alle durchgehen.

    Leider gibt es für "optimierte" Programmierung im TIA-Portal weder Zeiger noch Referenzen, das heißt man muss sich was anderes überlegen.

    Eine Möglichkeit die auch die Hilfe aufzeigt, ist, einen FC zu schreiben der anhand eines übergebenen Index die zugehörige UDT zurückgibt. Das ist sozusagen eine händisch ausprogrammierte Liste.
    Code:
    FUNCTION "GetTypeDbByIndex" : "dtTest1"
    VERSION : 0.1
       VAR_INPUT 
          Index : Int;
       END_VAR
    BEGIN
    	CASE #Index OF
    	    1:
    	        #GetTypeDbByIndex := "DBofdtTest1_1";
    	    2:
    	        #GetTypeDbByIndex := "DBofdtTest1_2";
    	    3:
    	        #GetTypeDbByIndex := "DBofdtTest1_3";
    	END_CASE;
    END_FUNCTION
    Dem Programmierer der etwas auf Effizienz bedacht ist, stellen sich dabei natürlich die Fußnägel auf. Weil jedes Mal je nach Größe der Struktur mehr oder weniger große Datenmengen durch die Gegend kopiert werden, wo in jeder anderen Sprache ein Zeiger/Referenz gereicht hätte.

    Wenn mit der gleichen Denkweise das TIA-Portal programmiert wurde, wundert es einen nicht warum alles so zäh und langsam ist.

    Es gibt noch den Datentyp "Variant", der evtl. mal für sowas gedacht ist. Aber dieser Datentyp ist irgendwie nur da, ohne dass er dokumentiert ist was man sinnvolles damit anstellen kann. Bei V13 sind in der Hilfe ein paar Erläuterungen und komische Funktionen wie VariantPut/Get hinzugekommen, aber ich bin noch nicht schlau geworden was man damit anstellen können soll.

    Diesen ganzen Zoo von Hilfsfunktionen und komischen Datentypen hätte man weglassen können, indem man ganz einfach einen Zeiger/Referenzdatentyp ermöglichen würde. Vielleicht kommt sowas ja in V19 so gegen 2026...

  11. Folgender Benutzer sagt Danke zu Thomas_v2.1 für den nützlichen Beitrag:

    Ralle (10.03.2015)

Ähnliche Themen

  1. Antworten: 22
    Letzter Beitrag: 10.08.2017, 09:48
  2. [TIA-V11] Rechnet TIA falsch bei SCL
    Von BlackLizzard im Forum Simatic
    Antworten: 43
    Letzter Beitrag: 09.02.2016, 02:59
  3. TIA Kompatibilität TIA Professional <--> TIA Basic
    Von TimeOUT im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 21.08.2015, 19:28
  4. Antworten: 0
    Letzter Beitrag: 06.04.2012, 08:37
  5. Antworten: 0
    Letzter Beitrag: 22.01.2012, 18:59

Lesezeichen

Berechtigungen

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