WOW !! MUCH LOVE ! SO WORLD PEACE !
Fond bitcoin pour l'amélioration du site: 1memzGeKS7CB3ECNkzSn2qHwxU6NZoJ8o
  Dogecoin (tips/pourboires): DCLoo9Dd4qECqpMLurdgGnaoqbftj16Nvp


Home | Publier un mémoire | Une page au hasard

 > 

Automatisme d'un magasin de stockage commandé par ordinateur

( Télécharger le fichier original )
par Youssef MELLOUKI
ENSAM-Maroc - Stage Ingénieur 2006
  

précédent sommaire

Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy

Annexes

I - Fonctions de l'application Visual Basic

1 - Lecture du compteur

Code

Public Sub tComptage()

'Procedure de lecture du compteur On Error Resume Next

Dim Buffer$

Dim Comptage As String

MSComm2.Output = Chr$(2) + "0001" + Chr$(3) Buffer$ = MSComm2.Input

Comptage = Mid(Buffer$, 7, Len(Buffer$) - 8) Compteur = Val(Mid(Buffer$, 7, Len(Buffer$) - 8))

'La valeur lue est stockée dans la variable « Compteur » MSComm2.InputLen = 0

End Sub

Commentaires

Ici le composant MSComm correspondant à la communication avec le compteur est appelé MSComm2.

La valeur récupérée à parti r du compteur est stockée dans une variable entière globale appelée Compteur.

Pour une lecture permanente de la valeur du compteur, il suffit d'appeler cette procédure en permanence dans un Timer.

2 - Module nécessaie aux opérations d'Ecriture/Lecture dans l'automate

Pour pouvoir lire et écrire dans l'automate à partir d'une application Visual Basic, il faut avoir dans le projet, un module contenant le code suivant :

Option Explicit

Public Function GetCoil DevAddr(ByVal Coil_name As String) As String

Dim DevAddr$

- Les registres S sont repóés à partir de l'adresse 0000 en hexadéci mal

- Les registres X sont repérés à partir de l'adresse 0400 en hexadéci mal

- Les registres V sont repérés à partir de l'adresse 0500 en hexadéci mal

- Les registres M sont repérés à partir de l'adresse 0800 en hexadéci mal

Pour pouvoir communiquer avec d'autres bits des registres S,X,V,M il suffit d'ajouter au code

Case "Regitrenuméro_du_bit"

DevAddr$="La_valeur_de_déprart_du_registre + Num&o du bit en hexadécimal"

Exemple 1 : Ajout de M34

Case "M34"

DevAddr$= "0822" Exemple 2 : Ajout de Y27

Case "Y27"

DevAddr$= "051 B"

Select Case Coil name

Case "S0"

DevAddr$ = "0000" Case "S1"

DevAddr$ = "0001" Case "S10"

DevAddr$ = "000A" Case "S11"

DevAddr$ = "000B" Case "S16"

DevAddr$ = "0010"

Case "X0"

DevAddr$ = "0400" Case "X1"

DevAddr$ = "0401" Case "X10" DevAddr$ = "040A" Case "X11" DevAddr$ = "040B" Case "X16" DevAddr$ = "0410"

Case "Y0"

DevAddr$ = "0500" Case "Y1"

DevAddr$ = "0501" Case "Y10"

DevAddr$ = "050A" Case "Y11"

DevAddr$ = "050B" Case "Y16"

DevAddr$ = "0510"

Case "M 0"

DevAddr$ = "0800" Case "M 1"

DevAddr$ = "0801" Case "M 10"

DevAddr$ = "080A" Case "M 11"

DevAddr$ = "080B" Case "M 16"

DevAddr$ = "0810"

End Select

GetCoilDevAddr = DevAddr$ End Function

Public Function Check_LRC(ByVal Check_data As String)

Dim Dummy$(), Dummy_data, Index, i As Integer

Dim result _lrc$ Index = 1

Dummy_data = 0 Erase Dummy$

ReDim Dummy$(1 To Int(Len(Check_data) / 2 - 0.5) + 1)

Do

Dummy$(Index) = Left(Check_data$, 2) Check_data$ = M id(Check_data$, 3) Index = Index + 1

Loop Until Len(Check_data$) = 0

For i = 1 To Index - 1

Dummy_data = Dummy_data + Val ("&H" + Dummy$(i)) Next i

result _lrc$ = Hex(256 - (Dummy_data M od 256)) result_lrc$ = IIf(L en (result_l rc$) = 1, "0" & result_l rc$,

result_lrc$)

