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

Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 16 von 16

Thema: WinCCFlex 2007 - Rezepturdatensatznummer

  1. #11
    Avatar von ssound1de
    ssound1de ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    19.06.2003
    Ort
    Im Staub ...
    Beiträge
    337
    Danke
    115
    Erhielt 26 Danke für 23 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Habe jetzt einen Lösungsansatz gefunden, bei dem ich allerdings noch etwas Hilfe brauche.
    Ich brauche dabei kein extra Feld in der Rezeptur für die Datensatznummer.
    Problem mit Doppelzuweisung existiert dann auch nicht.

    Hab mal die Rezeptfiles genauer unter die Lupe genommen, und siehe da ...
    Sie enthalten Datensatzname, Datensatzlänge und Datensatznummer.

    Hab auch schon ein Script geschrieben, das die Datensatznummer passend zum ausgewählten Namen ausliest.
    Funktioniert soweit, hat aber noch einen Haken.

    Wenn ich in der Dropdown-Liste den gewünschten Datensatz auswähle, greift Flex auf die Rezeptfiles zu und öffnet sie scheinbar exklusiv.
    Wenn ich gleich im Anschluss an die Auswahl die Datensatznummer auslesen will, wird der JIT-Debugger gestartet (passiert im Script beim Öffnen des ersten Files) - Fehlermeldung: "Erlaubnis verweigert".

    Wenn ich aber ca. 5 Sek. warte und über eine separate Schaltfläche das Script starte, funktioniert alles.

    Eine Lösung wäre noch Kopien der Files anzulegen - das Script arbeitet dann mit der Kopie. Hat aber wieder Pflegeaufwand.
    Ausser man legt die Kopien automatisch an. Wenn ich das beim Bildaufruf mache, kommt aber auch wieder "Erlaubnis verweigert", da Flex das Kopieren der Files und den Bildaufruf scheinbar gleichzeitig erledigt (obwohl zuerst 'FileCopy' und dann 'Aktiviere Bild' eingestellt ist).

    Hat hierzu irgendjemand eine Lösung/Idee?
    Zugriffmethode von Flex änderen; Zugriffsmethode des Scriptes ändern; etc.; Reihenfolge Kopieren/Bildaufruf sicherstellen?

    Gruß

  2. #12
    Registriert seit
    12.05.2007
    Beiträge
    416
    Danke
    14
    Erhielt 45 Danke für 40 Beiträge

    Standard

    Servus.

    Also es gibt Möglichkeiten "Prozesse" zu Terminieren. Da musst du aber über die Windows Skripting Host "WSH" gehen.
    Das ist aber glaub nicht das was du brauchst...
    Ich sprech es nur ungerne aus aber was ist wenn du dein Skript an dieser Stelle 5 Sekunden warten lässt bis der Zugriff erlaubt ist?

    Schick mir mal das Script per PN oder stell es hier ein.

  3. #13
    Avatar von ssound1de
    ssound1de ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    19.06.2003
    Ort
    Im Staub ...
    Beiträge
    337
    Danke
    115
    Erhielt 26 Danke für 23 Beiträge

    Standard

    OK, hat etwas gedauert - ich versuchs mal.

    Vorab - ich arbeite mit Kopien der RezeptFiles, denn aus irgendwelchen Gründen wurden von den Originaldateien NULL-Bytes eingelesen.
    Nur am Anfang und am Ende der Dateien waren 'echte' Daten enthalten. (die Methode 'ReadAll' hat nicht sauber funktioniert ).

    Ich gehe vom Startbild über ein Zwischenbild (bei dessen Aufbau kopiere ich die Dateien), und von dort auf das eigentliche Bild mit der Dropdown-Liste zur Auswahl der Rezeptur (WICHTIG: Im Startbild und Zwischenbild darf keine Rezepturanzeige mit den zu kopierenden Dateien angelegt sein -> sonst wieder 'Erlaubnis verweigert').
    Interessant sind nur die beiden Dateien .rdf und .dat
    .rdf enthält Referenzdaten (Datensatzposition im .dat File, -länge und -nummer)
    .dat enthält die Daten der einzelnen Rezepturelemente
    Hier das Kopierscript (CopyRecFiles) ...

    Code:
      Dim s
      Dim d
      Dim fs1
      Set fs1 = CreateObject("Scripting.FileSystemObject")
      s = "c:\recipes\PTRCP_Mischprogramme_1.rdf"
      d = "c:\recipes\PTRCP_MischprogrammeKopie_1.rdf"
      fs1.CopyFile s, d, True
      s = "c:\recipes\PTRCP_Mischprogramme_1.dat"
      d = "c:\recipes\PTRCP_MischprogrammeKopie_1.dat"
      fs1.CopyFile s, d, True
      s = "c:\recipes\PTRCP_Formprogramme_2.rdf"
      d = "c:\recipes\PTRCP_FormprogrammeKopie_2.rdf"
      fs1.CopyFile s, d, True
      s = "c:\recipes\PTRCP_Formprogramme_2.dat"
      d = "c:\recipes\PTRCP_FormprogrammeKopie_2.dat"
      fs1.CopyFile s, d, True
    Die Dropdown-Liste der Rezepturanzeige enthält als Variable die Rezeptnummer und den Datensatznamen.
    Die Variable für den Datensatznamen ist auf Wertänderung eingestellt und ruft die Function GetDSNum auf.
    Folgende Parameter müssen übergeben werden ...
    1. DS_Name = Variable für den Datensatznamen
    2. Rec_Num = Variable für die Rezeptnummer
    3. Rec_Name = Name der Rezeptur (direkte Eingabe)
    4. Folder_Name = Ordnername auf der HDD (direkte Eingabe mit abschließendem \ )
    5. P_Name = Name des Bildes in welchem die Function laufen soll (direkte Eingabe)
    (siehe Bild)

    Der Rückgabewert der Function kann auf eine Variable gelegt werden.

    Die Function benötigt noch eine Unterfunktion um ASC -> Int zu wandeln.

    Hier erstmal die Unterfunktion ...
    (Aufruf mit 'mki (2 Byte großer String)')
    Code:
      Dim n, x, y
      x = Asc(Right(s, 1))
      x = x * 256
      y = Asc(Left(s, 1))
      n = x + y
      MKI = n
    Und hier die Haupt-Function zum Auslesen der Datensatznummer ...
    Code:
      Dim PicName
     
      PicName = HmiRuntime.BaseScreenName
      If PicName <> P_Name Then            'Bildname prüfen
        GetDSNum = 0
        Exit Function
      End If  
     
      Dim fs1
      Dim f1, f2
      Dim f1l, f2l
      Dim file1, file2
      Dim RefFile, DatFile
      Dim RefString, DatString
      Dim RefLoc, DatLoc
      Dim RefSet
      Dim Result
      Dim i
      Dim s
      Dim a, b
     
      s = DS_Name               'Datensatzname - als Übergabeparameter
     
      Const ForReading = 1             'Datei nur lesen
     
      f1 = Folder_Name & "PTRCP_" & Rec_Name & "_" & Rec_Num & ".rdf"  'Enthält Datenreferenz
      f2 = Folder_Name & "PTRCP_" & Rec_Name & "_" & Rec_Num & ".dat"  'Enthält die Rezeptdaten
      Set fs1 = CreateObject("Scripting.FileSystemObject")
     
      Set file1 = fs1.GetFile(f1)
      Set file2 = fs1.GetFile(f2)
      f1l = file1.Size              'ReferenzFile Länge
      f2l = file2.Size              'DatenFile Länge
     
      Set RefFile = file1.OpenAsTextStream(ForReading,0)
      Set DatFile = file2.OpenAsTextStream(ForReading,0)
         RefString = RefFile.Read(f1l)          'Ges. ReferenzFile einlesen
         DatString = DatFile.Read(f2l)          'Ges. DatenFile einlesen
      DatFile.Close
      RefFile.Close
     
      Result = 0
      RefLoc = 5               'Zeiger auf 1.ten ReferenzDatensatz
      Do Until RefLoc > f1l             'ReferenzEnde erreicht?
         RefSet = Mid(RefString,RefLoc,12)         'Einen Referenz-Datensatz auslesen
         DatLoc = (MKI(Mid(RefSet,3,2)) * &H10000) + MKI(Mid(RefSet,1,2)) 'Zeiger auf Daten des Rezept-Datensatzes
         b = Mid(DatString, DatLoc + 5, Len(s))        'Name auslesen
         If b = s Then          'Name im Datenblock mit DS_Name vergleichen
            a = Mid(RefSet,9,2)            'Datensatznummer ermitteln
            Result = MKI(a)             'nach Integer wandeln
            Exit Do               'Schleife verlassen
         End If
         RefLoc = RefLoc + 12
      Loop 
      GetDSNum = Result
    Noch ein Hinweis zur Sicherheit: Anwendung auf eigene Gefahr.
    Kein Support, keine Garantie.

    Habe es auf meinem Rechner (Simu) und in der RT (ohne S7) getestet, und es funktioniert soweit.

    Mögliche Probleme könnten z.B. sein ...
    Originaldaten werden gerade kopiert und gleichzeitig kommt der Befehl "Schreibe Datensatz in Steuerung" (Zugriffsverletzung ??). OriginalFiles sind während des kopierens möglicherweise kurzzeitig für Flex blockiert (wirklich nur kurz - habe probehalber eine 64MB Datei in einen String eingelesen - hat nur ca. 1,5 sek. gedauert).

    Außerdem besteht immer noch das 5 sek. Problem.
    Es tritt z.B. auf wenn ich in einem anderen Bild mit Rezepturanzeige bin (Rezepteingabe), gehe dann auf das Startbild und anschließend das Zwischenbild (innerhalb 5 sek.), sind die RezeptFiles immer noch durch Flex geöffnet, und es kommt beim Datei kopieren wieder die Meldung 'Erlaubnis verweigert'.

    Vielleicht hat noch irgendjemand eine Idee, wie das besser zu lösen ist.
    Dies ist nur ein Ansatz.
    Das Beste wäre natürlich -> Siemens würde hier was tun.

    Gruß
    Geändert von ssound1de (18.02.2009 um 07:35 Uhr)

  4. #14
    Avatar von ssound1de
    ssound1de ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    19.06.2003
    Ort
    Im Staub ...
    Beiträge
    337
    Danke
    115
    Erhielt 26 Danke für 23 Beiträge

    Standard

    Sorry - hab die Bilder vergessen ...
    Angehängte Grafiken Angehängte Grafiken

  5. #15
    Avatar von ssound1de
    ssound1de ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    19.06.2003
    Ort
    Im Staub ...
    Beiträge
    337
    Danke
    115
    Erhielt 26 Danke für 23 Beiträge

    Standard

    Und noch ein 6.tes Bild ...
    Angehängte Grafiken Angehängte Grafiken

  6. #16
    Registriert seit
    12.05.2007
    Beiträge
    416
    Danke
    14
    Erhielt 45 Danke für 40 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Saubere Arbeit!
    So in der Richtung mache ich das mit meinem "Filebrowser" auch!
    Mit der Wsh kann man schon einiges anstellen. Aber eigentlich müsste da Sie handeln!

    Wg. deinem 5 Sec Problem... Wenn du weißt welcher Prozess auf die Rezepturverwaltung zugreift dann kannst du mittels Skript diesen "terminieren".
    Geändert von xhasx (18.02.2009 um 09:31 Uhr)

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 10.02.2011, 12:12
  2. Meldungen in WINCCflex 2007
    Von wiede im Forum HMI
    Antworten: 0
    Letzter Beitrag: 09.02.2008, 14:56
  3. WinCCflex 2007 Problem
    Von commander99 im Forum HMI
    Antworten: 4
    Letzter Beitrag: 10.01.2008, 15:50
  4. Winccflex 2007
    Von votto im Forum HMI
    Antworten: 5
    Letzter Beitrag: 13.11.2007, 21:17
  5. WinCCflex 2007 und XML kommunikation
    Von Lazarus™ im Forum HMI
    Antworten: 0
    Letzter Beitrag: 05.10.2007, 20:28

Lesezeichen

Berechtigungen

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