Page 1 sur 3

[Résolu] Récupérer l'états des différentes liaison

Posté : 08 nov. 2017, 09:34
par Priigame
Bonjour,
Je suis actuellement sur un projet de supervision pour valider mon année de Licence pro, cependant je me retrouve confronté à un petit problème et deux choix s'offre à moi afin de récupérer l'état de chaque liaison entre mon écran et les automates.

avant tout, j'utilise la version V14 de TIA pour ce projet.

Soit je vais crée un Bit d'état dans chaque automate que je récupère sur l'écran.

Soit je trouve une solution depuis l'écran afin de récupérer l'état directement.

Je vous cache pas que la seconde option m'intéresse d'avantage car le nombre d'automate est assez conséquent.
J'ai chercher déjà quelque piste du cotés alarmes système et pointeur mais je ne trouve pas de solution pour avoir un état booléen de chaque liaison


PS: Détail de l'utilisation:
Représentation graphique du réseau et animation sur les stations "coupé" lors d'un problème de liaison.

Merci d'avance de vos retours je galère un peu :x

Re: Récupérer l'états des différentes liaison

Posté : 08 nov. 2017, 12:00
par itasoft
slts,
difficile sans même savoir de quelle supervision il s'agit ni de quel modèle d'automate.
La première chose à faire quand un diffuse un message c'est de présenter le matériel.

Re: Récupérer l'états des différentes liaison

Posté : 08 nov. 2017, 13:55
par Priigame
Autant pour moi , il s'agit d'une supervision sous base PC, avec une panoplie assez diverse d'automate.
Tout sera regroupé sur un OPC HDA.

J'ai du crée des liaison avec chaque automate et du coup je cherche à récupérer l'état de chacun.

Je regarde coté script actuellement mais sans succès, les fonctions que je trouve ne sont pas reconnu dans la syntaxe.

Merci de ta réponse en tout cas.

Re: Récupérer l'états des différentes liaison

Posté : 08 nov. 2017, 14:17
par djé
Priigame a écrit : 08 nov. 2017, 13:55 il s'agit d'une supervision sous base PC, avec une panoplie assez diverse d'automate.
Tout sera regroupé sur un OPC HDA.
Oui mais quel logiciel de supervision (il y en a moultes)
depuis le serveur OPC tu peux peut-être avoir des infos.

Si la supervision supporte des scripts de type VBS c'est pas bien compliqué de fair un ping sur une adresse IP pour s'avoir si le matériel est présent (je suppose que tu es sur un réseau Ethernet) mAis la aussi ca manque de précision.

Re: Récupérer l'états des différentes liaison

Posté : 08 nov. 2017, 14:46
par Priigame
Sous OPC Scout, la supervision de TIA supporte les script Visual Basic mais je n'arrive pas a trouver des fonctions reconnu par TIA.

Par exemple:

If My.Computer.Network.Ping("198.01.01.01") Then
MsgBox("Server pinged successfully.")
Else
MsgBox("Ping request timed out.")
End If


Il ne reconnais pas la fonction "My", j'ajoute une variable local My et il me dis "set as été assigné à un objet non global.

Des idées ? J'ai jamais vraiment fais de VB donc si quelqu'un as un script modèle je suis preneur :x

Re: Récupérer l'états des différentes liaison

Posté : 08 nov. 2017, 15:53
par djé
Je ne connais pas bien Wincc mais je crois qu'il supporte le vbs:

tu peux essayer ce script (VBS)

Code : Tout sélectionner

dim ipAd
ipAd = "192.168.2.250"
WScript.Echo "est-ce que " & ipAd & " est en ligne:" & Ping( ipAd )