Check_LRC = I If(Len(result_lrc$) > 2, Right(result_lrc$, 2),

result_lrc$)

End Function

Public Function Send_To_PLC(ByVal objMSCOMM As MSComm, ByVal send_string$) As String

send_stri ng$ = send_stri ng$ + Check_L RC(send_stri ng$)

send_string$ = Chr(& H3A) + send_string$ + Chr(& HD) +

Chr(& HA)

If objMSCOMM.PortOpen = False Then objMSCOMM.PortOpen = True

obj MSCOMM.Output = send_stri ng$

Send_To_PLC = send_string$ End Function

Public Function Receive_to_PLC(ByVal objMSCOMM As MSComm, Optional Delay_time = 20000) As String

Dim Request_times As Long, Buffer$

Do Until Request _times > Delay_time

If objMSCOMM.InBufferCount <> 0 Then Buffer$ = Buffer$ + objMSCOMM.Input

Request_times = Request _ti mes + 1 DoEvents

If Left(Buffer$, 1) = Chr(& H3A) And InStr(Buffer$,

vbCrLf) Then

Receive toPLC = Buffer$

End Function

3 - Lecture d'un bit d'un registre de l'automate

Code :

Public Function Lecture(M_Register As String) As Boolean

'Fonction de lecture d'un bit d'un registre quelconque. Résultat => 0 ou 1

string$, sDevAddr$, sSlaveAddr$,

On Error Resume Next Dim DevName$, send

sPoint$, Receive_String$

Dim nSlaveaddr As Integer, nNumPoints As Integer Dim Bin_Index As Integer, Data_String$, bONOFF As Boolean, nCheckData As Integer

nSlaveaddr = 1

sSlaveAddr$ = String(2 - Len(Hex(nSlaveaddr)), "0") +

Hex(nSlaveaddr)

nNumPoints = 8

DevName$ = M Register

sDevAddr$ = GetCoilDevAddr(DevName$)

send_string$)

Receive_Stri ng$ = Receive_to_PLC(Me.MSComm1)

If Receive_String$ = "" Then Exit Function

End If

nCheckData = CInt("& H" + Mid(Receive_String$, 8, 2 * Val ("& H" + Mid(Receive_String$, 6, 2))))

bONOFF = nCheckData Mod (2)

Select Case bONOFF Case False

Lecture = False

Case True

Lecture = True End Select

End Function Commentaires

Ici le composant MSComm correspondant à la communication avec l'automate est appelé MSComm1.

nSlaveaddr est une variable entière contenant l'adresse de l'esclave (voir Paragraphe 2 du Chapitre IV du Tutorial WPLSoft 2.08 : Exemple de programme communication entre automate esclave et PC avec Visual Basic 6 sur le port RS-485)

La fonction Lecture retourne la valeur d'un bit d'un registre à l'intérieur de l'automate

M_Register est une chaîne de caractère contenant le nom du registre et le numéro du bit à lire.

Exemple : Lecture("M0") va retourner la valeur du bit 0 du

registre M.

4 - Ecrittire dans tin bit d'tin registre de l'atitomate

Code

Public Sub Forçage(M_Register As String, OnOff As

Boolean)

'Procédure de forçage d'un bit de registre quelconque à une valeur booléenne : 0 ou 1

On Error Resume Next

Dim DevName$, send_string$, sDevAddr$, sSlaveAddr$, sPointStatus$, Receive_Stri ng$

Dim nSlaveaddr As Integer, nNumPoi nts As Integer

nSlaveaddr = 1

sSlaveAddr$ = String(2 - Len(Hex(nSlaveaddr)), "0") + Hex(nSlaveaddr)

If OnOff = True Then sPoi ntStatus$ = "FF00" Else

sPoi ntStatus$ = "0000" End If

DevName$ = M_Register

sDevAddr$ = GetCoilDevAddr(DevName$)

send_string$ = sSlaveAddr$ + "05" + sDevAddr$ +

sPointStatus$

send_string$ = Send_To_PLC(Me.MSComm1,

send_string$)

Receive_Stri ng$ = Receive_to_PLC(Me.MSComm1)

End Sub Commentaires

Ici le composant MSComm correspondant à la communication avec l'automate est appelé MSComm1.

nSlaveaddr est une variable entière contenant l'adresse de l'esclave (voir Paragraphe 2 du Chapitre IV du Tutorial WPLSoft 2.08 : Exemple de programme communication entre automate esclave et PC avec Visual Basic 6 sur le port RS-485)

