Programmable Logic Controller + extension IO

Postby hlaidet » Thu Jun 18, 2009 12:00 am

Bonjour à tous,

Si vous avez déjà eu besoin d'une fonction automate, voici une solution.

---(1)--- Bilan des entrées sorties disponibles sur Digibutler -------
4 ports (GPT0-3) dont 1 connecté au relais.
8 entrées ana utilisables aussi en port d'entrée sortie.

---(2)--- File Manager et IO --------------------------------------------
Il est nécessaire d'avoir un gestionnaire de fichiers (SD carte avec EFSL).
Pour le SPI de la carte SD, je propose 2 solutions:
1/ Utiliser 4 entrées analogiques en ports d'IO (voir précédents post).
2/ Souder 4 fils sur RN1 et RN2 (schéma dans "HardDigilogger.pdf").

---(3)--- Total IO --------------------------------------------------------
Dans le meilleur des cas, nous avons 4 ports GPT0-3 plus 8 ports Ana.

---(4)--- Alternative -----------------------------------------------------
Si vous avez besoin de plus d'IO TOR, voici une carte d'extension IO-EXP-01A
- 16 entrées TOR 24Vdc (ou autre si vous changez les résistances)
- 8 sorties relais
- 8 ports sans affectation (ex:contrôle de LCD)
La raison d'abandonner 8 ports est que j'ai utilisé EAGLE 4.15 (Elektor nov 2005).
La version Free limite à une page le schéma et à 100x90mm le cuivre.
Cependant, on peut cascader plusieurs cartes IO-EXP-01A.

---(5)--- Réalisation carte d'extension --------------------------------
J'ai fait fabriquer les cuivres par "www.elektorpcbservice.fr"
Avec ce fichier de fabrication: "IO_EXP01A.zip (29/05/2009 10h34)"

Voici schéma, nomenclature, sérigraphie et photos d'assemblage.
Schéma électronique : "IO_EXP_01A.pdf"
Liste des composants: "IO_EXP_01A_components.pdf"
Sérigraphie : "IO_EXP_01A_SER.pdf"
Montage : "IO_EXP_01A_montage.pdf"

---(6)--- Raccordement à Digibutler -----------------------------------
L'alimentation de la carte J9 est la reprise de +Vext et Gnd.
On utilise les mêmes relais que Digibutler.
Les expanders sont alimentés par un régul IC3 (énorme vu la conso ridicule).
On utilise du cable en nappe avec 1 connecteur 10points serti de chaque coté.
Pour établir la liaison entre J6 de IO-EXP-01A et J6 de Digibutler.
Sur Digibutler, J6 n'a que 8 pins.
Donc le connecteur femelle a les pins 9 et 10 dans le vide.
Les cartes sont adressables.
Pour chaque expander, il faut mettre une adresse différente ("IO_EXP_01A_montage.pdf").

---(7)--- Soft carte d'extension ----------------------------------------
Si on a au moins une carte IO-EXP-01A,
On active le code avec #define HLA_HARDWARE 1 (dans "ipport.h")
Ainsi que #define NB_IO_EXPANDERS 2 (si on a une carte)
ou #define NB_IO_EXPANDERS 4 (si on a 2 cartes)
Le code dans "IO_SPI.c" programme les expanders impairs en entrée
et les expanders pairs en sortie.

