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
|
,,,
|
,,,
|
,,,
|
|