Prozessdaten-Visualisierung von B&R Steuerungen über Webfactory

Jens_Ohm

Level-1
Beiträge
180
Reaktionspunkte
31
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Allerseits,


ich habe da ein kleines Problem. Ich habe eine Prozessdaten-Visualisierungs- und Archivierungs- Software übernommen.
Das System nennt sich Webfactory (Version 1.9.14) und stellt in meinem Fall über OPC empfangene Daten einer Inter/Intranet-Seite zur Verfügung.
Momentan werden von 10 Steuerungen je 83 Variablen verarbeitet.
Die Daten werden von einem Webfactory-Modul in eine SQL-Datenbank geschrieben.
Der Datenfluss sieht so aus:
SPS stellt einen Datenbaustein zur Verfügung:
Auf dem PC laufen:
PVI (Process Visualization Interface): greift auf die Steuerungen (SPS) zu und macht den Datenbaustein dem PC zugänglich.


OPC-Server: macht die Datenbausteine vom PVI über OPC anderen Win-Anwendungen zugänglich


OPC Client: In diesem Fall ein Webfactory-Modul das bestimmte Daten umrechnet, weiter reicht oder loggt.


Internet Explorer: Die Daten werden mittels call Befehlen an die im Browser benutzten Variablen/Objekte gebunden. Beispiel:
call idSFA1.Bind(sollTempB01,"value","Soll_Temp_BF")


Das ganze funktioniert ganz gut.
Auf den Steuerungen gibt es einen Datenbaustein, in dem verschiedene Steuer und Regel- aufgaben gespeichert sind. Diesen Datenbaustein soll ich nun über die Prozessdaten Visualisierung (auf dem Internet Explorer) editierbar machen.


Eine Steuersequenz umfasst 6 numerische 16-Bit Variablen (-32768 bis 32767) und 1 String (640 Bit). 50 Sequenzen bilden ein Rezept. Auf jeder Steuerung können 30 Rezepte hinterlegt werden.
Bei 10 Steuerungen kommen so 105000 Variablen zusammen.
Da es über den OPC Server nicht möglich ist mit Arrays zu arbeiten, kann ich kein Abbild auch nur eines Rezeptes komplett über OPC verfügbar machen.
Normalerweise würde ich mit Visual Studio eine Anwendung schreiben, die direkt auf die Steuerungen zugreift, aber das PVI arbeitet nur mit einer Anwendung auf einmal zusammen.


Jetzt habe ich zwei Ideen für eine Lösung.
Eine davon ist, das ich mir ein eigenes Kommunikations-Protokoll über OPC bastle und die Rezepte Sequenz für Sequenz übertrage. Dazu müsste ich die Bedienung über den Internet Explorer (und das wird eigentlich auch gewünscht) machen und die Daten von dort aus in eine Datenbank schreiben und laden können. Normalerweise ist ein Browser für so etwas ehr ungeeignet, da man von dort aus eigentlich keine schreib/lese Zugriffe auf die Platte haben soll.
Ist das evtl. mit Perl oder PHP machbar?
Interessant wäre es auch zu wissen, ob ich unter Perl oder PHP direkt OPC Daten lesen und schreiben kann.
Oder hat vielleicht jemand eine andere Idee wie man so etwas angehen kann?




viele Grüße Jens
 
Zuletzt bearbeitet:
Hallo Jonnij,


d.h. das ich von einer HTML-Seite über Perl-Scripte direkt die Daten des B&R OPC-Server beschreiben kann?
Ich habe leider nur HTML Erfahrungen, ein wenig Java-Script und sonst stehe ich außerhalb der B&R Steuerungen ziemlich auf dem Schlauch. Hilfe bekomme ich außer in Foren leider auch keine.


Weist Du wo ich dazu etwas nachlesen kann?


Grüße Jens
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Jonnij,


d.h. das ich von einer HTML-Seite über Perl-Scripte direkt die Daten des B&R OPC-Server beschreiben kann?



Grüße Jens

Genau....

Ich habe leider nur HTML Erfahrungen, ein wenig Java-Script und sonst stehe ich außerhalb der B&R Steuerungen ziemlich auf dem Schlauch. Hilfe bekomme ich außer in Foren leider auch keine.