---(8)--- ENFIN l'Automate ---------------------------------------------
Sur Digibutler, nous avons un moteur PLC (Programmable Logic Controller) qui
interprète du PLCcode se trouvant dans un fichier "plc.txt".
Le fichier "plc.txt" est généré par un programme sur PC "H_DigiPLC.exe".
Voir doc de "H_DigiPLC.exe" dans "H_DigiPLC_fr.pdf".
Ce programme possède:
- Editeur graphique de Ladder
- Compilateur (traduction de graphique vers "plc.txt")
- Transfert fichier "plc.txt" sur Digibutler
- Marche arrêt moteur PLC Digibutler
- Monitoring (animation du graphique en fonction de l'état des variables)

PLC fonctionne avec ou sans carte IO-EXP-01A.
Il est lancé périodiquement (chaque tick: 5ms).
Le Ladder supporte:
- contact simple
- contact inversé
- front montant ou descendant
- sortie simple
- sortie inversée
- sortie SET ou RESET
- Tempos (TON, TOF, TMP, BLINK) base de temps 5ms
- Comparaisons (CMP_LT, EQ, GT) pour les entrées Ana


Lorsqu'on lance la compilation, le graphique est convertit en équation booléenne:
((GPT1./GPT2)+/GPT3)=GPT0
Ensuite, l'équation devient:
- AND PUSH
- AND PUSH
- AND 2,1001,0,0,
- AND 3,1002,0,0,
- POP
- OR 3,1003,0,0,
- POP
- OUT 6,1000,0,0,
- END

Après le transfert, le moteur PLC décode le PLCcode "plc.txt" en objets exploitables
puis l'exécute une fois pour avoir ainsi sa taille et son temps d'exécution (en 10µs avec PIT1).
Si taille et timing vous conviennent, vous activez le moteur pour debugger le Ladder.
A l'issue du debug, vous le rendez autorun pour repartir après un reset.

PLC est activable avec #define HL_PLC 1 (dans "ipport.h")
Transfert et controle se font via le Tunnel FTP.

Le monitoring quant à lui se fait via le serveur de debug
activable avec #define HL_DEBUG_SVR 1 (dans "ipport.h")


Les fichiers pdf et zip sont dans DigiButler_V30\Doc\

sources: http://pagesperso-orange.fr/HLaidet/Digibutler.htm

Salut
Henri
Attachments
Ladder.jpg
fr_IO-EXP-01A.jpg
hlaidet
 
Posts: 61
Joined: Thu Jan 02, 2014 10:44 am

Postby hlaidet » Sat Sep 05, 2009 12:00 am

Bonjour à tous,

Dans le but d'un portage du soft PLC sur un µP ARM7 (carte ARMée, Elektor 2005), j'ai été obligé de supprimer une connexion TCP/IP.

---(1)----------------------------
En effet, on transfere le "PLCCODE" via le Tunnel FTP.
Soit une connexion TCP port 80.
On fait du monitoring du programme en run via le serveur de debug.
Soit une 2ème connexion TCP port 1234.

---(2)----------------------------
La carte ARMèe n'a pas d'ethernet mais seulement des uarts.

---(3)----------------------------
La modification apportée sur Digibutler est l'utilisation du Tunnel FTP pour le monitoring.
Ajout de 2 commandes de monitoring:
- SITE: PLC:MON1 pour lire l'état des objets
- SITE: PLC:MON2 pour lire l'état des variables
Le timing du monitoring est un peu moins performant qu'avec le serveur de debug mais on utilise une seule connexion.

---(4)----------------------------
L'utilisation d'une seule connexion TCP va simplifier le travail.
"H_DigiPLC" fera la même chose sur les 2 plates-formes. Seule la classe de communication sera adaptée.

---(5)----------------------------
Les échanges du Tunnel FTP étaient tous faits par des transferts de fichiers.
Avec des échanges sur action opérateur, celà n'avait pas d'importance.
Avec le monitoring actif (5 échanges/sec), on a une charge CPU élevée (FileSystem).
Maintenant, les échanges de petits fichiers (moins de 368 octets) ne passent plus par des écritures de fichiers sur la carte SD
mais sont conservés dans un buffer.
On gagne en charge CPU ainsi qu'en vieillissement de la SD.

La pile du serveur Http a augmenté (0x800 => 0x880) car un peu limite avec nouveau buffer.

---(6)----------------------------
"H_DigiPLC" est bien sur modifié pour le nouveau dialogue (dans la section PLC)

Voir doc de "H_DigiPLC.exe" dans "DigiButler_V30\Doc\H_DigiPLC_fr.pdf".


sources: http://pagesperso-orange.fr/HLaidet/Digibutler.htm

---(7)----------------------------
Si quelquun est interressé par le projet ARMée.
sources: http://pagesperso-orange.fr/HLaidet/Armee.htm

Salut
Henri
hlaidet
 
Posts: 61
Joined: Thu Jan 02, 2014 10:44 am


Return to DigiButler (04&05-2008)

Who is online

Users browsing this forum: No registered users and 1 guest