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

Ergebnis 1 bis 6 von 6

Thema: TIA V13: Eigene IP-Adresse im Basic Panel auslesen

  1. #1
    Registriert seit
    26.02.2009
    Ort
    Schweiz
    Beiträge
    33
    Danke
    3
    Erhielt 3 Danke für 3 Beiträge

    Frage


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    ich habe ein Problem mit einem Siemens KTP700 PN-Panel (ProfiNet), das ich mit dem TIA-Portal V13 projektiere. Wie kann ich im Panel die eigene IP-Adresse auslesen? Es geht nicht um die Einstellung der IP-Adresse in der Systemsteuerung des Gerätes, sondern um das Auslesen dieser Adresse im Panel-Programm.
    Grund dafür ist, dass ich in einer Anlage drei nahezu gleiche Panel verwende. Je nach Einbauort sollen unterschiedliche Funktionalitäten freigeschaltet bzw. gesperrt sein. Anhand der vergebenen IP-Adresse könnte ich recht einfach feststellen, welcher Einbauort vorliegt. Wenn ich denn die Adresse wüsste
    Der Kunde hätte den Vorteil, dass er nur ein Ersatzpanel bräuchte. Die IP-Adresse kann er selber einstellen und das Panel hätte dann automatisch die richtige Konfiguration und wir bräuchten nur ein Panel-Projekt zu pflegen.

    Sollte es eine einfache andere Variante geben, so wäre ich auch dafür dankbar. Aus meiner Sicht wäre die zweitbeste Lösung, dass man eine Auswahlmöglichkeit (z.B. ein spezielles Bedienbild mit entsprechenden Benutzerrechten) vorsieht, in dem man den Einbauort des Panels selektieren kann.

    Vielen Dank im Voraus.
    Jedes Problem erlaubt zwei Standpunkte: unseren eigenen und den falschen.
    Zitieren Zitieren TIA V13: Eigene IP-Adresse im Basic Panel auslesen  

  2. #2
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.294
    Danke
    932
    Erhielt 3.321 Danke für 2.683 Beiträge

    Standard

    (Beispielskripte getestet unter WinCC flexible, sollten auch unter TIA laufen)

    Ich ermittle für die Panel-Unterscheidung nicht die IP-Adresse, sondern den Hostname (den OP-"Device Name"). Den kann der Kunde ebenfalls selber in "Control Panel > Communication Properties > Device name" eingeben.
    Die Panele heißen dann z.B. "MP370_Linie_1", "MP370_Linie_2" ... wobei ich meist nur die Nummer am Ende auswerte ("_1", "_2" ...)

    Da es für das Lesen der IP-Adresse oder des Hostname keinen direkten Befehl gibt, muß man im CMD-Prompt ein externes Programm aufrufen, was die gewünschte Information liefert, und dessen Ausgabe in einer Textdatei auffangen. Dafür eignen sich z.B. "ipconfig" oder "ping localhost" (dauert länger).

    Bei meinen (früheren) Versuchen mit WinCC flexible habe ich festgestellt, daß das von Siemens kastrierte WinCE sich stellenweise ziemlich zickig anstellt. Seitdem erzeuge ich zuerst eine Batchdatei mit den gewünschten Befehlen und starte dann die Batchdatei. Dann noch auf das Erscheinen der Ausgabedatei warten (welche vorher gelöscht wurde und nach der Ausgabe umbenannt wurde) und danach die Information aus der Ausgabedatei auslesen. Weil es keine Information gibt, wann das externe Programm ausgeführt und beendet ist, wird auf das Erscheinen der am Ende umbenannten Programmausgabe-Datei gewartet.

    Außerdem schreibe ich meine Skripte für die Panele so, daß ich sie auch auf einem PC ausführen/testen kann. Dafür habe ich in der RT eine Variable "_System\!_RT-Sim_!". Je nachdem, ob ich das Runtime-Projekt auf ein Panel lade oder auf einem PC starte, setze ich den Startwert der Variable auf: 0=läuft auf dem Panel / 1=läuft auf einem PC

    Noch eine unschöne Macke: WinCE-Programme kennen anscheinend kein "Minimized" -> der CMD-Aufruf ist immer kurzzeitig in Vollbild zu sehen.

    Code:
    ' Sub GetHostname() - ermittelt den OP-"Device Name" (= Hostname = Computername)
    ' Der "Device Name" wird in "Control Panel - Communication Properties" eingegeben
    
    Const ForReading = 1, ForWriting = 2
    Dim SimPC, fso, f, batfile, outfile, txtfile, txtname, cmdline, breaktime
    batfile = "\TEMP\gethostname.bat" 'Batchdatei für WinCE
    outfile = "\TEMP\ipconfig.tmp"    'Programmausgabe ipconfig
    txtfile = "\TEMP\ipconfig.txt"    'Umbenannt nachdem ipconfig fertig
    txtname = " ipconfig.txt"         'Zieldateiname Umbenennen - wegen WinCE ausgeschrieben, muß hier mit " " beginnen
    
    ' Kommandozeile CMD + Batchdatei für WinCE-CMD erstellen
    SimPC = SmartTags("_System\!_RT-Sim_!")
    If SimPC Then 'PC-Windows
      cmdline = "/c ipconfig /all >" & outfile & " & ren " & outfile & txtname
      FileDel txtfile 'auf das Erscheinen dieser Datei nachher warten und wegen umbenennen löschen
    Else 'WinCE
      cmdline = "/c " & batfile
      Set f = CreateObject("FileCtl.File")
      f.Open batfile, ForWriting
      f.LinePrint "@del " & txtfile
      f.LinePrint "@ipconfig /all >" & outfile
      f.LinePrint "@ren " & outfile & txtname
      f.Close
    End If
    
    breaktime = Now() + #00:00:10# 'TimeSerial(0, 0, 10) 'max bis Jetzt()+10 Sekunden warten
    StartProgram "CMD.EXE", cmdline, hmiShowMinimized, hmiYes '!? was bedeutet das hmiYes nun wirklich ?!
    Do While Not FileExist(txtfile)
      If (Now() > breaktime) Then Exit Sub 'Notausgang bei Überschreitung Wartezeit
    Loop 'auf Programmende warten
    
    ' Programm beendet und txtfile erstellt! Nun Hostname auslesen:
    If SimPC Then 'PC-Windows
      Set fso = CreateObject("Scripting.FileSystemObject")
      Set f = fso.OpenTextFile(txtfile, ForReading, False)
      Do While f.AtEndOfStream = False
        If FindHostname(f.ReadLine) Then Exit Do
      Loop
      f.Close
    Else 'WinCE
    ' Set f = CreateObject("FileCtl.File") 'schon weiter oben ausgeführt
      f.Open txtfile, ForReading
      Do While f.EOF = False
        If FindHostname(f.LineInputString) Then Exit Do
      Loop
      f.Close
    End If
    Code:
    ' Function FindHostname(sline)
    ' durchsucht eine übergebene Stringzeile, ob darin "*Host* : <Hostname>" vorkommt
    ' und weist der Variablen SmartTags("_System\Hostname") den Hostname zu - Rückgabe ist dann TRUE
    ' die Stringzeile stammt aus der Ausgabe des Befehls "ipconfig /all"
    ' WinXP: Zeile  4  "        Hostname. . . . . . . . . . . . . : COMPUXXX", 0D(, 0D, 0A)
    ' WinCE: Zeile 21  "	 Host name.........: MP370_2 "(, 0D, 0A)
    
    Dim field, hostname
    FindHostname = False
    If sline = "" Then Exit Function 'wg. Split()
    field = Split(sline, ":")
    If UBound(field) <> 0 Then ' ":" war enthalten, field(0): Text vor ":", field(1): Text nach ":"
      If InStr(field(0), "Host") Then
        FindHostname = True
        hostname = Replace(Trim(field(1)), Chr(&H0D), "") 'unter WinXP hängt noch ein &H0D dran
        SmartTags("_System\Hostname") = hostname
      End If
    End If
    Code:
    ' Function FileExist(Path) prüft, ob die angegebene Datei vorhanden ist
    ' Rückgabewert muß True/False sein!
    ' Skript kann unter OP-WinCE und PC-Windows laufen
    ' Path darf unter WinCE wildcards *? enthalten
    
    Dim fso
    FileExist = False
    If SmartTags("_System\!_RT-Sim_!") Then 'PC-Windows
      Set fso = CreateObject("Scripting.FileSystemObject")
      If fso.FileExists(Path) Then FileExist = True
    Else 'WinCE
      Set fso = CreateObject("FileCtl.FileSystem")
      If fso.Dir(Path) <> "" Then FileExist = True
    End If
    Code:
    ' Sub FileDel(Path) löscht eine Datei
    ' Skript kann unter OP-WinCE und PC-Windows laufen
    
    Dim fso
    If SmartTags("_System\!_RT-Sim_!") Then 'PC-Windows
      Set fso = CreateObject("Scripting.FileSystemObject")
      If fso.FileExists(Path) Then fso.DeleteFile Path
    Else 'WinCE
      Set fso = CreateObject("FileCtl.FileSystem")
      If fso.Dir(Path) <> "" Then fso.Kill Path
    End If
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet
    Zitieren Zitieren WinCE VBS GetHostname  

  3. Folgende 3 Benutzer sagen Danke zu PN/DP für den nützlichen Beitrag:

    Jochen Kühner (13.10.2014),RONIN (11.02.2016),xXgrime (06.06.2016)

  4. #3
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.294
    Danke
    932
    Erhielt 3.321 Danke für 2.683 Beiträge

    Standard

    Ich sehe gerade, daß auch beim Ablauf unter WinCE das Löschen der Ausgabedatei vor dem CMD-Aufruf passieren müßte, doch das Skript GetHostname() funktioniert in meinen Panels (anscheinend) auch so wie oben gezeigt. Vermutlich wird ab dem zweiten Aufruf die Ausgabedatei vom Aufruf davor ausgewertet (falls sie noch vorhanden ist), was nicht weiter auffällt, wenn man den Hostname zwischendurch nicht ändert. Normalerweise wird bei mir das Skript nur beim Runtimestart nach Einschalten des Panels aufgerufen und da existiert die Ausgabedatei nicht bzw. nicht mehr, weil in \TEMP\

    (Oder ist die gestartete Batchdatei schneller fertig mit Löschen als die Fortsetzung des Skriptes??)

    Hier eine verbesserte (aber noch nicht getestete) Version:
    Code:
    ' Sub GetHostname() - ermittelt den OP-"Device Name" (= Hostname = Computername)
    ' Der "Device Name" wird in "Control Panel - Communication Properties" eingegeben
    
    Const ForReading = 1, ForWriting = 2
    Dim SimPC, fso, f, batfile, outfile, txtfile, txtname, cmdline, breaktime
    
    batfile = "\TEMP\gethostname.bat" 'Batchdatei für WinCE
    outfile = "\TEMP\ipconfig.tmp"    'Programmausgabe ipconfig
    txtfile = "\TEMP\ipconfig.txt"    'Umbenannt nachdem ipconfig fertig
    txtname = " ipconfig.txt"         'Zieldateiname Umbenennen - wegen WinCE ausgeschrieben, muß hier mit " " beginnen
    
    ' Ausgabedatei löschen falls sie schon existiert
    FileDel txtfile 'auf das Erscheinen dieser Datei nachher warten und wegen umbenennen löschen
    
    ' Kommandozeile CMD + Batchdatei für WinCE-CMD erstellen
    SimPC = SmartTags("_System\!_RT-Sim_!")
    If SimPC Then 'PC-Windows
      cmdline = "/c ipconfig /all >" & outfile & " & ren " & outfile & txtname
    Else 'WinCE
      cmdline = "/c " & batfile
      Set f = CreateObject("FileCtl.File")
      f.Open batfile, ForWriting
      f.LinePrint "@ipconfig /all >" & outfile
      f.LinePrint "@ren " & outfile & txtname
      f.Close
    End If
    
    ' ipconfig ausführen und Ausgabe auffangen
    breaktime = Now() + #00:00:10# 'TimeSerial(0, 0, 10) 'max bis Jetzt()+10 Sekunden warten
    StartProgram "CMD.EXE", cmdline, hmiShowMinimized, hmiYes '!? was bedeutet das hmiYes nun wirklich ?!
    Do While Not FileExist(txtfile)
      If (Now() > breaktime) Then Exit Sub 'Notausgang bei Überschreitung Wartezeit
    Loop 'auf Programmende warten
    
    ' Programm beendet und txtfile erstellt! Nun Hostname auslesen:
    If SimPC Then 'PC-Windows
      Set fso = CreateObject("Scripting.FileSystemObject")
      Set f = fso.OpenTextFile(txtfile, ForReading, False)
      Do While f.AtEndOfStream = False
        If FindHostname(f.ReadLine) Then Exit Do
      Loop
      f.Close
    Else 'WinCE
    ' Set f = CreateObject("FileCtl.File") 'schon weiter oben ausgeführt
      f.Open txtfile, ForReading
      Do While f.EOF = False
        If FindHostname(f.LineInputString) Then Exit Do
      Loop
      f.Close
    End If
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  5. Folgende 2 Benutzer sagen Danke zu PN/DP für den nützlichen Beitrag:

    RONIN (11.02.2016),xXgrime (06.06.2016)

  6. #4
    Registriert seit
    26.02.2009
    Ort
    Schweiz
    Beiträge
    33
    Danke
    3
    Erhielt 3 Danke für 3 Beiträge

    Standard

    Vielen Dank!
    Das mit dem Devicename klingt praktisch. Den braucht das Gerät sowieso, da es über Profinet angeschlossen ist.
    Jetzt muss ich nur noch nachschauen, wie der Devicename im Panel ausgelesen werden kann. Hoffentlich ist wenigstens das möglich. Die Möglichkeiten im TIA Portal sind genau so beschränkt wie bei WinCC flexible. Der gleiche Mist in neuer Verpackung.

  7. #5
    Registriert seit
    06.10.2004
    Ort
    Kopenhagen.
    Beiträge
    4.639
    Danke
    377
    Erhielt 803 Danke für 644 Beiträge

    Standard

    Zitat Zitat von stoecklepator Beitrag anzeigen
    TIA V13: Eigene IP-Adresse im Basic Panel auslesen

    ich habe ein Problem mit einem Siemens KTP700 PN-Panel (ProfiNet),
    Ein KTP700 Basic Panel, kann wohl keine Skripte, oder ... ?

    Aus die Technische Daten:
    Functionality under WinCC (TIA Portal)Number of Visual Basic Scripts No
    Die Aufgabe, ein TIA Projekt für mehrere Panele, und das HMI Program ist "selbstkonfiguriend" abhängig von welche Lokation ("wer bin ich") ist mit diesen panel zwierig.
    Jesper M. Pedersen

  8. #6
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.367
    Danke
    457
    Erhielt 696 Danke für 521 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Kann bestätigen dass das auch auf einem TP1200 läuft.

    TOP! Großes Lob an Harald.
    Geändert von RONIN (11.02.2016 um 16:07 Uhr)
    If at first you don't succeed, you're not Van Damme!
    ... or maybe using TIA!

  9. Folgender Benutzer sagt Danke zu RONIN für den nützlichen Beitrag:

    PN/DP (11.02.2016)

Ähnliche Themen

  1. Antworten: 3
    Letzter Beitrag: 09.10.2014, 12:09
  2. Antworten: 2
    Letzter Beitrag: 21.08.2014, 09:56
  3. Antworten: 2
    Letzter Beitrag: 11.05.2014, 08:14
  4. Basic Panel 2nd Generation TIA V12 SP1 Upd4 ?
    Von Lebenslang im Forum HMI
    Antworten: 3
    Letzter Beitrag: 28.04.2014, 07:37
  5. Step7 CPU und TIA Basic Panel
    Von schnoerpeloetzi im Forum HMI
    Antworten: 5
    Letzter Beitrag: 28.01.2014, 11:01

Stichworte

Lesezeichen

Berechtigungen

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