Weist Du wo ich dazu etwas nachlesen kann?

Grüße Jens

Es gibt einige Bücher , die sowas behandeln (bei Amazon)

oder

schau mal bei entwickler-forum.de
 
Bei Amazon werden mir unter den Schlagworten SPS, Perl und OPC zahlreiche Bücher über Automationstechniken und Webtechniken angeboten. Leider steht nirgends ob das Thema OPC und! Webtechniken behandelt wird. Aus den Beschreibungen werde ich nicht so recht schlau. Da die Bücher recht teuer sind, würde ich gerne wissen das es mir auch weiterhilft.
Hat jemand einen Tipp für ein Buch oder einen Link zum Thema?
(Aus einer HTML-Seite auf OPC-Daten zugreifen)


Grüße Jens
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Diesen Datenbaustein soll ich nun über die Prozessdaten Visualisierung (auf dem Internet Explorer) editierbar machen.
Wenn ich das richtig verstanden habe, dann ist das Deine eigentliche Aufgabe, oder ?

Das ist recht einfach mit den Bordmitteln von Webfactory machbar, denn mit dem SFA-Objekt kann man auch Daten aus dem IE in die SPS schreiben. Da die Struktur der Daten laut Deiner Beschreibung ja recht übersichtlich ist, und sich konsequent wiederholt, mußt Du den notwendigen HTML- und Javascript-Quelltext ja nur für eine Steuersequenz entwickeln, und kannst dann fleißig kopieren und umbenennen ...

Bei 10 Steuerungen kommen so 105000 Variablen zusammen.
Das macht die ganze Sache natürlich ein wenig lästig, sofern man die "normalen" Wekzeuge von Webfactory für die Konfiguration der Datenpunkte verwendet. Glücklicherweise liegt die komplette Konfiguration von Webfactory in einer SQL-Server Datenbank (Instanz: (local)\WEBFACTORY, Datenbank: Webfactory), und kann dementsprechend durch Datenimport aus CSV-Dateien und mit Hilfe von ein paar SQL-Queries gefüllt werden.

Ich hoffe, das hilft Dir ein wenig weiter.


Gruß Axel
 
Hallo AFK,


Du meinst ich soll ein komplettes Rezept im OPC Raum zugänglich machen?
Das würde immer noch 350 Variablen pro SPS ausmachen.
Ich hatte mir gedacht, lediglich eine Sequenz zu übertragen und irgendwo in der Programmierung zusammenzusetzen.

Das kann man bei Webfactory meines Wissens nur in den VChannels des Designmanagers.
Wenn ich Sequenz für Sequenz übertrage, brauche ich Hilfsvariablen die die Übertragung steuern. Vom Designmanager bekomme ich immer eine Fehlermeldung, wenn ich im VChannel versuche eine Variable (Signalnamen) zu beschreiben.
Im VChannel kann ich schreiben
if X("data1") = 0 then var1=-1
und var1 per Result zurückgeben, aber wenn ich versuche
if X("data1") = 0 then X("data2") = 1
zu schreiben, bekomme ich eine Fehlermeldung.
Auch mit Virtuellen Signalnamen funktioniert das anscheinend nicht.
Zitat Doku:
Die virtuellen Signale verhalten sich genauso wie OPC-Signale. Sie können jedoch nur lesend verwendet werden,
OPC Signale müssten eigentlich zu beschreiben sein, aber ich habe noch nicht herausgefunden wie.

Leider wurde ich hiermit ins kalte Wasser geschmissen. Für das Softwarehaus, das die Anwendung mit Webfactory für uns erstellte, war es die erste und einzige Anwendung dieser Art. Da in der Anwendung in den VChannels nur Signalnamen in Datenbanken geschrieben werden und in einer HTML-Seite an Objekte gebunden und angezeigt werden, habe ich keine Beispiele für den umgekehrten Weg. In dem Softwarehaus habe ich also auch keine Ansprechpartner.


