IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Automation Discussion :

[S7-400] Récuperer/transferer les Block de données DB de l'automate


Sujet :

Automation

  1. #1
    Membre expérimenté Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Points : 1 455
    Points
    1 455
    Par défaut [S7-400] Récuperer/transferer les Block de données DB de l'automate
    Bonjour,

    le logiciel STEP7 ne me permettant pas de faire ce que je souhaite,
    c'est à dire, dans mes DB, je veut mettre à jour les valeur initiales avec les valeurs en cours.

    je me tourne vers une solution du style une appli vb qui va récupérer les DB et les interpréter comme je veut. *optimiste*
    Seulement je ne vois pas trop comment faire

    Pour taper dans l'automate, on passe par un opcServeur?
    peut-on re-transférer les DB dans l'automate après?

    Voila, désolé pour les questions de débutants mais Siemens je découvre...

  2. #2
    Membre expérimenté Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Points : 1 455
    Points
    1 455

  3. #3
    Membre expérimenté Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Points : 1 455
    Points
    1 455
    Par défaut
    je suis partie sur la possibilité de se connecter avec "Libnodave"

    j'ai trouvé la dll sur leur site
    je laisse également la source que je développe actuellement

    Si il y a des connaisseurs, n'hésitez pas *je me sent un peut seul...*

  4. #4
    Expert éminent
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Points : 8 524
    Points
    8 524
    Par défaut
    J'ai vu ça, si cela peut te rendre service
    http://support.automation.siemens.co...ard&viewreg=WW
    Vous vous posez une question, la réponse est peut-être ici :
    Toutes les FAQs VB
    Les Cours et Tutoriels VB6/VBScript
    Les Sources VB6


    Je ne réponds pas aux questions techniques par MP. Utilisez les forums. Merci de votre compréhension

  5. #5
    Membre expérimenté Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Points : 1 455
    Points
    1 455
    Par défaut
    Merci pour le lien,
    j'avais trouvé le moyen d'exporter les données au format AWL, et faire la manip
    mais elle reste lourde, l'idée c'est d'avoir une manip simple a faire pour les personnes qui auront a sauvegarder ou remplacer les données.

    je pense toujours développer une appli avec une interface intuitive, pour que les intervenants puissent communiquer avec l'automate.

  6. #6
    Membre expérimenté Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Points : 1 455
    Points
    1 455
    Par défaut
    J'avance pas à pas,
    dans mon avancé, j'ai réussi à communiquer avec l'automate
    *je sais on n'est pas au transfert de DB mais patience*

    Alors comment j'ai fait ça...

    tout d'abord les ressources que j'utilise:
    • Visual studio 2010 (vb.net)
    • Communication Ethernet (pour le moment, je compte tester le RS232 après)
    • Automate S7-400
    • Libnodave (librairie gratuite qui va me permettre la comm)


    Ensuite je fait un projet Visual Basic -> Windows Form Application *NetFramework 4*
    je n'oublie pas d'ajouter ma librairie Projet -> Ajouter une référence -> parcourir -> "libnodave.net.dll" (dans l'archive: libnodave-0.8.4.5\Dot.NET\libnodave.net.dll)
    je vous passe les cours de vb, il y en a un très complet sur ce site

    je me fait une petite inteface de test


    je tape quelque ligne pour lui dire quoi faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    Public Class frmConnexion
    
    
        Private Sub frmConnexion_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    
            ' Configuration de la page de Connexion
            '   Vérouillage des CheckBox
            chbxOuverturePort.Enabled = False
            chbxConnexionCarte.Enabled = False
            chbxConnexionAutomate.Enabled = False
            chbxLectureValeurs.Enabled = False
            '   Ajoute de valeurs dans la ComboBox
            cmbxModeComm.Items.Add("Serie")
            cmbxModeComm.Items.Add("Ethernet")
            '   Vérouillage de la ComboBox
            cmbxModeComm.DropDownStyle = ComboBoxStyle.DropDownList
            '   On masque la Saisie d'IP au démarrage
            lblAdresse.Visible = False
            txtAdresse.Visible = False
    
    
        End Sub
    
        Private Sub cmbxModeComm_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmbxModeComm.TextChanged
            'Lorsqu'on choisie le PORT de communication
            txtAdresse.Text = "192.168.1.5"
            If cmbxModeComm.Text = "Ethernet" Then
                'On affiche la saisie d'IP pour l'ethernet
                lblAdresse.Visible = True
                txtAdresse.Visible = True
            Else
                'Sinon on cahce la saisie d'IP et on initialise l'adresse
                lblAdresse.Visible = False
                txtAdresse.Visible = False
            End If
    
        End Sub
    
        Private Sub CommunicationAutomate()
    
            Dim localMPI As Integer = 0 'Configuration des adresses PPI / MPI du PC (normalement à 0)
            Dim plcMPI As Integer = 2 ' Configuration des adresses PPI / MPI de l'automate (normalement à 2)
            Dim IP_Adress As String = txtAdresse.Text ' Configuration de l'adresse IP
    
            Dim fds As libnodave.daveOSserialType
            Dim di As libnodave.daveInterface
            Dim dc As libnodave.daveConnection
            Dim res As Integer
            Dim buf(1000) As Byte
            Dim inputsRes As Integer
            Dim InputBuffer(1000) As Byte ' Buffer pour lire / écrire des entrées
            Dim Inputs(6 * 8) As Integer  ' Entrées de l'automate -> 6 octets IB0 .. IB5
            Dim outputsRes As Integer
            Dim OutputBuffer(1000) As Byte ' Buffer pour lire / écrire les sorties
            Dim Outputs(6 * 8) As Integer  ' Sorties de l'automate -> 6 octets QB0 .. QB5
            Dim memoryRes As Integer
            Dim MemoryBuffer(1000) As Byte ' Buffer pour lire / écrire des mémoires M
            Dim Memory(16 * 8) As Integer ' Memoire M de l'automate -> 15 octets MB0 .. MB14
            Dim XMTBuffer(100) As Byte ' Buffer de données transmises à l'automate
    
    
            If cmbxModeComm.Text = "Serie" Then
                ' Ouverture du port COM en mode lecture
                fds.rfd = libnodave.setPort("com1", "19200", AscW("E")) ' Port=COM1, BaudRate=19200, Parité= Pair
            ElseIf cmbxModeComm.Text = "Ethernet" Then
                ' Ouverture du Socket en mode lecture
                fds.rfd = libnodave.openSocket(102, IP_Adress)
            Else
                ' génération d'une erreur
                fds.rfd = -10000
            End If
    
            ' Ouverture de la communication en mode écriture
            fds.wfd = fds.rfd
    
    
            'S'il n'y a pas d'erreur sur l'ouverture du port de communication
            If fds.rfd > 0 Then
                chbxOuverturePort.Checked = True
                ' Création d'une nouvelle interface
                If cmbxModeComm.Text = "Serie" Then
                    ' daveProtoMPI3 '  MPI pour S7 300/400, Step 7 Version
                    ' vitesse fixé au hasard
                    di = New libnodave.daveInterface(fds, "My Interface 1", localMPI, libnodave.daveProtoMPI3, libnodave.daveSpeed500k) ' Importante, caso não estejamos a usar PPI, devemos alterar o daveProtoPPI, e caso o baudrate seja diferente, também devemos alterar
                ElseIf cmbxModeComm.Text = "Ethernet" Then
                    ' 
                    di = New libnodave.daveInterface(fds, "IF1", localMPI, libnodave.daveProtoISOTCP, libnodave.daveSpeed187k)
                End If
                di.setTimeout(100)  ' S'il y a trop d'erreur de reception augmentez la valeur
                res = di.initAdapter ' Début de l'adaptation
    
                If res = 0 Then
                    ' Si l'adaptation c'est bien passé
                    chbxConnexionCarte.Checked = True
    
                    dc = New libnodave.daveConnection(di, plcMPI, 0, 3)
                    ' créer une nouvelle connexion, Note: le support MPI et l'emplacement ne sont pas importants
                    res = dc.connectPLC ' On appel l'automate
                    If res = 0 Then
                        ' Si l'appel c'est bien passé
                        chbxConnexionAutomate.Checked = True
    
                        inputsRes = dc.readBytes(libnodave.daveInputs, 0, 0, 6, InputBuffer) ' Lecture des entrées
                        outputsRes = dc.readBytes(libnodave.daveOutputs, 0, 0, 6, OutputBuffer) ' Lecture des sorties
                        memoryRes = dc.readBytes(libnodave.daveFlags, 0, 0, 16, MemoryBuffer) ' Lecture des mémoires
                        ' A chaque lecture on prend du temps/performances
                        ' Il est préférable de lire un grand nombre de données et de les utiliser quand on en a besoin 
    
                        If inputsRes = 0 And outputsRes = 0 And memoryRes = 0 Then
                            ' Si la lecture c'est bien passée
    
    
                            chbxLectureValeurs.Checked = True
                            ' Pour le fun j'essaye d'afficher le memento Note:valeur qui change tout le temps
                            MsgBox("memento de cadence =" & MemoryBuffer(0))
    
                        Else
                            ' Erreur de lecture des valeurs
                            MsgBox("Erreur de lecture des valeurs" & vbCrLf & "Error {0:d}={1:s} in readBytes.res = " & res & vbCrLf)
                        End If
                        dc.disconnectPLC() ' Déconnexion de l'automate
                    Else
                        ' Erreur de connexion avec l'automate
                        MsgBox("Erreur de connexion avec l'automate" & vbCrLf & "Error {0:d}={1:s} in connectPLC.res = " & res & vbCrLf)
                    End If
                    di.disconnectAdapter()  ' Deconnexion de la carte automate
                Else
                    ' Erreur dans la carte automte
                    MsgBox("Erreur de connexion avec la carte" & vbCrLf & "Error {0:d}={1:s} in initAdapter.res = " & res & vbCrLf)
                End If
                ' Fermeture du PORT
                libnodave.closePort(fds.rfd)    ' Clean up
            Else
                ' Erreur à l'ouverture du PORT
                MsgBox("Erreur à l'ouverture du PORT" & vbCrLf)
            End If
    
        End Sub
        
        Private Sub btConnexion_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btConnexion.Click
            Dim InfoBulle As ToolTip
            ' Nouvelle Info Bulle
            InfoBulle = New System.Windows.Forms.ToolTip
            ' avec un skin plus agréable
            InfoBulle.IsBalloon = True
    
    
            If cmbxModeComm.Text = Nothing Then
                InfoBulle.Show("Saisir le Mode de communication", cmbxModeComm, 0, -40, 2000)
            Else
                CommunicationAutomate()
            End If
    
    
        End Sub
    End Class
    *Je ne commente pas tout le code, il y a suffisamment de commentaire a l'intérieur *

    toutefois il faut faire attention a certaines détails pour réussir communication:
    • Les adresse PPI/MPI
      Dim localMPI As Integer = 0 ' Configuration des adresses PPI / MPI du PC (normalement à 0)
      Dim plcMPI As Integer = 2 ' Configuration des adresses PPI / MPI de l'automate (normalement à 2)
    • l'adresse IP
      généralement sous la forme 192.168.1.X

    • Le Protocole de communication
      pour l'Ethernet, tout dépend si le port est en natif sur la machine ou déporté sur une carte

      dans mon exemple:
      si on veut communiquer par le port PN-IO (qui est en natif sur la CPU), on créera le DaveInterface avec le fonction suivante:
      di = New libnodave.daveInterface(fds, "IF1", localMPI, libnodave.daveProtoISOTCP, libnodave.daveSpeed187k)

      Si c'est avec le port déporté sur la carte CP343
      di = New libnodave.daveInterface(fds, "IF1", localMPI, libnodave.daveProtoISOTCP243, libnodave.daveSpeed187k)

    • Châssis/Emplacements important pour la communication
      Pour communiquer avec l'automate, il ne faut pas négliger ce détail *j'en ai malheureusment fait les frais *
      lors de la création du DaveConnexion, il faut préciser le rack *chassis* et le slot *emplacement*

      pour communiquer par le PN-IO:
      dc = New libnodave.daveConnection(di, plcMPI, 0, 2)
      pour communiquer par la carte CP 343:
      dc = New libnodave.daveConnection(di, plcMPI, 0, 3)

      la c'était facile, il y a l'image au dessus
      au besoin, vous pouvez retrouver la config de votre automate en allant dans SIMATIC Manager -> Outils -> Configuration du réseau


    Au final j'ai mon appli qui se connecte correctement



    Voila pour "comment se connecter",
    et comme je n'ai trouvé aucunes docs en Français, j'ai tenu à mettre ce petit bout d'explication

    Sur ce, Bon Weekend !!!!!!!!!!

    + + =

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Developpeur informatique industriel
    Inscrit en
    Septembre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Developpeur informatique industriel
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 4
    Points : 6
    Points
    6
    Par défaut
    N'a tu pas pensé à une supervision du type WinCC sous S7 ?
    Ca ce code sous VB/C/VBScript.
    Donc très intéressant car il gère le lien avec les automates et ça te permet de changer tes variables dite externe.

    Cordialement.

  8. #8
    Expert éminent sénior

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Points : 19 101
    Points
    19 101
    Par défaut
    J'ai posé la question il y a peut à Siemens car j'ai un tour de cochon : suite à une reprise à froid tout est reparti sur les valeurs initiales. Donc j'ai perdu toutes les données.

    Via la COM tu accèdes seulement aux valeur en cours, pour mettre à jours les valeurs en valeurs initiales il faut (comme c'est préciser plus haut) copier le db Online->Offline puis le retransférer Offline->Online.

    Il va normalement y avoir des solutions dans le nouveau S7 en cours de sortie mais je n'ai pas de détails.
    Delphi :
    La F.A.Q. , 877 réponses à vos questions !
    264 sources à consulter/télécharger !

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    J'essaye de reproduire ce qu'a fait hunteshiva sur l'utilisation de Libnodave, mais je me heurte au problème suivant lors de l'éxécution:"Unable to load DLL 'libnodave.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E).
    Est ce qu'il y aurait autre chose a paramétrer, a part l'ajout de la référence? ou peut être un endroit spécial pour la DLL?

    Cordialement.

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 26
    Points : 34
    Points
    34

Discussions similaires

  1. [XL-2003] Comment transferer les bases de donnes d'un Sheet a un autre Sheet?
    Par violet2410 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/06/2009, 09h59
  2. Transferer les données d'une table a une autre
    Par guy_antoine_mav dans le forum Débuter avec Java
    Réponses: 7
    Dernier message: 26/08/2008, 12h45
  3. Réponses: 4
    Dernier message: 20/11/2007, 13h44
  4. transferer les donnes d'une BDD vers un fichier XML?
    Par bylka dans le forum XQUERY/SGBD
    Réponses: 6
    Dernier message: 12/11/2007, 09h11
  5. transferer les données d'un DataGrid pour l'impression
    Par reeda dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 25/09/2006, 10h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo