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

Ergebnis 1 bis 8 von 8

Thema: Blockmove mit Any auf Struktur und wieder zurück in Any. Ich krieg krämpfe

  1. #1
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.620
    Danke
    777
    Erhielt 647 Danke für 493 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi zusammen.

    Ich hab ja in Step7 einen Funktionsbaustein gemacht die mir aus einem beliebigen Bereich eines DBs die Werte in einen temporären UDT Bereich legt und am ende des Funktionsbausteins wie aus dem UDT Bereich zurückkopieren auf den ANY an der Schnittstelle deklarierten ANY.

    Auf der S7 1500 in TIA scheint das nicht mehr zu gehen.

    Code:
    (*Pointer auf UDT schreiben zum arbeiten*) // Ventilator allgemein#pLS_Strahlventilator.Bereichstyp := 2;   // Typ des Bereichs soll Byte sein (INT = 2)
    #pLS_Strahlventilator.Anzahl_Werte := 112; // Länge des Pointers weil wir einen Any ohne Länge angeben wollen
    // Muss so lange sein wie der UDT der angezeigt werden soll.
    #Ret := BLKMOV(SRCBLK := #LS_Strahlventilator, DSTBLK => #SV); // Kopieren in die Temporäre Variable.  
    
    
    (*Eigentlicher Programmteil starten*)
    (*Hier wird der Pointer zurückgeschrieben*)
    #Ret := BLKMOV(SRCBLK := #SV, DSTBLK => #LS_Strahlventilator); // Ventilator allgemein
    Beim roten kommt bei mir ungültige Parameterzuweisung.
    LS_Strahlventilator ist vom Typ ANY am Bausteineingang deklariert.

    pLS_Strahlventilator ist eine AT Sicht vom Typ ANY_Pointer (UDT um einen ANY umzubauen).

    SV ist eine UDT Struktur. von der Länge 112 Byte und darum gehts mir. Ich will am LS_Strahlventi den ersten Datenpunkt einer beliebigen unbekannten struktur eines DBs anhängen. und dann einfach die 112 fortfolgenden Bytes verschieben in einen im TEMP deklarierten UDT. Und dies am Ende wieder zurück.

    mfG René
    Zitieren Zitieren Blockmove mit Any auf Struktur und wieder zurück in Any. Ich krieg krämpfe  

  2. #2
    Registriert seit
    08.06.2015
    Beiträge
    1
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hi Vollmi
    es dürfte daran liegen, dass #LS_Strahlventilator ein INput Parameter ist, und ein Rückschreiben auf Eingänge ist verriegelt. Wenn du es als INOUT deklarierst sollte es gehen.
    Du könntest aber auch mit einer normalen Zuweisung arbeiten, wenn du aussen die Struktur selbst anstelle eines Zeigers verschaltest. Du könntest dort auch indizierte Arrayzugriffe angeben. Vorraussetzung wäre, dass alle Parameter in dem Spiel vom selben UDT abgeleitet werden. Was hindert dich daran?

    Viel Erfolg
    Magnet!

  3. #3
    Avatar von vollmi
    vollmi ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.620
    Danke
    777
    Erhielt 647 Danke für 493 Beiträge

    Standard

    Zitat Zitat von Magnet Beitrag anzeigen
    Hi Vollmi
    es dürfte daran liegen, dass #LS_Strahlventilator ein INput Parameter ist, und ein Rückschreiben auf Eingänge ist verriegelt. Wenn du es als INOUT deklarierst sollte es gehen.
    Das werd ich gleich probieren. Wäre aber unlogisch, denn auf einen Pointer kann man ja nicht schreiben. Man schreibt ja dahin wo der Pointer hinzeigt.

    Du könntest aber auch mit einer normalen Zuweisung arbeiten, wenn du aussen die Struktur selbst anstelle eines Zeigers verschaltest. Du könntest dort auch indizierte Arrayzugriffe angeben. Vorraussetzung wäre, dass alle Parameter in dem Spiel vom selben UDT abgeleitet werden. Was hindert dich daran?
    Das will ich eben genau nicht. Der DB von dem Gelesen und geschrieben wird ist eben vorgegeben, keine Strukturen nur aufeinanderfolgende Wörter. der Inhalt wiederholt sich ansich aber immerwieder darum möchte ich dann gerne indiziert darauf zugreifen und nur immer das erste Wort einer solchen Wiederholung am Baustein anhängen und intern dann trotzdem mit einer Struktur arbeiten.

    mfG René

  4. #4
    Avatar von vollmi
    vollmi ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.620
    Danke
    777
    Erhielt 647 Danke für 493 Beiträge

    Standard

    Addendum:
    Wenn ich den ANY am INOUT deklariere dann kann ich ihn sauber am Blockmove anhängen fehlerfrei. Nur kann ich in der INOUT deklaration keine AT überlagerung definieren. Das geht nur an IN oder natürlich im Stat und Temp. Nützt mir nur nix.
    Ein Kreuz mit dem TIA manchmal.

    mfG René

  5. #5
    Avatar von vollmi
    vollmi ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.620
    Danke
    777
    Erhielt 647 Danke für 493 Beiträge

    Standard

    So jetzt klappts. Ich kopiere jetzt den inhalt von ANY vom IN in einen ANY von Temp.
    Code:
    #any_LS_Strahlventilator := #LS_Strahlventilator;
    Und mach dann auf dem Any im Temp eine AT überlagerung.
    So funktionierts.
    Wenn man jetzt irgendwie mit der 1500er oder TIA die Länge eines UDT ermitteln könnte wäre ich dann schon fast wieder glücklich.

    mfg René

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

    Standard

    Hi all

    das ist die Trickserei der AS400, die eine AS1500 langsam macht.
    So entstehen unwartbare Programme.

    Wenn es eine Struktur ist, die sich in einem DB wiederholt, dann sollte der DB ein Array of UDT enthalten.
    Das zeitverschwendende Herumgeeiere mit einem standard DB gehört ins Jahr 1990.

    'n scön' Tach auch
    HB

  7. #7
    Avatar von vollmi
    vollmi ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.620
    Danke
    777
    Erhielt 647 Danke für 493 Beiträge

    Standard

    Das musst du mir nicht sagen. Aber wenn ich sage die Struktur wird mit UDTs in der Datenpunktliste besser. Fehler lassen sich einfacher vermeiden. Dann sagen mir Die kurz vor Pensionierung dann. "Wir haben schon immer Absolut adressiert das geht schnell und funktioniert. Wir lassen für die Pointer einfach zwischen den Objekten genügend Reserveworte im DB das man den Pointer später nicht verstellen muss wenn man dem Objekt einen Datenpunkt mehr braucht."

    Sie wollen unbedingt absolute adressen weil man sonst zuviel Tippen muss. Darum heissen unsere Symbole im DB auch
    "DB101"._DBW_100_0 oder "DB101"._DBX_102_1

    Bis jetzt hab ich es nicht hingekriegt die älteren Semester von der Symbolischen Objektorientierten Programmierung zu überzeugen. Von UDTs haben die meisten noch garnix gehört oder halten sie für Teufelswerk.

    Wenn mir jemand Argumente liefert mit dem ich wirklich jeden umdrehen kann kriegt er von mir n Fass Bier spendiert.

    mfG René

  8. #8
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.404 Danke für 2.002 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    @René:
    Du mußt deinen Chef überzeugen - nicht deine Kollegen. Alle Menschen sind von Natur aus bequem. Selbst wenn ein Änderungsvorschlag 100mal besser ist (und etwas in der Art traue ich dir durchaus zu) wirst du sie so ohne Weiteres nicht davon ab bekommen weiter "mit Hammer und Meissel ihren Programmcode auf einer Steinplatte einzuritzen".
    Du darfst ihnen oder auch deinem Chef diesen Kommentar durchaus zeigen ...

    Gruß
    Larry

Ähnliche Themen

  1. TIA Struktur zurück Adressieren
    Von MadMax im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 10.06.2015, 10:40
  2. Antworten: 1
    Letzter Beitrag: 10.12.2012, 11:14
  3. Wie krieg ich diese Verzweigung weg?
    Von DjTommyB im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 30.03.2010, 15:43
  4. Mitsubishi Ethernet - ich krieg es nicht hin
    Von elektro_mensch im Forum Sonstige Steuerungen
    Antworten: 2
    Letzter Beitrag: 22.10.2007, 00:20
  5. DB in Quelle und wieder zurück
    Von Eckart im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 21.10.2006, 21:25

Lesezeichen

Berechtigungen

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