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

Seite 10 von 11 ErsteErste ... 891011 LetzteLetzte
Ergebnis 91 bis 100 von 103

Thema: Bin ich der Einzige der wirklich zufrieden ist mit TIA ?

  1. #91
    Avatar von miasma
    miasma ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    25.01.2008
    Ort
    Hamburg
    Beiträge
    311
    Danke
    16
    Erhielt 91 Danke für 50 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von RogerSchw85 Beitrag anzeigen
    @miasme

    Das klingt nach einem Umfangreichen Program. Was hast du für eine Steuerung?

    Wie lange hast du dich mit den neuen Steuerungen befasst um das so hinzukriegen?

    Ich finde SETIO und GETIO sehr schöne funktionen um Profinet teilnehmer anzusteuern. Das entschlüsseln der Bits direkt in ein Strukt ist sensationell einfach. Und als übergabe gibts du eine Hardwarenummer und schon kannst du Eingänge nachträglich schieben oder Namen ändern ohne dein Program anpassen zu müssen.

    Das Programm läuft in einer ET200SP CPU 1512F.
    Das Entwickeln des Programms hat 2 Wochen gedauert. Ich hatte allerdings schon vorher ein solches Programm in C# realisiert.

    Ich nutze TIA von Anfang an und habe schon mit der V 10.5 auf einer 1200er gearbeitet.

  2. #92
    Registriert seit
    29.03.2004
    Beiträge
    5.860
    Danke
    144
    Erhielt 1.721 Danke für 1.250 Beiträge

    Standard

    Zitat Zitat von HelleBarde Beitrag anzeigen
    Also Variablen zu Laufzeit symbolisch zusammen zu stöpseln ... nee nee nee
    ABER
    Zeiger auf Variablen, das wäre es
    nicht dieser verknorkste Variant.
    Abspeichern will ich sie
    und im nächsten Zyklus wieder verwenden.
    Wobei das mit dem Abspeichern der Adressen, bzw. Wiederverwendung über mehrere Zyklen z.B. bei Codesys auch nicht zulässig ist, da sich die Adressen bei Programmänderungen im Online-Modus verschieben können.
    Das ist aber kein unlösbares Problem wenn man ein neues System darauf auslegt, z.B. mit einer festen Speicherstelle die dann auf die aktuelle zeigt (doppelter Zeiger). Das kann man ja so umsetzen dass der Programmierer das nicht zu Gesicht bekommt.

    Das mit den Referenzen in der IEC 3rd Edition habe ich nur in der Überschrift gelesen, Details dazu findet man leider nicht, bzw. sind 350€ für die Norm etwas viel um da nur mal reinzuschauen. Bin mal gespannt was damit erlaubt ist. Zeigerarithmetik muss meiner Meinung nach auch nicht unbedingt erlaubt sein. Und wenn die Zeiger richtig typisiert sein müssen, kann man auch keine großen Schweinereien damit anstellen. Außerdem gibt es eine gute Überprüfung schon zum Übersetzungszeitpunkt. Dieses Variant-Konzept finde ich nicht tauglich, denn da muss ich wieder alles zur Laufzeit prüfen, und Fehlerbehandlungen ausprogrammieren.

  3. #93
    Registriert seit
    03.02.2015
    Ort
    Hatten
    Beiträge
    183
    Danke
    16
    Erhielt 32 Danke für 29 Beiträge

    Standard

    Also laut Aussage Siemens soll POKE_BLK dazu genutzt werden, um aus einem beliebigen DB in einen Speicherbeich, mit dem man weiterarbeitet, zu kopieren.
    Wenn man sich die Parameter ansieht, kann man die DB-Nummer und den Byte-Offset per DINT vorgeben.
    Dann kopiert man sich die Daten in einen Arbeitsbereich und ist damit so flexibel, wie Ralle das glaube ich haben möchte.

    Laut Siemens stehen die Befehle auch in der neuesten FW (V4.1) der 1200er zur Verfügung.

    Ansonsten sind in der 1500er weiterhin die ANY-Pointer verfügbar, um althergebracht die Probleme zu lösen.

    Der VARIANT und VREF sind nicht offengelegt und VARIANT kann nur hart codiert beschrieben werden (VARIANT_PUT).
    Geändert von JSEngineering (28.04.2015 um 10:21 Uhr)

  4. #94
    Registriert seit
    24.04.2013
    Beiträge
    309
    Danke
    23
    Erhielt 160 Danke für 88 Beiträge

    Standard

    Hi Thomas

    das mit den Referenzen der 3rd Edition schaut eigentlich ganz gut aus. Hier das Beispiel von Seite 46:

    Code:
    TYPE
      S1: STRUCT
        SC1: INT;
        SC2: REAL;
      END_STRUCT;
      A1: ARRAY[1..99] OF INT;
    END_TYPE
    
    VAR
      myS1: S1;
      myA1: A1;
      myRefS1: REF_TO S1:= REF(myS1);
      myRefA1: REF_TO A1:= REF(myA1);
      myRefInt: REF_TO INT:= REF(myA1[1]);
    END_VAR
    
    
    myRefS1^.SC1:= myRefA1^[12]; // in this case, equivalent to S1.SC1:= A1[12];
    myRefInt:= REF(A1[11]);
    S1.SC1:= myRefInt^; // assigns the value of A1[11] to S1.SC1
    Also die Referenzen sind immer typisiert. Man kann ohne Kopieren auf Werte dessen was referenziert ist zugreifen. r^.a ist der Zugriff auf a innerhalb dessen worauf r zeigt. r1 := r2 ist das Kopieren des Zeigers und r1^:= r2^ ist das kopieren der Werte. Ich denke, dass das viele offene Fragen, die wir hier immer wieder durchkauen beantwortet.

    Variant löst das alles nicht und lässt uns im Regen stehen. Jetzt darf gewettet werden. Beckhoff und Codesys werden das bestimmt bald alles vollständig drin haben. Ich weiß gar nicht, ob sie das nicht schon haben. Ich tipp mal bei Big S. auf V15 ... in drei Jahren. Kurz vor meiner Rente

    'n schön' Tach auch
    HB

  5. #95
    Registriert seit
    03.02.2015
    Ort
    Hatten
    Beiträge
    183
    Danke
    16
    Erhielt 32 Danke für 29 Beiträge

    Standard

    @HelleBarde:
    Guten Morgen!
    Ich bin etwas verwirrt von Deiner Aussage. Die Schreibweise, die ich sehe, entspricht der Pointerschreibweise. Und die gibt es doch schon!? ADR()
    Wenn wir von Referenzen sprechen, ist das ja was Anderes, eine Referenz belegt keinen Speicher, ist nur ein Synonym für die Variable.

    Code:
    PROGRAM PLC_PRG
    VAR
      MyReference    : REFERENCE TO INT;
      A              : INT;
      MyPointer      : POINTER TO INT;
      B              : INT;
    END_VAR
      
    MyReference REF= A;
    MyReference := 13;
    MyPointer := ADR(B);
    MyPointer^ := 14;
    Die Referenz ist neu, der Pointer ist meines Wissens lange implementiert (zumindest bei Bachmann's M-PLC, einem CoDeSys mit Branding).

  6. #96
    Registriert seit
    29.03.2004
    Beiträge
    5.860
    Danke
    144
    Erhielt 1.721 Danke für 1.250 Beiträge

    Standard

    Zitat Zitat von JSEngineering Beitrag anzeigen
    @HelleBarde:
    Guten Morgen!
    Ich bin etwas verwirrt von Deiner Aussage. Die Schreibweise, die ich sehe, entspricht der Pointerschreibweise. Und die gibt es doch schon!? ADR()
    Wenn wir von Referenzen sprechen, ist das ja was Anderes, eine Referenz belegt keinen Speicher, ist nur ein Synonym für die Variable.
    ...
    Die Referenz ist neu, der Pointer ist meines Wissens lange implementiert (zumindest bei Bachmann's M-PLC, einem CoDeSys mit Branding).
    Zeiger bzw. Adressoperator und ADR() waren bisher aber nicht in der IEC-Norm.
    Ohne die neue Norm zu kennen, vermute ich mal dass man Referenzen nicht addieren kann, d.h. Pointerarithmetik ist dann nicht möglich (mMn aber auch nicht schlimm).

  7. #97
    Registriert seit
    04.09.2013
    Beiträge
    44
    Danke
    11
    Erhielt 2 Danke für 1 Beitrag

    Standard

    Hallo Jungs,

    hab ne Frage zum Program_Alarm, vlt kann mir ja jemand helfen?
    Ich habe eine Motoransteuerung in SCL in der diverse Fehlermeldungen generiert werden (z.B.: <Name der Instance> meldet folgenden Fehlercode: <errCodeSEW>)
    Die Instance der Ansteuerung wird im Projekt öfters aufgerufen. Jedoch werden nicht alle Alarme generiert. Wenn ich in der HMI unter HMI-Meldungen die Steuerungsmeldungen öffne, fehlen die meisten Störungen?!
    - Habe die HMI + Projekt schon komplett neu generiert
    - die Texte der Fehlermeldungen in dem Baustein ein wenig geändert und neu generiert
    - im Projekt Ordner den "IM" Ordner gelöscht, danach alles neu generiert
    Alles hat keinen Erfolg gebracht...
    Bei Zylinderbausteinen generiere ich die Laufzeitfehlermeldungen auf die gleiche Art -> funktionieren einwandfrei!

  8. #98
    Registriert seit
    29.10.2008
    Beiträge
    160
    Danke
    28
    Erhielt 28 Danke für 18 Beiträge

    Standard

    Zitat Zitat von rostiger Nagel Beitrag anzeigen
    ...

    Ziehe ich im Massenmurks, mehre Variablen rein und packe die in ein Block und kopier diese, funktioniert
    es und TIA nennt diese selbständig um. Aus...:

    Code:
    "004-IDB".Taster.Antrieb_Start
    "004-IDB".Taster.Antrieb_Stop
    wird dann

    Code:
    004-IDB_Taster_Antrieb_Start
    004-IDB_Taster_Antrieb_Stop
    So will ich das aber nicht, da durch das entfernen des Punktes, sich nicht mehr eindeutig
    erkennen lässt wie die Variable strukturiert ist.
    ....
    Wie ist es bei dir eingestellt?:

    14-05-2015 22-21-04.jpg

  9. Folgende 4 Benutzer sagen Danke zu vita-2002 für den nützlichen Beitrag:

    herrwernersens (27.05.2015),MSRM (19.05.2015),RONIN (15.05.2015),rostiger Nagel (15.05.2015)

  10. #99
    Registriert seit
    29.10.2008
    Beiträge
    160
    Danke
    28
    Erhielt 28 Danke für 18 Beiträge

    Standard

    Zitat Zitat von miasma Beitrag anzeigen
    ...

    Diesen UDT kann ich überall aufrufen und nutzen, in den Stammdaten, im Rezept usw. ...
    UDT (PLC-Datentyp) in der Rezeptur? Bei mir geht es nicht: "Ungültige Rezepturvariable für Rezepturelement"

  11. #100
    Registriert seit
    30.08.2005
    Beiträge
    281
    Danke
    41
    Erhielt 96 Danke für 66 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    Zeiger bzw. Adressoperator und ADR() waren bisher aber nicht in der IEC-Norm.
    Ohne die neue Norm zu kennen, vermute ich mal dass man Referenzen nicht addieren kann, d.h. Pointerarithmetik ist dann nicht möglich (mMn aber auch nicht schlimm).
    So ist es: ich habe ja am Standard mitgearbeitet, und kann das aufklären. Der Wunsch war klar: wir wollten typsichere Pointer ohne Arithmetik.
    Wir wollten aber keine Referenzen die man als solche nicht erkennt. Das Ergebnis ist diese Mischung der Konzepte, für C-Programmierer sicher ungewohnt.
    Aus meiner Sicht sind das einfach typsichere Pointer ohne Arithmetik. Typsicher heisst, es gibt keinen Cast von einem Pointer auf den anderen.
    Für viele scheint das aber untrennbar verbunden zu sein, und ausserdem haben sich viele Leute an dem Begriff "Pointer" gestört.
    Pointer gelten als "unsicher", Referenzen als vergleichsweise sicher. Also haben wir das Referenz genannt und alle waren zufrieden.

    In CODESYS (und TwinCAT) ist das nicht exakt so umgesetzt. Wir haben POINTER, die völlig ungetypt sind, bzw. sich wie DWORD verhalten, man kann ganz normal mit denen rechnen
    mit allen Vor- und Nachteilen, und man kann ohne CAST einen Pointer von einem Typ auf einen Pointer eines anderen Typs zuweisen. Damit ist deutlich mehr möglich als mit den Standard-
    REFERENZ-Typen. Aber man kann auch viel Unheil damit anrichten.
    Bernhard Werner
    3S-Smart Software Solutions (CODESYS)

  12. Folgender Benutzer sagt Danke zu Werner29 für den nützlichen Beitrag:

    Thomas_v2.1 (15.05.2015)

Ähnliche Themen

  1. Lösung: Wenn der Monitor bei Tia zu klein ist
    Von jabba im Forum Stammtisch
    Antworten: 17
    Letzter Beitrag: 30.01.2014, 01:11
  2. Hallo erstmal, ich bin der NEUE ;-)
    Von Caddy im Forum Stammtisch
    Antworten: 3
    Letzter Beitrag: 08.01.2014, 18:18
  3. Sagt mal, bin ich denn der einzigste...
    Von IBN-Service im Forum Stammtisch
    Antworten: 7
    Letzter Beitrag: 20.12.2010, 07:53
  4. Antworten: 18
    Letzter Beitrag: 05.11.2007, 12:14
  5. Ist Eplan wirklich Stand der Technik?
    Von exciter0816 im Forum E-CAD
    Antworten: 8
    Letzter Beitrag: 09.06.2005, 09:39

Lesezeichen

Berechtigungen

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