SPS Variablen über eigenes ActivX lesen/schreiben?

Beiträge
195
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,

ihr kenn evtl. die Problematik mit den externen Tags und den Liszenkosten. Nun schwebt uns vor ein ActiveX zu proggen, welches variablen des SPS in interne Tags mapped und wieder zurück.
Die Kommunikation zur SPS Siemess STEP 7 soll über TCP/IP erfolgen.

1. Gibt es free source files um SPS Daten/Variabeln zu elsen (c++)
2. Wie erkennt WinCC ob sich eine Variable auf der SPS geändert hat? Wir da ständig jede Variable gelesen udn geschaut ob ne ändereun ansteht?

grüße
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das ging schnell danke. Ok gut C wäre auch kein Problem. das Libnodave (ist in C programmiert) ist free mit source oder?

Was hat das denn mit der Variablen und Qualität auf sich was man bspw. in WinCC bzw. auf einen OPC server sieht? Das hat doch mit der echt heit des variablen wertes zu tun!?!?!
 
Das ging schnell danke. Ok gut C wäre auch kein Problem. das Libnodave (ist in C programmiert) ist free mit source oder?
Ist OpenSource und steht unter der LGPL.

Was hat das denn mit der Variablen und Qualität auf sich was man bspw. in WinCC bzw. auf einen OPC server sieht? Das hat doch mit der echt heit des variablen wertes zu tun!?!?!
Mit der Quality sagt ein OPC-Server dem OPC-Client, ob der Wert noch aktuell und gültig ist, bzw. aus welchem Grund er es nicht (mehr) ist.


Gruß Axel
 
Muss ich jede VAriable auf er SPS prüfen auf Änderung? und dann lesen? oder teilt mir die SPS irgendwie mit das sich eine Variable geändert hat?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die SPS sendet von sich aus nichts. Variablen lesen kostet auch immer mindestens die Zeit für eine Anfrage und die Antwort.
Wenn du viele Variablen hast, die sich aber nicht häufig ändern, kannst du im SPS-Programm prüfen, was sich verändert hat und Merker setzen. Im PC-Programm liest du zunächst die Merker und nur wenn einer gesetzt ist, auch die zugehörigen Daten.
 
Also Siemens hat schon Möglichkeiten über Änderung an Variablen zu informieren. Wird auch soweit ich weiß in WinCC bzw. WinCC flexible genutzt. Allerdings unterstützt derzeit keine Kommunikationsbibliothek diese Möglichkeiten. Außerdem muss für die Änderungsnachricht entweder die Parametrierung oder das SPS-Programm (je nach verwendeter Variante) angepaßt werden.
Somit bleibt nur pollen und prüfen.
 
das ist problemematisch, naja wincc wird so schlau sein, und nur die tags lesen bzw. beschreiben welche im aktuellen zustand nowendig sind.. bspw. wenn sich Fenster X öffnet das für fenster x laden und anzeigen etc.

Nehmen wir an ich müsste 8000 tags mit der größe von 4 Bytes lesen bspw. mit C libnodave.. wie lange würde das dauern.. hat jemand erfahrung?
 
das ist problemematisch, naja wincc wird so schlau sein, und nur die tags lesen bzw. beschreiben welche im aktuellen zustand nowendig sind.. bspw. wenn sich Fenster X öffnet das für fenster x laden und anzeigen etc.

Nehmen wir an ich müsste 8000 tags mit der größe von 4 Bytes lesen bspw. mit C libnodave.. wie lange würde das dauern.. hat jemand erfahrung?
Welche CPU kommt mit welcher CP zum Einsatz? Wie hoch ist die Zykluszeit? Wie ist die Kommunikationslast eingestellt? Wie intelligent ist die Anfrage gestaltet? Pauschal kann diese Frage nicht beantwortet werden.
 
Da müsste ich unsere SPS Gurus fragen:

glaube Siemens Step 7
CPU 416-20P
CP400
Zykluszeit 20ms

Kan LibNoDave auch via Industrial Ethernet kommunizieren? oder Muss es TCPIP ssein?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Also für WinCC hat ein Kollege von mir ein ActiveX-Control geschrieben, mit welchem er aus/in Rohdatenvariablen (max. 204 Byte Länge) beliebige Daten (Byte, Word, DWord, String, Bool etc.) und in interne Variablen einsortiert. Das hat also einiges an Tags gespart. Allerdings gibt es dabei einige Probleme. Das betrifft zum Einen das Verhalten beim Hochlaufen von WinCC (man muß immer zuerst von der SPS lesen!) und andererseits gibt es Probleme, wenn man die gleiche Variable von der SPS liest und von WinCC aus schreiben will. Insgesamt wurde einiges an Zeit und Arbeit investiert, der Aufwand lohnt sicher erst nach einigen WinCC-Applikationen, bei welchen dann Tags und somit Lizensekosten gespart werden.
 
Eben Ralle, das ist das problem die wollen hier von ner 8K WinCC lizens auf ner 128 Lizens...! Die meinten haja mit dem rohdaten prinzip wäre es "kein" poblem.

Aber die gesamte kommunikation hängt dann von dem ActiveX ab, performance technisch kommt man nich an winCC ran.
 