Function Ping( myHostName )
' This function returns True if the specified host could be pinged.
' myHostName can be a computer name or IP address.
' The Win32_PingStatus class used in this function requires Windows XP or later.
' This function is based on the TestPing function in a sample script by Don Jones
' http://www.scriptinganswers.com/vault/computer%20management/default.asp#activedirectoryquickworkstationinventorytxt

    ' Standard housekeeping
    Dim colPingResults, objPingResult, strQuery

    ' Define the WMI query
    strQuery = "SELECT * FROM Win32_PingStatus WHERE Address = '" & myHostName & "'"

    ' Run the WMI query
    Set colPingResults = GetObject("winmgmts://./root/cimv2").ExecQuery( strQuery )

    ' Translate the query results to either True or False
    For Each objPingResult In colPingResults
        If Not IsObject( objPingResult ) Then
            Ping = False
        ElseIf objPingResult.StatusCode = 0 Then
            Ping = True
        Else
            Ping = False
        End If
    Next

    Set colPingResults = Nothing
End Function
Vérifies si ca marche avec un adresse IP qui est présente sur le réseau et si oui à toi d'adapter.

Re: Récupérer l'états des différentes liaison

Posté : 08 nov. 2017, 15:55
par Priigame
Merci, je vais de suite essayer

Edit: Il n'aime pas les instructions "Set" par exemple, j'ai l'impression que c'est du VB très simplifié et réduit.
Merci quand même :/

Re: Récupérer l'états des différentes liaison

Posté : 09 nov. 2017, 08:53
par Priigame
En bidouillant un petit peu depuis hier j'ai quelque chose de pas mal pour ping, cependant je n'arrive pas à récupérer la réponse PINGFlag.
Je voulais faire une condition IF afin de set ou reset un bit local mais je ne sais pas quoi mettre en condition, c'est pourquoi je voulais récupérer le résultat PINGFlag dans un bloc note afin d'étudier le résultat émis.

Code : Tout sélectionner

Dim WshShell, PINGFlag, My, Activate, test, i

Set WshShell = CreateObject("WScript.Shell")

Set PINGFlag = WshShell.Run("ping 192.168.90.57")

End Sub
Si quelqu'un as une solution compatible TIA :/

Re: Récupérer l'états des différentes liaison

Posté : 09 nov. 2017, 09:35
par Priigame
Je suis pas du tout à l'aise en programmation mais je vais tenter de faire un petit algo, ça devrais ressembler à cela:

Début

WshShell, PINGFlag, Activate

Crée Objet Shell

Exécuter "Ping xxx.xxx.xxx.xxx"
Écrire dans PINGFlag

//Exécuter "notepad" ------- Juste pour les essaie
//Ecrire PINGFlag dans notepad (ou ailleurs tant que j'ai un aperçu de la réponse) --------- Juste pour les essaie

Si PINGFlag est bon alors
mettre bit interne à 1
si non
mettre bit interne à 0

Fin

Re: Récupérer l'états des différentes liaison

Posté : 09 nov. 2017, 09:51
par djé
Salut,

J'ai fait un petit test sur Wincc Flexible avec le script qui suit (type=Sub):
Depuis une page j'ai créé deux boutons distinct:
  • le premier appelle le script avec en paramètre une adresse IP présente sur mon réseau;
  • le second idem mais avec une adresse IP bidon:
Un carré simple sur la même page est animé (vert/rouge) sur la variable locale Variable_1 (écrite dans le script) vert=1 (présent)

Code : Tout sélectionner

    ' déclaration variables
    Dim colPingResults, objPingResult, strQuery

    ' définition de la requete  WMI 
    'ipAdr = paramètre transmis à la routine (SUB) (ex 192.168.2.250)
    strQuery = "SELECT * FROM Win32_PingStatus WHERE Address = '" & ipAdr & "'" 

    ' lancement de la requete  WMI
    Set colPingResults = GetObject("winmgmts://./root/cimv2").ExecQuery( strQuery )

    ' Analyse de la reponse requete WMI
    For Each objPingResult In colPingResults
        If Not IsObject( objPingResult ) Then
            Variable_1 = False
        ElseIf objPingResult.StatusCode = 0 Then
            Variable_1 = True  'Variable_1 d'animation de type locale
        Else
            Variable_1 = False
        End If
    Next

    Set colPingResults = Nothing

Ca fonctionne.