M_Register est une chaîne de caractère contenant le nom du registre et le numéro du bit à forcer et OnOff est la valeur du forçage (variable booléenne 0 ou 1)

Exemple : Call Forçage("M5",1) va forcer le bit 5 du registre M à la valeur 1.

II - Langage de programmation de l'automate - Tutorial

WPLSoft 2.08

1 - Introduction

WPLSoft 2.08 est le logiciel de programmation des automates Delta ES/EX/SS Series, EP/SA/SX/SC Series et EH Series. Ce tutorial a pour objectif de montrer comment créer des programmes pour des systèmes commandés par les automates précités et simuler leur fonctionnement. Il faut noter que les informations existantes dans ce tutorial n'englobent en aucun cas toutes les fonctionnalités données par le logiciel, néanmoins elles sont largement suffisantes pour créer une application qui tourne sans aucune anomalie.

2 - Création d'un programme sur WPLSoft 2.08

1 - Création d'un nouveau programme.

- Dans le menu File cliquer sur New.

Une fenrtre de sélection du type de l'automate utilisé s'ouvre.

- Choisir un titre de programme dans Program Title ;

- Sélectionner l'automate utilisé dans PLC Type (Dans le cas des automates DVP - 12SA, choisir EP/SA/SX/SC Series);

- Entrer le nom qu'aura votre fichier une fois enregistré sur disque dur dans File Name

- Cliquer sur OK.

Fenêtre du programme Ladder

Fenêtre des instructions

La fenêtre du programme Ladder est ouverte ainsi que la fenêtre des instructions en arrière.

- Pour enregistrer le programme cliquer sur Save dans le menu File puis spécifier le répertoire d'enregistrement.

2 - Elaboration d'un programme Ladder su WPLSoft 2.08.

Supposons que l'on veut créer le programme correspondant au Grafcet suivant sur WPLSoft 2.08

S2

S0

S1

S3

Le programme Ladder des automates Delta ES/EX/SS Series, EP/SA/SX/SC Series et EH Series commence par un contact ouvert lié au bit M 1002 de l'automate qui se met à 1 une seule fois après le démarrage du programme de l'automate. Une fois le bit M 1002 est à 1, la première étape du programme est activée.

Pour insérer un contact ouvert dans le programme Ladder,

cliquer dans la barre d'outil Ladder Diagram, sur l'icône ou sur la touche
F1.

(Si la barre d'outil Ladder Diagram n'est pas visible, dans le menu View, pointer sur Toolbars puis sur Ladder Diagram.)

Une fenêtre de séI ection de contact est ouverte. Dans Device Name, pointer sur M, et dans Device Number entrer 1002. On peut ajouter un com mentai re sur I e contact qu'on veut insérer en le tapant dans Comment.

CI iquer sur OK pour valider l'insertion du contact dans le

Ladder.

A cette étape on doit avoi r I a suivante :

Maintenant pour insérer l'étape à partir de laquelle le programme va commencer cI iquer sur l'icône ou sur I a touche F7.

Dans Device Name, sélectionner S, dans Device Number entrer 0, dans Comment, taper Etape de démarrage du programme (Vous pouvez aussi ajouter un commentaire après avoir inséré les contacts par sélection du contact concerné puis un clic Bouton droit de la souris sur ce même contact puis clic sur Edit Device Comments).

Par défaut les commentaires ne sont pas affichés. Pour les

afficher cliquer sur l'icône ou aller dans le menu View puis cliquer sur
Show Comments.

Jusqu'à maintenant, ce qu'on a spécifié au programme c'est que une fois le bit M 1002 est à 1, l'étape S0 est activée. Là on doit dire au programme que une fois l'étape S0 est activée, il doit tester l'entrée X0 pour passer à l'étape 1.

Pour ce faire, cliquer sur une nouvelle ligne, le curseur (le rectangle en bleu) va se positionner quelque part au dessous de M 1002.

( *1 ) Cliquer sur l'icône ou sur la touche F5 avec les
paramètres suivants :

Device Name : S

Device Number : 0

Pour le commentaire de S0, il a été déjà spécifié et il n'est pas nécessai re de le réécri re.

Cliquer ensuite sur l'icône pour i nsérer le contact ouvert X0.
Taper en suite, sans déplacer le curseur, SET S1

Répéter l'étape ( * 1 ) avec les paramètres suivants :

Device Name : S

Device Number : 1

Comment : Activation de la Sortie Y0

Taper, encore une fois sans déplacer le curseur, OUT Y0 ou cliquer sur avec

Device Name : Y

Device Number : 0

Comment : Sortie Y0