Warum das? Wenn sich eine Rohdatenvariable ändert, löst WinCC einen Trigger aus, daraufhin wird ein Script abgearbeitet, daß die Variablen separiert, umgekehrt das Gleiche, die Rohdaten werden immehnoch normal von WinnCC als Block gelesen und geschrieben. Unser WinCC-Server versorgt 8 WebNavigator-Clients. wir nutzen eine 256-er Lizense (für manche Dinge nehme ich dann schon eine direkte Variable, zumal nicht alles fein in Blöcken auf der SPS liegt und ich auch mal faul bin). Der Server ist bei weitem nicht ausgelastet, bis wohin WinCC problemlos mitspielt muß man bei dieser Menge Variablen eh austesten. Die Webclients und die Triggerzeiten bei WinCC sind ohnehion nicht so superschnell, ich finde es immer etwas träge, wenn man auf einem Bild die Trigger zu schnell wählt, werden manchmal die Variablen nicht mehr gelesen, aber das ist schon bei normalen Variblen so.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ja an sowas hab ich auch schon gedacht...

1. Müssen alle DB der SPS zu rohdatneblöcke zusammengepackt werden (bzw. kopiert und gelesen werden)

2. ich muss alles externen 8000 Tags in internte Tags protieren..

3. Scripte einbauen, welche ablaufen wenn sich ein interen tag ändert, und dann das entsprechende rowhdatentag auf die sps schreiben?

aber wie bekommen meine scripte mit welches interne tag geändert wurde? kann ja nich auf jedes Tag triggern oder.. wäre doch umständlich? sorry bin nich so involvieert mit wincc
 
Ich hab mal nachgeschaut.
Die meisten Daten werden zu Anzeigezwecken nur aus der SPS-ausgelesen und niemals zurückgeschrieben. Es mach absolut Sinn diese separat zu behandeln, mit einer Funtion (RAWREAD) aus einem ActiveX-Control. Getriggert wird dabei auf die Rohdatenvariable. Außerdem sind im ActiveX-Control Funktionen ausprogrammiert, die das korrekte Separieren indie Internen Variablen machen, da sind z.Bsp. die Bytes verdreht etc. Spezielle Daten (Parameter werden gelesen und geschrieben, dabei triggert man ein Script auf die Rohdatenvariablen, eines auf die "enthaltenen" interen Variablen). Buttons etc. haben wir direkt über Wordvariablen genutzt, da das "gleichzeitige" Schreiben und Lesen am Anfang Probleme gemacht hat und wir mit den Tags auch so ganz gut hin kamen. Also von 8000 auf 128 halte ich für unrealistisch, ich würde mal mit allen nur anzuzeigenden Variablen beginnen.
 
eben, glabu auch das dies nich gehen wird.. wenn ich nen button drücke... könnte ich ja diese aktion auf eine property event des activx Triggern oddr?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das mit dem ActiveX haben wir anders gelöst. Das AxtiveX stellt Funktionen zur Verfügung, eigentlich wie eine DLL, aber das ActiveX ist halt in VBA leicht einzubinden, weiß gar nicht, on das mit einer "reinen" DLL ginge. Der Button löst über seine Variable ein Action-Script in WinCC aus, dieses ruft dann ein fertiges GlobalScript auf, in welchem mit Hilfe des ActiveX die Rohdaten geschrieben werden. Es ist ja kein visuelles ActiveX auf der Oberfläche!
 
hey ralle genau so hab ich mir das auch grad gedacht.. ne gute idee.. ich leg ei ntrigger an welcher auf änderung der interen tags wartet , und ein funktion des Active X aufruft...

Wenn ich eine Aktion in winCC scripte, kann ich ja unter "Trigger/Info" Tag anfügen.. aber immer nur einzlen.. Kann man keine tag gruppen auswählen.. oder wie könnte ich es machen damit ein trigger bspw. auf 1000 tag hört? Zudem gibt es ne möglichkeit das ich sogar rausbekommen, welches dieser tausend tag sich geändert hat? was eigentlich egal wäre, weil die 1000 Tag ja ehh komplett in den rohdatenbock geschrieben werden...
 
Zuletzt bearbeitet:
hey ralle genau so hab ich mir das auch grad gedacht.. ne gute idee.. ich leg ei ntrigger an welcher auf änderung der interen tags wartet , und ein funktion des Active X aufruft...

Wenn ich eine Aktion in winCC scripte, kann ich ja unter "Trigger/Info" Tag anfügen.. aber immer nur einzlen.. Kann man keine tag gruppen auswählen.. oder wie könnte ich es machen damit ein trigger bspw. auf 1000 tag hört? Zudem gibt es ne möglichkeit das ich sogar rausbekommen, welches dieser tausend tag sich geändert hat? was eigentlich egal wäre, weil die 1000 Tag ja ehh komplett in den rohdatenbock geschrieben werden...

Nein, bloß nicht so. Wenn du einen Button drückst, willst du dann 8000 Variablen aktualisieren und als Rohdatenpakete zur SPS schicken? Das wäre übertrieben. Du solltest jeden Rohdatenblock triggern zum Lesen und die Variablen im Rohdatenblock, welche von der Visu geändert werden können, zum Schreiben triggern. Somit wird es für jede Rohdatenvariable ein Script zum lesen geben und, wenn nötig, ein Script zum Schreiben.
 
Zurück
Oben