Bitmelderbyte drehen

SPSSchlapf

Level-2
Beiträge
7
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen
Ich habe 12Panels und dazu jeweils ein dazugehöriger DB mit Fehlermeldungen. Alles reine Kopien. Allerdings soll nicht auf jedem TP die gleiche Fehlermeldung angezeigt werden. Dafür habe ich einen FC geschrieben der bestimmt welche Fehlernummer in welchen DB geschrieben wird. Dabei entsteht aber naheliegenderweise das Problem das WinCC mit der Adressierung mit 1.0 anfängt, die SPS jedoch genau umgekehrt.
Die einzige Lösung die ich bisher erdacht habe ist leider alles andere als elgegant (jeweils ein DB "dazwischenschalten" und dort H-Byte und L-Byte tauschen).
Die Bitmeldungen kann ich leider nicht Byte-weise einstellen nur Wort-weise. Oder ich habe diese Option einfach noch nicht hinbekommen.
Kennt ihr da eine elegante Lösung? Entschuldigt falls diese Frage schon oft gekommen sein sollte, habe es mit Google und Suchfunktion versucht bin aber auf nichts gekommen.
Vielen Dank
 
Was spricht dagegen, einfach die Reihenfolge der Meldungen im Panel zu tauschen?
Benötigst Du wirklich für jedes Panel einen eigenen DB?
Vielleicht reicht es ja auch aus, im Panel Meldeklassen anzulegen, und in jedem Panel nur bestimmte Meldeklassen anzeigen zu lassen. Auf diese Art und Weise würdest Du Dir die Hin- und Herkopiererei mit den DBs sparen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Dagegen spricht die Menge der Meldungen. Ich habe 50 Gruppen mit jeweils 40 Fehlermeldungen die sich auf 12Panels verteilen. Dazu kommen 100Meldungen die auf allen Panels angezeigt werden. Das Ziel sollte sein das sich alles möglichst leicht auch ändern lässt. Mit der aktuellen Konfig kann ich in Sekundenschnelle sagen welcher Fehlerbereich zb. in Panel zwei angezeigt werden sollte. Habe ich nun Meldeklassen in einem einzigen DB für alle Panels geht das nicht mehr.
 
Dafür habe ich einen FC geschrieben der bestimmt welche Fehlernummer in welchen DB geschrieben wird. Dabei entsteht aber naheliegenderweise das Problem das WinCC mit der Adressierung mit 1.0 anfängt, die SPS jedoch genau umgekehrt.
Die einzige Lösung die ich bisher erdacht habe ist leider alles andere als elgegant (jeweils ein DB "dazwischenschalten" und dort H-Byte und L-Byte tauschen).
Was machst Du denn genau in diesem Baustein?

Der Befehl "TAW" dreht die Byte eines Wortes, hilft Dir das vielleicht?
 
Grundsätzlich bestehen zwei DB's. Im ersten liegen die Fehlermeldungen so wie die SPS rechnet, sprich L-Byte beginnt bei 0.0. Danach wird genau über diesen TAW-Befehl die Drehung der Bytes bewirkt und von dem zweiten DB dann ins MobilePanel geschrieben. Da im Normalfall immer nur ein MP pro Anlage gleichzeitig gesteckt werden kann ist das ganz einfach. Nun ist aber wie beschrieben das Problem das feste Panels eingesetzt werden und auf denen sollen jetzt nur die platzrelevanten Meldungen angezeigt werden. Wenn ich aber nun aus dem zweiten DB heraus die Meldungen aufteile kann ich nicht Bitgenau festlegen welche Meldungen wo sondern nur Wortgenau. Da dies aber scheinbar nicht anders zu lösen ist habe ich jetzt halt 48Meldungen pro Platz und 112 allgemeine um so die Meldungen wortweise festlegen zu können. Wär halt "schöner" gewesen wenn ich willkürliche Nummern hätte wählen können. Das war die Idee dahinter.
Trotzdem Danke:)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
wo ist denn das Problem ? Du schreibst deine Bitmeldungen in einen entsprechend definierten Bereich in deinem DB. Hinter diesem Bereich ist ein gleich großer Bereich, der die Byte-getauschten Werte für die Visu beinhaltet. Dazwischen liegt ein FC, der die "vorderen" Bitmeldungen in die "hinteren" umdreht. Das kann auch ein FB sein, der seine Instanz so zur Verfügung stellt und das Drehen durchführt.
Auf jeden fall würdest du so dann das bekommen, was du haben willst ...

Gruß
Larry
 
Eben nicht... Da diese Bereiche variabel sein sollten. Nach deiner Lösung wäre eine Änderung des Bereiches eine Tagesaufgabe...
Nun sieht das so aus:
Der GrundDB ist der DB91
Im FB81 drehe ich das Byte und schreibe alles in den DB81:
Code:
      AUF   DI    81
      AUF   "Stoerungen"
      LAR1  P#0.0

      L     DBLG
      L     2
      /I    

