WinCC Flex Panel eindeutig identifizieren

Maagic7

Level-2
Beiträge
384
Reaktionspunkte
180
Zuviel Werbung?
-> Hier kostenlos registrieren
Hab mehrere Panel (WinCC flexible 2008 PC Runtime) parallel an einer SPS hängen.
Es gibt aber nur 1 Projekt und das soll auch so bleiben.

Ich brauch eine Idee, wie ich das Panel eindeutig indentifizieren kann.

Hintergrund:
ich möchte von einem Panel aus Service Emails abschicken. Aber nur von einem Panel.

Dazu müsste ich nur eines der Panels exclusiv irgendwie dafür anmelden.


Was mit bisher eingefallen ist:

Ich mach eine interne Variable in WinCC "EmailsActivated" welche ich nach Start der Runtime per Tastendruck einmal aktivieren muss.
Das Problem dabei ist, dass man das aktivieren nach Start der Runtime nicht vergessen darf. Ebenfalls kann man die beiden Panels
gleichzeitig für Email aktivieren

Wo ich hin will:
Ein Panel exclusiv an der SPS anmelden.
Wenn das 2te Panel angemeldet wird, dann wird das 1ste automatisch abgemeldet
 
Ich habe es mal mit einer Textdatei auf jedem Panel gelöst, welche beim Runtimestart eingelesen wird und die gerätespezifischen Kennungen enthält. Kannst ja auf dem Gerät eine Seite erstellen über den sich diese Datei bei Bedarf erstellen und modifizieren lässt, dann muss man nicht auf dem Gerät mit dem Explorer hantieren (z.B. bei kleinen Panels etwas fummelig).
 
Zuviel Werbung?
-> Hier kostenlos registrieren
An eine Textdatei hab ich auch schon gedacht. Könnte man über Script und fso Object machen.

Hab aber mittlerweile schon eine Idee!
Wenn man die MAC-Adresse der Netzwerkkarte über Script rausbekommt und in die SPS schreibt,
dann kann man lokale MAC mit der in der SPS angemeldeten MAC vergleichen. Sind beide identisch,
dann ist es das registrierte Panel.

Wenn man nun das 2te Panel statt das 1ste registriert, wird die MAC des 2ten in die SPS geschrieben und
somit kann immer nur 1 Panel angemeldet sein.

Obwohl heute ein produktiver Tag ist werd das erst morgen mal angehen.
 
Hab jetzt mal ein etwas experimentiert. Das mit der MAC Adress eignet sich für meine Zwecke.
Da die MAC Adresse als String zurückgegeben wird und offensichtlich 6Byte HEX Einträge hat,
hab ich nur die unteren 4Bytes der MAC verwendet und diese in einen LONG umgewandelt.
Diesen verwende ich als Panel ID.

Man bekommt eine Auflistung aller Adapter. Ich hab jetzt einfach mal den 1. verwendet.

hier das VB-Script in WinCC flexible

Code:
' First Adapter is 0

Dim objWMIService, colAdapters, objAdapter, strMAC, strComputer 
Dim I
Const iAdapterNo = 0  ' We use Adapter 0 for MAC-Address


strComputer = "." 
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 

Set colAdapters = objWMIService.ExecQuery ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True") 

For Each objAdapter In colAdapters 
    strMAC = objAdapter.MACAddress 
    If I=iAdapterNo Then
        Exit For
    End If
    I = I +1
Next

Set objWMIService = Nothing

' Da die MAC Adresse 6 Byte lang ist, werden nur die unteren
' Bytes = 8 Ziffern fuer die ID verwendet. 
' Um die HEX Ziffern in einen LONG zu wandeln muss die für VB nötige Typkennung
' &H vorgestellt werden, dann kann sie mit der CLng Funktion in einen Long
' konvertiert werden. Zusätzlich müssen vorher noch die trennenden Doppelpunkte
' entfernt werden

Dim sHex
sHex="&H" & Right (Replace(strMAC, ":", ""),8)

' das sind interne Variablen ohne Verbindung zur SPS
SmartTags("Service\Service_MAC_Address") = strMAC
SmartTags("Service\Service_MAC_ID") = CLng(sHex)

' hier die gesamten Eigenschaften der Adapter class
' ----------------------------------------
' Win32 Network Adapter class
' ----------------------------------------
' String   AdapterType;
'  uint16   AdapterTypeID;
'  boolean  AutoSense;
'  uint16   Availability;
'  String   Caption;
'  uint32   ConfigManagerErrorCode;
'  boolean  ConfigManagerUserConfig;
'  String   CreationClassName;
'  String   Description;
'  String   DeviceID;
'  boolean  ErrorCleared;
'  String   ErrorDescription;
'  String   GUID;
'  uint32   Index;
'  datetime InstallDate;
'  boolean  Installed;
'  uint32   InterfaceIndex;
'  uint32   LastErrorCode;
'  String   MACAddress;
'  String   Manufacturer;
'  uint32   MaxNumberControlled;
'  uint64   MaxSpeed;
'  String   Name;
'  String   NetConnectionID;
'  uint16   NetConnectionStatus;
'  boolean  NetEnabled;
'  String   NetworkAddresses[];
'  String   PermanentAddress;
'  boolean  PhysicalAdapter;
'  String   PNPDeviceID;
'  uint16   PowerManagementCapabilities[];
'  boolean  PowerManagementSupported;
'  String   ProductName;
'  String   ServiceName;
'  uint64   Speed;
'  String   Status;
'  uint16   StatusInfo;
'  String   SystemCreationClassName;
'  String   SystemName;
'  datetime TimeOfLastReset;
 
Ich habe genau dieselbe Lösung wie Thomas V2.1.

Ich lasse die Kunde selber einige Parameter die nur für die HMI relevant sind, selber definieren und speichern.
Z.B. benutzerdefinierte Texte, das Pfad von Netzwerkordner wo Daten abgespeichert werden soll, usw.
Beim HMI RT start werden die Parameter von Text-Datei eingelesen.

Variabelzustände wie "EmailsActivated" kann man auch speichern und wieder einlesen.
Und ich stelle mich vor dass die email Adresse in diese Weise die Kunde selbst spezifizieren kann.
 
Zuletzt bearbeitet:
Zurück
Oben