Cliquer sur une nouvelle ligne puis sur la touche F5 : Dev Name : S

Dev Num : 2

Taper OUT Y1

Sur le Grafcet pour passer l'étape S1, on peu passer travers M1 vers S2, ou à travers M2 vers S3 ou bien les deux.

Donc pour programmer ceci sur le Ladder, on fera comme suit :

Se positionner sur la case adjacente à S1 (voir le curseur sur la figure ci-dessous) et cliquer sur l'icône ou sur la touche F9.

Se placer sur la ligne juste en dessous et répéter l'étape ( *1 ) avec les paramètres suivants :

Device Name : M Device Number : 1

Valider puis taper SET S2

Se placer encore une autre fois sur la ligne juste en dessous et répéter l'étape ( * 1 ) avec les paramètres suivants :

Devic Name : M Device Number : 2

Valider et taper SET S3

Ajouter des commentaires aux contacts et aux étapes suivants :

M 1 : Condition d'activation de S2

M 2 : Condition d'activation de S3

S2 : Activation de la sortie Y1

S3 : Activation de la sortie Y2

Faire un retour au début d'une nouvelle ligne, cliquer sur la touche F5, choisir S3, valider.

Taper OUT Y1 et ajouter à la sortie Y1 le commentaire Sortie

Y1

Se placer dans la case adjacente à S2 et cliquer sur la touche F9 Insérer un contact fermé par un clic sur la touche F2 puis

choisir M1

Taper ensuite SET S0

Placer le curseur encore une fois au début d'une nouvelle ligne et cliquer sur la touche F5 avec, comme paramètres d'entrée S3

Taper ensuite OUT Y2

Ajouter un commentaire à la sortie Y1

Se placer sur la case adjacente à l'étape S3 et cliquer sur la

touche F9

Se placer sur la case juste en dessous et cliquer sur la touche F2 pour i nsérer le contact fermé M2

Taper ensuite SET S0

A cette phase, le programme principal est terminé, il faut maintenant clôturer le programme. Pour ce faire, on va se placer encore une fois à la case du contact fermé M2 puis cliquer sur la touche F9.

Placer le curseur ensuite à la case juste en dessous et taper RET Finalement placer le curseur à la ligne en dessous et taper END

(Voir figure)

.

3 - Chargement, exécution et simulation du programme 1 - Communication avec l'automate

Pour pouvoir communiquer avec l'automate, une vérification des paramètres de communication est nécessaire.

Dans le menu Option, cliquer sur Communication Settings.

Dans COM Port, spécifier le port COM de l'ordinateur sur lequel l'automate est branché.

Dans Station Adress, mettre l'adresse esclave de l'automate. Si on n'a pas encore changé l'adresse esclave de l'automate, la valeur par défaut est 1.

Laisser les autres paramètres aux valeurs par défaut

Pour vérifier la communication avec l'automate, aller dans le menu Communication et cliquer sur Baud Rate Auto-Detect l'écran suivant doit s'afficher

Suivi de l'écran :

2 - Chargement du programme dans l 'automate

Avant de charger n'importe quel programme dans l'automate il est très recommandé de formater l'automate afin d'éviter les erreurs d'actualisation du programme par la suite.

Dans le menu Communication pointer sur Format PLC

Memory

Une nouvelle fenrtre s'affiche. Sélectionner Clear All Program Memory et valider en cliquant sur OK puis confirmer le formatage de l'automate.

Maintenant la mémoire de l'automate est formatée, on compile le programme pour le charger.

Dans la barre d'outil PLC, cliquer sur l'icône pour compiler

le programme

Dans la même barre cliquer sur l'icône pour charger le
programme dans l'automate.

La fenrtre de transfert s'ouvre, spécifier les paramètres comme suit puis cliquer sur Execute

Le programme est désormais chargé dans l'automate, on peut si muler le fonctionnement du système.

3 - Exécution et Simulation du fonctionnement

Pour simuler l'exécution du programme, cliquer d'abord sur exécuter , confirmer, puis cliquer sur l'icône Monitoring .

Le programme maintenant est en cours d'exécution et on peut voir les étapes et les contacts actifs en vert.

Pour tester le programme, on peut activer manuellement l'entrée X0 de l'automate et voir ce qui se passe.

Dans le Grafcet du système, les réceptivités M1 et M2 ne sont pas des entrées externes mais plutôt des registres internes de l'automate. Donc pour passer de l'étape S1 à l'étape S2 ou S3, il va falloir impérativement forcer M1 ou M2 à 1.

Pour forcer un bit du registre M (dans ce cas M0 ou M1), aller dans Communication puis pointer sur Set Device On/Off.

Dans Device Name, taper M1, puis cocher Set On pour forcer en fait M1 à la valeur 1. Valider en cliquant sur OK et le programme, touj ours en cours d'exécution, passe à l'étape S2 et active la sortie Y1.

Pour passe à l'étape S0, il suffit encore de forcer M1 à 0

Pour tester l'autre passage (de S1 à S3) on peut, quand l'étape S1 est active, au lieu de forcer M1 à 1, forcer M2 à 1 pour avoir l'activation de l'étape S3.

Pour arrêter la simulation du programme, cliquer encore une fois su l'icône Monitoring puis sur l'icône Stop .

4 - Communication à travers le port RS-485

L'intérrt principal de la communication à travers le port de communication RS-485 est de pouvoir communiquer entre un maître et plusieurs esclaves, et ceci à travers une seule sortie du maître (2 fils) grâce aux adresses des esclaves. Donc si on veut communiquer entre un ordinateur maître et plusieurs automates par exemple, chaque automate esclave doit avoir son adresse et, à partir de l'ordinateur, en jonglant avec les adresses des esclaves, on peut communiquer avec les différents automates connectés.

1 - Affectation d'une adresse à un automate esclave

Pour affecter à un automate esclave une adresse, 3 par exemple, il suffit d'ajouter, à l'entrte de son programme Ladder le code suivant :

Adresse de l'esclave

Attention !

Une fois une nouvelle adresse de l'automate esclave y est chargée, la communication entre WPLSoft et l'automate n'est plus possible (le formatage de l'automate, le chargement de programme, le forçage de bits« ne sont plus possible) Car l'adresse de l'automate a changé et il faut impérativement changer les paramètres de communication de WPLSoft pour pouvoir com muniquer à nouveau.

Dans le menu Option, cliquer sur Communication Settings, puis mettre l'adresse de l'esclave qui y a été chargé dans Station Adress pour pouvoir com muniquer à nouveau.

2 - Exemple de programme communication entre automate esclave et PC avec Visual Basic 6 sur le port RS-485

On suppose que l'on a chargé dans l'automate esclave

l'adresse : 3

L'écriture d'un registre dans l'automate peut se faire par la procédure VB suivante où M_Register le registre à forcer (exemple "M0") et OnOff, la valeur du forçage.

Public Sub Forçage(M_Register As String, OnOff As Boolean)

'Procédure de forçage d'un bit de registre à une valeur booléenne : 0 ou 1

On Error Resume Next

Dim DevName$, send_string$, sDevAddr$, sSlaveAddr$, sPointStatus$, Receive_String$

Dim nSlaveaddr As Integer, nNumPoints As Integer

'Adresse de l'esclave = 3

nSlaveaddr = 3

sSlaveAddr$ = Stri ng (2 - Len (Hex (nSlaveaddr)), "0") + Hex (nSlaveaddr)

If OnOff = True Then sPointStatus$ = "FF00" Else

sPointStatus$ = "0000" End If

DevName$ = M_Register

sDevAddr$ = GetCoil DevAddr(DevName$)

send_string$ = sSlaveAddr$ + "05" + sDevAddr$ +

sPointStatus$

send_string$ = Send_To_PLC(M e.M SComm1, send_string$) Receive_String$ = Receive_to_PLC(M e.M SComm1)

End Sub

5 - Utilisation des extensions des Entrée/Sorties :

Certaines applications nécessitent un nombre important d'Entrées/Sorties qui peut rtre supérieur au nombre d'Entrées/Sorties de l'automate. On utilise alors des extensions d'Entrées/Sorties qui peuvent avoir un adressage différent. Dans notre cas, l'automate DV P - 1 2SA, il y a 8 entrées (X0 ~ X7) et 4 sorties (Y0 ~ Y3). Si on ajoute des extensions Entrées/Sorties à l'automate : la première entrée, et la première sortie des extensions seront nommées respectivement X20 et Y20 (voir tableau ci-dessous).

 

N dans la carte
d'extension

N correspondant dans le programme de l'automate

Carte d'extension
8E/8S 1

0

20

1

21

2

22

3

23

 

4

24

5

25

6

26

7

27

Carte d'extension
8E/8S 2

0

30

1

31

2

32

3

33

4

34

5

35

6

36

7

37

,,,

,,,

,,,

précédent sommaire






Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy








"Nous voulons explorer la bonté contrée énorme où tout se tait"   Appolinaire