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

Ergebnis 1 bis 8 von 8

Thema: [ TwinCAT ] POEs im laufenden Betrieb austauschen

  1. #1
    Registriert seit
    29.07.2005
    Beiträge
    82
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Gib es in TwinCAT eigentlich eine Möglichkeit "Projektteile" wie Funktionsbausteine oder andere POE oder gar ganze Programme zur Laufzeit auszutauschen?

    Hintergrund dieser Frage ist, dass ich ja nicht immer gleich die ganze Anlage abschalten kann/darf sobald ich auch nur eine einzige Änderung im Coding mache. Was ich eigentlich brauche sind ganz viele kleine Soft-SPSen die ich zur Laufzeit bliebig und ggf. mit geändertem Coding rauf- und runterfahren kann.

    Wenn ich das richtig sehe, kann ich natürlich im System-Manager zusätzlichen Task definieren und die Soft-SPSen in einer Hochsprache lösen (z.B. jede SoftSPS in eigenen Task oder Prozess). Allerdings bin ich anforderungsmässig an die IEC Sprachen und TwinCAT-PLC gebunden.

    Weitere Frage: Gibt es eine Möglichkeit irgendwelche POEs dynamsich zu Laufzeit zu erzeugen?

    Hintergrund: Die Definition der Soft-SPSen (Typ, IO, Parameter, usw.) ist ein Parameter meiner Anwendung, d.h. ich weiss zur Compilezeit noch gar nicht genau welche und wie viele das überhaupt sind.

    Eine Lösung wäre ein Array von Funktionsbausteinen vom Typ SoftSPS anzulegen und Typ, IO und Parameter zur Laufzeit zu setzen. Problem dabei ist nur, dass mich die nachher unbenutzten FB reichlich Resourcen (Speicher, CPU, usw.) kosten.
    Zitieren Zitieren [ TwinCAT ] POEs im laufenden Betrieb austauschen  

  2. #2
    Registriert seit
    29.09.2006
    Beiträge
    368
    Danke
    0
    Erhielt 41 Danke für 38 Beiträge

    Standard

    Hallo,

    Du kannst ein sogenannten OnlineChange mit dem PlcControl durchführen, aber das Tool benötigst Du immer dazu - von Deiner Applikation bzw. Dein Programm kann dies nicht.

    Viele Grüße

  3. #3
    caret ist offline Benutzer
    Themenstarter
    Registriert seit
    29.07.2005
    Beiträge
    82
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Habe eine Möglichkeit gefunden Funktionsbausteine zur Laufzeit (in einem vorher reserviertem Speicherbereich) zu erzeugen und wollte die hier mal vorstellen bzw. zur Diskussion stellen:
    VAR
    fbMyFb:FB_MY_FB;
    arrFakeFb:ARRAY[0..1023] OF BYTE;
    ptrFakeFb:POINTER TO FB_MY_FB;
    END_VAR


    iF ( bMakeCopy=TRUE ) THEN
    ptrFakeFb:=ADR(arrFakeFb)
    MEMCPY( ptrFakeFb, ADR(fbMyFb), sizeof(fbMyFb) );
    END_IF

    fbMyFb();
    ptrFakeFb^();
    Aufpassen muss ich dabei nur, dass mein arrFakeFb Array mindestens die Größe sizeof(FB_MY_FB) hat (notfalls leg ich es entsprechend großzügig aus) und das der MEMCPY nur einmal aufgerufen wird.
    Das ganze lässt sich natürlich auf mehr Instanzen ausweiten. Da es allerdings kein malloc wie in C gibt muss ich natürlich zur Compilezeit sowiel Speicherplatz reservieren wie ich nachher max. Funktionsbausteine erzeugen möchte. Entsprechend auch ein Array von Pointern, die in diesen Speicher zeigen.

    Das ganze ich zwar irgendwie eine Pointer-Schweinerei, aber es funktioniert. Was ich mich allerdings frage ist, ob ich solchen Code auch problemlos auch auf andere Steuerungen direkt portieren kann.

  4. #4
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.697 Danke für 1.949 Beiträge

    Standard

    Was ich mich frage, wenn du eh den Speicherplatz schon vorher reservieren mußt, kannst du doch auch gleich die Funktionen zur anlegen und erzeugen. Was bringt das Ganze, außer, daß kam jemand anderes hinterher mit dem Code klarkommt.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  5. #5
    caret ist offline Benutzer
    Themenstarter
    Registriert seit
    29.07.2005
    Beiträge
    82
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von Ralle Beitrag anzeigen
    Was ich mich frage, wenn du eh den Speicherplatz schon vorher reservieren mußt, kannst du doch auch gleich die Funktionen zur anlegen und erzeugen. Was bringt das Ganze, außer, daß kam jemand anderes hinterher mit dem Code klarkommt.
    Das mit der fehlenden Übersichtlichkeit des Codes ist ein Punkt den ich in Kauf nehmen muss. Die Vorteile wiegen es einfach auf. Für meine Anwendung benötige ich eine sehr große Anzahl von IOs die von sehr vielen relativ kleinen Soft-SPSen angesteuern werden. Bei den Soft-SPSen unterscheide ich noch etliche Typen, d.h. die laufen mit unterschiedlichem Coding. Die Idee ist nun jede SoftSPS durch einen FB zu realisieren. Knackpunk der dynamischen FBs ist, dass ich im Betrieb der Anlage volle Kontrolle über die SoftSPSen hab, d.h. ich kann sie zur Laufzeit umparametrieren, ein- und ausschalten, den Typ ändern usw. ohne, dass ich die ganze Anlage anhalten muss. Des Weiteren erfolgt die initiale Definition der Soft-SPSen aus einer Parameterdatei heraus, d.h. ich lade bei hochlaufen der Steuerung eine Datei mir den Definitionen. Insbesondere weiß ich zum Compilezeitpunkt also noch gar nicht welche und wie viele Soft-SPSen ich benötige. Das einzige was ich weiß ist wieviel Speicher und GHz meine Steuerung hat wodurch die max. Anzahl Soft-SPSen begrenzt ist.

    EDIT: Wenn ich Speicher dynamisch allokieren könnte wäre das natürlich noch besser. Aber scheinbar gibt es diese Möglichkeit ja nicht, weshalb ich mir eben mit statischem Speicher behelfen muss.
    Geändert von caret (17.10.2009 um 00:22 Uhr)

  6. #6
    Registriert seit
    19.11.2006
    Beiträge
    1.346
    Danke
    6
    Erhielt 254 Danke für 231 Beiträge

    Standard

    Also ich persönlich halte deine Idee für Schwachsinn.

    Im TwinCAt System Manager musst du die E/As mit dem E/A-Prozessabbild für die "Soft-SPS" (ich nenne es Runtime) vorher definieren und Verknüpfungen herstellen.
    Somit ist die E/A-Größe und der Weg in die SPS schonmal fest und im laufenden Betrieb nicht änderbar.

    Du kannst bei Twincat bis zu 4 SPS-Runtimes erstellen und sogar einzelne Abschalten. Allerdings nicht beliebig, glaube ich, denn die Runtime mit der höchsten Priorität muss immer laufen... kann mich aber auch irren.
    Doch auch hier muss das E/A-Prozessabbild voher feststehen.

    Das einzige, was du beeinflussen kannst, ist die Ausführung von PRGs und FBs zur Laufzeit.
    Hier könntest du über simple boolsche Befehle einzlene PRGs ausführen oder auch nicht.
    Anhand der momentan am Bus vorhandenen E/As (Maschinenteile) würde dann ein Stück Code ausgeführt oder eben nicht.

    Das ganze Pointer-Gerickel bringt mehr Risiken als Nutzen, finde ich.

  7. #7
    Registriert seit
    07.03.2004
    Beiträge
    4.369
    Danke
    946
    Erhielt 1.158 Danke für 831 Beiträge

    Standard

    Der Sinn dieser Aktion erschließt sich mir so gar nicht. Ich hoffe nur das Du weißt was Du da treibst. Wäre trotz dem nett wenn Du versuchen würdest die Intention Deines Vorhabens zu erläutern. Bei den SoftSPSen aus dem Hause Beckhoff sollte der Speicherplatz wirklich kein Problem sein.
    If you open your Mind too much, your Brain will fall out.

  8. #8
    caret ist offline Benutzer
    Themenstarter
    Registriert seit
    29.07.2005
    Beiträge
    82
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ja, ich ich weiss genau was ich tue. Ich weiss nur nicht ob es evtl. eine elegantere Lösung gibt.

    Um mal eine Größenordung für unsere Anwendung zu geben:

    Für die Steuerung von 1500 IOs und 20 RS422 benötigen wir um die 500 SoftSPSen die bis zu 30 unterschiedliche Typen haben. Alle SoftSPSen kommunizieren über TCP/IP mit der Leitebene. Je nach Anlagengröße benötigen wir bis zu einem Dutzend echter SPSen die die eben genannten Leistungsmerkmale erfüllen. Klingt recht mächtig, ist aber machbar. Wir haben nämlich bereits eine sehr gut funktionierende Lösung in C/C++ unter einem Realtime Linux auf der Basis von Embedded Siemens PCs laufen. Aus "politischen" Gründen möchten wir aber auch eine Lösung unter TwinCAT in einer IEC 61131-3 Sprache anbieten. Klar ist, dass wir leistungsmässig mit der CX nicht in diese Region vorstossen werden können. Der Overhead durch Windows CE/XP und TwinCAT selbst ist einfach zu groß. Wir möchten einfach der bisherigen Lösung so nahe wie möglich kommen.

    Meine Idee: Die SoftSPS werden durch Funktionsbausteins modelliert. Dazu wird jeder Instanz eine Priorität zugeordnet anhand derer bestimmt wird in welcher der drei Runtimes (LOW, MID, HIGH) sie aufgerufen wird. Im 4. Thread, d.h. der 4. Runtime, läuft ein Framework welches die Verwaltung (anlegen, löschen, IO zuordnen, usw.) erledig. Alle IOs werden manuell und eben auch "vorher" im Systemmanager auf IOs der Frameworks gemapt. Im Framework werden diese dann aber noch einmal auf die logische IOs der FB gemapt. Die Grundkonfiguration der FB (Anzahl, Typen, IOs) wird beim starten der CX aus einer Konfigurationsdatei (wird aus unserem Anlagenplanungstool exportiert) gelesen und die notwendigen FB Instanzen und die dazu passende Aufrufe mit dem gewünschten IO-Mapping generiert. Die finale Parametrierung der FBs wird im folgenden dann manuel mit Hilfe der in TwinCAT PLC entworfenen HMI vorgenommen.
    Implementiert und gestest hab ich das ganze auch schon. Es läuft. Allerdings bisher eben noch mit einer relativ kleinen Anzahl sehr einfacher FBs. Was mir noch fehlt ist ein richtiger Leistungstest und die TCP/IP Kommunikation. Letztere wird mir Leistungsmässig wahrscheinlich komplett die Knochen brechen, da ich noch ein recht komplexes Kommunikatiosprotokoll fahren muss.

    P.S.: Pointer scheinen ja hier im Forum ein rotes Tuch zu sein. Ich bin auch nicht sehr glücklich mit Ihnen. Bisher ist das obige Ansatz aber die einzige Lösung die ich kenne. Wenn jemand eine bessere Idee hat wie man dynamisch irgendwelche POEs erzeugen kann der rennt bei mir garantiert in offene Arme.
    Geändert von caret (20.10.2009 um 00:35 Uhr)

Ähnliche Themen

  1. in laufenden Prozess eingreifen
    Von friesen im Forum CODESYS und IEC61131
    Antworten: 0
    Letzter Beitrag: 16.09.2010, 09:58
  2. Antworten: 11
    Letzter Beitrag: 16.04.2009, 12:22
  3. CPU austauschen
    Von Approx im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 10.12.2007, 23:27
  4. OP5 Austauschen
    Von Norbert17 im Forum HMI
    Antworten: 10
    Letzter Beitrag: 19.01.2007, 14:22
  5. CP 1430 TF Austauschen
    Von dpd80 im Forum Feldbusse
    Antworten: 1
    Letzter Beitrag: 09.11.2006, 22:00

Lesezeichen

Berechtigungen

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