Auf diese Art neue Variablen in die Datenbanken und in die Ausgaben des IE einzufügen, ist auch für mich als Anfänger mit Webfactory nicht schwer.
Meine Kenntnisse in der Webprogrammierung stammen aus zwei 12 stündigen VHS-Kursen in HTML. Miene JavaScript Kenntnisse aus Spielerreihen mit einer Vereinshomepage und VB-Script kann ich in Anlehnung an Visual Basic ein wenig.
SQL- Kenntnisse sind null. (hast Du einen Link zu einem guten Tutorial ;-) ?).
Meinem Chef ist ein Supportvertrag mit Webfactory zu teuer.

Nun stehe ich hier und suche nach einer gangbaren Lösung.
Im Moment komme ich nicht recht voran und bin gefrustet.
Sprücheklopfer (man wächst mit seinen Aufgaben) nerven und und und...

Am schönsten wäre es, wenn ich im IE eine neue Seite öffnen könnte um die Rezepte von dort aus zu verwalten. Da das über Wabfactory in den VChannels passieren müsste, bin ich nicht sicher ob das überhaupt geht. Die VChannels sind mit Glaube ich 5000 Zeichen (incl. Leerzeichen) begrenzt. Da gab es schon Schwierigkeiten mit den 83 Variablen.
Da ich auf einige Abhängigkeiten prüfen muss, stelle ich mir vor das es sehr eng wird.
Deshalb bin ich auf die Idee mit Perl und Konsorten gekommen (davon habe ich aber auch keine Ahnung).


Ein zweiter Weg wäre eine externe Visual Basic Anwendung die über OPC die Daten holt und schreibt (ohne Webfactory). Das stelle ich mir wesentlich einfacher vor.


Sorry, für den Roman


Grüße Jens
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Jens,

Du meinst ich soll ein komplettes Rezept im OPC Raum zugänglich machen?
Das würde immer noch 350 Variablen pro SPS ausmachen.
Das wäre eine Möglichkeit. Ich würde aber eher in der SPS in einem zusätzlichen DB den Adressraum für genau ein Rezept (oder sogar nur eine Sequenz) deklarieren, und dann über zusätzliche Adressen der SPS mitteilen, welches Rezept (und ggf. welche Sequenz) gerade bearbeitet werden soll. Die SPS kann dann den entsprechenden Datenbereich umkopieren. Das macht den Konfigurationsaufwand im Webfactory deutlich geringer, und ist IMHO in der SPS kein großer Aufwand.

Ich hatte mir gedacht, lediglich eine Sequenz zu übertragen und irgendwo in der Programmierung zusammenzusetzen.
Die einzelnen Datenpunkte dieses einen Rezepts (bzw. der Sequenz) solltest Du dann schon in der Signalliste von Webfactory als einzelne OPC-Datenpunkte konfigurieren. Dann kannst Du in die Datenpunkte direkt aus dem IE heraus schreiben, wenn der Operator das Rezept ändert.

Das kann man bei Webfactory meines Wissens nur in den VChannels des Designmanagers.
Vergiß die VChannels, in dem von Dir beschriebenen Fall helfen die Dir nicht weiter.

OPC Signale müssten eigentlich zu beschreiben sein, aber ich habe noch nicht herausgefunden wie.
Schreiben ist eigentlich einfach, braucht aber etwas JavaScript. Wenn der Operator im IE etwas am Rezept ändert, dann mußt Du im onChange-Event des HTML-Elements sowieso zuerst prüfen, ob die Eingabe gültig ist. Ist der eingegebene Wert zulässig, dann kannst Du den einfach mit der Write-Methode vom SFA-Objekt in die SPS schreiben (z.B. idSFA1.Write(0,"Soll_Temp_BF", Neuer_Wert)).

Auf diese Art neue Variablen in die Datenbanken und in die Ausgaben des IE einzufügen, ist auch für mich als Anfänger mit Webfactory nicht schwer.
...
SQL- Kenntnisse sind null. (hast Du einen Link zu einem guten Tutorial ;-) ?).
Die Anzahl der zu konfigurierenden Datenpunkte reduziert sich durch die o.g. Vorgehensweise ja recht deutlich, wenn Du in der SPS die einzelne Sequenz umkopierst, dann sind es pro Steuerung nur noch 7 Datenpunkte für die Steuersequenz, sowie 2 Datenpunkte für die Auswahl des Rezepts und der Sequenz, also insgesamt nur noch 90 Datenpunkte für alle Steuerungen zusammen. Die hast Du wahrscheinlich schneller von Hand im Design-Manager reinkonfiguriert, als das Lesen eines SQL-Tutorials dauert ... ;)

