Précédent   Forum des professionnels en informatique > Systèmes > Autres systèmes > Automation
Automation Forum d'entraide sur l'automatisme, la robotique et l'informatique industrielle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/01/2011, 09h53   #1
Membre Expert
 
Avatar de hunteshiva
 
Homme eric Maitre
Étudiant
Inscription : février 2010
Messages : 952
Détails du profil
Informations personnelles :
Nom : Homme eric Maitre
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Étudiant
Secteur : Industrie

Informations forums :
Inscription : février 2010
Messages : 952
Points : 1 163
Points : 1 163
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...
hunteshiva est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2011, 10h41   #2
Membre Expert
 
Avatar de hunteshiva
 
Homme eric Maitre
Étudiant
Inscription : février 2010
Messages : 952
Détails du profil
Informations personnelles :
Nom : Homme eric Maitre
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Étudiant
Secteur : Industrie

Informations forums :
Inscription : février 2010
Messages : 952
Points : 1 163
Points : 1 163
J'avance dans mes recherches,
http://www.developpez.net/forums/d61...rnet-s7-300-a/
hunteshiva est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2011, 16h50   #3
Membre Expert
 
Avatar de hunteshiva
 
Homme eric Maitre
Étudiant
Inscription : février 2010
Messages : 952
Détails du profil
Informations personnelles :
Nom : Homme eric Maitre
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Étudiant
Secteur : Industrie

Informations forums :
Inscription : février 2010
Messages : 952
Points : 1 163
Points : 1 163
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...*
hunteshiva est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2011, 18h05   #4
Responsable Visual Basic
 
Avatar de ThierryAIM
 
Homme Thierry
Inscription : septembre 2002
Messages : 3 670
Détails du profil
Informations personnelles :
Nom : Homme Thierry
Âge : 49
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : septembre 2002
Messages : 3 670
Points : 5 672
Points : 5 672
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

MioSkins.org : le site de référence pour GPS et PDA Mitac MIO
iPHONIX.fr : le must francophone des infos pour iPhone, iPad, ...
ThierryAIM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2011, 18h29   #5
Membre Expert
 
Avatar de hunteshiva
 
Homme eric Maitre
Étudiant
Inscription : février 2010
Messages : 952
Détails du profil
Informations personnelles :
Nom : Homme eric Maitre
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Étudiant
Secteur : Industrie

Informations forums :
Inscription : février 2010
Messages : 952
Points : 1 163
Points : 1 163
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.
hunteshiva est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 15h08   #6
Membre Expert
 
Avatar de hunteshiva
 
Homme eric Maitre
Étudiant
Inscription : février 2010
Messages : 952
Détails du profil
Informations personnelles :
Nom : Homme eric Maitre
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Étudiant
Secteur : Industrie

Informations forums :
Inscription : février 2010
Messages : 952
Points : 1 163
Points : 1 163
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 :
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 !!!!!!!!!!

+ + =
hunteshiva est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 16h48   #7
Invité de passage
 
Homme
Developpeur informatique industriel
Inscription : septembre 2011
Messages : 1
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : septembre 2011
Messages : 1
Points : 1
Points : 1
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.
pitchoule est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/10/2011, 16h40   #8
Responsable outils internes
 
Avatar de Nono40
 
Homme Bruno Guérangé
Ingénieur développement logiciels
Inscription : mai 2002
Messages : 7 867
Détails du profil
Informations personnelles :
Nom : Homme Bruno Guérangé
Âge : 44
Localisation : France, Loir et Cher (Centre)

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

Informations forums :
Inscription : mai 2002
Messages : 7 867
Points : 11 842
Points : 11 842
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 !
Nono40 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2012, 18h57   #9
Invité de passage
 
Inscription : février 2007
Messages : 9
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 9
Points : 3
Points : 3
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.
effde est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/04/2012, 14h03   #10
Nouveau Membre du Club
 
Inscription : septembre 2006
Messages : 25
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 25
Points : 30
Points : 30
http://www.runmode.com/s7dbinitializer.html
yome3k est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h50.


 
 
 
 
Partenaires

Hébergement Web