LOP2: T     #Schleife
      L     DBB [AR1,P#0.0]
      T     DIB [AR1,P#1.0]

      L     DBB [AR1,P#1.0]
      T     DIB [AR1,P#0.0]
      +AR1  P#2.0
      L     #Schleife
      LOOP  LOP2

Nun muss ich die Bereiche festlegen, das schreibe ich im FB1111:
Code:
      CALL  FC  1111
       DB_Nr        :=81
       Fehler_Nr_min:=113
       Fehler_Nr_max:=160
       DB_Nr_Ziel   :=1111
       RET_VAL      :=#dummy_bool
(ist nur als Beispiel aufgeführt, wird dann für 49 weitere Plätze ausgeführt)
Da bestimme ich den DB81 aus dem ich lese, den Bereich sowie den Ziel DB. In diesem Fall der DB1111. Zu diesem DB gehört das Touchpanel mit der Profibus Adresse 11. So kann jeder DB exakt den gleichen Inhalt besitzen und ist somit variabel was die Fehlermeldungen angeht und gleichzeitig auch deren Quittierung.
Verstehst du was ich meine? Oder habe ich jetzt dich falsch verstanden?
 
Also, wo ist jetzt das Problem?
Teil 1 (tauschen der Bytes) mit TAW, Teil 2 (transferieren in die anderen DBs) z.B. mit SFC20.

Das ist sicherlich nicht der schönste aber wahrscheinlich der einfachste Weg.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... Nach deiner Lösung wäre eine Änderung des Bereiches eine Tagesaufgabe ...
... Oder habe ich jetzt dich falsch verstanden?

Wahrscheinlich hast du mich falsch verstanden, denn ich hätte dir sicherlich nicht etwas vorgeschlagen, das derartig unflexibel wäre. Ich selbst setze so etwas ähnliches (den Bytewender nämlich) selber ein.
Mein FB ist darauf ausgelegt, 512 Fehlermeldungen handeln zu können - mehr brauche ich halt nicht aber alles andere ist genauso denkbar.
Hier gibt es dann halt den Teil, der im Programm zugewiesen wird als Array 0..511 of Bool (wobei der Index dann der Fehlermeldung entspricht) und den Teil, der die Byte-Spiegelung beinhaltet und der dann der Visu übergeben wird.

Den Teil, daraus einzelne Meldungen dann wieder in einen seperaten Bereich zu schieben, könnte man dann ja noch dazubringen. Da ich das Ganze in SCL realisiert habe würde ich den Seperations-Teil mit dem selben FB und anderer Parametrierung realisieren.

Gruß
Larry
 
Warum überhaupt so kompliziert?

Bau doch einfach den DB81 so zusammen wie die Panels es haben wollen.

Auf dis Art ist auch das erweitern vom Bereichen kein Problem - aber immer etwas Reserve lassen.

Fehler 1..8
DBX 1.0..7

Fehler 9..16
DBX 0.0..7

Dann den DB noch schön benamsen

dbx1.0 "Stoermeldung 1" Kommentar "Fehler 1 SCHLOSSER im System"

Ist 'ne Lösung die es eimem Kollegen erlaubt auch suchen zu können...

dtsclipper
 
@ M-Ott:
Wenn ich nun als Beispiel 3 Panels habe, im DB1 steht bei dbx0.0 FehlerNr. 1 bei dbx1.0 FehlerNr. 8 etc...
Nun möchte ich Fehler 1-9 in Panel 1 anzeigen. Ich müsste (bedingt durch die Drehung) also den den Bitbereich 1.0-1.7 und 0.0/0.1 kopieren. Anstelle das ich einfach sagen kann: Fehler 1-9, fertig. DAS ist mein Problem. Deshalb habe ich jetzt alle Meldungen Wortweise ausgeführt. Also kann ich nur bereiche die eine Mindestlänge von 16 haben sowie durch 16 teilbar sind. Natürlich würde nun die Lösung mit dem SFC20 auch funktionieren, aber den FC für die Aufteilung habe ich ja bereits geschrieben;)

@Larry Laffer
Sorry, vielleicht steh ich jetzt auf der Leitung, aber das begreife ich nicht :|

@dtsclipper
Geht gerade nicht, dafür müsste ich alle Fehlermeldungen neu schreiben. Was bei 2512 stück mir persönlich doch etwas zu viel des guten ist;)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielleicht könntest Du Dir für jedes Panel einen DB machen, der Bitweise festlegt, ob die Störung auf diesem Panel gültig ist, dann könntest Du über Deinen Ursprünglichen Stör-DB in einer Schleife auf "UD" mit dem "Störung gültig"-DB vergleichen und das Ergebnis in den "Störung an Panel"-DB transferieren.
 
Wie gesagt, ich habe eine Lösung (halt mit der 16er Auflösung der Fehlermeldungen) und bleibe jetzt auch dabei. Ich danke für die Ideen, ist immer gut ein paar Inputs zu haben;)
Vorallem wenn man mit der Simatic noch kaum Erfahrung hat (mal davon abgesehen das ein paar Basics in der Ausbildung eingehämmert wurden;)) Und den SFC20 werd ich mir mal merken:)
@Larry: Hauptsache es funktioniert bei beiden, verstehen müssens wir ja nicht:p
 
Zurück
Oben