Am schönsten wäre es, wenn ich im IE eine neue Seite öffnen könnte um die Rezepte von dort aus zu verwalten.
Eine Seite pro Steuerung sollte mit dem o.g. Verfahren gar kein Problem darstellen. Wenn Du eine Seite für alle Steuerungen haben willst, dann mußt Du entweder auf diese Seite für jede Steuerung einen Satz Eingabeelemente packen, und die je nach Steuerungsauswahl sichtbar bzw. unsichtbar schalten, oder die Eingabeelemente dynamisch mit den entsprechenden OPC-Signalen verknüpfen. Das geht beim SFA-Objekt aber nur mit DynRegister und DynUnregister, und setzt dann auch Javascript beim Lesen der Prozessvariablen voraus, DynBind und DynUnbind gibt es leider nicht.

Da ich auf einige Abhängigkeiten prüfen muss, stelle ich mir vor das es sehr eng wird.
Das machst Du wie gesagt am besten mit JavaScript im OnChange-Event von den Eingabeelementen der Seite im IE. Falls Abhängigkeiten zwischen den Sequenzen bestehen, mußt Du die bei meinem Ansatz jedoch in der SPS überprüfen, da Du im Webfactory ja immer nur eine Sequenz siehst.

Ein zweiter Weg wäre eine externe Visual Basic Anwendung die über OPC die Daten holt und schreibt (ohne Webfactory). Das stelle ich mir wesentlich einfacher vor.
Die Lösung dürfte IMHO nicht grundsätzlich einfacher sein als mein Vorschlag, könnte aber natürlich für Dich einfacher umzusetzen sein, wenn Webfactory für Dich Neuland ist. Trotzdem könntest Du mit einer VB-Lösung mit Deinem Kunden Probleme bekommen, weil Deine VB-Lösung ja nicht so ohne weiteres im IE netzwerkweit zur Verfügung steht.

Sorry, für den Roman
dito :ROFLMAO:


Gruß Axel
 
Zuletzt bearbeitet:
Die Lösung dürfte IMHO nicht grundsätzlich einfacher sein als mein Vorschlag, könnte aber natürlich für Dich einfacher umzusetzen sein, wenn Webfactory für Dich Neuland ist. Trotzdem könntest Du mit einer VB-Lösung mit Deinem Kunden Probleme bekommen, weil Deine VB-Lösung ja nicht so ohne weiteres im IE netzwerkweit zur Verfügung steht.

So hat alles seine Vor und Nachteile. Die Anwendung läuft im Moment überal lokal. Das soll sich aber in der Tat ändern. Aber mir sitzt natürlich wieder die Zeit im Nacken. Am besten ist Vorgestern alles fertig
:ROFLMAO:

Vielen Dank Axel für deine ausführliche Antwort
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Also die aktuellen SQL Datenbanken werden in den Channels angelegt und aktualisiert.
An welcher Stelle ist das denn noch möglich?
In den VChannels kannst Du "virtuelle Signale" erzeugen, also Signale, die so in der SPS gar nicht vorhanden sind. Dazu kannst Du Eingangssignale (reale SPS-Signale, oder andere VChannels) in dem VChannel per VBScript miteinander verknüpfen, und damit den Aktualwert des VChannels berechnen. Dieses Script wird dann bei jeder Änderung eines Eingangssignals aufgerufen.

In dem Script kannst Du AFAIK so ziemlich alles machen, was mit VBScript geht, also auch in Datenbanken schreiben (das ist IMHO aber keine gute Idee). Was definitiv nicht so ohne Weiteres geht, ist das Zurückschreiben in die SPS aus dem VChannel heraus, und aus dem IE kann man AFAIK gar nicht auf einen VChannel schreiben. Da Du aber die Rezepte in die Steuerungen zurückschreiben willst (hab ich jedenfalls so verstanden), hilft Dir ein VChannel da nicht weiter.

Schau Dir meinen Lösungsansatz noch mal an, bezüglich Programmieraufwand und Datenaufkommen im OPC-Server ist das bestimmt nicht die schlechteste Idee.


Gruß Axel
 
Da es mir zu aufwendig ist, das mit den realen Rezepten zu probieren, habe ich versucht die Uhrzeit in der SPS über IE zu ändern.
Dazu habe ich der SPS vier neue Variabel angelegt die die neue Uhrzeit (in h/m/s) enthalten, sowie eine die eine Übernahme in der SPS initiiert (data4=1) und nach der Übernahme zurückgesetzt wird (data4=0).
Im B&R OPC-Server und Webfactory Designmanager habe ich noch schnell die 4 neuen Variablen eingebunden.


Dann habe ich eine Webseite mit 6 Feldern erstellt (3 mit der aktuell ausgelesenen Zeit und 3 Felder die die neue Zeit enthalten). Ein Button der in eine OnClick Event die Übernahme-Variable (data4) und die Variablen aus den 3 Neuzeit-Feldern mittels der von afk erwähnten Funktion
idSFA1.Write(0,"data4", 1)
beschrieben. Das hat funktioniert.
Danke soweit ))))


So nehmen wir einmal an, die drei Variablen wären eine Steuersequenz von denen ja 30 Stück ein Rezept bilden.
Dann müsste ich 30 Sequenzen in eine Array schreiben und dies mit einem Namen versehen auf die Platte Speichern, damit ich es dann Sequenz für Sequenz auf eine andere SPS übertragen kann.
Dann würde auf der Platte ein Pool von Rezepten entstehen.
Ist das denn noch mit vertretbarem Aufwand vom IE aus zu leisten?
Das würde doch bedeuten das ich eine SQL-Datenbank (oder sonstwas) vom IE aus anlegen muß.
Kann man das (Clientseitig) mit VB-Script und JavaScript überhaupt leisten?
Oder geht das nur mit Serverseitigen Scripten?
An welcher Stelle binde ich PERL und Co. in Webfactory(webserver) ein?


Grüße Jens
 
So nehmen wir einmal an, die drei Variablen wären eine Steuersequenz von denen ja 30 Stück ein Rezept bilden.
Dann müsste ich 30 Sequenzen in eine Array schreiben und dies mit einem Namen versehen auf die Platte Speichern, damit ich es dann Sequenz für Sequenz auf eine andere SPS übertragen kann.
Dann würde auf der Platte ein Pool von Rezepten entstehen.
Ist das denn noch mit vertretbarem Aufwand vom IE aus zu leisten?
Moment, jetzt hast Du mich wieder abgehängt ... ich denke es geht um das Ändern von Rezepten in den Steuerungen aus der Visu heraus, oder nicht ?

Oder geht es um das Übertragen/Kopieren von Rezepten in eine andere Steuerung ? Oder beides ?

Zum Editieren der Rezepte in den Steuerungen mußt Du in jeder Steuerung die (OPC-)Adressen für eine Sequenz reservieren, sowie eine Adresse zum Auswählen des Rezepts und eine Adresse zum Auswählen der Sequenz. Diese Adressen bringst Du Webfactory bei, und erstellst eine entsprechende Web-Seite für den IE. in den SPSen mußt Du reinprogrammieren, daß die entsprechende Sequenz aus dem entsprechenden Rezept einmal in die OPC-Adressen kopiert wird, sobald sich einer der beiden Datenpunkte für die Auswahl von Rezept und Sequenz ändert. Danach kopierst Du die Sequenz einfach zyklisch wieder in die andere Richtung. Dadurch kannst Du die Sequenz im IE erst auswählen (über die Adressen für Rezept- und Sequenz-Nummer) und danach editieren (über die Adressen für die Sequenz).

Das würde doch bedeuten das ich eine SQL-Datenbank (oder sonstwas) vom IE aus anlegen muß.
Kann man das (Clientseitig) mit VB-Script und JavaScript überhaupt leisten?
Oder geht das nur mit Serverseitigen Scripten?
An welcher Stelle binde ich PERL und Co. in Webfactory(webserver) ein?
Zum Schreiben in eine Datenbank würde ich serversided Scripting verwenden, ASP oder ASP.net empfiehlt sich in Deinem Fall dafür, da Du das in VBScript bei ASP bzw. VB.net bei ASP.net programmieren kannst, damit sparst Du Dir die zusätzliche Einarbeitung in Perl.

Die Sequenzen des Rezepts solltest Du dafür im IE per Javascript durchlaufen, dann per POST an den Webserver übergeben, und dort im ASP.net in die Datenbank schreiben. Beim umgekehrten Weg liest Du im ASP.net die Daten aus der Datenbank, übergibst sie im HTML an den Browser, und schreibst sie dann per Javascript über das SFA-Objekt in die SPS.

Es gibt hier allerdings viele, teilweise wesentlich elegantere Alternativen (z.B. per ActiveX im Webserver direkt mit dem OPC-Server und der Datenbank kommunizieren, oder alles in ASP.net implementieren), die o.g. Lösung ist nur eine Möglichkeit unter vielen, scheint mir aber am ehesten zu Deinen Kenntnissen zu passen.


Gruß Axel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Axel,


danke für deine Hilfe.
Da ich mittlerweile ein wenig Zeitdruck habe, mache ich meine „Rezeptverwaltung“ in VB.
Wenn ich sowieso Webfactory-Module außen vor lassen muß und alles in ASP, Perl oder so machen muß (und damit habe ich noch nie etwas gemacht), dann kann ich auch gleich von VB aus auf den OPC-Server zugreifen. Da die Visu sowieso lokal läuft, ist das für mich wohl am schnellsten zu lösen.


viele Grüße und einen schönen Feiertag
Jens


PS: ich habe mir Webfactory nicht ausgesucht und die vorhandene Lösung beeindruckt mich nicht im geringsten, im Gegenteil ich finde sie richtig schxxxx.
10 Steuerungen werden da angezeigt und deren Daten gespeichert.
Die VChanels sind vollgeballert mit Scripten die die SQL Tabellen anlegen. Wegen der Beschränkung auf 5000 Zeichen in einem Chanel sind keine Aussagekräftigen Variablennamen mehr vergeben worden (weil zu lang) und der Code enthält keinerlei Formatierung (Einrückungen) weil auch ein Leerzeichen ein Zeichen ist. Das macht den Code sehr unleserlich. Die HTML Seite umfasst (wegen der 10 Steuerungen) weit über 10000 Zeilen Code. In VB hätte ich das eleganter lösen können und das werde ich wohl auch machen, denn diesen „Mist“ zu pflegen habe ich keine große Lust.
 
... denn diesen „Mist“ zu pflegen habe ich keine große Lust.
Kann ich nach der Beschreibung verstehen. Aber um Webfactory gerecht zu werden, muß ich noch anmerken, daß man sowas damit auch besser lösen kann ... wir arbeiten zwar mittlerweile auch nicht mehr damit, aber das Grundkonzept hat mir gut gefallen.

viele Grüße und einen schönen Feiertag
Da wird leider nichts draus, bin gerade in Norwegen ...


Gruß Axel
 
Aber um Webfactory gerecht zu werden, muß ich noch anmerken, daß man sowas damit auch besser lösen kann ... wir arbeiten zwar mittlerweile auch nicht mehr damit, aber das Grundkonzept hat mir gut gefallen.

Gruß Axel

Mit "Mist" meinte ich nicht unbedingt Webfactory, sonder die damit für uns erstellte Visu :ROFLMAO:
Der Junior vom Ing. Büro die das verbrochen haben, verstand sich gut mit unserm Chef (ein Kaufmann) und da hieß es nur "kann man das damit machen?"
Die Antwort war ja und das war es. Es war das erste Projekt dieser Art für das Ing. Büro und mit Webfactory wohl auch das Einzige bis heute. Warum wohl?

Grüße Jens
 
Zuletzt bearbeitet:
Zurück
Oben