VK QuickView
Cette documentation est destinée aux développeurs d'applications VK QuickView. Elle regroupe la description de certaines fonctionnalités qui ne sont pas décrites dans la documentation principale du produit.
- L'audit trail
- La fonction "Pick/Put-to-Light"
- Les machines standards de galvanoplastie
- Licence et clef de protection
- Le serveur HttpWebSocket
- La mesure d'épaisseur
- L'utilisation de VKQVRemoteDB
- La connexion à un broker MQTT
- Le flux de données avec un serveur d'entreprise
- Echanges avec des équipements
- L'interface avec le contrôleur de transporteur CB99A
- L'interface avec le contrôleur de transporteur CB07FPL
- Interface avec le contrôleur de transporteur CB24FPL
- L'interface avec les redresseurs PLCRECTIFIER
- L'interface avec les redresseurs PULSPLCRECTIFIER
- Utilisation d'un liftout sur les machines de type FPL
- Interface avec le contrôleur de transporteur CB07FCL
- Interface avec les transferts
- Procédure de mise en service d'un CB07FPL
- Interface avec le contrôleur de transporteur CB25FPLA
- Cobian backup
- La fonction "RFID Follower"
- Les bases de données
- Les divers types de bases de données
- La structure de la base de données "Reporting"
- La structure de la base de données "Articles"
- La structure de la base de données "CUSTOMER"
- Les paramètres du système prioritaire
- Le mode de fonctionnement OSCILine
- Utilisation de plusieurs langues sur les pages graphiques
- Suivi des produits chimiques
- Les postes de charge
- Le poste de charge n° 52
- Poste de charge n°66
- Poste de charge n°67
- Poste de charge n°69
- Poste de charge n°71
- Poste de charge n°74
- Poste de charge n°77
- Poste de charge n°78
- Poste de charge n°79
- Poste de charge n°80
- Poste de charge n°82
- Trucs et astuces
- Affichage du MTO sur les rapports de suivi
- Demande d'un outillage au poste de charge
- Les redresseurs de polarisation et d'amorçage
- Sauvegarde des courbes de température
- Utilisation du service VKSMSMessaging
- Les statistiques avec la base de données de suivi
- Rapports de suivi
- Statistiques de production
- Historique des mouvements des robots
- Historique des alarmes et messages
- Statistique d'utilisation des pompes doseuses
- MTBF et MTTR
- Courbes des redresseurs
- Les positions d'inspection
- Lecture de codes à barres au travers de MQTT
- Les positions contrôlées par AlarmStop
- Les profils de courant
L'audit trail
Avantages
-
traçabilité des actions opérateur
-
Conforme aux exigences GMP pour l'industrie pharmaceutique (par ex. de la Food and Drug Administration)
-
Réduction des co¹ts d'ingénierie et de validation
-
Idéalement adapté aux exigences des constructeurs de machines qui doivent remplir de sévères critères de qualité (par ex. livraison de machines et d'éléments d'installation devant être validées)
Fonctions
L' Audit trail remplit les principales exigences de GMP (Good Manufacturing Practice) ainsi que celles de la FDA (Food and Drug Administration) selon 21 CFR Part 11.
L' Audit facilite la construction de machines pour les branches travaillant avec des applications nécessitant des validations, étant donné que des fonctions indispensables pour remplir ces exigences sont déjà disponibles comme standard. De cette manière, les différentes machines ou éléments d'installation peuvent déjà être qualifiés chez le fournisseur.
En même temps, les audit trails assurent la traçabilité du processus de fabrication, comme l'exige par ex. la directive européenne 178/2002 pour l'industrie agro-alimentaire dans une optique d'amélioration de la qualité des produits.
Enregistrement d'actions opérateur dans les audit trails En exploitation, tous les changements de variables intéressant GMP (Good Manufacturing Practice) et les actions opérateur sont enregistrés comme audit trails dans un fichier CSV. Il peut s'agir par exemple de la saisie de valeurs process, du démarrage de recettes ou d'un acquittement de messages ou encore de messages relatifs à la gestion des utilisateurs, tels que la connexion et la déconnexion d'un utilisateur. Cela permet alors de voir précisément qui a fait quoi - et ce pour un travail de configuration minimal. En plus, un procédé de Checksum vérifie que les données dans l'audit trail sont exemptes de manipulations.
Archivage et journalisation L' Audit Trail permet l'archivage et la journalisation dans le PC localement ou dans un répertoire réseau. Cela facilite ainsi la réalisation de solutions pour l'archivage à long terme et la restauration des données.
Configuration
Pour fonctionner, une configuration minimum est demandée. Dans le répertoire WQVFiles, le fichier "AuditTrail.ini" doit être présent. Dans ce fichier, la session [System] doit contenir le mot clef suivant:
[System]
AuditTrailPath=C:\VK-WinQV\AuditTrail
Afficher l'audit trail
Pour afficher l'audit trail il faut utiliser le programme AuditTrailViewer.exe. Ce programme a été installé lors de l'installation de QuickView sur votre système. Lancer le programme et la page principale de celui-ci s'affichera:
Lors du premier démarrage de l'application il faut définir le répertoire contenant l'Audit Trail. Celui-ci doit correspondre au répertoire défini dans la configuration. l'icône représentant un symbole OK indique que les fichiers de l'audit n'ont pas été altérés ou modifiés. Si l'un des fichiers a été modifié, le symbole OK est remplacé par le symbole X signifiant ce fait.
Fonctionnement
La génération des enregistrements
Répertoire de sauvegarde/Nom du PC/année/mois/jour/ClientAuditTrail.csv pour le client et
Répertoire de sauvegarde/Nom du PC/année/mois/jour/ServerAuditTrail.csv pour le serveur
Un compteur d'enregistrement est maintenu dans un fichier texte séparé :
Répertoire de sauvegarde/Nom du PC/ClientAuditTrailCounter.ini pour le client et
Répertoire de sauvegarde/Nom du PC/ServerAuditTrailCounter.ini pour le serveur.
Le nom du répertoire de sauvegarde est défini dans un mot clef du fichier de configuration de l'audit trail soit, AuditTrail.ini[System]AuditTrailPath=Nom du répertoire de sauvegarde.
Si ce mot clef n'est pas défini, la fonction " AuditTrail " est désactivée.
La visualisation des enregistrements
Le programme de visualisation permet à l'utilisateur de choisir une date ou une période et affiche tous les enregistrements de tous les PC (client et serveur). Les enregistrements dont le checksum n'est pas valide sont affichés en rouge. La discontinuité dans la numérotation des enregistrements est également indiquée en rouge.
|
Nom |
Description |
|
PcID |
Nom du PC |
|
ProgramID |
Client ou Server |
|
RecordID |
Numéro d'enregistrement |
|
TimeStamp |
Date et heure UTC d'enregistrement |
|
UserID |
Nom de l'utilisateur. |
|
ObjectID |
Variable ou objet ayant été modifié. |
|
Description |
Description de la modification |
|
Comment |
Commentaire éventuel |
Le format des fichiers
|
Nom |
Type |
Description |
|
RecordID |
Integer |
Numéro d'enregistrement |
|
TimeStamp |
DateTObjectNameime |
Date et heure UTC d'enregistrement au format DD.MM.YYYY HH :mm :SS |
|
UserID |
String |
Nom de l'utilisateur. |
|
ObjectID |
String |
Variable ou objet ayant été modifié. |
|
Description |
String |
Description de la modification |
|
Comment |
String |
Commentaire éventuel |
|
Checksum |
Integer |
CRC32 de l'enregistrement. |
Chaque fichier commencera par la description des champs soit :
Calcul de la checksum
Le checksum correspond au CRC32 du string correspondant au record sans le champ checksum mais dernier séparateur inclus.
La procédure de calcul est la suivante :
const
CRC32Table: ARRAY[0..255] OF DWORD =
($00000000, $77073096, $EE0E612C, $990951BA,
$076DC419, $706AF48F, $E963A535, $9E6495A3,
$0EDB8832, $79DCB8A4, $E0D5E91E, $97D2D988,
$09B64C2B, $7EB17CBD, $E7B82D07, $90BF1D91,
$1DB71064, $6AB020F2, $F3B97148, $84BE41DE,
$1ADAD47D, $6DDDE4EB, $F4D4B551, $83D385C7,
$136C9856, $646BA8C0, $FD62F97A, $8A65C9EC,
$14015C4F, $63066CD9, $FA0F3D63, $8D080DF5,
$3B6E20C8, $4C69105E, $D56041E4, $A2677172,
$3C03E4D1, $4B04D447, $D20D85FD, $A50AB56B,
$35B5A8FA, $42B2986C, $DBBBC9D6, $ACBCF940,
$32D86CE3, $45DF5C75, $DCD60DCF, $ABD13D59,
$26D930AC, $51DE003A, $C8D75180, $BFD06116,
$21B4F4B5, $56B3C423, $CFBA9599, $B8BDA50F,
$2802B89E, $5F058808, $C60CD9B2, $B10BE924,
$2F6F7C87, $58684C11, $C1611DAB, $B6662D3D,
$76DC4190, $01DB7106, $98D220BC, $EFD5102A,
$71B18589, $06B6B51F, $9FBFE4A5, $E8B8D433,
$7807C9A2, $0F00F934, $9609A88E, $E10E9818,
$7F6A0DBB, $086D3D2D, $91646C97, $E6635C01,
$6B6B51F4, $1C6C6162, $856530D8, $F262004E,
$6C0695ED, $1B01A57B, $8208F4C1, $F50FC457,
$65B0D9C6, $12B7E950, $8BBEB8EA, $FCB9887C,
$62DD1DDF, $15DA2D49, $8CD37CF3, $FBD44C65,
$4DB26158, $3AB551CE, $A3BC0074, $D4BB30E2,
$4ADFA541, $3DD895D7, $A4D1C46D, $D3D6F4FB,
$4369E96A, $346ED9FC, $AD678846, $DA60B8D0,
$44042D73, $33031DE5, $AA0A4C5F, $DD0D7CC9,
$5005713C, $270241AA, $BE0B1010, $C90C2086,
$5768B525, $206F85B3, $B966D409, $CE61E49F,
$5EDEF90E, $29D9C998, $B0D09822, $C7D7A8B4,
$59B33D17, $2EB40D81, $B7BD5C3B, $C0BA6CAD,
$EDB88320, $9ABFB3B6, $03B6E20C, $74B1D29A,
$EAD54739, $9DD277AF, $04DB2615, $73DC1683,
$E3630B12, $94643B84, $0D6D6A3E, $7A6A5AA8,
$E40ECF0B, $9309FF9D, $0A00AE27, $7D079EB1,
$F00F9344, $8708A3D2, $1E01F268, $6906C2FE,
$F762575D, $806567CB, $196C3671, $6E6B06E7,
$FED41B76, $89D32BE0, $10DA7A5A, $67DD4ACC,
$F9B9DF6F, $8EBEEFF9, $17B7BE43, $60B08ED5,
$D6D6A3E8, $A1D1937E, $38D8C2C4, $4FDFF252,
$D1BB67F1, $A6BC5767, $3FB506DD, $48B2364B,
$D80D2BDA, $AF0A1B4C, $36034AF6, $41047A60,
$DF60EFC3, $A867DF55, $316E8EEF, $4669BE79,
$CB61B38C, $BC66831A, $256FD2A0, $5268E236,
$CC0C7795, $BB0B4703, $220216B9, $5505262F,
$C5BA3BBE, $B2BD0B28, $2BB45A92, $5CB36A04,
$C2D7FFA7, $B5D0CF31, $2CD99E8B, $5BDEAE1D,
$9B64C2B0, $EC63F226, $756AA39C, $026D930A,
$9C0906A9, $EB0E363F, $72076785, $05005713,
$95BF4A82, $E2B87A14, $7BB12BAE, $0CB61B38,
$92D28E9B, $E5D5BE0D, $7CDCEFB7, $0BDBDF21,
$86D3D2D4, $F1D4E242, $68DDB3F8, $1FDA836E,
$81BE16CD, $F6B9265B, $6FB077E1, $18B74777,
$88085AE6, $FF0F6A70, $66063BCA, $11010B5C,
$8F659EFF, $F862AE69, $616BFFD3, $166CCF45,
$A00AE278, $D70DD2EE, $4E048354, $3903B3C2,
$A7672661, $D06016F7, $4969474D, $3E6E77DB,
$AED16A4A, $D9D65ADC, $40DF0B66, $37D83BF0,
$A9BCAE53, $DEBB9EC5, $47B2CF7F, $30B5FFE9,
$BDBDF21C, $CABAC28A, $53B39330, $24B4A3A6,
$BAD03605, $CDD70693, $54DE5729, $23D967BF,
$B3667A2E, $C4614AB8, $5D681B02, $2A6F2B94,
$B40BBE37, $C30C8EA1, $5A05DF1B, $2D02EF8D);
function _CRC32(AStream : TStream) : Cardinal;
var aMemStream : TMemoryStream;
aValue : Byte;
begin
aMemStream := TMemoryStream.Create;
try
Result := $FFFFFFFF;
while AStream.Position < AStream.Size do
begin
// Lecture d'un bloc de données
aMemStream.Seek(0, soFromBeginning);
if ((AStream.Size - AStream.Position) >= 1024*1024) then
begin
aMemStream.CopyFrom(AStream, 1024*1024);
end else
begin
aMemStream.Clear;
aMemStream.CopyFrom(AStream, AStream.Size-AStream.Position);
end;
//Calcul du CRC du bloc
aMemStream.Seek(0, soFromBeginning);
while aMemStream.Position < aMemStream.Size do
begin
aMemStream.ReadBuffer(aValue, 1);
Result := (Result shr 8) xor CRC32Table[aValue xor (Result and $000000FF)];
end;
end;
Result := not Result;
finally
aMemStream.Free;
end;
end;
function CalculateCRC32(AString : String) : Cardinal;
var
aStringStream : TStringStream;
begin
aStringStream := TStringStream.Create(AString);
Result := $FFFFFFFF;
try
result:=_CRC32(aStringStream);
finally
aStringStream.Free;
end;
end;
Les types d'objet
Les objets suivants sont possibles:
|
Objets |
Description |
|
*System* |
Audit auto-générés par l'application |
|
Users accounts |
Tout ce qui concerne les comptes des utilisateurs : login, logout, add user, delete user, modify user, etc. |
|
Application |
Tout ce qui concerne l'application : Démarrage, Arrêt,... |
|
DataBank |
Tout ce qui concerne l'écriture dans un registre ou dans un bit |
|
Access Level |
Tout ce qui concerne les niveaux d'accès |
|
Settings |
Tout ce qui concerne les modifications de la configuration |
|
Commands |
Toutes les commandes envoyées au serveur : ajout d'une charge, effacement d'un charge, mise en service d'une position, etc. |
|
HoistsAndShuttles |
Toutes les commandes concernant les transporteurs et les transferts. |
|
Rectifiers |
Toutes les commandes concernant les redresseurs |
|
Dosing |
Toutes les commandes concernant les pompe doseuses, |
|
Loading |
Toutes les commandes concernant le chargement |
|
Sequence Editor |
Toutes les opérations sur les fichiers "séquence" |
|
Sequence Step |
Toutes les modifications sur les pas de séquence |
|
Sequence Step Job |
Toutes les modifications sur les jobs d'un step de séquence |
|
Equipement Control Editor |
Toutes les opérations sur les fichiers de commandes d'équipement |
|
Equipement Control Position |
Toutes les opérations sur les commandes d'une position |
|
Equipement Control Step |
Toutes les opérations sur les steps d'une position dans une commande d'équipement |
|
Machine Mode Editor |
Toutes les modifications sur les modes machine |
|
Machine Mode Step |
Toutes les modifications sur les steps d'un mode machine |
|
Machine Mode Execution |
Toutes les opérations effectuées avec les modes machine |
|
Clock Schema Editor |
Toutes les opérations effectuées sur l'éditeur de schéma de l'horloge |
|
Clock Schema Step |
Toutes les opérations effectuées sur les pas d'schéma de l'horloge |
|
Sequencer Editor |
Toutes les opérations effectuées dans l'éditeur de "sequencer" |
|
Sequencer Execution |
Tous les lancements de sequencer. |
|
Start/Stop Clock |
Tous les démarrages et arrêt de l'horloge |
|
TouchScreen |
Content |
|
Chemical product |
Tous les ajouts de produits chimiques |
La fonction "Pick/Put-to-Light"
Lorsque QuickView est utilisé sur une machine manuelle (sans robot), la fonction "Pick/Put-to-Light" est utilisée pour suivre/indiquer les manipulations faites/à faire pas l'opérateur. Jusqu'à la version 10.26, cette fonction était réalisée dans l'automate programmable. A partir de la version 10.27, il sera possible d'utiliser un nouveau driver de communication avec des boutons tactiles Banner. La communication avec ces boutons est effectuée à l'aide du protocole ModBus RTU sur une ligne série RS-485.
Configuration des robots virtuels
Pour pouvoir utiliser la fonction "Pick/Put-to-Light", un ou des robots virtuels doivent être définis. Ceci se fait dans le fichier VKServer.ini dans les sections [Hoist1]..[HoistX]. Ces sections sont utilisées pour définir les robots de la machine. Dans le cas d'une machine manuelle, le type de robot doit être défini comme Type=CBSim2. Ce type de robot demande l'utilisation d'un DB de données ainsi qu'un DB de commande.
Exemple de configuration:
[Hoist1]
Type=CBSim2
DbData=23
RegData=0
DbCommand=24
RegCommand=0
Le DB de données
Dans ce DB, le statut du robot est simulé par le système.
Le DB de données est défini avec les mots clef DBData=N° de DB et RegData=N° de registre. Un DB interne sera utilisé et celui-ci doit contenir 100 words.
Exemple de DB de données:
[DataBank23]
Device=0
Channel=0
Level=0
Regi=0
Regf=100
Pool=-1
Le DB de commandes
Ce DB sert à l'envoie des informations de destination et à la réception des données des boutons sur lesquels l'opérateur a pressé.
Le DB de commande est défini à l'aide des mots clef DBCommand=N° de DB et RegCommand=N° de registre. Un DB de l'automate programmable ou du nouveau device BannerPicktolight sera utilisé.
[DataBank24]
Device=1
Channel=250
Regi=0
Regf=29
Pool=500
RegType=Word
Le premier registre contient le n° de position sur laquelle le bouton a été pressé. Le deuxième registre contient le n° de position sur laquelle la montre connectée a simulé la pression sur le bouton. Le troisième registre correspond dans le Low-byte au n° de position sur laquelle la lampe doit être allumée et dans le High-byte la fonction à exécuter soit 1 pour une montée et 2 pour une descente. Dans le cas où la position ne serait pas équipée d'un bouton lumineux, l'automate (ou le driver) doit simuler la pression sur le bouton jusqu'à ce que le n° de la position de destination soit mis à zéro.
Le device BannerPickToLight
Le nouveau device se défini en utilisant un port série du PC. Un convertisseur COM vers RS-485 devra être utilisé pour permettre la connexion sur les boutons Banner.
[Device1]
Protocol=BannerPickToLight
ComPort=3
BaudRate=19200
Parity=Even
DataBits=8
StopBits=1
Timeout=1000
ConfigString=1:1,3:3,4:5..10
Le mot clef ConfigString permet de définir les boutons qui sont connectés sur le Bus. Il se compose d'une série de paires de chiffres X:Y séparées par une virgule. X correspondant au numéro de position et Y correspondant à l'adresse du bouton. Pour définir un suite de boutons consécutifs, il suffit de définir l'adresse par 2 chiffres séparés par deux points. Dans l'exemple ci-dessus, les boutons pour les positions 1,3,4,5,6,7,8 et 9 utilisent les adresses 1,3,5,6,7,8,9 et 10.
Ce device possède 30 registres permettant de définir 3 opérateurs (couleurs) différents.
|
Registre |
Couleur |
Fonction |
|
0 |
Numéro de position sur laquelle l'opérateur a touché le bouton vert (lecture uniquement) |
|
|
1 |
|
Numéro de position sur laquelle l'opérateur utilisant une montre connectée l'a spécifiée. |
|
2 |
Vert |
Low-Byte: Numéro de position sur laquelle le bouton vert doit être allumé. High-Byte: fonction à effectuer 1=prendre 2=déposer |
|
3 |
|
Position sur laquelle le bouton vert est allumé. |
|
4 |
|
Numéro de position sur laquelle l'opérateur a touché le bouton rouge (lecture uniquement) |
|
5 |
|
Numéro de position sur laquelle l'opérateur utilisant une montre connectée l'a spécifiée. |
|
6 |
Rouge |
Low-Byte: Numéro de position sur laquelle le bouton rouge doit être allumé. High-Byte: fonction à effectuer 1=prendre 2=déposer |
|
7 |
|
Position sur laquelle le bouton rouge est allumé. |
|
8 |
|
Numéro de position sur laquelle l'opérateur a touché le bouton jaune (lecture uniquement) |
|
9 |
|
Numéro de position sur laquelle l'opérateur utilisant une montre connectée l'a spécifiée. |
|
10 |
Jaune |
Low-Byte: Numéro de position sur laquelle le bouton jaune doit être allumé. High-Byte: fonction à effectuer 1=prendre 2=déposer |
|
11 |
|
Position sur laquelle le bouton jaune est allumé. |
|
12 |
|
Mode de fonctionnement: 0=Run 1=Test vert 2=Test rouge 3=Test jaune |
|
13 |
|
Erreur de communication bouton positions 1 à 15 |
|
14 |
|
Erreur de communication bouton positions 16 à 31 |
|
15 |
|
Erreur de communication bouton positions 32 à 47 |
|
16 |
|
Erreur de communication bouton positions 48 à 63 |
|
17 |
|
Erreur de communication bouton positions 64 à 79 |
|
18 |
|
Erreur de communication bouton positions 80 à 95 |
|
19 |
|
Erreur de communication bouton positions 96 à 111 |
|
20 |
|
Erreur de communication bouton positions 112 à 127 |
|
21 |
|
Réserve |
|
22 |
|
Réserve |
|
23 |
|
Réserve |
|
24 |
|
Réserve |
|
25 |
|
Réserve |
|
26 |
|
Réserve |
|
27 |
|
Réserve |
|
28 |
|
Réserve |
|
29 |
|
Réserve |
Diagramme de fonctionnement
Le device PickToLightGateway
Ce device utilise le réseau du PC pour envoyer et recevoir les données des boutons. Un module VK Pick-to-Light Gateway devra être utilisé pour permettre les échanges entre le PC et les boutons Banner.
[Device1]
Protocol=PickToLightGateway
Address=192.168.11.3
Port=80
Timeout=1000
ConfigString=1:1,3:3,4:5..10
IOAlarm=28
Le mot clef ConfigString permet de définir les boutons qui sont connectés sur le Bus. Il se compose d'une série de paires de chiffres X:Y séparées par une virgule. X correspondant au numéro de position et Y correspondant à l'adresse du bouton. Pour définir un suite de boutons consécutifs, il suffit de définir l'adresse par 2 chiffres séparés par deux points. Dans l'exemple ci-dessus, les boutons pour les positions 1,3,4,5,6,7,8 et 9 utilisent les adresses 1,3,5,6,7,8,9 et 10.
Le mot clef IOAlarm=N° d'I/O permet d'activer une alarme lorsqu'une charge doit être déplacer. L'alarme est annulée lorsque l'opérateur presse sur le bouton de la charge à déplacer. Dans l'exemple ci-dessus, l'I/O N° 28 sera activée lors d'une alarme. Cette I/O est du type Word. Chaque bit correspond à un numéro d'opérateur.
Ce device possède 40 registres permettant de définir 6 opérateurs (couleurs) différents.
|
Registre |
Opérateur |
Fonction |
|
0 |
1 |
Numéro de position sur laquelle l'opérateur 1 a touché le bouton (lecture uniquement) |
|
1 |
1 |
Réserve |
|
2 |
1 |
Low-Byte: Numéro de position sur laquelle le bouton de l'opérateur 1 doit être allumé. High-Byte: fonction à effectuer 1=prendre 2=déposer |
|
3 |
1 |
Position sur laquelle le bouton de l'opérateur 1 est allumé. |
|
4 |
2 |
Numéro de position sur laquelle l'opérateur 2 a touché le bouton (lecture uniquement) |
|
5 |
2 |
Réserve |
|
6 |
2 |
Low-Byte: Numéro de position sur laquelle le bouton de l'opérateur 2 doit être allumé. High-Byte: fonction à effectuer 1=prendre 2=déposer |
|
7 |
2 |
Position sur laquelle le bouton de l'opérateur 2 est allumé. |
|
8 |
3 |
Numéro de position sur laquelle l'opérateur3 a touché le bouton (lecture uniquement) |
|
9 |
3 |
Réserve |
|
10 |
3 |
Low-Byte: Numéro de position sur laquelle le bouton de l'opérateur 3 doit être allumé. High-Byte: fonction à effectuer 1=prendre 2=déposer |
|
11 |
3 |
Position sur laquelle le bouton de l'opérateur 3 est allumé. |
|
12 |
4 |
Numéro de position sur laquelle l'opérateur 4 a touché le bouton (lecture uniquement) |
|
13 |
4 |
Réserve |
|
14 |
4 |
Low-Byte: Numéro de position sur laquelle le bouton de l'opérateur 4 doit être allumé. High-Byte: fonction à effectuer 1=prendre 2=déposer |
|
15 |
4 |
Position sur laquelle le bouton de l'opérateur 4 est allumé. |
|
16 |
5 |
Numéro de position sur laquelle l'opérateur 5 a touché le bouton (lecture uniquement) |
|
17 |
5 |
Réserve |
|
18 |
5 |
Low-Byte: Numéro de position sur laquelle le bouton de l'opérateur 5 doit être allumé. High-Byte: fonction à effectuer 1=prendre 2=déposer |
|
19 |
5 |
Position sur laquelle le bouton de l'opérateur 5 est allumé. |
|
20 |
6 |
Numéro de position sur laquelle l'opérateur 6 a touché le bouton (lecture uniquement) |
|
21 |
6 |
Réserve |
|
22 |
6 |
Low-Byte: Numéro de position sur laquelle le bouton de l'opérateur 6 doit être allumé. High-Byte: fonction à effectuer 1=prendre 2=déposer |
|
23 |
6 |
Position sur laquelle le bouton de l'opérateur 6 est allumé. |
|
24 |
|
Couleur de l'opérateur 1: 0=OFF 1=Red 2=Green 3=Yellow 4=Blue 5=Magenta 6=Cyan 7=White 8=Amber 9=Rose 10=Lime Green 11=Orange 12=Sky blue 13=Violet 14=Spring Green |
|
25 |
|
Couleur de l'opérateur 2 |
|
26 |
|
Couleur de l'opérateur 3 |
|
27 |
|
Couleur de l'opérateur 4 |
|
28 |
|
Couleur de l'opérateur 5 |
|
29 |
|
Couleur de l'opérateur 6 |
|
30 |
|
Mode flash à utiliser pour indiquer la dépose: 0=OFF 1=Steady 2=Flash 3=Strobe 11-20= N-Pulse (N=Index-10) (e.g. 13=3 pulses) |
|
31 |
|
Mode de fonctionnement: 0=Run, 1=Test Opérateur 1, 2=Test Opérateur 2, 3=Test Opérateur 3, 4=Test Opérateur 4, 5=Test Opérateur 5, 6=Test Opérateur 6, 7=Configuration des boutons, 8=Reset Factory default, 9=Reset System, 10=Reset commun Address, 11=Reset state Mode, 12=Reset test mode |
|
32 |
|
Configuration: 0=Off 1=Renvoie la configuration à la passerelle une seule fois, remis à zéro par le driver |
|
33 |
|
Erreur de communication bouton positions 1 à 15 |
|
34 |
|
Erreur de communication bouton positions 16 à 31 |
|
35 |
|
Erreur de communication bouton positions 32 à 47 |
|
36 |
|
Erreur de communication bouton positions 48 à 63 |
|
37 |
|
Erreur de communication bouton positions 64 à 79 |
|
38 |
|
Erreur de communication bouton positions 80 à 95 |
|
39 |
|
Erreur de communication bouton positions 96 à 111 |
|
40 |
|
Erreur de communication bouton positions 112 à 127 |
|
41 |
|
Force la lampe de la position si>0 et < 128 |
|
42 |
|
Eteins la lampe de la position si>0 et < 128. Si =0 alors éteins toutes les lampes |
|
43 |
|
Step de configuration 0=Pas en mode configuration 1=En mode configuration |
|
44 |
|
Nombre de boutons à configurer |
|
45 |
|
Prochain ID de configuration |
|
46 |
|
Erreur RFID: 0=Pas d'erreur, 1=Pas de RFID détecté sur la position, 2=Le RFID ne correspond pas |
|
47 |
|
Position sur laquelle l'alarme est intervenue |
|
48 |
|
0=Mode RFID inactif, 1=Mode RFID actif |
Registres Modbus des boutons Pick-IQ
Les registres suivants dont utilisés:
| Registre | Adresse | Fonction | Valeur | |
| 6100 | 0 | 16 | Max ID | ID Max (broadcast) |
| 6300-6301 | 16 | 0, 0 | Reset state mode | |
| 6500 | 0 | 16 | 0 | Reset test mode (broadcast) |
| 6500 | ID | 16 | 1 | Set test mode |
| 7940 | 195 | 3 | Lecture du statut commun | |
| 7940 | 195 | 16 | Set commun ID | |
| 7941 | ID | 16 | 0 | Effacement Latch |
| 7942 | ID | 3 | Lecture du statut | |
| 8701-8702 | 0 | 16 | n, m |
n=Mode de fonctionnement: 0=OFF 1=Steady 2=Flash 3=Strobe 11-20= N-Pulse (N=Index-10) (e.g. 13=3 pulses)
m=couleur à utiliser (broadcast): 0=OFF 1=Red 2=Green 3=Yellow 4=Blue 5=Magenta 6=Cyan 7=White 8=Amber 9=Rose 10=Lime Green 11=Orange 12=Sky blue 13=Violet 14=Spring Green |
| 8701-8702 | ID | 16 | n,m | n=Mode de fonctionnement, m=couleur à utiliser |
| 8701-8702 | 0 | 16 | 0 ,0 | All OFF (broadcast) |
| 8701-8702 | ID | 16 | 0,0 | Bouton OFF |
| 8810-8811 | 0 | 16 | 0 , 195 | Reset commun ID (broadcast) |
Travail avec des lecteurs RFID
En parallèle avec les boutons, il est possible de vérifier que le bon bouclard est déposé dans une position à l'aide de lecteurs RFID. Il faut pour cela ajouter des antennes RFID sur les positions devant être contrôlées. Lorsque le bouclard est déposé dans une position équipée d'une antenne, le système vérifie que le RFID du bouclard correspond au RFID lu par l'antenne. Si le RFID correspond alors la charge est transférée dans la position. S'il ne correspond pas alors une alarme est générée. Sur les postes de charge, la vérification est également effectuée lors de la prise de la charge. Si les RFID ne correspondent pas alors une alarme est générée. Les alarmes possibles sont:
| DB | Reg | Bit | Message |
| 24 | 46 | 0 | Aucun RFID détecté sur le poste de charge |
| 24 | 46 | 1 | Le RFID du bouclard ne correspond pas au RFID lu par l'antenne |
Pour définir les lecteurs RFID dans le système, il faut définir la section suivante:
[RFID]
CheckDB=25
ConfigReaders=1..3,47
Les mots clef ci-dessus permettent de définir les antennes. CheckDB permet de définir le Databank contenant les RFID lu sur les positions. Par exemple DB25. Ce Databank est composé du nombre de registres string correspondant aux positions machine. Le registre 1 correspond à la position 1, le 2 à la position 2, etc... ConfigReaders permet de définir sur quelles positions une antenne est installée. Dans l'exemple ci-dessus, des antennes sont installées sur les positions 1,2,3 et 47. Le registre 48 du Databank de commandes doit être =1 pour que la vérification par RFID soit fonctionnelle.
Les boutons tactiles Banner EZ-Light ou Pick-IQ
Installation typique
A) CÔble "Single-Ended" (RK 4.5T-2/S2501)
B) Tee (Truck RSC 2RKC 57)
C) CÔble "Double-Ended" (Truck RK 4.5T-1-RS 4.5T/S2501)
D) Résistance terminale (Banner EZL-RTM-M or F)
Convertisseur FTDI USB-485
Pour connecter les boutons sur un PC, nous utiliserons le convertisseur USB-RS485-WE-1800-BT.
VK Pick-to-Light Gateway
Cette passerelle fonctionne à l'aide de messages UDP. Ces messages UDP consistent en un enregistrement JSON. A chaque commande, une réponse est attendue. Les messages contiennent tous un numéro de fonction et un numéro d'évènement. La réponse doit contenir le numéro d'événement du message reçu
Liste des commandes
Fonction 1: définition de la liste des boutons
Cette fonction permet de définir la liste des boutons connectés sur la passerelle.
PC->Passerelle
| Paramètres | Type | Description |
| f | integer | =1 |
| e | integer | Numéro d'évènement |
| btn | string | Liste des ID des boutons séparée par ; |
Passerelle -> PC
| Paramètres | Type | Description |
| f | integer | =9 (ack) |
| e | integer | Même numéro d'événement que commande |
Exemple:
PC->M5 : {"f":1,"e":12456,"btn":"1;2;3;4"}
M5->PC : {"f":9,"e":12456}
Fonction 2: interface avec un bouton
Cette fonction permet d'allumer, d'éteindre ou de faire clignoter un bouton
PC->Passerelle
| Paramètres | Type | Description |
| f | integer | =2 |
| e | integer | Numéro d'évènement |
| btn | integer | ID du bouton |
| clr | integer |
Couleur du bouton: 0=OFF 1=Red 2=Green 3=Yellow 4=Blue (bouton Pick-IQ seulement) 5=Magenta (bouton Pick-IQ seulement) 6=Cyan (bouton Pick-IQ seulement) 7=White (bouton Pick-IQ seulement) 8=Amber (bouton Pick-IQ seulement) 9=Rose (bouton Pick-IQ seulement) 10=Lime Green (bouton Pick-IQ seulement) 11=Orange (bouton Pick-IQ seulement) 12=Sky blue (bouton Pick-IQ seulement) 13=Violet (bouton Pick-IQ seulement) 14=Spring Green (bouton Pick-IQ seulement) |
| blk | integer |
Type de lumière: 0=OFF 1=Steady 2=Flash 3=Strobe 11-20= N-Pulse (N=Index-10) (e.g. 13=3 pulses) |
Passerelle -> PC
| Paramètres | Type | Description |
| f | integer | =9 (ack) |
| e | integer | Même numéro d'événement que commande |
Exemple:
PC->M5 : {"f":2,"e":12459,"btn":2,"clr":1,"blk":2} //Faire clignoter le bouton ID 2 en vert
M5->PC : {"f":9,"e":12459}
Fonction 3: Commandes pour tous les boutons
Cette fonction permet d'allumer, d'éteindre ou de faire clignoter tous les boutons
PC->Passerelle
| Paramètres | Type | Description |
| f | integer | =3 |
| e | integer | Numéro d'évènement |
| clr | integer | Couleur des boutons (voir fonction 2) |
| blk | integer | type de lumière (voir fonction 2) |
Passerelle -> PC
| Paramètres | Type | Description |
| f | integer | =9 (ack) |
| e | integer | Même numéro d'événement que commande |
Exemple:
PC->M5 : {"f":3,"e":12874,"clr":2,"blk":1} // tous les boutons en rouge fixe
M5->PC : {"f":9,"e":12874}
Fonction 4: définition de l'adresse "remote"
Cette fonction permet d'indiquer à la passerelle l'adresse et le port utilisés par le PC.
PC->Passerelle
| Paramètres | Type | Description |
| f | integer | =4 |
| e | integer | Numéro d'évènement |
Passerelle -> PC
| Paramètres | Type | Description |
| f | integer | =9 (ack) |
| e | integer | Même numéro d'événement que commande |
Exemple:
PC->M5 : {"f":4,"e":32874}
M5->PC : {"f":9,"e":32874}
Fonction 5: information d'un redémarrage de la passerelle
Cette fonction indique au PC que la passerelle a redémarré.
Passerelle -> PC
| Paramètres | Type | Description |
| f | integer | =5 |
Exemple:
M5->PC : {"f":5}
Fonction 6: information d'un bouton pressé
Cette fonction indique que le bouton a été pressé.
Passerelle -> PC
| Paramètres | Type | Description |
| f | integer | =6 |
| btn | integer | ID du bouton ayant été pressé |
Exemple:
M5->PC : {"f":6,"btn":3} // le bouton 3 a été pressé
Fonction 7: information d'un bouton relÔché
Cette fonction indique que le bouton a été relÔché
Passerelle -> PC
| Paramètres | Type | Description |
| f | integer | =7 |
| btn | integer | ID du bouton ayant été relÔché |
Exemple:
M5->PC : {"f":7,"btn":3} // le bouton 3 a été relÔché
Fonction 8: erreur de communication avec un bouton
Cette fonction indique que le bouton ne répond pas
Passerelle -> PC
| Paramètres | Type | Description |
| f | integer | =8 |
| btn | integer | ID du bouton ayant été pressé |
Exemple:
M5->PC : {"f":8,"btn":3} // le bouton 3 ne répond pas
Fonction 10: acquittement des erreurs
Cette fonction permet d'acquitter les erreurs de communication avec les boutons:
PC->Passerelle
| Paramètres | Type | Description |
| f | integer | =10 |
| e | integer | Numéro d'évènement |
Passerelle -> PC
| Paramètres | Type | Description |
| f | integer | =9 (ack) |
| e | integer | Même numéro d'événement que commande |
Exemple:
PC->M5 : {"f":10,"e":2456}
M5->PC : {"f":9,"e":2456}
Les écrans de la passerelle
Ecran principal
Cet écran est affiché au démarrage de la passerelle. Les ID des boutons définis sont affichés sur cet écran. Si un bouton est allumé, son image est affichée dans la couleur sélectionnée.
Sur l'image précédente, le bouton avec l'ID 1 est affiché en rouge.
Lorsqu'une erreur de communication est détectée, une icône d'alarme est affichée à côté de l'image du bouton.
Sur cette image, le bouton avec l'ID 5 est en erreur. Pour acquitter le défaut, il faut presser sur le bouton central.
Le coin en haut à droite indique le mode de fonctionnement du Wifi. Les barres indiquent que le mode Wifi est activé et est connecté. Les lettres AP indique que le Wifi est en mode AccessPoint et est activé.
Tous les écrans précédents indiquent un mode de fonctionnement en mode Marche (fonctionnement normal). Il est possible de changer de mode de fonctionnement en mode DEMO ou en mode TEST. Ce changement se fait en accédant au menu principal en maintenant enfoncé le bouton de gauche. Le menu s'affiche:
Sélection du mode de fonctionnement
Le mode "Arrêt":
Le mode "Arrêt" ne fait rien (pas d'action sur les boutons).
Le mode "Test":
Pour démarrer le mode "Test", pressez sur le bouton central. Le mode "Test" fait clignoter chaque bouton en jaune, il faut ensuite presser sur le bouton pour passer au bouton suivant. Une fois pressé, le bouton s'allume en vert fixe et le prochain bouton clignote en jaune et ainsi de suite jusqu'à tous les boutons on été pressés.
Le mode "DEMO":
Pour démarrer le mode "DEMO", pressez sur le bouton central. Le mode "DEMO" affiche chaque bouton, les uns après les autres, dans toutes les couleurs possibles. Une fois la boucle terminée, celle-ci recommence avec le premier bouton et ceci indéfiniment jusqu'à ce que l'utilisateur arrête le fonctionnement en pressant sur le bouton central encore une fois.
Les écrans de configuration
Configuration de l'adresse Ethernet locale en mode cÔblé:
L'adresse locale est l'adresse Ethernet de la passerelle en mode cÔblé (RJ-45)
Configuration de l'adresse Ethernet distante (PC) en mode cÔblé:
Configuration des boutons:
Pour définir un ID utilisé (adresse du bouton), déplacer le curseur à l'aide des flèches et sélectionner avec le bouton central pour activer/désactiver un ID.
Configuration du WiFi:
Il est possible de désactiver le WiFi, de fonctionner en mode Access Point ou de se connecter à un réseau WiFi existant.
Fonctionnement direct sur Comport sans passer par la passerelle
Le device peut également fonctionner directement sur un comport sans passer par la gateway. Pour cela, il faut définir le device comme suit:
[Device1]
Protocol=PickToLightGateway
ComPort=3
BaudRate=19200
Parity=Even
DataBits=8
StopBits=1
Timeout=500
ConfigString=1:16,2:1..12,14:17,15:13..15,18:19..21,21:22..31,31:18
De cette manière, tout le travail de communication avec les boutons est réalisé par le programme serveur sans passer par une passerelle.
Les machines standards de galvanoplastie
Introduction
Les machines sont représentées de la manière suivante:
Cette machine est composée de 2 branches avec un transfert au milieu. Il peut y avoir un grand nombre de configurations différentes: machine d'une seule branche, de plusieurs branches, machine affichée de gauche à droite ou de droite à gauche. La première branche affichée sur le haut ou en bas, etc... Bref, chaque machine a sa propre configuration. Pour permettre un affichage automatique, il faut prévoir une manière de spécifier la mise en page.
La fenêtre d'affichage
La fenêtre d'affichage peut soit être encrée dans le coin gauche de l'écran, soit flottante ou soit occuper tout le haut de l'écran. Le choix d'affichage est configuré en utilisant des mots clef ou en utilisant la page [Machine] de la boîte de dialogue [Settings].
Dans les premières versions de QuickView la machine était toujours affichée sur une seule rangée de gauche à droite ou l'inverse mais toutes les branches étaient affichées d'un seul tenant. Dans une version récente, les mots clef affichés sur la droite de la boîte ont été ajoutés permettant d'afficher les branches sur des rangées différentes. Cette évolution permet une représentation plus réaliste de la machine mais des problèmes interviennent lorsque plusieurs transferts sont présents. Il n'est pas possible certaines fois d'aligner les cuves pour que tous les transferts soient alignés. Pour corriger ce problème, un nouvelle manière de configurer la machine a été réalisée. Cette manière est décrite dans la section suivante.
Langage de configuration
Un langage de configuration a été créé. Ce langage a été inspiré du langage LOGO (wikipedia). Il permet de décrire comment les positions seront dessinées. Si le string de configuration est vide, l'affichage se ferra de gauche à droite et commencera à la cellule 0:0. Pour afficher la machine comme représentée ci-dessus, le string de configuration sera: 0R1:0,37R0:1
Explication: le string de configuration est composé de groupes de données séparés par des virgules. Dans notre exemple, le premier groupe indique que la position dont l'index est 0 (première position de la machine) est dessinée dans la cellule ayant les coordonnées 1:0. Les positions suivantes sont dessinées à droite de celle-ci. le deuxième groupe indique que la position dont l'index est 37 est dessinée dans la cellule ayant les coordonnées 0:1. Les positions suivantes sont dessinées à droite de celle-ci. A chaque changement de branche ou de direction ou pour indiquer un espacement, un nouveau groupe doit être défini.
Autre exemple de string de configuration 0L27:2,28R0:0,54L25:1,55L18:1
Autre exemple de string de configuration 0L47:0,48R0:1,88R46:1
La grille de la machine
La fenêtre principale de la machine est considérée comme une grille. Chaque cellule de la grille peut correspondre à une position de la machine:
| a | marge à gauche et à droite. La largeur de ces marges correspond au minimum à la largeur d'une position divisée par 2. |
| b | longueur de la machine. Cette longueur correspond au maximum de positions d'une branche. Dans le dessin ci-dessus, le nombre maximum de positions des branches est de 15 positions. |
| c | largeur de la fenêtre d'affichage. |
| d | largeur d'une position. |
| e | hauteur d'un position. Cette hauteur correspond en général à la hauteur (g) divisée par 2 pour une machine à 2 branches. |
| f | fenêtre permettant l'affichage de messages. |
| g | hauteur de toutes les branches. |
| h | marge en haut et en bas de la fenêtre d'affichage. |
| i | hauteur de la fenêtre d'affichage. |
Le contenu d'une cellule de la grille
Chaque cellule (numérotée ci-dessus de 1 à 30) peut comprendre la représentation d'une position ou peut être vide. La représentation d'une position est faite de la manière suivante:
| A | Affichage d'un transporteur en-dessus de la position |
| B | Affichage d'un transporteur pouvant se déplacer en-dessus des autres transporteurs. Si ce type de transporteur n'est pas utilisé alors cet espace n'est pas affiché. |
| C | Numéro du transporteur |
| D | Charge sur le transporteur |
| E | Potence du transporteur en haut |
| F | Potence du transporteur ni en haut ni en bas |
| G | Potence du transporteur en bas |
| H | Cuve de la position |
| I | Numéro du porte-rack ou du programme |
| J | Charge dans la cuve |
| K | Information si la position est en service ou hors service |
| L | Numéro de la classe de traitement n° 2 (cette case n'est pas affichée si pas de classe de traitement secondaire définie) |
| M | Nom de la position |
| N | Indication qu'un mouvement de montée est prévu sur cette position |
| O | Numéro du transporteur devant effectuer un mouvement sur cette position |
| P | Indication qu'un mouvement de descente est prévu sur cette position |
| Q | Numéro d'identification de la position |
| R | Numéro de la classe de traitement n° 1 ( cette case n'est pas affichée si pas de classe de traitement primaire définie) |
| S | |
| T | Couvercle fermé sur la position |
Licence et clef de protection
Pour fonctionner en production, le logiciel VKQuickView a besoin d'une clef de licence. Cette licence peut être soit une clef logicielle ou soit une clef matérielle de type USB Dongle.
La clef logicielle
La clef logicielle est installée lors de l'installation de VK QuickView. Il faut pour cela activer la case à cocher correspondante lors de l'installation:
La clef logicielle est archivée dans le registre de Windows et demande donc des droits d'administration correspondants par conséquence.
La clef logicielle correspond à 3 entrées du registre soit: Key0, Key1 et Key2.
La première entrée (Key0) correspond aux options autorisées du logiciel. Cette clef est cryptée par rapport à la configuration matérielle de votre PC. La deuxième clef (Key1) correspond au numéro de clef de licence. C'est ce numéro qui apparaît dans la boîte About du logiciel. La troisième clef n'est pas utilisée mais doit être présente.
La clef matérielle
La clef matérielle est une clef USB de type Sentinel. Le driver de cette clef est installé lors de la procédure d'installation (la case à cocher est activée par défaut). Le numéro de la clef ainsi que les options autorisées sont mémorisés dans la clef.
Le fichier de licence VK.lic
Pour ajouter une option ou pour étendre la période de mise à jour, il était nécessaire de modifier la Key0 de la clef logicielle ou de modifier le contenu du dongle mais à partir de la version 10.27.0.0 et 9.60.0.0, un fichier crypté de licence a été introduit. Ce fichier se nomme VK.lic et doit se trouver dans le répertoire dans lequel se trouve les exécutables VKClient10.exe et VKServer10.exe.
Organigramme de fonctionnement
Le serveur HttpWebSocket
Il est possible d'activer un serveur Http permettant de publier des pages statiques ainsi qu'un serveur WebSocket permettant de publier les changements des données du serveur. L'activation se fait au niveau du fichier <VKServer.ini> dans la section [Http]. Le mot clef Enabled=1 doit être défini. Il faut également que la licence permette cette option. Le serveur WebSocket transmet les modifications des données du serveur sous la forme de messages JSON. Il peut également recevoir des commandes sous le même format.
Le serveur http utilise http.sys, il faut donc configurer http.sys pour que le serveur puisse fonctionner. La configuration est réalisée avec l'utilitaire TMSHttpConfigTool.exe qui se trouve dans le répertoire Addon de QuickView. Lancer l'application en mode administrateur, l'écran suivant s'affiche:
Ajouter une nouvelle règle en pressant sur le bouton [Add]:
Le port est maintenant autorisé et le serveur peut être lancer.
Les mots clef
Dans la section [http], les mots clef suivants sont disponibles:
|
Mot clef |
Type |
Description |
|
Enabled |
Boolean |
Vrai si la fonctionnalité est activée. |
|
BaseHttpURL |
String |
Adresse de base du serveur http |
|
HttpPort |
Integer |
Numéro du port http |
|
BaseWSURL |
String |
Adresse de base du serveur Websocket. Par défaut, l'adresse de base est /websocket |
|
WSPort |
Integer |
Numéro du port WebSocket. Par défaut, le port du WebSocket sera le même que le port http |
|
RootPath |
String |
Adresse du répertoire dans lequel les fichiers des pages htlm sont sauvegardés. Par défaut, definitionpath+\www |
|
DomainName |
String |
Nom du domain. Par défaut, + |
Exemple de définition:
[HTTP]
Enabled=1
httpPort=8484
Le protocole de communication
Un protocole de communication spécialement conçu pour QuickView est implémenté. Les messages JSON sont formés comme suit:
Exemple de message:
{ "function":"write", "register":10, "Data": { "programmode": true }}
Les clients doivent se connecter sur le serveur à l'aide d'un websocket. Avant d'ouvrir le websocket, les clients devront s'identifier sur le serveur Web en effectuant un POST à l'adresse /auth avec comme paramètres "?username=xxx&pass=yyy". Les "userName" et "Password" correspondant aux identifiants de QuickView. Si l'identification est correct, le serveur renvoie un jwt ( JSon Web Token) enregistré dans un Cookie (jwtoken=.....). Lorsque le client ouvre le websocket, le serveur vérifie le contenu du token et accepte ou non son ouverture. Le token est valable 24 heures après quoi il est nécessaire de renouveler son identification si le websocket est fermé.
Il est aussi possible d'utiliser le mode d'authentification basic des websocket pour se connecter. En utilisant ce schéma, le serveur attend le token Authorization: Basic xxxx dans l'entête de la requête de connexion (voir https://developer.mozilla.org/fr/docs/Web/HTTP/Headers/Authorization ).
Les commandes possibles
Pour pouvoir lire, écrire, etc... le protocole demande l'utilisation de commandes. Les commandes possibles sont décrit dans le tableau suivant:
|
Commandes |
Description |
|
read |
Lecture du contenu d'un registre. Format de la commande "read" :
{"function":"read", "register":n } {"function":"read", "databank":n }
n étant un entier et correspond au numéro de registre désiré. |
|
write |
Écriture de données dans un registre.
Format de la commande "write":
{"function":"write", "register":n, "data": {json object}} {"function":"write", "databank":n, "reg":m, "bit":b, "value":true or false} {"function":"write", "databank":n, "reg":m, "value": number or "string"}
n étant un entier correspondant au numéro de registre. data correspond à un objet JSOn qui est spécifique pour chaque registre.Lors de l'écriture dans un registre d'un databank, il faut spécifier le databand, le registre et la valeur pour une donnée complète du registre ou alors spécifier le bit et l'état de ce bit pour une valeur boolean. |
|
readall |
Demande le rafraîchissement de tous les registres du système. Le serveur renvoie tous les registres disponibles.
Format de la commande "refreshall":
{"function":"readall"} |
|
subscribe |
Souscrit au rafraîchissement d'un ou de plusieurs registres. Le serveur renvoie chaque changement d'un registre à tous les clients ayant souscrit à ce registre.
Format de la commande "subscribe":
{"function":"subscribe", "register":[x,y,z,...]} => souscrit aux changements de registres {"function":"subscribe", "databank":[x,y,z,...]} => souscrit aux changements des databanks {"function":"subscribe"} => souscrit à tous les changements |
|
unsubscribe |
Annule la souscription à un ou plusieurs registres.
Format de la commande "unsubscribe":
{"function":"unsubscribe", "register":[x,y,z,...]} => annule les souscriptions aux changements de registres {"function":"unsubscribe", "databank":[x,y,z,...]} => annule les souscriptions aux changements de databank {"function":"unsubscribe"} => annule toutes les souscriptions |
Les registres
Les registres suivants sont disponibles:
|
Registre |
Data |
Description |
|
10 |
"modeprogram":boolean Statut du mode programme "modebuffer":boolean Statut du mode gare "simulation":boolean Vrai si en mode simulation "endofcycle":boolean Vrai si en fin de cycle "workingmode":integer Mode de fonctionnement (0:DIA/OPI, 1:Priority, 2:OSCILine) "timesynch":integer Nombre de secondes depuis le 01/01/1980. Permet de synchroniser les horloges |
Statuts de la machine |
|
32 |
"DateOfData" : string Date des données au format yyyymmdd "Date" : string Date des données au format du PC "BatchesIn" : Integer Nombre de chargements "BatchesOut" : Integer Nombre de déchargements "IdleTime" : Integer Nombre de minutes avec poste de charge vide "ErrorStopTime" : Integer Nombre de minutess en stop causé par une alarme "ErrorWarningTime" : Integer Nombre de minutes en stop causé par une alarme système en Auto "ManuModeTime" : Integer Nombre de minutes en mode manuel "SafetyDoorTime" : Integer Nombre de minutes pendant lesquelles les portes sont ouvertes "PowerOnTime" : Integer Nombre de minute pendant lesquelles la machine est en marche "Utilization-RPT" : Integer (PowerOnTime-Idle Time)/Power On Time = % d'utilisation "Reliability" : Integer (Power On Time-Error Stop Time)/Power on Time = % |
Données journalières |
|
33 |
"labels" : Array 0..23 of strings Heures "BatchsIn": Array 0..23 of integer Nombre de chargements par heure "BatchesOut": Array 0..23 of integer Nombre de déchargements par heure ... Comme registre 32 |
Données journalières sur 24 heures |
|
40 |
"alarmcount":integer Nombre d'alarme en cours "alarms": array of alarm [ "evt":integer Type d'événement: 1=Rtn, 2=Ack, 3=Ala, 4=Wrn "num":integer Numéro de l'alarme "time":Time Heure de l'alarme "type":string Type de l'alarme "group":string Groupe de l'alarme "mess":string Message de l'alarme "val":float Valeur associée à l'alarme ] |
Liste des alarmes actives |
|
42 |
"messagecount":integer Nombre de messages en cours "messages": array of message [ "evt":integer Type d'événement: 1=Rtn, 2=Ack, 3=Ala, 4=Wrn "num":integer Numéro du message "time":Time Heure du message "type":string Type du message "group":string Groupe du message "mess":string Texte du message "val":float Valeur associée au message ] |
Liste des messages actifs |
|
2000 |
"positioncount":integer Nombre de positions dans la machine "hoistcount":integer Nombre de transporteurs dans la machine "positions":array of position [ "pos":integer Numéro de la position "name": string Nom de la position "flag":integer Flag de la position "addr":integer Adresse de la position "group":integer Numéro du groupe de la position "tank": integer Numéro de la cuve "disable":boolean Vrai si la position peut être mise hors service "width":integer Largeur de la position "process":integer Numéro de la page graphique "dist":integer Distance entre position précédente et centre de la position "branch";integer Numéro de la branche de la machine "num":integer Numéro de la position à afficher "layout":integer Layout de la position (0=standard, 1=en avant, 2=en arrière) ] "hoists":array of hoist [ "hoist":integer Numéro du transporteur "type":integer Type de transporteur "driptray":Boolean True si un bac d'égouttage est défini "halfup":Boolean True si le transporteur peut faire un up demi "pmin":integer Position minimale du transporteur "pmax":integer Position maximale du transporteur ] |
Définition de la machine |
|
3000 |
"rectifiercount":integer Nombre de redresseur défini "rectifiers": array of rectifier [ "rectifier":integer numéro du redresseur "position":integer position dans laquelle se trouve le redresseur "name":string Nom du redresseur "status":integer Statut du redresseur "step":integer Step actuel du profil de courant "ahamn":boolean True si Ah "surface":float surface exposée "density":float densité de courant "current":float courant actuel "voltage":float tension actuelle "Q":float compteur Ah "QTheo:float quantité d'Ah théorique "QTheoAct:float écart actuel des Ah "QTotal":float totalisateur des Ah "setpoint":float consigne actuelle "reverse":float consigne actuelle inverse "maxU":float tension maximale "maxI":float courant maximum "minU":float tension à vide "minI":float courant max lorsque la tension min est appliquée "pcsetpoint":integer pourcentage de la consigne lorsque plusieurs redresseurs sont utilisés sur la même position "alternation":integer temps entre chaque alternance "surfaceflag":integer partie de la surface prise en considération "currentform":integer numéro du profil de courant "flag0":integer "flag1:integer "flag2:integer ] |
Les redresseurs |
|
5001..5100 |
"device":integer Numéro du device utilisé dans QuickView (0=interne) "channel":integer Numéro du canal "db":integer Numéro du db de l'automate "regstart":integer Numéro du premier registre "regend":integer Numéro du dernier registre "registers": array of registre [ "reg":integer Numéro du registre "type":string Type de registre (byte,word,dword,real,string,int) "value": string | number | float Valeur du registre ] |
Contenu des databanks du serveur |
|
12000 |
"ios" : array of IO [ "io" : Integer Numéro de l'I/O "Name" : string Nom de l'I/O "unit" : string Unité de l'I/O "type" : Integer Type d'I/O "db" : Integer Numéro du DB "reg" : Integer Numéro du registre "bit" : Integer Numéro du bit "mask" : Integer Mask à appliquer "flags" : Integer Flags de l'I/O "position" : Integer Position associée "min" : Integer Valeur minimum "max" : Integer valeur maximum "value" : Integer|boolean|string selon le type de variable ] |
Définition de toutes les I/O |
|
12001..13999 |
"io" : Integer Numéro de l'I/O "Name" : string Nom de l'I/O "unit" : string Unité de l'I/O "type" : Integer Type d'I/O "db" : Integer Numéro du DB "reg" : Integer Numéro du registre "bit" : Integer Numéro du bit "mask" : Integer Mask à appliquer "flags" : Integer Flags de l'I/O "position" : Integer Position associée "min" : Integer Valeur minimum "max" : Integer valeur maximum "value" : Integer|boolean|string selon le type de variable |
I/O individuelle |
|
14000 |
"io1" : Integer|Boolean|String Donnée de l'I/O 1 "io2": Integer|Boolean|String Donnée de l'I/O 2 ... "io1999": Integer|Boolean|String Donnée de l'I/O 1999 |
Données de toutes les I/O sans définition |
|
14100 |
"hoistsdata" : array hoistType [ "hoist" : Integer Numéro du bras "ready" : Boolean Vrai si le transporteur est prêt "blockingalarms" : Integer Alarmes bloquantes "height" : Integer Hauteur actuelle "destheight" : Integer Hauteur de destination "position" : Integer Position actuelle "destination" : Integer Position de destination "mode" : Integer Mode du robot "movingleft" : Boolean Vrai si le robot se déplace à gauche "movingright" : Boolean Vrai si le robot se déplace à droite "movingup" : Boolean Vrai si le robot se déplace en haut "movingdown" : Boolean Vrai si le robot se déplace en bas "racknum" : Integer numéro de rack si présent sinon pas dans le record "rackstatus" : Integer statut du rack si présent sinon pas dans le record "rackprog" : Integer N° de programme du rack si présent sinon pas dans le record ] |
Données de tous les robots |
|
14101 |
"positionsdist" : array PositionDist [ "position":integer numéro de position "dist":integer distance depuis le début de la machine ] "hoistsdist" : array HoistDist [ "hoist":integer numéro du transporteur "dist":integer distance actuelle depuis le début de la machine ] |
Content |
|
14200 |
"positiondata" : array PositionDataType [ "position" : Integer Numéro de la position "racknum" : Integer numéro de rack si présent sinon pas dans le record "rackstatus" : Integer statut du rack si présent sinon pas dans le record "rackprog" : Integer N° de programme du rack si présent sinon pas dans le record "program": String Nom du programme du rack "ref": String Nom de la référence de la charge sur le rack "tmin": Integer Temps minimum défini "tmax": Integer Temps maximum défini "teff": Integer Temps d'entrée dans la position (temps en secondes) "disable" : Boolean Etat de la position si la position peut être mise hors service "inalarm" : Boolean Etat d'alarme de la position "ready" : Boolean Etat des équipements de la position par rapport au "Mode machine ready" ] |
Données d'état des positions |
|
14300 |
json de la page graphique |
Données du dessin d'une page graphique |
|
14301 |
"Registers" : array RegisterData [ "db":integer numéro du databank "reg":integer numéro du registre "type":string type du registre (integer, real, string) "value": integer or real or string valeur du registre ] |
|
Utilisation en tant que API
Il est possible de faire des requêtes API sur le serveur. Pour obtenir les registres ci-dessus dans un GET HTTP, il faut effectuer les requêtes comme l'exemple suivant:
Get http://localhost:8484/API?REGISTER=10
La réponse est un objet JSON comme suit:
{ "function":"write", "register":10, "Data": { "modeprogram": true, "modebuffer": true,..... }}
Utilisation comme serveur Web
Il est possible de fonctionner en tant que serveur web. Les fichiers doivent se trouver dans le répertoire RootPath .
Dashboard
Il est possible de faire fonctionner le site web avec Freeboard.
Pour fonctionner, il faut décompresser le fichier www.zip et le placer dans le répertoire défini dans rootPath.
Pour le lancer, il faut soit taper l'adresse web du site pour avoir l'éditeur de freeboard ou soit http://localhost:8484/index.html#source=dashboard.json pour lancer directement un dashboard prédéfini.
Dans le fichier index.html, le bouton donnant l'accès aux modification du dashboard a été commenté. Pour permettre des modifications, il faut dé-commenter les lignes 48 à 96 et 110 à 111
La mesure d'épaisseur
Activating the measurement function
To activate the thickness measurement function, you must first open the "Settings" dialog box by clicking on the "Setting definition" menu:
The "Settings" dialog box will be displayed:
On the left panel, select "Machine" then check the "ShowMeasurementType" check box.
Defining a sequence with measurement
Once the "Measurement type" is activated, a new column is displayed in the sequence definition table:
In this new column, you can select which position need a measurement. There are 3 measurement possibilities:?
-
In place: means the load stays in the tank and the measurement is done in the position.
-
On hoist: means the load is lifted by the hoist and the measurement is done on the air.
-
In measurement position: means the load is transferred to a position dedicated to measurement.
Running program with measurement
When a thickness measurement is requested, the jig requiring the measurement will be displayed in flashing fuchsia in the machine:
In order to open the measurement dialog box, you must right click on the load and select "Thickness measurement" in the popup menu:
By clicking on this command, the following dialog box will be displayed:
If the thickness is too low, you can enter an additional time in the corresponding field. You must also specify if, after this additional time, a new measurement is required or not. Once this 2 fields filled, the "continue" button becomes enabled. Click on "Continue" to add time or click on "Finished" to continue to the next sequence step. The "Cancel" button will only close the box.
L'utilisation de VKQVRemoteDB
Le programme VKQVRemoteDB est un programme fonctionnant en tant que service Windows. Ce programme maintient une connexion avec 2 bases de données MS SQL. Il est utilisé pour faire le lien entre le moteur de bases de données MS SQL et les applications VK QuickView en utilisant une liaison sécurisée https. Ce logiciel est utilisé lorsque la connexion directe sur la base de données ou l'utilisation de OBDC ne sont pas autorisées. Ce programme doit fonctionner sur un PC du réseau du client final (PC virtuel ou directement sur le PC sur lequel le moteur de bases de données est installé) .
Schéma de fonctionnement
La configuration du serveur
La configuration du programme est enregistrée dans un fichier "texte" qui se trouve dans le même répertoire que le programme et se nomme VKQVRemoteDB.ini. Pour modifier la configuration, il faut lancer le programme en mode GUI. Ceci se fait de la manière suivante:?
-
Arrêter le service VKQVRemoteDBService si celui-ci est en marche.
-
Ouvrir une fenêtre de commande depuis le répertoire de l'application
-
Taper VKQVRemoteDB.exe -gui
-
La fenêtre de configuration s'affiche:
-
Remplir les champs selon la configuration de votre serveur de bases de données
-
Sauvegarder la configuration en cliquant sur File|Save
-
Fermer la fenêtre pour terminer l'application puis relancer le service VKQVRemoteDBService
Le programme utilise http.sys pour son serveur Web. Il faut donc réserver les ports et les chemins d'accès à l'aide de l'utilitaire TMSHttpConfig.exe qui est installé dans le répertoire "Addon" lors de l'installation de VK QuickView. Lancer le programme et la fenêtre suivante s'affiche:
Sur cette fenêtre, il y a deux onglets "Url Acl" et "SSL". Dans la fenêtre "Url Acl" cliquer sur "Add". La fenêtre suivante s'affiche:
Introduire l'url que vous désirez réserver soit http://+:1888/vkqvpart/ pour la connexion à la bibliothèque d'articles et http://+:1888/vkqvreport/ pour le suivi de charge. Il faut sélectionner "Everyone" pour que tous les utilisateurs puissent accéder à cette adresse. Dans le cas de l'utilisation d'une liaison sécurisée, les adresses a réservées doivent commencer par https:// et il faut également attribuer un certificat au port. L'attribution du certificat se fait dans l'onglet "SSL".
Une fois ces réservations effectuées, le service VKQVRemoteDBService peut être lancé.
Sélectionner "Automatique" dans type de démarrage. Puis cliquer sur "Démarrer".
La configuration de QuickView
Les bases de données configurées dans RemoteDB sont utilisées par VKClient10.exe ( bibliothèque d'articles) et VKServer10.exe ( rapport de suivi).
La configuration du client
La configuration du client se fait dans le fichier VKWinQV.ini dans la section "PartLibrary". Les mots clef suivants doivent être définis:
|
Mot clef |
Type |
Valeur |
Description |
|
Type |
String |
REMOTEDB |
Le type de connexion utilisé par la bibliothèque. |
|
ConnectionString |
String |
Adresse du serveur Web (VKQVRemoteDB.exe) |
|
|
Path |
String |
vkqvpart |
Chemin d'accès de la liaison |
|
PartMachineID |
Integer |
0 |
Machine ou groupe de machines auquel est associé la bibliothèque de pièces |
|
LoadMachineID |
Integer |
0 |
Machine ou groupe de machines auquel est associé la bibliothèque de charges |
|
ToolMachineID |
Integer |
0 |
Machine ou groupe de machines auquel est associé la bibliothèque d'outillages |
|
ProcessMachineID |
Integer |
0 |
Machine ou groupe de machines auquel est associé la bibliothèque de gammes |
|
UserName |
String |
|
Nom d'utilisateur pour accéder au serveur Web. Si pas défini, la valeur par défaut est utilisée. |
|
Password |
String |
|
Mot de passe pour accéder au serveur Web. Si pas défini, la valeur par défaut est utilisée. |
La configuration du serveur
La configuration du serveur se fait dans le fichier VKServer.ini dans la section "RemoteDB". Les mots clef suivants doivent être définis:
|
Mot clef |
Type |
Valeur |
Description |
|
Host |
String |
Adresse du serveur Web (VKQVRemoteDB.exe) |
|
|
Path |
String |
vkqvreport |
Chemin d'accès de la liaison |
|
sqlFileName |
String |
_ODBC |
Extension du nom de fichier des scripts SQL utilisés pour créer les tables dans la base de données. Ces scripts sont générés automatiquement par le programme client dans le répertoire Dbase\SQL |
|
CreateTable |
Boolean |
1 |
Indique au système s'il doit créer les tables lorsque celle-ci sont absentes de la base de données. |
|
UserName |
String |
|
Nom d'utilisateur pour accéder au serveur Web. Si pas défini, la valeur par défaut est utilisée. |
|
Password |
String |
|
Mot de passe pour accéder au serveur Web. Si pas défini, la valeur par défaut est utilisée |
Installation de plusieurs instances du programme
Lorsque plusieurs instance du programme sont installées sur un poste, il faut créer un répertoire par instance. Les répertoires doivent contenir le programme .exe ainsi que son fichier de configuration. Il est important de donner un nom de service différent pour chaque instance du programme. Des chemins d'accès différents doivent également être configurés.
Le serveur OPC-DA
Pour permettre la liaison entre VKQVRemoteDB et un autre programme, VK Vision a développé un serveur OPC-DA. Pour l'instant, ce serveur n'est utilisé que pour visualiser les données de la table TOOLS de la base de données d'articles mais il pourrait être étendu pour accéder à d'autres tables.
|
Variable |
Type |
Lecture/Ecriture |
Description |
|
VKQVREMOTEDB. TOOLS. SERVERADDRESS |
String |
R/W |
Adresse du serveur web (VKQVRemoteDB.exe). Lorsque l'on écrit dans cette variable, sa valeur est sauvegardée dans le fichier de configuration du programme. |
|
VKQVREMOTEDB. TOOLS. SERVERPATH |
String |
R/W |
Chemin d'accès du serveur Web. Lorsque l'on écrit dans cette variable, sa valeur est sauvegardée dans le fichier de configuration du programme. |
|
VKQVREMOTEDB. TOOLS. MACHINEID |
Integer |
R/W |
Numéro de machine correspondant à la table TOOLS. Lorsque l'on écrit dans cette variable, sa valeur est sauvegardée dans le fichier de configuration du programme. |
|
VKQVREMOTEDB. TOOLS. RFID |
String |
R/W |
Tag du RFID a lire |
|
VKQVREMOTEDB. TOOLS. REQUESTRFID |
Boolean |
R/W |
Demande de lecture de l'outillage correspondant au RFID ci-dessus. Lorsque l'on désire lire les informations correspondant à une étiquette RFID il faut premièrement introduire la valeur du tag désirée. Puis écrire "True" dans cette variable. Le serveur efface les champs d'information et se connecte sur VKQVRemoteDB pour rechercher un outillage ayant le même tag que celui demandé. Si un outillage est trouvé, le programme remplit les champs d'informations avec les données en provenance du serveur. Cette variable est ensuite écrite avec la valeur "False". Si le tag n'existe pas ou si la connexion ne peut pas être effectué alors la variable ERROR est positionnée avec une valeur négative et la variable est remise à "False". |
|
VKQVREMOTEDB. TOOLS. ERROR |
Integer |
R/W |
Résultat de l'opération sur le serveur. 0=OK, Valeur négative=erreur. |
|
VKQVREMOTEDB. TOOLS. DESCRIPTION |
String |
R |
Valeur correspondant à la description de l'outillage |
|
VKQVREMOTEDB. TOOLS. ID |
Integer |
R |
Valeur correspondant au champ ID de l'outillage |
|
VKQVREMOTEDB. TOOLS. REFERENCE |
String |
R |
Valeur correspondant au champ Référence de l'outillage |
|
VKQVREMOTEDB. TOOLS. TYPE |
String |
R |
Valeur correspondant au champ Type de l'outillage |
|
VKQVREMOTEDB. TOOLS. TOTALUSE |
Integer |
R |
Valeur correspondant au compteur de passage en machine de l'outillage |
|
VKQVREMOTEDB. TOOLS. TOTALUSELIMIT |
Integer |
R |
Valeur correspondant à la limite de passage avant alarme de l'outillage |
|
VKQVREMOTEDB. TOOLS. TOTALUSEGALVANIC |
Integer |
R |
Valeur correspondant au compteur de passage en machine dans des cuves galvaniques |
|
VKQVREMOTEDB. TOOLS. TOTALUSENOGALVANIC |
Integer |
R |
Valeur correspondant au compteur de passage en machine dans des cuves non galvaniques |
|
VKQVREMOTEDB. TOOLS. LOCATION |
Integer |
R/W |
Valeur correspondant à l'emplacement de l'outillage. Les valeurs possibles sont: 0: Indéterminé 1: Stockage 2: Production 3: Accrochage 4: Décrochage 5: Stripage |
|
VKQVREMOTEDB. TOOLS. SETLOCATION |
Boolean |
R/W |
Ecriture de l'emplacement de l'outillage correspondant à la variable RFID. Lorsque l'on désire modifier l'emplacement de l'outillage, il faut premièrement introduire la valeur de l'emplacement dans la variable ci-dessus. Il faut ensuite écrire "True" dans cette variable. Le serveur se connecte sur VKQVRemoteDB et enregistre l'emplacement de outillage ayant le même tag que celui défini dans la variable RFID. Si un outillage est trouvé, le programme remplit les champs d'informations avec les données en provenance du serveur. Cette variable est ensuite écrite avec la valeur "False". Si le tag n'existe pas ou si la connexion ne peut pas être effectué alors la variable ERROR est positionnée avec une valeur négative et la variable est remise à "False". |
|
VKQVREMOTEDB. TOOLS. CLEARTOTALUSE |
Boolean |
R/W |
Effacement du compteur de passage de l'outillage correspondant à la variable RFID. Lorsque l'on désire effacer le compteur de passage de l'outillage, il faut écrire "True" dans cette variable. Le serveur se connecte sur VKQVRemoteDB et effectue l'effacement du compteur outillage ayant le même tag que celui défini dans la variable RFID. Si un outillage est trouvé, le programme remplit les champs d'informations avec les données en provenance du serveur. Cette variable est ensuite écrite avec la valeur "False". Si le tag n'existe pas ou si la connexion ne peut pas être effectué alors la variable ERROR est positionnée avec une valeur négative et la variable est remise à "False". |
|
VKQVREMOTEDB. TOOLS. SETTOTALUSEMAX |
Boolean |
R/W |
Affectation du compteur de passage à sa valeur limite + 1. Lorsque l'on désire forcer la valeur limite de compteur de passage de l'outillage, il faut écrire "True" dans cette variable. Le serveur se connecte sur VKQVRemoteDB et effectue l'affectation du compteur outillage ayant le même tag que celui défini dans la variable RFID. Si un outillage est trouvé, le programme remplit les champs d'informations avec les données en provenance du serveur. Cette variable est ensuite écrite avec la valeur "False". Si le tag n'existe pas ou si la connexion ne peut pas être effectué alors la variable ERROR est positionnée avec une valeur négative et la variable est remise à "False". |
Le programme VKQVStripApp4RemoteDB
Ce programme permet d'enregistrer le suivi de la démétallisation sur le serveur de rapports. Il permet également de mettre à zéro les compteurs de passages galvaniques et non galavaniques.
Le programme se présente comme suit:
La commande Options|Configuration permet d'accéder aux paramètres de l'application:
| Paramètres | Type | Description |
| Sélèction d'un programme obligatoire | Bool | Indique au programme que l'utilisateur à l'obligation de choisir un programme dans la liste pour démarrer une démétallisation |
| Nom de l'opérateur obligatoire | Bool | Indique au programme que l'utilisateur à l'obligation d'introduire son nom pour démarrer une démétallisation |
| Remarque obligatoire | Bool | Indique au programme que l'utilisateur à l'obligation d'introduire une remarque pour démarrer une démétallisation |
| Nom de la machine | String |
Nom de la machine affiché sur les rapports: |
| Numéro de la machine | String |
Numéro de la machine affiché sur les rapports: |
Les programme pouvants être sélectionnés sont définis dans cette page de configuration. 30 noms de programmes peuvent être définis.
Les connexions avec la base de données sont définies dans la page de configuration des connexions:
| Paramètre | Type | Description |
| Adresse du serveur (outillages) | String | Adresse http ou https du serveur d'articles |
| Nom d'accès (outillages) | String | Nom d'accès du serveur d'outillage: toujours "vkqvpart" |
| Nom d'utilisateur (outillages) | String | Nom d'utilisateur permettant l'accès au serveur: toujours "vkvisionsa" |
| Mot de passe (outillages) | String | Mot de passe permettant l'accès au serveur. |
| ID machine (outillages) | Integer | Numéro de la machine utilisé pour les outillages. Ici 10. |
| Adresse du serveur (suivi) | String | Adresse http ou https du serveur de rapports |
| Nom d'accès (suivi) | String | Nom d'accès du serveur de rapports: toujours "vkqvreport" |
| Nom d'utilisateur (suivi) | String | Nom d'utilisateur permettant l'accès au serveur: toujours "vkvisionsa" |
| Mot de passe (suivi) | String | Mot de passe permettant l'accès au serveur. |
| ID machine (suivi) | Integer |
Numéro de la machine utilisé pour les rapports. Ici 4: |
Pour commencer, l'utilisateur introduit un numéro de référence de l'outillage. Si l'outillage est trouvé dans la base de données, les informations sur l'outillage sont affichées:
Si la référence n'est pas trouvée dans la base de données, un message l'indique:
Une fois les informations de la référence affichées, l'utilisateur doit introduire les données obligatoires:
Le bouton de démarrage s'affiche en vert. L'utilisateur doit cliquer dessus pour démarrer la démétallisation.
Lorsque la démétallisation à débutée, les champs d'informations sont grisés. Le numéro de la charge en cours est affiché en dessus du bouton STOP. Lors du démarrage, les compteurs sont remis à zéro et la date et le nom de l'opérateur sont actualisés.
Lorsque l'utilisateur clique sur le bouton STOP, la date de fin de traitement est actualisée et le statut de la charge passe à "terminé". La forme est effacée et une nouvelle démétallisation peut être démarrée.
La connexion à un broker MQTT
Définition dans le serveur
Dans tous les logiciels modernes, il est possible de publier des données pouvant être utilisées par d'autres applications. Dans QuickView, nous avons opter pour l'utilisation de MQTT. MQTT est une manière de publier des données selon un protocole standard (voir MQTT sur wikipedia ).
Création d'un "UNS" (Unified Name Space)
L'utilisation de MQTT doit se faire d'une manière standardisée en appliquant les standards ISA-95 dans l'architecture d'un UNS:
Exemple d'un Unified Name Space:
Dans l'exemple ci-dessus, ENTREPRISE, SITE et AREA correspondent à "Base Name". PRODUCTION LINE correspond à "Group Name".
La configuration
La configuration de la connexion se fait dans VKServer.ini. Une nouvelle section [MQTT] doit être créée. Il faut auparavant avoir obtenu la licence pour permettre cette connexion. La licence correspond à AMConnector car elle est aussi utilisée par VK A&M pour importer des données depuis QuickView.
Exemple de configuration:
[MQTT]
Enabled=1
Host=192.168.11.31
Port=8883
SSlEnable=1
ClientID=VKQuickView
GroupName=A34002
RefreshRate=30
Hierarchical=1
ForceIOType=0
AutoRestart=1
PublishRectifiers=1
PublishMachine=1
PublishCounters=1
PublishDailyData=1
ValueStyle=1
DecimalCount=2
La section [MQTT]
Les mots clef suivants peuvent être définis:
|
Mot clef |
Type |
Valeur par défaut |
Description |
|
Enabled |
Boolean |
0 |
Doit être activé pour que la connexion soit créée. |
|
Host |
String |
vide |
Adresse du broker MQTT |
|
Port |
Integer |
1883 |
Numéro du port TCP |
|
SSLEnable |
Boolean |
0 |
Vrai si la connexion utilise Open SSL (TLSv1.1) pour une connexion sécurisée. Pour pouvoir travailler en mode SSL sécurisé, il faut placer les dll d'OpenSSL dans le même répertoire que QuickView (version 32bits, version testée: 1.0.2.18) |
|
ClientID |
String |
GUID |
Nom du client MQTT |
|
KeepAlive |
Integer |
60 |
Temps en secondes pour garder la connexion en vie lorsqu'il n'y a pas de communication |
|
RefreshRate |
Integer |
30 |
Temps en secondes pour l'exécution d'un rafraîchissement des variables |
|
Retain |
Boolean |
0 |
Vrai si le contenu des variables doit être préservé sur le broker après la déconnexion. Si ce flag est activé, alors des messages seront renvoyés à tous les clients lors de leur connexion au broker. |
|
BaseName |
String |
VKQV |
Nom de base des topics. |
|
GroupName |
String |
MachineName |
Nom de publication du groupe. En général correspond au code de la machine par exemple: A34002 |
|
ForceIOType |
Boolean |
1 |
Vrai si le type défini dans les I/O doit être respecté. Si faux alors le système utilise le type des registres des databanks. |
|
Hierarchical |
Boolean |
0 |
Vrai pour forcer une hiérarchie dans la publication des variables par exemple: VKQV\23\Température actuelle. Si faux alors le système n'utilise pas le nom de la variable mais son numéro exemple: VKQV\924 |
|
PublishMachine |
Boolean |
0 |
Vrai pour forcer la publication de la machine et des tableaux correspondants comme les redresseurs, les pompes doseuses. |
|
AutoRestart |
Boolean |
1 |
Vrai pour forcer la reconnexion et le démarrage de la publication après une perte de connexion. |
|
ValueStyle |
Integer |
1 |
Format des valeurs des variables: 0: (ISA-95) Tous les changement de variable sont envoyés dans le même topic soit: BaseName/GroupName/ToVKAM . Le format utilisé sera: { "Type":1, "Items":[{ "LB": "A34001/23/Température actuelle", "V": 12.4, "U":"°C","T":"Double"},{...}], "TS": "2019-04-06T13:46:15.145"}
1: (Legacy) {"V":12.4,"U":"°C","T":"Double","TS":"2019-04-06T13:46:15.145"} V=Value, U=Units, T=Type, TS=TimeStamp |
|
DecimalCount |
Integer |
2 |
Nombre de décimales affichées dans les valeurs réelles |
|
UserName |
String |
vide |
Nom de l'utilisateur lorsqu'un login est demandé par le broker |
|
Password |
String |
vide |
Mot de passe lorsqu'un login est demandé par le broker |
|
Language |
Integer |
0 |
Langue utilisée pour les textes des alarmes et messages |
|
PublishAlarm |
Boolean |
0 |
Vrai pour forcer la publication des alarmes et des messages |
|
UsePosNumber |
Boolean |
0 |
Vrai pour utiliser la valeur "display" de la position à la place de son index dans le nom des variables publiées. |
|
PublishIOs |
Boolean |
0 |
Publie les IO dans l'items 'IOs' si le style ISA-95 est utilisé |
|
ItemValueOnly |
Boolean |
0 |
Lorsque les I/O sont publiées avec le style ISA-95, si ce mot clef est activé alors les données des I/O seront publiées en valeurs numériques (sans TS, T et U) |
|
PublishDailyData |
Boolean |
0 |
Vrai pour publier les données de fonctionnement journalier |
|
WillTopic |
String |
vide |
Nom du topic du will (utilisé seulement lorsque ValueStyle=1) |
|
Will |
String |
vide |
Contenu du will (utilisé seulement lorsque ValueStyle=1) |
|
QoS |
Integer |
0 |
Qualité se service (0:At most once, 1: At least once, 2: Exactly once) |
|
|
|
|
|
La définition des variables dans QuickView
Les variables sont définies dans les IO de QuickView. Le flag 'Q' doit être ajouté à toutes les variables devant être publiées vers MQTT. Ceci se fait soit manuellement dans le fichier IO.ini soit en utilisant le navigateur d'équipement de VKClient10.
Exemple de définition dans [IO.INI]:
; Températures
; ============
300=1,Actual Temperature A,W,RQ,15,0,$FFFF,10,100
301=1,Actual Temperature B,W,RQ,15,1,$FFFF,10,100
302=3,Actual Temperature,W,RQ,15,2,$FFFF,10,100
303=4,Actual Temperature,W,RQ,15,3,$FFFF,10,100
304=5,Actual Temperature,W,RQ,15,4,$FFFF,10,100
La publication des variables
Le système publiera les I/O qui sont définies comme pouvant être publiées dans la définition ci-dessus. Il publiera également les valeurs globales de la machine comme par exemple la définition machine ou les redresseurs à condition que le mot clef "PublishMachine" soit activé.
Les variables sont publiées sous forme d'un enregistrement au format JSON. Exemple:
{"V":12.4,"U":"°C","T":"Double","TS":"2019-04-06T13:46:15.145"}
Les topics de publication dépendent du mot clef "ValueStyle". 2 styles sont définis: 0-ISA-95: Style utilisé avec VKAM ayant une version > 3.0.0.2. et 1-Legacy: Style utilisé avec VKAM ayant une version <= 3.0.0.2
VariableStyle=ISA-95
Ce style utilise des topics prédéfinis dont voici la liste:
| Topics | Description |
| BaseName/GroupName/VKQV/Datas |
Topic dans lequel les changements des variables sont envoyés. Le format du topic sera le suivant:
{ "Type": int, "Items": Array [ { "LB": string, "V": object, "U": string, "T": string, "S": string }, { .... } ], "TS" : string }
Type: Type de message. Toujours 1 pour l'instant LB : Label de la variable V : valeur de la variable U : unité de la variable T: type de la variable S: source de la variable TS: Timestamp
Exemple: { "Type":1, "Items":[{ "LB": "A34001/23/Température actuelle", "V": 12.4, "U":"°C", "T":"Double"},{"LB":"A34001/78/Conductivité", "V":2.44, "U":"mS", "T":"Double"}], "TS": "2019-04-06T13:46:15.145"} |
| BaseName/GroupName/VKQV/Apps | Topic dans lequel les clients se connectent à QuickView |
| BaseName/GroupName/VKQV/Apps/ClientID | Topic dans lequel le client ClientID publie ses commandes. |
| BaseName/GroupName/VKQV/Apps/ClientID/Status | Statut de la connexion avec le client ClientID. |
| BaseName/GroupName/VKQV/Apps/ClientID/Status/Connection |
Topic dans lequel le client ClientID publie le statut de sa connexion. Exemple: {"TS":"2023-12-27T10:54:40.646125Z","T":"String","V":"Connected"} Ce topic est également désigné comme Last Will Topic lors de la connexion du client. |
| BaseName/GroupName/VKQV/Apps/ClientID/Status/Watchdog |
Topic dans lequel ClientID va écrire de temps en temps pour indiquer que la connexion est valide. Exemple: {"Id":"Server_92881d83-d3a0-4edf-8720-e8e700340346","Date":"2023-12-28T12:40:45.6958696+01:00"} |
| BaseName/GroupName/VKQV/Apps/ClientID/Login |
Topic dans lequel ClientID va s'authentifier. Exemple: {"Id":"Server_92881d83-d3a0-4edf-8720-e8e700340346", "UserName":"MyUserName","Password":"MyPassword"} Lorsque VKQV constate qu'un client s'authentifie, il remplace le contenu par les informations de connexion: Exemple: {"jwtoken":"MyToken"} Si le login n'aboutit pas alors la réponse sera: {"Error":"Login fail !"} Si le login aboutit alors il contient un jwt de connexion qui devra être utilisé à chaque commande vers VKQV. Le client lit la réponse, l'enregistre puis efface le contenu du topic. |
| BaseName/GroupName/VKQV/Apps/ClientID/Commands |
Topic dans lequel ClientID envoie des commandes à VKQV. Exemple: {"jwtoken":"MyToken", "Commands": [{"Cmd":"WriteBit", "Addr":"20,4,2", "Value": true}] } Lorsque VKQV accepte la commande, il l'execute si le jwtoken est valide puis efface le contenu. |
| BaseName/GroupName/VKQV/Status/Watchdog |
Topic dans lequel VKQV va écrire à chaque rafraîchissement des variables. VKQV s'abonne à ce topic pour vérifier que le broker soit bien fonctionnel. Si celui-ci fonctionne correctement, il devrait renvoyer ce que VKQV a écrit. La liaison est déclarée comme dégradée si ce topic n'est pas envoyé par le broker après 5 fois le temps de rafraichissement. Dans ce cas, la liaison est interrompue et une nouvelle connexion est tentée.
Exemple du contenu envoyé par VKQV: {"V":269,"T":"Int","TS":"2022-06-03T10:28:01.936"}
|
| BaseName/GroupName/VKQV/Status/Machine |
Statut de la machine. Pour chaque position de la machine, un statut est envoyé dans un json array: "V": { ... ], ]
Les positions sont composées des topics suivants: pos : int -> numéro de position jn : int -> numéro du rack dans la position js : int -> Statut du rack dans la position jp: int -> numéro de programme du rack ena: boolean -> position en/hors service rdy: boolean -> position prête (mode machine) ala: boolean -> position en alarme
Les robots sont composés des topics suivants: hoist:int -> numéro du robot rdy:boolean -> indique si le robot est prêt blockingala:int -> mot de statut des alarmes bloquantes ala:int -> mot de statut des alarmes non bloquantes height:int -> hauteur actuelle du robot destheight:int -> hauteur de destination position:int -> position actuelle destpos:int -> position de destination origin:int -> position d'origine lors d'un mouvement complet destination:int -> position de destination lors d'un mouvement mode:int -> mode de fonctionnement du robot moveHforward:boolean -> le robot se déplace horizontalement en avant moveHbackward:boolean -> le robot se déplace horizontalement en arrière moveVup:boolean -> le robot se déplace verticalement vers le haut moveVdown:boolean -> le robot se déplace verticalement vers le bas.
|
| BaseName/GroupName/VKQV/Status/Alarms |
Statut des alarmes: { Les alarmes contiennent les topics suivants:
evt:int -> événement ALA/ACK/RTN num:int -> numéro de l'alarme. time:Time -> heure/minute/seconde de l'alarme type:string -> type de l'alarme mess:string -> message de l'alarme group:string -> groupe de l'alarme tnum:int -> numéro du type de l'alarme gnum:int -> numéro du groupe de l'alarme mnum:int -> numéro du message de l'alarme val:num -> valeur associée à l'alarme.
|
| BaseName/GroupName/VKQV/Status/Messages | Même chose que ci-dessus pour les messages |
| BaseName/GroupName/VKQV/Status/DailyData |
Données de production et d'efficacité: { "V": { ... }, |
| BaseName/GroupName/VKQV/Status/Rectifiers |
Statut des redresseurs:
{ ... } ] |
| BaseName/GroupName/VKQV/Status/PositionsStat |
Statut d'utilisation des positions de la machine et des barres:
{ ... } ] "jigs":[ { "jig": 1, "loaded": 45, "total": 234 }, { ... } ] }, |
| BaseName/GroupName/VKQV/Status/Connection |
Statut de la connexion VKQV. Lorsque VKQV démarre, il écrit le statut de la connexion soit: {"V":"Connected","T":"String","TS":"2022-06-02T09:20:00.642"}. Avant de se déconnecter, il écrit: {"V":"Disconnected","T":"String","TS":"2022-06-02T10:24:35.123"}. Ce topic est également désigné comme Last Will Topic lors de la connexion. |
| BaseName/GroupName/VKQV/Status/Databanks/{#} |
Liste des databanks de l'application. Le contenu de chaque databank est contenu dans le topic ayant comme nom le numéro du databank. Exemple: {"DB":1,"Device":1,"Channel":1,"Regi":0,"Regf":13,"Registers":[{"R":0,"T":"Int","V":0},{"R":1,"T":"Int","V":0},{"R":2,"T":"Int","V":0},{"R":3,"T":"Int","V":0},{"R":4,"T":"Int","V":0},{"R":5,"T":"Int","V":0},{"R":6,"T":"Int","V":0},{"R":7,"T":"Int","V":0},{"R":8,"T":"Int","V":0},{"R":9,"T":"Int","V":0},{"R":10,"T":"Int","V":0},{"R":11,"T":"Int","V":0},{"R":12,"T":"Int","V":0},{"R":13,"T":"Int","V":0}],"TS":"2023-12-28T11:22:22.923"} |
| BaseName/Messaging/ |
Service d'envoi de message |
| BaseName/Messaging/Status/Connection/ |
Statut de la connexion de VKSMSMessaging. Lorsque ce programme démarre, il écrit le statut de la connexion soit: {"V":"Connected","T":"String","TS":"2022-06-02T09:20:00.642"}. Avant de se déconnecter, il écrit: {"V":"Disconnected","T":"String","TS":"2022-06-02T10:24:35.123"}. Ce topic est également désigné comme Last Will Topic lors de la connexion. |
| BaseName/Messaging/Status/Watchdog/ |
Topic dans lequel VKSMSMessaging va écrire à chaque rafraîchissement des variables. VKSMSMessaging s'abonne à ce topic pour vérifier que le broker soit bien fonctionnel. Si celui-ci fonctionne correctement, il devrait renvoyer ce que VKSMSMessaging a écrit. La liaison est déclarée comme dégradée si ce topic n'est pas envoyé par le broker après 5 fois le temps de rafraichissement. Dans ce cas, la liaison est interrompue et une nouvelle connexion est tentée.
Exemple du contenu envoyé par VKSMSMessaging: |
| BaseName/Messaging/SMS/{messages} |
Topic contenant les messages à envoyer par SMS. Ce topic contiendra des sous-topic nommer par un GUID. Chaque sous-topic correspondra à un message à envoyer. L'application qui s'occupera de l'envoi des SMS devra s'abonner au topic .../SMS/#. Chaque fois que l'application recevra un topic, il l'analysera, enverra le SMS correspondant puis effacera le topic. Le contenu du topic sera composé d'un json. Exemple: {"Recipient":"+41219683128", "Sender":"VKVision", "Message" : "Température max. chaudière", "TS":"2023-12-28T11:22:22.923"} Si le temps entre le TS et l'heure de réception du topic est plus grand qu'un temps pré-défini, le message est effacé sans être envoyé. |
| BaseName/GroupName/VKQV/Datas/ |
Changement des I/O de la machine: {"Type":1,"Items":[{"LB":"A44003/3/Température actuelle","V":38.1,"T":"Double","U":"°C"}],"TS":"2024-04-26T07:32:31.852"}
Toutes les I/O qui ont changées d'état depuis la dernière analyse sont transmit dans cet array.
|
| BaseName/GroupName/VKQV/Datas/{#position} |
Liste des I/O par position. Le nom des I/O est modifié pour ne pas interférer dans les noms de topics: les espaces, /, \,# sont remplacés par _ Par exemple, l'I/O "Compteur d'Amin" de la cuve 33: Topic: 33 Topic: Compteur_Amin {"V":135.44,"TS":"2024-04-16T08:48:16.256","T":"Double","U":"Amin"}
|
| BaseName/GroupName/VKQV/Configuration/Machine |
Définition de la machine: { .. } ], |
| BaseName/GroupName/VKQV/Configuration/Graphics/{#NomduSynoptique} |
Pages graphiques de l'application publiées sous forme de winjson |
| BaseName/GroupName/VKQV/Status/TimeTable |
Positions avec une charge:
{
"V": {
"timetable": [
{
"rack": 5,
"num": 2,
"posnumber": 112,
"name": "112 - Stockage",
"status": 3,
"reference": "APEP30100",
"progname": "G-APEP30100",
"prognum": 255,
"tmin": 0,
"tmax": 1800000,
"in": "2026-07-20T08:17:50.000"
},
{
"rack": 4,
"num": 4,
"posnumber": 114,
"name": "114 - Stockage",
"status": 3,
"reference": "APCC30100",
"progname": "G-APCC30100",
"prognum": 255,
"tmin": 0,
"tmax": 1800000,
"in": "2026-07-20T08:15:32.000"
},
{
"rack": 7,
"num": 14,
"posnumber": 207,
"name": "207 - Dégrais. 2.1",
"status": 1,
"reference": "BCBD30035",
"progname": "G-BCBD30035",
"prognum": 255,
"tmin": 900,
"tmax": 930,
"in": "2026-07-20T09:34:33.000"
|
Pub/Sub
Il est possible de définir des variables en publication ou en souscription indépendamment du système d'I/O de QuickView. Ces variables sont définies dans 2 sections de IO.ini: [MQTTSub] et [MQTTPub].
MQTTSub
Dans cette section il est possible de définir jusqu'à 100 souscriptions à des topics MQTT.
;*************************************************************************
;Souscription à des variables MQTT
;1..100=nom de la variable,Type (IO/DB),N°I/O, Var type,N°DB, N°Reg, N°Bit
;*************************************************************************
[MQTTSub]
1=Rolex/Bienne/Galvano_BB/A34003/VKQV/Pub/STEP/Conductivité_eau_recyclée_20uS,DB,0,F,36,90
2=Rolex/Bienne/Galvano_BB/A34003/VKQV/Pub/STEP/Température_eau_recyclée_20uS,DB,0,F,36,91
3=Rolex/Bienne/Galvano_BB/A34003/VKQV/Pub/STEP/pH_eau_recyclée_20uS,DB,0,F,36,92
4=Rolex/Bienne/Galvano_BB/A34003/VKQV/Pub/STEP/Turbidité_eau_recyclée_20uS,DB,0,F,36,93
5=Rolex/Bienne/Galvano_BB/A34003/VKQV/Pub/STEP/Conductivité_eau_recyclée_5uS,DB,0,F,36,94
6=Rolex/Bienne/Galvano_BB/A34003/VKQV/Pub/STEP/Température_eau_recyclée_5uS,DB,0,F,36,95
7=Rolex/Bienne/Galvano_BB/A34003/VKQV/Pub/STEP/pH_eau_recyclée_5uS,DB,0,F,36,96
8=Rolex/Bienne/Galvano_BB/A34003/VKQV/Pub/STEP/Turbidité_eau_recyclée_5uS,DB,0,F,36,97
9=Rolex/Bienne/Galvano_BB/A34003/VKQV/Pub/STEP/Conductivité_eau_DI,DB,0,F,36,98
10=Rolex/Bienne/Galvano_BB/A34003/VKQV/Pub/STEP/Température_eau_DI,DB,0,F,36,99
Il est possible de souscrire à des topics MQTT et de les stocker dans des registres de databank. Il est possible de souscrire jusqu'à 100 topics. La définition se fait de la manière suivante:
Section [MQTTSub]
n=Nom du topic, type de donnée, n° de l'I/O, type de variable, n° du DB, n° du registre, n° du bit
n : numéro de souscription(1..100)
Nom du topic: nom du topic dans MQTT
type de donnée: IO => correspond à un numéro d'I/O DB => correspond à un DB,Reg,Bit
n° d'I/O: si le type de donnée = IO alors indique le numéro d'I/O à utiliser pour stocker les données sinon pas utilisé
type de variable: 'F' => float, 'B' => boolean, 'W' => integer
n° du DB: numéro du databank si le type de donnée = DB sinon pas utilisé
n° du registre: numéro du registre du databank si type de donnée = DB sinon pas utilisé
n° du bit: numéro du bit du registre du databank si type de donnée = DB sinon pas utilisé
MQTTPub
Dans cette section il est possible de définir jusqu'à 100 publications dans des topics MQTT.
;*******************************************************************************************************************************
;Publication de variables vers MQTT
;1..100=nom du topic,Min time between refresh (sec),Force Refresh after (sec),Type (IO/DB),N° d'I/O,Var type, N°DB, N°Reg, N°Bit
;*******************************************************************************************************************************
[MQTTPub]
1=Rolex/Bienne/Galvano_BB/A34003/VKQV/Pub/STEP/Conductivité_eau_recyclée_20uS,5,600,DB,0,F,36,121
2=Rolex/Bienne/Galvano_BB/A34003/VKQV/Pub/STEP/Température_eau_recyclée_20uS,5,600,DB,0,F,36,122
3=Rolex/Bienne/Galvano_BB/A34003/VKQV/Pub/STEP/pH_eau_recyclée_20uS,5,600,DB,0,F,36,123
4=Rolex/Bienne/Galvano_BB/A34003/VKQV/Pub/STEP/Turbidité_eau_recyclée_20uS,5,600,DB,0,F,36,124
5=Rolex/Bienne/Galvano_BB/A34003/VKQV/Pub/STEP/Conductivité_eau_recyclée_5uS,5,600,DB,0,F,36,125
6=Rolex/Bienne/Galvano_BB/A34003/VKQV/Pub/STEP/Température_eau_recyclée_5uS,5,600,DB,0,F,36,126
7=Rolex/Bienne/Galvano_BB/A34003/VKQV/Pub/STEP/pH_eau_recyclée_5uS,5,600,DB,0,F,36,127
8=Rolex/Bienne/Galvano_BB/A34003/VKQV/Pub/STEP/Turbidité_eau_recyclée_5uS,5,600,DB,0,F,36,128
9=Rolex/Bienne/Galvano_BB/A34003/VKQV/Pub/STEP/Conductivité_eau_DI,5,600,DB,0,F,36,129
10=Rolex/Bienne/Galvano_BB/A34003/VKQV/Pub/STEP/Température_eau_DI,5,600,DB,0,F,36,130
Il est possible de publier le contenu de DB ou d'I/O dans des topics MQTT. Il est possible de définir jusqu'à 100 publications. La définition se fait de la manière suivante:
Section [MQTTPub]
n=Nom du topic, Min time between refresh, Force refresh after, n° de l'I/O, type de donnée, type de variable, n° du DB, n° du registre, n° du bit
n : numéro de publication (1..100)
Nom du topic: nom du topic dans MQTT
Min time between refresh: correspond au temps minimum entre chaque publication si la variable à changée. Le temps est exprimé en secondes.
Force refresh after: correspond au temps minimum entre chaque publication quelque soit le valeur de la variable. Le temps est exprimé en secondes.
type de donnée: IO => correspond à un numéro d'I/O DB => correspond à un DB,Reg,Bit
n° d'I/O: si le type de donnée = IO alors indique le numéro d'I/O à utiliser pour stocker les données sinon pas utilisé
type de variable: 'F' => float, 'B' => boolean, 'W' => integer
n° du DB: numéro du databank si le type de donnée = DB sinon pas utilisé
n° du registre: numéro du registre du databank si type de donnée = DB sinon pas utilisé
n° du bit: numéro du bit du registre du databank si type de donnée = DB sinon pas utilisé
Définition dans le client
Il est possible de définir une connexion MQTT dans le programme client. Cette connexion peut être utilisée pour échanger avec un ERP ou pour l'utilisation d'un lecteur de codes à barres partagé sur plusieurs PC ou pour faire un login/logout sur plusieurs PC en même temps.
La définition se fait dans le fichier VKWinQV.ini dans la section [MQTT]. Par exemple:
[MQTT]
Enabled=1
Host=wss://google.com
Port=xxxx
GroupName=A11191
WatchdogTopic=WatchDog
BaseName=VK_Vision_SA/Villeneuve/Galvano_BA
BarCodeReaderTopic=VK_Vision_SA/Villeneuve/Galvano_BA/A11191/BarcodeReader_PDC1
LoginTopic=
SSLEnable=1
ValueStyle=0
UserName=
Password=
RefreshRate=10
ClientName=PC_Poste_de_charge_1
La section [MQTT]
Les mots clef suivants peuvent être définis:
|
Mot clef |
Type |
Valeur par défaut |
Description |
|
Enabled |
Boolean |
0 |
Doit être activé pour que la connexion soit créée. |
|
Host |
String |
vide |
Adresse du broker MQTT |
|
Port |
Integer |
1883 |
Numéro du port TCP |
|
SSLEnable |
Boolean |
0 |
Vrai si la connexion utilise Open SSL (TLSv1.1) pour une connexion sécurisée. Pour pouvoir travailler en mode SSL sécurisé, il faut placer les dll d'OpenSSL dans le même répertoire que QuickView (version 32bits, version testée: 1.0.2.18) |
|
ClientID |
String |
GUID |
Nom du client MQTT |
|
KeepAlive |
Integer |
60 |
Temps en secondes pour garder la connexion en vie lorsqu'il n'y a pas de communication |
|
RefreshRate |
Integer |
30 |
Temps en secondes pour l'exécution d'un rafraîchissement des variables. Ce temps, multiplié par 5, est également utilisé pour l'attente du watchdog. Lorsque le topic watchdog est défini, celui-ci doit être reçu par le programme client pour confirmer sa connexion avec MQTT. Passé ce temps, une reconnexion automatique est effectuée. |
|
Retain |
Boolean |
0 |
Vrai si le contenu des variables doit être préservé sur le broker après la déconnexion. Si ce flag est activé, alors des messages seront renvoyés à tous les clients lors de leur connexion au broker. |
|
BaseName |
String |
VKQV |
Nom de base des topics. |
|
GroupName |
String |
MachineName |
Nom de publication du groupe. En général correspond au code de la machine par exemple: A34002 |
|
AutoRestart |
Boolean |
1 |
Vrai pour forcer la reconnexion et le démarrage de la publication après une perte de connexion. |
|
ValueStyle |
Integer |
0 |
Format des valeurs des variables: 0: (ISA-95)
|
|
UserName |
String |
vide |
Nom de l'utilisateur lorsqu'un login est demandé par le broker |
|
Password |
String |
vide |
Mot de passe lorsqu'un login est demandé par le broker |
|
QoS |
Integer |
0 |
Qualité se service (0:At most once, 1: At least once, 2: Exactly once) |
|
ClientName |
String |
vide |
Nom lisible du client utilisé par la connexion à un ERP |
|
LoginTopic |
String |
vide |
Nom du topic utilisé lors d'un partage de login/logout par les clients |
|
BarcodeReaderTopic |
String |
vide |
Nom du topic utilisé lorsqu'un lecteur de codes à barres est partagé entre plusieurs PC |
Login/Logout sur plusieurs PC
Le LoginTopic n'est pas basé sur le BaseName, il est définissable n'importe où dans l'espace MQTT.
Si un LoginTopic est défini, il est utilisé lorsqu'un utilisateur effectue un login ou un logout. Lorsqu'il effectue un login, le topic est rempli avec le json suivant:
{
"Command": "Login",
"User": "Crypted user name",
"Pwd": "Crypted password"
}
Lorsqu'il effectue un logout, le topic est rempli avec le json suivant:
{
"Command": "Logout",
"User": "Crypted user name"
}
Le client s'abonne au LoginTopic. Lorsque ce dernier change, le programme exécute le login ou le logout selon les données reçues. Bien s¹r, le nom d'utilisateur et le mot de passe doivent être définis et correspondre.
Lecteur de barres codes partagé
Le BarcodeReaderTopic n'est pas basé sur le BaseName, il est définissable n'importe où dans l'espace MQTT.
Ce topic possède 2 sous-topics : In et Out. Le topic "In" correspond à la valeur lue par le lecteur de codes à barres. Le topic "Out" permet l'envoi de données à afficher sur le lecteur. Il peut également correspondre à une commande permettant de faire beeper le lecteur.
Lorsque la section [Barcode]ReaderType=MQTT, le programme s'abonne au topic BarcodeReaderTopic et lorsque son contenu change, il prend la valeur contenu dans le sous-topic "In" pour l'utiliser sur le poste de charge.
Echanges entre QuickView et un ERP
Les échanges entre QuickView et un ERP peuvent être réalisés en passant par MQTT. QuickView fait la demande en publiant une demande sur MQTT. Un agent spécialisé s'occupe de l'échange avec l'ERP et retourne la réponse en publiant cette réponse à MQTT. QuickView récupère la réponse et effectue la commande correspondante.
Pour fonctionner avec MQTT, la section [Exchange] doit être défini doit être définie avec les valeurs suivantes:
[Exchange]
Enabled=1
Mode=8
Timeout=10
Lorsque le mode d'échange est = 8, le client s'abonne au topic suivant: BaseName/GroupName/ERP/Clients/ClientName/Request/#.
L'agent (VKQV_NCOM ou VKQV_SAPDB ou autre) souscrit au topic BaseName/GroupName/ERP/Clients/# et répondra aux requêtes des différents clients dans /Request/Result ou /Request/Error ou /Request/File.
Lorsque l'agent démarre, il publie son statut dans le topic BaseName/GroupName/ERP/Status/Connection pour que les clients connectés sachent que l'agent est actif. Il publie également le type d'agent dans BaseName/GroupName/ERP/Status/AgentType pour que les clients puissent modifier l'interprétation des données car tous les ERP ne fonctionnent pas de la même manière.
NCOM
NCOM est un échange entre Flexnet et QuickView. Le nom de l'agent est VKQV-NCOM. Les échanges ci-dessous sont pris en compte:
SAPDM
L'échange entre SAPDM et QuickView est réalisé à l'aide de l'agent VKQV-SAPDM. Les échanges ci-dessous sont pris en compte:
Mosquitto
Eclipse Mosquitto est un courtier de messages open source (sous licence EPL/EDL) qui implémente les versions 5.0, 3.1.1 et 3.1 du protocole MQTT. Mosquitto est léger et convient à une utilisation sur tous les appareils, des ordinateurs monocarte à faible consommation aux serveurs complets.
Le protocole MQTT fournit une méthode légère pour effectuer la messagerie à l'aide d'un modèle de publication/abonnement. Cela le rend adapté à la messagerie de l'Internet des objets, par exemple avec des capteurs de faible puissance ou des appareils mobiles tels que des téléphones, des ordinateurs embarqués ou des microcontrôleurs.
Télécharger le programme ici : https://mosquitto.org/download/ puis l'installer selon les instructions.
Il faut modifier le fichier de configuration de Mosquitto (mosquitto.conf) en y ajoutant les "listener" disponibles:
#Si pas de mot de passe nécessaire
allow_anonymous true
#Web socket ws://
listener 9000
protocol websockets
socket_domain ipv4
#Web socket sécurisé wss://
listener 9001
protocol websockets
cafile C:\Metier\mosquitto\certs\ca_certificat.crt
certfile C:\Metier\mosquitto\certs\certificat.crt
keyfile C:\Metier\mosquitto\certs\certificat.key
#accès standard mqtt://
listener 1883
protocol mqtt
require_certificate false
#accès sécurisé mqtts://
listener 8883
protocol mqtt
cafile C:\Metier\mosquitto\certs\ca_certificat.crt
certfile C:\Metier\mosquitto\certs\certificat.crt
keyfile C:\Metier\mosquitto\certs\certificat.key
Pour permettre l'utilisation depuis une application web, un listener Web socket doit être activé (ws:// ou wss://)
Configuration de l'ACL (Access Control List) dans Mosquitto
Par défaut Mosquitto autorise la connexion sans login / mot de passe. J'ai parlé de ce point dans l'article sur son installation
Une fois connecté chaque utilisateur (ou client) peut écrire ou écouter n'importe quel topic sans aucune restriction. C'est ici que l'ACL intervient !
Dans le fichier de configuration de votre Mosquitto, il est nécessaire de configurer l'emplacement de votre acl_file.
acl_file /etc/mosquitto/acl
"Lexique"
- # û Wildcard, il donne accès à tout le topic de façon récursive.
- + û Wildcard, il donne accès à tout le topic sur le même niveau.
- $SYS û est réservé au broker, il communique ses statistiques,... Vous pouvez laisser l'accès en lecture ou non aux clients via un pattern par exemple.
- user û Permet de définir l'utilisateur concerné.
- topic û Permet de définir le topic concerné.
- pattern û Permet de définir un topic à tous utilisateurs ou clients.
- read û Permet de lire le topic.
- write û Permet d'écrire sur le topic.
- readwrite û Permet de lire et d'écrire sur le topic.
- %c û ID du client.
- %u û Nom de l'utilisateur.
Il est possible de connecter plusieurs clients avec un ID différent avec le même utilisateur. Dans un premier temps limitez-vous à un client = un utilisateur car cela peut vite poser des soucis.
Clients & Users
Dans l'exemple suivant l'utilisateur cuisine à le droit d'écrire et de lire dans tout le topic maison/cuisine et à aussi le droit de lire tout le topic maison.
l'utilisateur toto lui à uniquement le droit de lire maison/cuisine/temperature.
user cuisine
topic readwrite maison/cuisine/#
topic read maison/#
user toto
topic read maison/cuisine/temperature
Patterns
Dans l'exemple suivant tous les utilisateurs peuvent lire les informations du broker $SYS. Chaque client et utilisateur ont le droit d'écrire et de lire dans " leur espace ?. Donc l'utilisateur toto à son topic maison/user/toto de façon récursive, pareil pour l'utilisateur cuisine.
pattern read $SYS/#
pattern readwrite maison/id/%c/#
pattern readwrite maison/user/%u/#
Ressource : https://mosquitto.org/man/mosquitto-conf-5.html
Sources: https://iooner.io/configuration-acl-mosquitto/
SparkPlugB
Sparkplug B est une spécification qui standardise la façon dont les données sont structurées et échangées sur MQTT dans un contexte industriel (IIoT/SCADA), pour éviter que chaque fournisseur ait son propre format.
Points clés :
Topic namespace : les messages suivent une arborescence fixe spBv1.0/group_id/message_type/edge_node_id/device_id, où message_type indique le type de message (NBIRTH, NDEATH, DBIRTH, DDEATH, NDATA, DDATA, etc.).
Payload en Protobuf : contrairement au MQTT classique souvent en JSON, Sparkplug B encode les données en Protocol Buffers, ce qui réduit la taille des messages et impose un schéma strict (métriques avec nom, type, valeur, timestamp, alias).
Gestion d'état (birth/death) : à la connexion, un nœud publie un message NBIRTH (Node Birth) listant toutes ses métriques avec leurs valeurs initiales. Le broker MQTT garde en réserve un message NDEATH (via le mécanisme Last Will and Testament) qui est publié automatiquement si le nœud se déconnecte anormalement. Cela permet aux abonnés de connaître l'état de santé (« online »/« stale ») du réseau à tout instant.
Rapport par exception (RBE) : après le message de naissance complet, seules les valeurs qui changent sont republiées (NDATA/DDATA), ce qui limite la bande passante.
Séquencing : chaque message porte un numéro de séquence (0-255) qui permet de détecter des messages perdus et de déclencher une resynchronisation.
En résumé, Sparkplug B ajoute par-dessus MQTT une convention de topics, un format de payload binaire, et un cycle de vie (birth/death/data) qui garantit un état cohérent et interopérable entre tous les appareils du réseau.
Le flux de données avec un serveur d'entreprise
Ce chapitre décrit les flux de données entre le serveur d'entreprise FlexNet et VK QuickView lors de la recherche d'articles. Il décrit également les flux de données utilisées pour les rapports de suivi.
Echanges avec des équipements
Ce chapitre décrit les échanges effectués entre le PC et les divers équipement
L'interface avec le contrôleur de transporteur CB99A
Dans une installation de traitement de surface, le système VK envoie les commandes de déplacement à l'automate programmable. Ce dernier est responsable de contrôler le déplacement et de positionnement des transporteurs. Le système VK gère l'anticollision avant l'envoi d'une nouvelle commande. Par exemple, si le système doit envoyer le transporteur 1 à la position 10 et que le transporteur 2 se trouve sur la position 9, il ordonnera d'abord au transporteur 2 de se déplacer à une position suffisamment éloignée pour ne pas entrer en collision avec le transporteur 1. La commande de déplacement du transporteur 1 sera envoyée une fois que le transporteur 2 est en dehors de la zone de collision.
Pour gagner du temps lors des déplacements, un mode " unsafe " peut être activé sur le système VK lui permettant d'envoyer les commandes de déplacement en parallèle. Dans notre exemple, le système envoi la commande de déplacement au robot 2 et dès que le système voit que le robot 2 est effectivement en train de se déplacer vers la position de destination, il envoi la commande au robot 1. Ce mode impose les fonctions suivantes :
1) Les transporteurs doivent tous avoir la même vitesse de déplacement.
2) Un système d'anticollision doit être implémenté dans l'automate programmable.
Ce mode est activé dans l'onglet [Hoist] de la page des paramètres du serveur:
Les registres d'échange
Les registres de commande et de statut sont définis comme suit:
|
Registre |
Type |
Direction |
Description |
|
0 |
Word |
PLC->VK |
Statut du transporteur: bit 0..6: position actuelle Bit 7: le transporteur est en bas Bit 8: le transporteur est en haut Bit 9: le transporteur se déplace horizontalement Bit 10: le transporteur monte Bit 11: le transporteur descend Bit 12: bac d'égouttage fermé Bit 13: le transporteur est à la hauteur Up1/2 Bit 14: le transporteur est prêt Bit 15: toggle nouvelle commande. |
|
1 |
Word |
PLC->VK |
Alarmes du transporteur |
|
2 |
Word |
PLC->VK |
Bit 0: Fermeture du bac d'égouttage |
|
3 |
Word |
PLC->VK |
Mode du transporteur: Bit 0..3: Mode du transporteur ( 0: OFF, 1: Manu, 2: Semi, 4: Auto, 8: Init) Bit 4: Le transporteur est à la hauteur HLiftout (nouveau) |
|
4 |
Word |
VK-PLC |
Consigne de vitesse de rotation |
|
5 |
Word |
VK->PLC |
Commande à exécuter: Bit 0..3: Commande à exécuter
Bit 15: trigger nouvelle commande (inversé à chaque commande) |
L'interface avec le contrôleur de transporteur CB07FPL
Les registres d'échange
Les registres de commande et de statut sont définis comme suit:
|
Registre |
Type |
Direction |
Description |
|
0 |
DWORD |
VK->PLC |
Hoist command: Bit 0 : Hoist command Bit 1 : Hoist command Bit 2 : Hoist command Bit 3 : Hoist command Bit 4 : ON if next movement is a lift command (UP or DOWN movement). Bit 5 : ON when horizontal movement is without rack holder (jig). Bit 6 : (reserve) Bit 7 : Movement data Bit 8 : Movement data Bit 9 : Movement data Bit 10 : Movement data Bit 11 : Movement data Bit 12 : Movement data Bit 13 : Movement data Bit 14 : Movement data Bit 15 : Trigger new command Bit 16 : Reset buffer Bit 17 : Program is in AUTO mode Bit 18.. Bit 20..Bit 27 : Temps d'égouttage en secondes (spécial) Bit 31 : (reserve) |
|
1 |
DWORD |
VK->PLC |
Hoist equipement command : Bit 0 : Barrel rotation type Bit 1 : Barrel rotation type Bit 2 : Barrel rotation type Bit 3 : Barrel rotation type Bit 4 : ON if drip tray must be in closed position Bit 5.. Bit 31 : (reserve) |
|
2 |
DWORD |
PLC->VK |
Hoist Status : Bit 0 : Hoist mode Bit 1 : Hoist mode Bit 2 : Hoist mode 0=OFF 1=Manual 2=Semi-auto 4=Automatic Bit 3 : ON when hoist is ready to accept new command Bit 4 : ON when a blocking alarm is pending (register 3 is not empty) Bit 5 : ON when drip tray is in closed position Bit 6 : ON when hoist is moving horizontaly Bit 7..14 : Logical horizontal position of the hoist (0..255) Bit 15 : Trigger command terminated Bit 16 : ON when lift 1 is in low vertical position Bit 17 : ON when lift 1 is in upper vertical position Bit 18 : ON when lift 1 is lowering Bit 19 : ON when lift 1 is lifting Bit 20 : ON when lift 1 is in intermediate vertical position Bit 21 : ON when clip on lift 1 is closed (clipped) Bit 22 : ON when hoist is agitating Bit 23 : ON when lift 1 is in HLiftout vertical position Bit 24 : ON when lift 2 is in low vertical position Bit 25 : ON when lift 2 is in upper vertical position Bit 26 : ON when lift 2 is lowering Bit 27 : ON when lift 2 is lifting Bit 28 : ON when lift 2 is in intermediate vertical position Bit 29 : (reserve) Bit 30 : (reserve) Bit 31 : (reserve) |
|
3 |
DWORD |
PLC->VK |
Alarm bits. Program should go to STOP mode: Bit 0..31 : Alarm indication |
|
4 |
DWORD |
PLC->VK |
Warning bits. Program continue in AUTO mode: Bit 0..31 : Warning indication |
Commands to hoist
Check <Ready state>
-
Hoist mode is in Auto ( Reg2 Bit 0-2 == 4)
-
Hoist is ready to accept new command ( Reg2 Bit 3 == ON)
-
Hoist has no blocking alarm activated (Reg2 Bit 4 == OFF)
-
Command trigger = status trigger (Reg0 Bit 15 == Reg2 Bit 15)
Sending a new command
VKQV writes a new command in the register #0. In this new command, the Bit15 will be inverted from its last value, telling to the PLC that a new command has been written.
When the PLC see that Reg0 Bit15 is different than Reg2 Bit15, it knows that a new command is pending. The Reg2 Bit4 should go Off telling to VKQV that the command is being executed. When the command is terminated (hoist is in destination), Reg2 Bit4 should go ON again and Reg2 Bit15 must be set with the content of Reg0 Bit15.
Move horizontal command
A move horizontal command is specified by writting the value 1 in the Reg0 HoistCommand bits. The Reg0 Bit4 is set to ON if the next movement is a vertical lift. This is used by the PLC to activate some equipement command ( open tank cover, or turn on spray, or etc.). The Reg0 Bit5 is set to ON when the horizontal movement is done without rack holder (jig) on the hoist. This is also an information used by the PLC to not activate some equipement command because the hoist is empty. The destination logical position is written in Reg0 Bit7-14. This is corresponding to the horizontal destination of the hoist. The Reg0 Bit15 is inverted from its previous state. And the Reg0 Bit 17 is set to ON telling to the PLC that VKQV program mode is in AUTO (set to OFF if the program mode is in STOP. This is corresponding in a command done by the remote control of the hoist).
Example of horizontal command:
Hoist is located in logical position #16 in lower vertical position:
Move to logical position #3, program mode = STOP, there is no rack holder on the hoist:
Command is accepted by the PLC:
Hoist is moving horizontally and is actually in logical position #9:
Hoist is in the logicial position 3 and is ready to accept a new command:
Move vertical command
A move vertical command is specified by writting 2 in the Reg0 HoistCommand bits. The Reg0 Bit5 is set to ON when the movement is done without rack holder (jig) on the hoist. The type of vertical movement is specified in the Reg0 Bit8-11 (1=go up to top, 2=go down to bottom, 3=go up to intermediate high, 4= go up to top from the intermediate high, 5=go down to bottom from the intermediate high, 6=go down from top to intermediate high, 7=go up to HLiftout, 8=go up from HLiftout to top, 9= go down from top to HLiftout, 10= do down from HLiftout to bottom). The speed to be use is specified in the Reg0 Bit12-14 (0..7).
Example of vertical command:
Hoist is in the logicial position #3 in lower vertical position:
Move to top:
Command is accepted by the PLC:
Hoist is moving vertically. It is in logical position #3 and is clipped:
Hoist is in logical position #3 in upper vertical position and is ready to accept a new command:
Hoist agitation command
Interface avec le contrôleur de transporteur CB24FPL
Ce nouveau type de contrôleur permet le contrôle d'un transporteur permettant l'inclinaison latérale des charges ainsi que l'inclinaison radiale de celles-ci. Ces inclinaisons permettent un meilleur égouttage des charges. L'inclinaison se fait en haut mais peut également se faire en bas pour remplir et évacuer les bulles dans les pièces traitées.
Les registres d'échange
Il y a 6 registres d'échange par transporteur:
| Registre | Type | Direction | Description |
| 0 | DWORD | VK->PLC | Command 1 register (Triggered commands) |
| 1 | DWORD | VK->PLC | Command 2 register (Direct commands) |
| 2 | DWORD | PLC->VK | Status 1 |
| 3 | DWORD | PLC->VK | Status 2 |
| 4 | DWORD | PLC->VK | Alarms register |
| 5 | DWORD | PLC->VK | Warnings register |
Le détail des registres de commande et de statut sont définis comme suit:
|
Registre |
Type |
Direction |
Description |
|
0 |
DWORD |
VK->PLC |
Hoist horizontal command: Bit 0 : True => Horizontal move Bit 1 : False Bit 2 : False Bit 3 : False Bit 4 : ON if next movement is a lift command (UP or DOWN movement). Bit 5 : ON when horizontal movement is without rack holder (jig). Bit 6 : (reserve) Bit 7.. Bit 14 : Destination logical position. Bit 15 : Trigger new command Bit 16 : Reset buffer Bit 17 : Program is in AUTO mode Bit 18.. Bit 31 : (reserve) |
|
0 |
DWord |
VK->PLC |
Hoist vertical command: Bit 0 : False Bit 1 : True => Vertical move Bit 2 : False Bit 3 : False Bit 4 : (reserve) Bit 5 : Movement without jig Bit 6 : (reserve) Bit 7 : (reserve) Bit 8 .. Bit 11 : Movement type: 1=Up, 2=Down, 3=Up 1/2, 4=1/2 to Up, 5=1/2 to Down Bit 12 .. Bit 14 : (reserve) Bit 15 : Trigger new command Bit 16 : Reset buffer Bit 17 : Program is in AUTO mode Bit 18 .. Bit 23 : Drip time Bit 24 .. Bit 29 : Type of movement Bit 30.. Bit 31 : (reserve) |
|
0 |
DWORD |
VK->PLC |
Hoist initialisation command: Bit 0 : True Bit 1 : True => Hoist initialisation Bit 2 : False Bit 3 : False Bit 4 .. Bit 14 : (reserve) Bit 15 : Trigger new command Bit 16 : Reset buffer Bit 17 : Program is in AUTO mode Bit 18.. Bit 31 : (reserve) |
|
0 |
DWORD |
VK->PLC |
License settings command: Bit 0 : False Bit 1 : False Bit 2 : True => Set license Bit 3 : False Bit 4 .. Bit 6 : (reserve) Bit 7 .. Bit 14 : License data Bit 15 : Trigger new command Bit 16 : Reset buffer Bit 17 : Program is in AUTO mode Bit 18.. Bit 31 : (reserve) |
|
1 |
DWORD |
VK->PLC |
Hoist equipement command : Bit 0 : Barrel rotation type Bit 1 : Barrel rotation type Bit 2 : Barrel rotation type Bit 3 : Barrel rotation type Bit 4 : ON if drip tray must be in closed position Bit 5.. Bit 31 : (reserve) |
|
2 |
DWORD |
PLC->VK |
Hoist Status 1 : Bit 0 : Hoist Manu Bit 1 : Hoist Semi Bit 2 : Hoist Auto Bit 3 : ON when hoist is ready to accept new command Bit 4 : ON when a blocking alarm is pending (register 3 is not empty) Bit 5 : ON when drip tray is in closed position Bit 6 : ON when hoist is moving horizontaly Bit 7..14 : Logical horizontal position of the hoist (0..255) Bit 15 : Trigger command terminated Bit 16 : ON when lift 1 is in low vertical position Bit 17 : ON when lift 1 is in upper vertical position Bit 18 : ON when lift 1 is lowering Bit 19 : ON when lift 1 is lifting Bit 20 : ON when lift 1 is in intermediate vertical position Bit 21 : ON when clip on lift 1 is closed (clipped) Bit 22 : ON when hoist is agitating Bit 23 : ON when lift 1 is in HLiftout vertical position Bit 24 : ON when lift 2 is in low vertical position Bit 25 : ON when lift 2 is in upper vertical position Bit 26 : ON when lift 2 is lowering Bit 27 : ON when lift 2 is lifting Bit 28 : ON when lift 2 is in intermediate vertical position Bit 29 : (reserve) Bit 30 : (reserve) Bit 31 : (reserve) |
|
3 |
DWORD |
PLC->VK |
Hoist status 2: Bit 0 : (reserve) Bit 1 : Lateral inclinaison: -15? Bit 2 : Lateral inclinaison: 0? Bit 3 : Lateral inclinaison: +15? Bit 4 : (Reserve) Bit 5 : Radial inclinaison: -20? Bit 6 : Radial inclinaison: -10? Bit 7 : Radial inclinaison: 0? Bit 8 : Radial inclinaison: +10? Bit 9 : Radial inclinaison: +20? Bit 10 .. Bit 17 : (reserve) Bit 18 : Vertical movement in progress Bit 19.. Bit 23 : Actual step of the lift sequencer Bit 24.. Bit 29 : Actual type of lift Bit 30.. Bit 31 : (reserve) |
|
4 |
DWORD |
PLC->VK |
Alarm bits. Program should go to STOP mode: Bit 0..31 : Alarm indication |
|
5 |
DWORD |
PLC->VK |
Warning bits. Program continue in AUTO mode: Bit 0..31 : Warning indication |
Les types de mouvements verticaux
Les mouvements verticaux sont définis dans une table de l'automate. Cette table est composée de 50 types de mouvements. Chaque type est composé de 20 enregistrements. Chaque enregistrement est composé de:
| Type (Int) | Param 1 (Int) | Param 2 (Int) |
| 0=None | ||
| 1=Go to High |
High # (0-5): 0=Top 1=Middle Top 2=Brillantage Pos 3=Réserve 4=Middle Bottom 5=Bottom |
Speed (0-100%) |
| 2=Wait |
Wait time (seconds) |
|
| 3=Wait drip time |
|
|
| 4=Lateral inclinaison |
Inclinaison position (0-2): 0=Center (0?) 1=Neg (-15?) 2=Pos (15?) |
Speed (0-100%) |
| 5=Radial inclinaison |
Inclinaison position (0-4): 0=Center (0?) 1=Neg20 (-20?) 2=Neg10 (-10?) 3=Pos10 (+10?) 4=Pos20 (+20?) |
Speed (0-100%) |
| 6=Go up |
Duration (miliseconds) |
Speed (0-100%) |
| 7=Go down |
Duration (miliseconds) |
Speed (0-100%) |
Structure du DB interne d'échange
Tous les types de transporteur utilisent une zone mémoire commune définie dans DBData et RegData. Cette zone doit comprendre 100 registres et doit être associé à un Databank interne. Les registres de cette zone correspondent à la définition suivante:
Le DB Interne d'échange a la structure suivante:
| Reg | Fonction |
| 0 | |
| 1 | Alarmes bloquantes |
| 2 | Registre d'alarmes |
| 3 | Registre de warning |
| 4 | Numéro de position occupée en cas d'erreur |
| 5 | |
| 6 | Hauteur deuxième lift |
| 7 | Hauteur du transporteur (1=en haut, 2 en bas) |
| 8 | Position du transporteur |
| 9 | |
| 10 | Registre de statut du transporteur |
| 11 | Alarme transporteur |
| 12 | Commande en cours |
| 13 | |
| 14 | Vitesse de rotation |
| 15 | Registre de commande du transporteur |
| 16 | |
| 17 | |
| 18 | Position de destination |
| 19 | Hauteur de destination |
| 20 | Temps d'égouttage |
| 21 | Programme de montée |
| 22 | Programme de descente |
| 23 | Forçage programme de montée |
| 24 | Forçage programme de descente |
| 25 | |
| 26 | |
| 27 | Transporteur prêt (0=pas prêt 1=prêt) |
| 28 | |
| 29 | |
| 30 | Flèches télécommande (bit 0=déplacement horizontal, bit 2=descente, bit 3 =montée, bit 4=origine verticale atteinte, bit 5 = origine horizontale atteinte |
| 31 | |
| 32 | |
| 33 | |
| 34 | Numéro de position physique minimum |
| 35 | Numéro de position physique maximum |
| 36 | |
| 37 | |
| 38 | |
| 39 | |
| 40 | Mode du transporteur (auto, manu, semi, off) |
| 41 | |
| 42 | Pince fermée |
| 43 | Type de rotation en cours |
| 44 | |
| 45 | |
| 46 | |
| 47 | |
| 48 | |
| 49 | |
| 50 | |
| 51 | |
| 52 | |
| 53 | |
| 54 | |
| 55 |
L'interface avec les redresseurs PLCRECTIFIER
Les registres d'échange
Cette page décrit l'échange des données entre le PC et l'automate programmable en ce qui concerne la commande d'un redresseur.
|
Registre |
Type |
Direction |
Description |
|
0 |
WORD |
VK->PLC |
Commande envoyée au redresseur Bit 0 : Mise en marche/arrêt du redresseur (0=arrêt 1=Mise en marche) Bit 1 : Mode de régulation (0=courant constant 1=tension constante) Bit 2 : Remise à zéro du compteur d'Ah. Toggle=changement d'état = remise à zéro Bit 3 : acquittement des alarmes. Toggle=changement d'état = acquittement Bit 4 : Démarrage/Arrêt séquence Bit 8 : Mode amorçage (0=mode polarisation 1=mode amorçage) |
|
1 |
WORD |
PLC->VK |
Statut du redresseur Bit 0 : Etat de marche. 0=arrêté 1=en marche Bit 1 : Alarme disjoncteur. 0=pas d'alarme 1=en alarme. Bit 2 : Alarme régulation. 0=pas d'alarme 1=en alarme. L'alarme régulation doit être activée lorsque le redresseur ne peut pas atteindre la valeur à réguler. Il est remis à zéro lorsque le bit 3 du regsitre de commande change d'état. Bit 3 : Défaut retour de marche Bit 4 : Défaut régulation Bit 5 : Redresseur en alarme Bit 6 : Défaut disjoncteur Bit 7 : Défaut mode amorçage Bit 8 : Statut amorçage (0=polarisation 1=amorçage) |
|
2 |
REAL |
VK->PLC |
Consigne de courant. La consigne de courant correspond à la valeur ( en ampère) à réguler lorsque le mode de régulation = courant constant. Si le mode de régulation = tension constante alors cette consigne correspond à la valeur maximale de courant à délivrer par le redresseur. |
|
3 |
REAL |
VK->PLC |
Consigne de tension. La consigne de tension correspond à la valeur (en volt) à réguler lorsque le mode de régulation = tension constante. Si le mode de régulation = courant constant alors cette consigne correspond é la valeur maximale de tension à délivrer par le redresseur. |
|
4 |
REAL |
PLC->VK |
Courant actuel (en ampères) délivré par le redresseur. |
|
5 |
REAL |
PLC->VK |
Tension actuelle (en volts) délivrée par le redresseur. |
|
6 |
REAL |
PLC->VK |
Compteur ampères/secondes déjà délivré par le redresseur. Ce compteur est mis à zéro lorsque le bit2 du registre de commande change d'état. |
L'interface avec les redresseurs PULSPLCRECTIFIER
Configuration
Le device se configure de la manière suivante:
[Device2]
Protocol=PULSPLCRECTIFIER
Les redresseurs se configurent de la manière suivante:
[Rectifier1]
Device=2
Position=28
Surface=1
AhorAmn=Amn
MaxI=150
MaxU=15
MaxRI=450
MaxRU=45
PulsMode=1
DBIO=50
REGIO=0
CurrentFormDb=51
CurrentFormReg=0
Version=2
BrandName=PE86CB
DualRangeMode=0
| Mot clef | Description |
| Device | Numéro du device |
| Position | Index de la position dans la définition machine |
| Surface | 1=avant A, 2=arrière A, 3=Total avant & arrière A, 4=avant B, 5=Arrière B, 6=Total avant et arrière B, 7=Total de toutes les surfaces. |
| AhorAmn | Ah=Ampères heures, Amn=Ampères minutes |
| PulseMode | 0=mode DC 1=Mode pulsé |
| MaxI | Courant max positif en Ampère |
| MaxU | Tension max positive en Volt |
| MaxRI | Courant max négatif en Ampère |
| MaxRU | Tension max négative en Volt |
| DDBIO | Numéro du DB d'échange |
| REGIO | Numéro du premier registre d'échange |
| CurrentFormDB | Numéro du DB de la table de la forme de courant |
| CurrentFormReg | Numéro du premier registre de la table de la forme de courant |
| Version | Numéro de version du protocole |
| BrandName | Nom du type de redresseur |
| DualRangeMode | 1 = plusieurs redresseurs pour la même position. La consigne permet de choisir le redresseur si celle-ci est <= au MaxI. |
Les registres d'échange
Cette page décrit l'échange des données entre le PC et l'automate programmable en ce qui concerne la commande d'un redresseur.
|
Registre |
Type |
Direction |
Description |
|
0 |
WORD |
VK->PLC |
Commande envoyée au redresseur Bit 0 : Mise en marche/arrêt du redresseur (0=arrêt 1=Mise en marche) Bit 1 : Démarrage redresseur (0=standby 1=Auto) Bit 2 : Remise à zéro du compteur d'Ah. Toggle=changement d'état = remise à zéro Bit 3 : Acquittement des alarmes. Toggle=changement d'état = acquittement Bit 4 : Prise en compte des changements. Lorsqu'un nouveau step est envoyé dans le CurrentFormDB ou que le % de la consigne change, le programme inverse ce bit. Toggle = changement de courbe ou de % de consigne. |
|
1 |
WORD |
PLC->VK |
Statut du redresseur Bit 0 : Etat de marche. 0=arrêté 1=en marche Bit 1 : Etat démarrage 0=standby 1=démarré Bit 2 : Statut des alarmes. 0=OK 1=en alarme Bit 3 : Statut des warnings. 0=OK 1=il existe des warning Bit 4 : Statut des warnings from the past. 0=OK 1=Warning from the past |
|
2 |
WORD |
VK->PLC |
Consigne du redresseur : 0-100% |
|
3 |
REAL |
PLC->VK |
Courant actuel (en ampères) délivré par le redresseur. |
|
4 |
REAL |
PLC->VK |
Tension actuelle (en volts) délivrée par le redresseur. |
|
5 |
REAL |
PLC->VK |
Compteur ampères/secondes déjà délivré par le redresseur. Ce compteur est mis à zéro lorsque le bit2 du registre de commande change d'état. |
|
6 |
DWORD |
PLC->VK |
Messages actuels 1-4 |
|
7 |
DWORD |
PLC->VK |
Message actuel 5 |
|
8 |
DWORD |
PLC->VK |
Messages from the past 1-4 |
|
9 |
DWORD |
PLC->VK |
Message from the past 5 |
Table de la forme de courant (Version=1)
Les formes de courant est composée de max 10 steps sous la forme suivante:
| Registre | Type | Description |
| 0 | INT |
Step 1: Courant Ix1 en Ampères. Plage -3276.8 à 3276.7. Courant multiplié par 1000 si MaxI<=25A et que BandName='PE86CB' ou 'PE526'. Si MaxI>25 et que BandName='PE86CB' ou 'PE526' alors le courant est multiplié par 100 sinon le courant est multiplié par 10. |
| 1 | INT | Step 1: Courant Ix2 en Ampères. Plage -3276.8 à 3276.7. Courant multiplié par 1000 si
MaxI<=25A et que BandName='PE86CB' ou 'PE526'. Si MaxI>25 et que BandName='PE86CB' ou 'PE526' alors le courant est multiplié par 100 sinon le courant est multiplié par 10. |
| 2 | INT | Step 1: Tension Ux1 en Volts. Plage -3276.8 à 3276.7. Tension multipliée par 1000 si
MaxI<=25A et que BandName='PE86CB' ou 'PE526'. Si MaxI>25 et que BandName='PE86CB' ou 'PE526' alors la tension est multipliée par 100 sinon la tension est multipliée par 10. |
| 3 | INT | Step 1: Tension Ux2 en Volts. Plage -3276.8 à 3276.7. Tension multipliée par 1000 si
MaxI<=25A et que BandName='PE86CB' ou 'PE526'. Si MaxI>25 et que BandName='PE86CB' ou 'PE526' alors la tension est multipliée par 100 sinon la tension est multipliée par 10. |
| 4 | WORD | Step 1: Time Tx1 en x20 S. Plage 0s to 1.307 secondes |
| 5 | WORD | Step 1: Time Tx2 en x20 S. Plage 0s to 1.307 secondes |
| 6 | BYTE | Step 1: Slope (option) |
| 7 | BYTE | Step 1: Nombre de cycle |
| 8 | INT | Step 2: Courant Ix1 en Ampères. Plage -3276.8 à 3276.7 |
| 9 | INT | Step 2: Courant Ix2 en Ampères. Plage -3276.8 à 3276.7 |
| 10 | INT | Step 2: Tension Ux1 en Volts. Plage -3276.8 à 3276.7 |
| ... | ||
| 79 | BYTE | Step10: Nombre de cycle |
Table de la forme de courant (Version=2)
Les formes de courant est composée de max 10 steps sous la forme suivante:
| Registre | Type | Description |
| 0 | INT | Step 1: Courant Ix1 en Ampères. Plage -3276.8 à 3276.7 |
| 1 | INT | Step 1: Courant Ix2 en Ampères. Plage -3276.8 à 3276.7 |
| 2 | INT | Step 1: Tension Ux1 en Volts. Plage -3276.8 à 3276.7 |
| 3 | INT | Step 1: Tension Ux2 en Volts. Plage -3276.8 à 3276.7 |
| 4 | WORD | Step 1: Time Tx1 en x20 S. Plage 0s to 1.307 secondes |
| 5 | WORD | Step 1: Time Tx2 en x20 S. Plage 0s to 1.307 secondes |
| 6 | WORD | Step 1: RESERVE |
| 7 | WORD | Step 1: Nombre de cycles |
| 8 | WORD | Step 1: RESERVE |
| 9 | WORD | Step 1: numéro du step 0 à 10. 0=Fin des steps |
| 10 | INT | Step 2: Courant Ix1 en Ampères. Plage -3276.8 à 3276.7 |
| 11 | INT | Step 2: Courant Ix2 en Ampères. Plage -3276.8 à 3276.7 |
| 12 | INT | Step 2: Tension Ux1 en Volts. Plage -3276.8 à 3276.7 |
| ... | ||
| 99 | WORD | Step10: Numéro du step 0 à 10. 0=Fin des steps |
Utilisation d'un liftout sur les machines de type FPL
Description
Les liftouts n'ont pas été intégrés sur les machines de type FPL car dans ces machines, il n'y a pas de déplacement à une hauteur intermédiaire. Le déplacement est soit en haut ou soit en bas. Les autres mouvements horizontaux sont interdit.
Le fonctionnement autour d'un liftout demande donc des modifications dans le contrôleur de bras (automate programmable) et dans QuickView. Ce document décrit les modifications qui seront réalisées dans QuickView pour rendre possible le fonctionnement de positions équipées de liftout. Une description des nouvelles commandes ainsi que des nouveaux statuts sera également documentée.
Le type de liftout utilisé dans ce document est un ascenseur en forme de cage qui permet de sortir complètement des pièces de la cuve sans devoir utiliser le transporteur. Le transporteur, quant à lui, doit pouvoir :
- Déposer une charge dans la position lorsque l'ascenseur est en haut
- Déposer une charge dans la position lorsque l'ascenseur est en bas
- Prendre une charge depuis la position lorsque l'ascenseur est en haut
- Prendre une charge depuis la position lorsque l'ascenseur est en bas
Pour fonctionner correctement, les 2 positions avant et après la position du liftout doivent être définies mais ne doivent pas être utilisées pour déposer une charge. Il faut donc interdire les mouvements verticaux avec une charge sur ces positions. Cette interdiction doit être réalisée dans l'automate. Il faut également que la hauteur de passage sous la balancelle lorsque l'ascenseur est en position haute soit définie dans le statut du transporteur. Il doit y avoir un nouveau détecteur sur le transporteur pour détecter cette position (ou détecteur virtuel si un encodeur est utilisé)
Déposer une charge "Ascenseur en haut"
Il n'est pas possible de venir déposer une charge lorsque l'ascenseur est en haut. Il faut d'abord amener la charge en position, monter l'ascenseur, puis descendre à la hauteur de dépose "haute". Il faut ensuite déplacer le transporteur à gauche ou à droite puis descendre le transporteur jusqu'en bas. l'ascenseur peut alors descendre la charge jusqu'en bas. Pour permettre ces mouvements, de nouvelles commandes doivent être ajoutées dans l'interface:
- Commande de descendre à la hauteur de passage sous la balancelle à la hauteur "Haute" du liftout (Dépose en position haute).
- Commande de descendre tout en bas depuis la hauteur <HLiftout>
La vitesse utilisée lors de ces mouvements sera la vitesse "Semi verticale". Il ne faut pas tenir compte de la vitesse envoyée dans la commande.
Déposer une charge "Ascenseur en bas"
Cette fonction est la même que sur une position sans liftout. Les vitesses utilisées sont celles définies dans la séquence ou dans la position.
Prendre une charge "Ascenseur en haut"
Pour prendre une charge du liftout en position haute, il faut que le transporteur se déplace sur la position précédant le lift, monter le transporteur à la hauteur HLiftout, se déplacer sur la position du liftout, monter jusqu'en haut, descendre l'ascenseur puis se déplacer sur la position de destination et descendre. Pour permettre ces mouvements, de nouvelles commandes doivent être ajoutées dans l'interface:
- Commande de monter à la hauteur de passage sous la balancelle (HLiftout).
- Commande de monter tout en haut depuis la hauteur HLiftout.
La vitesse utilisée lors de ces mouvements sera la vitesse "Semi verticale". Il ne faut pas tenir compte de la vitesse envoyée dans la commande.
Prendre une charge "Ascenseur en bas"
Cette fonction est la même que sur une position sans liftout. Les vitesses utilisées sont celles définies dans la séquence ou dans la position.
Déplacement à vide par dessus la position liftout "Ascenseur pas en bas"
Lorsque l'ascenseur n'est pas en bas, il sera possible de se déplacer avec le transporteur par dessus de la position uniquement si celui-ci est vide. Un transporteur ôchargé" ne peut pas traverser en dessus de la position. Pour traverser, le transporteur doit: se déplacer à la position précédant la position équipée du liftout, monter tout en haut, se déplacer à la position suivant le liftout, descendre jusqu'en bas et continuer ses mouvements.
Les paramètres, statuts et commandes de l'ascenseur
l'ascenseur procède quelques paramètres:
- Vitesse de montée en mm/sec lors d'un déplacement dans le liquide (word)
- Vitesse de montée en mm/sec lors d'un déplacement en dehors du liquide (word)
- Vitesse de descente en mm/sec lors d'un déplacement dans le liquide (word)
- Vitesse de descente en mm/sec lors d'un déplacement en dehors du liquide (word)
- Position en mm lorsque l'ascenseur est en bas (word)
- Position en mm lorsque l'ascenseur est en haut (word)
Un registre automate est utilisé pour chacun des paramètres. Les paramètres de vitesse pourront être défini dans la commande d'équipement.
Les commandes suivantes sont possibles:
- Arrêter = 0
- Monter = 1
- Descendre = 2
Un registre de commande doit être réservé pour transmettre la commande à l'automate (word)
Les statuts suivants doivent être disponibles:
- l'ascenseur est en haut (bit)
- l'ascenseur est en bas (bit)
- l'ascenseur monte (bit)
- l'ascenseur descend (bit)
- Position actuelle de l'ascenseur en mm (word)
Commandes couvercle
Les commandes du couvercle doivent être gérées par l'automate programmable. Lorsqu'une commande de monter de l'ascenseur est détectée, le couvercle doit s'ouvrir. Le VK ne vérifie pas ceci.
Interface avec le contrôleur de transporteur CB07FCL
Les registres d'échange
Les registres de commande et de statut sont définis comme suit:
|
Registre |
Type |
Direction |
Description |
|
0 |
WORD |
VK -> PLC |
Hoist command: Bit 0 : Hoist command Bit 1 : Hoist command Bit 2 : Hoist command Bit 3 : Hoist command
Commandes possibles:
$0: Commande pince et rotation sans mouvement: Bit 4 : On = Ouvrir pince Bit 5 : On = Fermer pince Bit 8..E = No de cycle de rotation, 0=Arrêt
$1: Commande de déplacement du robot. Bit 4 : On = Ouvrir la pince Bit 5: On = Fermer la pince
$2: Stop
$4: Déplacement à l'origine (initialisation)
$8: Changement de mode: Bit 4 = On = Mode Joystick Bit 4 = Off = Mode automatique
Bit 15 : Trigger new command
|
|
1 |
WORD |
VK -> PLC |
Vitesse et accéleration à utiliser pour la commande de déplacement Bit 0..3 : Vitesse horizontale à utiliser (1,,10) Bit 4..5 : Accélération horizontale à utiliser (1..3) Bit 8..B : Vitesse verticale à utiliser (1..10) Bit C..D: Accéleration verticale à utiliser (1..3) |
|
2 |
WORD |
VK -> PLC |
Position horizontale à atteindre (mm) |
|
3 |
WORD |
VK -> PLC |
Position verticale à atteindre (mm) |
|
4 |
WORD |
PLC -> VK |
Statut du robot: Bit 0: Mode actuel du robot 0=joystick 1=auto Bit 1: On=Le robot monte Bit 2: On=Le robot descend Bit 3: On=Le robot se déplace horizontalement Bit 4: On=Origine verticale atteinte Bit 5: On=Origine horizontale atteinte Bit 6: On=Le robot se déplace à l'origine Bit 7: On = La pince est fermée Bit 8: On = la pince est ouverte Bit 9: On = la rotation est activée Bit 13: On = Alarme bloquante. Bit 14: On = robot est prêt pour une nouvelle commande Bit 15: Trigger commande acceptée |
|
5 |
WORD |
PLC -> VK |
Position horizontale du robot |
|
6 |
WORD |
PLC -> VK |
Position vertical du robot |
Interface avec les transferts
Les transferts permettent le transport de charges d'une branche de la machine à une autre branche. Les transferts sont représentés comme suit:
Dans QuickView, il est possible de définir 4 transferts au maximum. Ils sont définis dans le fichier VKServer.ini dans les sections [ShuttleX]
;---------------> SHUTTLE
[SHUTTLE1]
Db=29
RegCommand=0
RegStatus=1
Mode=1
DefaultMachine=0
[SHUTTLE2]
Db=29
RegCommand=3
RegStatus=4
Mode=1
DefaultMachine=1
Les mots clef suivant sont possibles:
| Mot clef | Type | Description |
| DB | Integer | Numéro de databank dans lequel se trouve les registres de statut et de commande |
| DBCom | Integer | Numéro de databank si le DB de statut et différent du DB de commande |
| RegComand | Integer | Numéro de registre dans lequel les commandes sont écrites |
| RegStatus | Integer | Numéro de registre dans lequel les statuts sont écrits par l'automate |
| Mode | Integer |
Mode de fonctionnement une fois la charge déposée dans la destination: 0: Renvoie le transfert à la position d'origine. 1: Renvoie le transfert à la position par défaut. 2: Renvoie le transfert à la machine dont un mouvement robot est prévu. 3: Ne rien faire |
| DefaultMachine | Integer | Numéro de la branche de la machine dans laquelle le transfert est envoyé à la fin d'un mouvement |
Le registre de statut est constitué comme suit:
| Bits | Description |
| 0 | Le transfert se trouve dans la branche 0 de la machine |
| 1 | Le transfert se trouve dans la branche 1 de la machine |
| 2 | Le transfert se trouve dans la branche 2 de la machine |
| 3 | Le transfert se trouve dans la branche 3 de la machine |
| 4 | Le transfert se déplace vers la branche 0 de la machine |
| 5 | Le transfert se déplace vers la branche 1 de la machine |
| 6 | Le transfert se déplace vers la branche 2 de la machine |
| 7 | Le transfert se déplace vers la branche 3 de la machine |
Le registre de commande est constitué comme suit:
| Bits | Description |
| 0 | Demande de déplacement vers la branche 0 de la machine |
| 1 | Demande de déplacement vers la branche 1 de la machine |
| 2 | Demande de déplacement vers la branche 2 de la machine |
| 3 | Demande de déplacement vers la branche 3 de la machine |
Il existe d'autres mots clef utilisés par les transferts:
| Mots clef | Type | Valeur par défaut | Description |
| Parameters.ini[System]CheckMovementOverShuttlePrio | Boolean | 0 | Avant d'envoyer un transfert dans une branche de la machine, le système doit vérifier si un mouvement d'un robot est en cours au dessus d'une position d'un transfert. Si actif, la vérification est effectuée en mode prioritaire. |
| Parameters.ini[System]NoMoveToNearesetShuttlePrio | Boolean | 0 | Lorsqu'un robot a pris une charge dans une position ayant pour destination un transfert, il se déplace à la position la plus proche du transfert si le transfert est en cours de déplacement. Si ce mot clef est activé, le robot ne se déplace pas vers la position la plus proche, il attend au dessus de la position sur laquelle il a pris la charge. |
| Parameters.ini[System]PrioOverLoadedShuttle | Boolean | 0 | Si mot clef est activé cela indique au système qu'il n'est pas autorisé à un robot de se déplacer au dessus d'un transfert chargé. |
| Parameters.ini[System]Shuttle1 | Integer | 30 | Temps de déplacement du transfert 1 d'une branche à l'autre en secondes. |
| Parameters.ini[System]Shuttle2 | Integer | 30 | Temps de déplacement du transfert 2 d'une branche à l'autre en secondes. |
| Parameters.ini[System]Shuttle3 | Integer | 30 | Temps de déplacement du transfert 3 d'une branche à l'autre en secondes. |
| Parameters.ini[System]Shuttle4 | Integer | 30 | Temps de déplacement du transfert 4 d'une branche à l'autre en secondes. |
| Parameters.ini[System]ShuttleFree1 | Integer | 60 | Temps libre nécessaire pour le calcul d'utilisation du transfert 1. |
| Parameters.ini[System]ShuttleFree2 | Integer | 60 | Temps libre nécessaire pour le calcul d'utilisation du transfert 2. |
| Parameters.ini[System]ShuttleFree3 | Integer | 60 | Temps libre nécessaire pour le calcul d'utilisation du transfert 3. |
| Parameters.ini[System]ShuttleFree4 | Integer | 60 | Temps libre nécessaire pour le calcul d'utilisation du transfert 4. |
| VKServer.ini[System]DoNotCheckShuttleMoving | Boolean | 0 | Si activé, le système ne vérifie pas les bits de statut indiquant le déplacement d'un transfert pour positionner un robot |
Procédure de mise en service d'un CB07FPL
1 Réglage de l'axe horizontal
Commencer les réglages avec le premier robot, et cela pour chaque ligne.
Régler les paramètres de configuration
· Type de bras
· N° du bras en arrière
· N° du bras en avant
· N° de l'axe horizontal
· N° de l'axe vertical
Se référer à la documentation " Library_FPL.chm ? si nécessaire (librairie FPL ® \ CB07a \ DB \ H_Par_Hoist).
Définir les valeurs des positions
Introduire les valeurs des distances des positions de manière approximative.
Régler les paramètres des Grandeurs physiques
- Définir les largeurs du robot en arrière et avant en fonction du centre de la potence et les extrémités des encombrements en avant et en arrière.
- VKServer \ System parameters \ Hoists: entrer les mêmes valeurs en y ajoutant 50mm et mettre à jour la largeur du robot.
- Définir les limites physiques en arrière et en avant selon la configuration de la machine (butés mécaniques, chaine porte cÔbles mais sans tenir comptes des autres robots).
- Introduire les paramètres suivants :
· Offset de référence = 0
· Offset de recouvrement = 0
· Fenêtre au point de positionnement = 3
· Zone d'arrêt = 3
· Distance d'arrêt anticipé de l'agitation = 100
· Distance d'arrêt anticipé de l'agitation avant prise = 100
· Distance d'ouverture anticipée des couvercles = 0
· Distance d'ouverture anticipée du bac d'égouttage = 0
Régler les paramètres des Positions logiques
- Régler les limites logiques en arrière et en avant en fonction des valeurs des positions et des limites physiques.
- VKServer \ System parameters \ Hoists: entrer les mêmes valeurs dans les positions min et max hardware.
- Si utilisation d'un axe relatif, définir les paramètres suivants
· Position de destination après initialisation
· Sens d'initialisation
-
Régler les paramètres des Vitesses
- Régler les paramètres avec les valeurs typiques suivantes :
· Vitesse d'initialisation= 0
· Vitesse manu horizontale= 150
· Vitesse semi horizontale= 250..400
· Vitesse auto horizontale= 500..1000 (en fonction des caractéristiques du constructeur).
· Accélération horizontale= 300..400
Régler le paramètre du Time-out
Régler le Time-out mouvement horizontal à 60.
Mouvement en mode manuel
- Faire des mouvements en avant / arrière et ajuster les paramètres de l'axe correspondant.
- Aller en butée avant/arrière à pleine vitesse et contrôler que le robot s'arrête correctement sans rentrer en collision avec les butées/robots. Si nécessaire, augmenter ou diminuer les largeurs du robot afin d'obtenir un arrêt correct. Attention la modification de la vitesse manuelle et de l'accélération peuvent influencer sur l'arrêt. Si ces paramètres sont modifiés, il faut tester à nouveau !
Si les largeurs ont été modifiées il faut mettre à jour les paramètres dans le VKServer \ System parameters \ Hoists en y ajoutant 50mm et mettre à jour la largeur du robot.
Mouvement en mode Auto
- Tester les déplacements en automatique et contrôler le positionnement pour des mouvements courts et longs.
Ajuster les paramètres de l'axe correspondant si nécessaire.
2 Réglage de l'axe vertical
Régler les paramètres des Vitesses
- Régler les paramètres avec les valeurs typiques suivantes :
· Vitesse manu verticale = 15
· Vitesse semi verticale = 25
· Vitesse d'approche verticale = 15
· Accélération verticale = 300..400
Régler le paramètre du Time-out
Régler le Time-out mouvement vertical à 20.
Mouvement en mode manuel
Faire des mouvements en haut / bas et ajuster les paramètres de l'axe correspondant.
Définir les paramètres des mouvements verticaux
- Pour tous les types de montée utilisés (Up et Up-Demi), il faut définir un step correspondant à la sortie du rack du Vé, puis le compléter en fonction du mouvement souhaité. Par exemple Up1
· Vitesse1 = 20 | Temps1 = 1500
· Vitesse2 = 100 | Temps2 = 3500
Cela est nécessaire pour l'enclenchement de l'agitation dès la sortie du Vé.
- Pour tous les types de descentes utilisés (Down et Dw-Demi), il faut veiller que le rack soit en vitesse d'approche lorsque le rack arrive dans le Vé.
Cela est nécessaire pour l'arrêt retardé de l'agitation. Attention risque de crash si cela n'est pas respecté.
Mouvement en mode Automatique
- Tester et optimiser chaque type défini.
VKServer \ System parameters \ Lift time: compléter le tableau avec les valeurs correspondantes.
3 Régalge des robots suivants de la même ligne
Lorsque le premier robot de la même ligne est en service, il faut répéter les opérations décrites dans les º1 et 2 relatives au robot pour les robots suivants. Seul le régalge de l'offset de recouvrement diffère :
Réglage de l'offset de recouvrement
- Définir une position commune (entre le robot mis en service le robot suivant) comme référence.
Ajuster l'offset de recouvrement du bras à mettre en service sur cette la position de référence
4 Réglages des valeurs de positions
Réglage des valeurs des positions
- Introduire les valeurs des distances des positions de manière précise.
Mettre à jour les distances dans le VKServer en utilisant la commande du menu Hoists : read positions distances from PLC.
5 Test des interfaces
Test de l'interfaces de couvercles
En mode semi ou auto, faire un mouvement de montée / descente sur chaque position équipée d'un couvercle pour tester l'interface.
Test de l'interface des agitations
En mode semi ou auto, faire un mouvement de montée / descente sur chaque position équipée d'une agitation pour tester l'interface.
Test de l'interface des transferts
- En mode semi ou auto, déplacer le robot sur le transfert, puis dès le départ du mouvement du robot :
· Contrôler que le transfert ne peut pas se déplacer (verrouillage)
- En mode semi ou auto, déplacer le transfert, puis dès le départ du mouvement du transfert :
· Contrôler que le robot ne peut pas se déplacer sur le transfert (verrouillage)
6 Test des anti-collisions
Test dans le sens en " avant ? en mode Automatique
- Positionner tous les robots de la même ligne sur la position correspondant à leur limite logique en arrière.
- Déplacer le premier robot de position en position et contrôler que les robots suivants soient dégagés correctement.
Lorsque le premier robot a atteint sa limite logique en avant, continuer avec le deuxième robot, etc.
Test dans le sens en " arrière ? en mode Automatique
- Positionner tous les robots de la même ligne sur la position correspondant à leur limite logique en avant.
- Déplacer le dernier robot de position en position et contrôler que les robots précédents soient dégagés correctement.
Lorsque le dernier robot a atteint sa limite logique en arrière, continuer avec le robot précédent, etc.
Répéter le test pour chaque ligne de l'installation.
7 Test de la sécurité
Tester la fonctionnalité du détecteur de position occupée.
Tester un arrêt mouvement en pleine vitesse (attention à respecter les caractéristiques du constructeur).
8 Test du positionnement
Attention : ne pas exécuter ce test avec des bouclards, tonneaux ou autres supports qui seraient en contact avec les bains s'il y a de la chimie dans les bains. Risque de pollution !
- Crée un programme de test allant dans toutes les positions
- Sélectionner dans le VKServer \ Systems parameters \ Repeat Load
- Mettre le programme et la gare en mode automatique
- Charger le programme de test
- Surveiller les mouvements des robots.
9 Optimisation des anticipations
- Régler les paramètres suivants :
- Distance d'arrêt anticipé de l'agitation
- Distance d'arrêt anticipé de l'agitation avant prise
- Distance d'ouverture anticipée des couvercles
- Distance d'ouverture anticipée du bac d'égouttage
Afin que les mouvements des robots ne soient pas retardés, mais tout en conservant un temps maximum d'agitation.
Interface avec le contrôleur de transporteur CB25FPLA
Le contrôleur de transporteur CB25FPLA est un contrôleur pour robot spécial. Il permet de transporter des paniers à l'aide de crochets. Pour se déplacer horizontalement, les crochets doivent être en-haut. C'est pout cela que ce transporteur ne se déplace horizontalement qu'en haut.
Le principe pour prendre une charge est de se décaler du centre de la position, descendre, se centrer puis prendre la charge. Pour la dépose c'est le même principe, aller sur une position, descendre puis se décaler et remonter.
Le CB25FPLA a une autre spécialité c'est le transport de 2 paniers en même temps: un petit panier à l'intérieur d'un grand panier. Sur certaines positions de la machine, le petit panier doit être extrait du grand panier pour continuer.
Les registres d'échange
Les registres de commande et de statut sont définis comme suit:
|
Registre |
Type |
Direction |
Description |
|
0 |
DWORD |
VK->PLC |
Hoist command: Bit 0 : Hoist command Bit 1 : Hoist command Bit 2 : Hoist command Bit 3 : Hoist command Bit 4 : ON if next movement is a lift command (UP or DOWN movement). Bit 5 : ON when horizontal movement is without rack holder (jig). Bit 6 : ON for small basket OFF for big basket Bit 7 : Movement data Bit 8 : Movement data Bit 9 : Movement data Bit 10 : Movement data Bit 11 : Movement data Bit 12 : Movement data Bit 13 : Movement data Bit 14 : Movement data Bit 15 : Trigger new command Bit 16 : Reset buffer Bit 17 : Program is in AUTO mode Bit 18 : Extraction of small basket from big one Bit 19 : Reintroduction of small basket into big one Bit 20..Bit 31: (reserve) |
|
1 |
DWORD |
VK->PLC |
Hoist equipement command : Bit 0 : Barrel rotation type Bit 1 : Barrel rotation type Bit 2 : Barrel rotation type Bit 3 : Barrel rotation type Bit 4 : ON if drip tray must be in closed position Bit 5.. Bit 31 : (reserve) |
|
2 |
DWORD |
PLC->VK |
Hoist Status : Bit 0 : Hoist mode Bit 1 : Hoist mode Bit 2 : Hoist mode 0=OFF 1=Manual 2=Semi-auto 4=Automatic Bit 3 : ON when hoist is ready to accept new command Bit 4 : ON when a blocking alarm is pending (register 3 is not empty) Bit 5 : ON when drip tray is in closed position Bit 6 : ON when hoist is moving horizontaly Bit 7..14 : Logical horizontal position of the hoist (0..255) Bit 15 : Trigger command terminated Bit 16 : ON when lift 1 is in low vertical position Bit 17 : ON when lift 1 is in upper vertical position Bit 18 : ON when lift 1 is lowering Bit 19 : ON when lift 1 is lifting Bit 20 : ON when lift 1 is in intermediate vertical position Bit 21 : ON when clip on lift 1 is closed (clipped) Bit 22 : ON when hoist is agitating Bit 23 : ON when lift 1 is in HLiftout vertical position Bit 24..Bit 28 : (reserve) Bit 29 : ON when hoist is shifted Bit 30 : (reserve) Bit 31 : (reserve) |
|
3 |
DWORD |
PLC->VK |
Alarm bits. Program should go to STOP mode: Bit 0..31 : Alarm indication |
|
4 |
DWORD |
PLC->VK |
Warning bits. Program continue in AUTO mode: Bit 0..31 : Warning indication |
Cobian backup
Le logiciel Cobian est un outil qui permet de sauvegarder les fichiers et la base de donnée de l'application Quickview.
Dans le dossier C:\VK-WinQV\Addon\Cobian, exécuter le fichier cbSetup.exe pour installer Cobian Backup 11.
Utiliser l'outil en tant que service pour un client. Si c'est pour des tests, utiliser le en tant qu'application.
Dans la barre des notifications Windows, vous trouverez Cobian:
Copier le dossier "C:\VK-WinQV\Addon\Cobian\Backup" dans le dossier racine Quickview "C:\VK-WinQV\Backup"
Dans le script "BackupDatabase.bat", vérifier le chemin d'accès à l'outil de compression Firebird "Gbak.exe".
Sauvegarde des fichiers de l'application Quickview
Clique droit, Edit task...
Définir le dossier de destination des sauvegardes:
Définir la fréquence des sauvegardes:
Le nombre de copies à conserver:
Compression du fichier
Ne pas copier la base de donnée:
Sauvegarde de la base de donnée Quickview
Clique droit, Edit task...
Créer manuellement le dossier source "C:\VK-WinQV\Backup\DBase":
Définir le dossier de destination des sauvegardes:
Définir la fréquence des sauvegardes:
Le nombre de copies à conserver:
Compression du fichier
Scripts à exécuter avant et après la sauvegarde:
Résultats
Lancer un test en cliquant sur RUN:
La fonction "RFID Follower"
Lorsque QuickView est utilisé sur une machine manuelle (sans robot), la fonction "RFID Follower" peut est utilisée pour suivre les manipulations faites pas l'opérateur.
Pour permettre le suivi des charges, des lecteurs RFID devront être installés sur les positions devant être suivi
Configuration des robots virtuels
Pour pouvoir utiliser la fonction "RFID Follower", un robot virtuel doit être défini. Ceci se fait dans le fichier VKServer.ini dans la section [Hoist1]. Cette section est utilisée pour définir le robot n°1 de la machine. Dans le cas d'une machine manuelle, le type de robot doit être défini comme Type=CBSim2. Ce type de robot demande l'utilisation d'un DB de données ainsi qu'un DB Table.
Exemple de configuration:
[Hoist1]
Type=CBSim2
DbData=23
RegData=0
DbTable=80
RegTable=0
Le DBTable
Le DBTable permet de transmettre les RFID lus par les lecteurs à QuickView. Chaque registre de ce DB correspond à une position de la machine. Le premier registre à la position 1, le deuxième à la position 2 et ainsi de suite. Le DB doit contenir autant de registres string qu'il y a de positions machine. Si une position n'est pas équipée alors le registre sera toujours vide mais doit exister.
Exemple d'un DBTable pour 32 positions:
[Databank80]
Device=1
Channel=380
Regi=0
Regf=31
Pool=1000
RegType=String
Les bases de données
Ce chapitre décrit la structure des bases de données utilisées dans le système
Les divers types de bases de données
VKQuickView utilise actuellement 3 types de base de données : BDE, Firebird et ODBC.
BDE (Borland Database Engine)
Installation
Cette base de données est installée automatiquement lors de la procédure d'installation de VKQuickView si son option d'installation a été sélectionnée ou si l'installation par défaut a été choisie.
Si l'option a été choisie, un programme séparé d'installation est exécuté à la fin de l'installation du logiciel.
Utilisation
La BDE est utilisée uniquement par le programme " Client ? pour stocker les données utilisées par les divers postes de charge.
Lors du démarrage du programme " Client ?, le système vérifie la présence du fichier de base de données et le crée dans le cas où celui-ci n'existerai pas. Pour les postes de charge 0 à 35, ce fichier s'appelle " DBase\Database.DBF ?. A partir du poste de charge N° 36, ce fichier s'appelle " Dbase\Database[N° de poste de charge].DBF. Si vous changez de n° de poste de charge après le premier démarrage du système, il faut obligatoirement effacer l'ancien fichier si le nouveau et l'ancien poste de charge est plus petit que 35 car les champs définis dans les tables ne sont pas forcément identiques.
Ce type de base de données est uniquement destiné aux mises à jour d'ancien équipement. Sur les nouvelles machines, ce type a été remplacé par une base de données relationnelles de type Firebird.
Firebird
Firebird est un moteur de bases de données relationnelles open sources. Il existe différentes versions de ce logiciel. La structure des fichiers de base de données change selon la version utilisée mais elle reste compatible lorsque vous passez d'une ancienne version à une version plus récente. l'inverse n'est pas vrai.
Installation
Lors de l'installation du logiciel VKQuickView, une option d'installation permet de choisir de copier le fichier d'installation de Firebird sur le disque dur du PC dans le répertoire " VK-WinQV\ADDON ?. Ce programme d'installation n'est pas lancé automatiquement pendant la phase d'installation du logiciel VKQuickView.
Pour installer le moteur Firebird, il faut ouvrir l'explorateur Windows et localiser le programme d'installation qui se trouve dans le répertoire C :\VK-WinQV\Addon. Lors de la fabrication du CD d'installation, la dernière version publiée de Firebird est installée. Actuellement c'est la version 3.0.7 qui est contenue dans le fichier d'installation " Firebird-3.0.7.33374_1_Win32 ?.
Utilisation
Le suivi des charges "Reporting"
Cette base de données est utilisée pour l'enregistrement des événements qui se passent pendant le passage des pièces dans la machine. l'affichage des rapports de charge utilise cette base de données.
Pour pouvoir utiliser la base de données, il faut la configurer dans les fichiers VKWinQV.ini et VKServer.ini. La section se nomme [Database] (voir aide QuickView).
Lors du démarrage du programme Client, le système vérifie la présence du fichier de base de données. Si celui-ci n'existe pas, un nouveau fichier est créé (seulement si le fichier se trouve sur le poste local (nom du fichier commençant par " localhost : ?)).
La base de données "Articles" du poste de charge N° 11
Cette base de données est utilisée pour stocker les informations des pièces et des gammes du poste de charge N° 11.
Pour pouvoir utiliser la base de données, il faut la configurer dans le fichier VKWinQV.ini dans la section [PartDatabase] (Voir aide QuickView).
Lors du démarrage du programme Client, le système vérifie la présence du fichier de base de données. Si celui-ci n'existe pas, un nouveau fichier est créé (seulement si le fichier se trouve sur le poste local).
La base de données "Articles" du poste de charge N° 52
Cette base de données est utilisée pour stocker les informations des pièces et des gammes de traitement utilisés par le poste de charge N° 52.
Pour pouvoir utiliser la base de données, il faut la configurer dans le fichier VKWinQV.ini. La section se nomme [PartLibrary] (voir aide QuickView). Lors du démarrage du programme Client, le système vérifie la présence du fichier de base de données. Si celui-ci n'existe pas, un nouveau fichier est créé (seulement si le fichier se trouve sur le poste local (nom du fichier commençant par " localhost : ?)).
ODBC
ODBC (Open Data Base Connectivity) n'est pas une base de données à proprement dit mais plutôt un accès à une base de données.
Pour pouvoir utiliser ODBC, il faut tout d'abord installer une base de données compatible avec ODBC par exemple MSSQL ou MSSQL Express. MSSQL Express est une version gratuite de MSSQL avec des limitations sur la quantité d'enregistrements possibles.
Utilisation
Le suivi des charges "Reporting"
Cette base de données est utilisée pour l'enregistrement des événements qui se passent pendant le passage des pièces dans la machine.
Pour pouvoir utiliser la base de données, il faut la configurer dans le fichier VKServer.ini. La section se nomme [ODBC].
La base de données doit être créée en utilisant un programme de management de la base de données. Il n'est pas possible de créer une base de données au travers de la connexion ODBC. Le système test la présence des tables. Si les tables n'existent pas (nouvelle base de données), le système les crée automatiquement.
ODBC-Customer
Ce type de base de données fonctionne comme la connexion ODBC ci-dessus sauf que la base de données n'est pas gérée par le système mais par le client.
Cette connexion est utilisée pour un accès à des données pièces pour remplir les champs de certains porte de charge.
La base de données "Article" du poste de charge N° 52
Cette base de données est utilisée pour stocker les informations des pièces et des gammes de traitement utilisés par le poste de charge N° 52Pour pouvoir utiliser la base de données, il faut la configurer dans le fichier VKWinQV.ini. La section se nomme [PartLibrary] (voir aide QuickView). Lors du démarrage de QuickView, le système vérifie la connexion avec la base de données. Si celle-ci est OK, il teste la présence des tables. Si les tables n'existent pas elles sont créées automatiquement.
La structure de la base de données "Reporting"
Les bases de données " Reporting " comportent 10 tables :
|
VK_ACTIONS |
Liste des actions possibles dans les messages |
|
VK_MSG_TYPES |
Liste des types de message. |
|
VK_ALARM_GROUPS |
Liste des groupes d'alarmes dans les 4 langues |
|
VK_ALARM_TYPES |
Liste des types d'alarmes dans les 4 langues |
|
VK_ALARM_MESSAGES |
Liste des messages des alarmes dans les 4 langues |
|
VK_LOADS |
Liste des charges introduites au poste de charge |
|
VK_LOAD_PARTS |
Liste des pièces des charges introduites au poste de charge |
|
VK_LOAD_TBS |
Liste des blocs de traitements des charges |
|
VK_LOAD_CONTROLS |
Liste des contrôles en sortie |
|
VK_MESSAGES |
Liste de tous les événements intervenus sur l'installation. |
La table "VK_MSG_TYPE"
Cette table contient la liste des types d'actions (Champ TYPE_ID) de la table " VK_MESSAGES ?. Ces champs sont définis comme suit :
|
Champ |
Type |
Description |
||||||||||||||||||||||||||||
|
TYPE_ID |
Integer |
Numéro de l'action |
||||||||||||||||||||||||||||
|
DESCRIPTION |
Varchar(200) |
Description du type
|
La table "VK_ACTIONS"
Cette table contient la liste de toutes les actions (Champ ACTION_ID) de la table " VK_MESSAGES ?. Les champs sont définis comme suit :
|
Champ |
Type |
Description |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
ACTION_ID |
Integer |
Numéro de l'action |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
DESCRIPTION |
Varchar(200) |
Description de l'action
|
La table "VK_ALARM_GROUPS"
Cette table contient la liste des textes des groupes d'alarme dans les 4 langues. Ces champs sont définis comme suit :
|
Nom du champ |
Type |
Fonction |
|
ALARMGROUP_ID |
Integer |
Numéro du groupe d'alarme |
|
MACHINE_ID |
Integer |
Numéro de la machine |
|
DESCRIPTION |
Varchar(200) |
Description du groupe (pas utilisé) |
|
NAME_LGU0 |
Varchar(50) |
Nom du groupe dans la langue 0 |
|
NAME_LGU1 |
Varchar(50) |
Nom du groupe dans la langue 1 |
|
NAME_LGU2 |
Varchar(50) |
Nom du groupe dans la langue 2 |
|
NAME_LGU3 |
Varchar(50) |
Nom du groupe dans la langue 3 |
|
STATUS |
Char(1) |
Status de l'enregistrement (pas utilisé) |
La table "VK_ALARM_TYPES"
Cette table contient la liste des textes des types d'alarme dans les 4 langues. Ces champs sont définis comme suit :
|
Nom du champ |
Type |
Fonction |
|
ALARMTYPE_ID |
Integer |
Numéro du type d'alarme |
|
MACHINE_ID |
Integer |
Numéro de la machine |
|
DESCRIPTION |
Varchar(200) |
Description du type (pas utilisé) |
|
NAME_LGU0 |
Varchar(50) |
Nom du type dans la langue 0 |
|
NAME_LGU1 |
Varchar(50) |
Nom du type dans la langue 1 |
|
NAME_LGU2 |
Varchar(50) |
Nom du type dans la langue 2 |
|
NAME_LGU3 |
Varchar(50) |
Nom du type dans la langue 3 |
|
STATUS |
Char(1) |
Status de l'enregistrement (pas utilisé) |
La table "VK_ALARM_MESSAGES"
Cette table contient la liste des textes des messages d'alarme dans les 4 langues. Ces champs sont définis comme suit :
|
Nom du champ |
Type |
Fonction |
|
ALARMMESSAGE_ID |
Integer |
Numéro du message d'alarme |
|
MACHINE_ID |
Integer |
Numéro de la machine |
|
DESCRIPTION |
Varchar(200) |
Description du message (pas utilisé) |
|
NAME_LGU0 |
Varchar(50) |
Nom du message dans la langue 0 |
|
NAME_LGU1 |
Varchar(50) |
Nom du message dans la langue 1 |
|
NAME_LGU2 |
Varchar(50) |
Nom du message dans la langue 2 |
|
NAME_LGU3 |
Varchar(50) |
Nom du message dans la langue 3 |
|
STATUS |
Char(1) |
Status de l'enregistrement (pas utilisé) |
La table "VK_LOADS"
Cette table contient les données des charges créées sur les postes de charge des machines.
|
Champ |
Type |
Description |
|
REC_ID |
BigInt PK |
Numéro d'identification. Ce champ sera la clef primaire de la table |
|
LOAD_ID |
Integer |
Numéro unique d'identification des charges |
|
MACHINE_ID |
Integer |
Numéro de la machine |
|
CUSTOMER_NAME |
Varchar(80) |
Nom du client |
|
CUSTOMER_NUMBER |
Varchar(16) |
Numéro du client |
|
CREATE_DATE |
Date |
Date de création |
|
CREATE_TIME |
Time |
Heure de création |
|
CREATE_TIMESTAMP |
DateTime |
Horodatage de création |
|
PROGRAM_NR |
Smallint |
Numéro de programme |
|
PROGRAM_NAME |
Varchar(80) |
Nom du programme |
|
PROGRAM_VERSION |
Integer |
Numéro de version du programme |
|
MODE_NR |
Smallint |
Numéro du mode d'équipement |
|
MODE_NAME |
Varchar(80) |
Nom du mode d'équipement |
|
MODE_VERSION |
Integer |
Numéro de version du mode d'équipement |
|
JIG_NR |
Smallint |
Numéro du porte rack |
|
POSITION_NR |
Smallint |
Numéro de la position de chargement |
|
REMARQUE1 |
Varchar(80) |
Remarque |
|
REMARQUE2 |
Varchar(80) |
Remarque |
|
RECEIPT_NAME |
Varchar(80) |
Nom de la recette (ID base de données parts) |
|
AREA_FRONT_A |
Float |
Surface N° 1 |
|
AREA_BACK_A |
Float |
Surface N° 2 |
|
AREA_FRONT_B |
Float |
Surface N° 3 |
|
AREA_BACK_B |
Float |
Surface N° 4 |
|
AREA_FRONT_C |
Float |
Surface N° 5 |
|
AREA_BACK_C |
Float |
Surface N° 6 |
|
AREA_FRONT_D |
Float |
Surface N° 7 |
|
AREA_BACK_D |
Float |
Surface N° 8 |
|
AREA_CHEM |
Float |
Surface chimique (surface totale) |
|
UP_TYPE |
Smallint |
Type de montée |
|
DOWN_TYPE |
Smallint |
Type de descente |
|
ROTATION_TYPE |
Smallint |
Type de rotation |
|
ROTATION_SPEED |
Smallint |
Vitesse de rotation |
|
SUPPORT_TYPE |
Smallint |
Type de support |
|
PANEL_TYPE |
Smallint |
Type de panneaux |
|
CHECK_SUM |
Integer |
Pas utilisé |
|
END_STATUS |
Smallint |
Statut de fin (1=charge OK 2=charge avec erreurs) |
|
UNLOAD_DATE |
Date |
Date de déchargement |
|
UNLOAD_TIME |
Time |
Heure de déchargement |
|
UNLOAD_TIMESTAMP |
DateTime |
Horodatage de déchargement |
|
DEPARTEMENT |
Varchar(80) |
Nom du département |
|
TEAM |
Varchar(80) |
Nom de l'équipe |
|
NUM_LOAD |
Smallint |
Numéro de la charge par rapport au nombre total |
|
TOTAL_LOAD |
Smallint |
Nombre total de charge |
|
VALIDATION |
Smallint |
Charge de validation |
|
TXT_1 |
Varchar(80) |
Texte libre (dépend du type de poste de charge) |
|
TXT_2 |
Varchar(80) |
" |
|
TXT_3 |
Varchar(80) |
" |
|
TXT_4 |
Varchar(80) |
" |
|
TXT_5 |
Varchar(80) |
" |
|
TXT_6 |
Varchar(64) |
" |
|
TXT_7 |
Varchar(64) |
" |
|
TXT_8 |
Varchar(64) |
" |
|
TXT_9 |
Varchar(64) |
" |
|
TXT_10 |
Varchar(64) |
" |
|
TXT_11 |
Varchar(32) |
" |
|
TXT_12 |
Varchar(32) |
" |
|
TXT_13 |
Varchar(32) |
" |
|
TXT_14 |
Varchar(32) |
" |
|
TXT_15 |
Varchar(32) |
" |
|
TXT_16 |
Varchar(32) |
" |
|
TXT_17 |
Varchar(32) |
" |
|
TXT_18 |
Varchar(32) |
" |
|
TXT_19 |
Varchar(32) |
" |
|
TXT_20 |
Varchar(32) |
" |
|
CHEM_NAME_1 |
Varchar(64) |
Nom du produit chimique N° 1 |
|
CHEM_NAME_2 |
Varchar(64) |
Nom du produit chimique N° 2 |
|
CHEM_NAME_3 |
Varchar(64) |
Nom du produit chimique N° 3 |
|
CHEM_NAME_4 |
Varchar(64) |
Nom du produit chimique N° 4 |
|
CHEM_NAME_5 |
Varchar(64) |
Nom du produit chimique N° 5 |
|
CHEM_NAME_6 |
Varchar(64) |
Nom du produit chimique N° 6 |
|
CHEM_NAME_7 |
Varchar(64) |
Nom du produit chimique N° 7 |
|
CHEM_NAME_8 |
Varchar(64) |
Nom du produit chimique N° 8 |
|
CHEM_NAME_9 |
Varchar(64) |
Nom du produit chimique N° 9 |
|
CHEM_NAME_10 |
Varchar(64) |
Nom du produit chimique N° 10 |
|
CHEM_NAME_11 |
Varchar(64) |
Nom du produit chimique N° 11 |
|
CHEM_NAME_12 |
Varchar(64) |
Nom du produit chimique N° 12 |
|
CHEM_NAME_13 |
Varchar(64) |
Nom du produit chimique N° 13 |
|
CHEM_NAME_14 |
Varchar(64) |
Nom du produit chimique N° 14 |
|
CHEM_NAME_15 |
Varchar(64) |
Nom du produit chimique N° 15 |
|
CHEM_NAME_16 |
Varchar(64) |
Nom du produit chimique N° 16 |
|
CHEM_LOT_1 |
Varchar(64) |
Numéro de lot du produit chimique N° 1 |
|
CHEM_LOT_2 |
Varchar(64) |
Numéro de lot du produit chimique N° 2 |
|
CHEM_LOT_3 |
Varchar(64) |
Numéro de lot du produit chimique N° 3 |
|
CHEM_LOT_4 |
Varchar(64) |
Numéro de lot du produit chimique N° 4 |
|
CHEM_LOT_5 |
Varchar(64) |
Numéro de lot du produit chimique N° 5 |
|
CHEM_LOT_6 |
Varchar(64) |
Numéro de lot du produit chimique N° 6 |
|
CHEM_LOT_7 |
Varchar(64) |
Numéro de lot du produit chimique N° 7 |
|
CHEM_LOT_8 |
Varchar(64) |
Numéro de lot du produit chimique N° 8 |
|
CHEM_LOT_9 |
Varchar(64) |
Numéro de lot du produit chimique N° 9 |
|
CHEM_LOT_10 |
Varchar(64) |
Numéro de lot du produit chimique N° 10 |
|
CHEM_LOT_11 |
Varchar(64) |
Numéro de lot du produit chimique N° 11 |
|
CHEM_LOT_12 |
Varchar(64) |
Numéro de lot du produit chimique N° 12 |
|
CHEM_LOT_13 |
Varchar(64) |
Numéro de lot du produit chimique N° 13 |
|
CHEM_LOT_14 |
Varchar(64) |
Numéro de lot du produit chimique N° 14 |
|
CHEM_LOT_15 |
Varchar(64) |
Numéro de lot du produit chimique N° 15 |
|
CHEM_LOT_16 |
Varchar(64) |
Numéro de lot du produit chimique N° 16 |
|
SERVER_VERSION |
Varchar(64) |
Numéro de version du programme VKServer |
|
STATUS |
Char(1) |
Statut de l'enregistrement (pas utilisé) |
|
OPERATOR_NAME |
Varchar(64) |
Nom de l'opérateur ayant chargé les données |
|
AUTOCONTROLS |
Smallint |
Nombre de contrôles à effectuer |
|
AUTOCONTROLS_RESULT |
Smallint |
Résultat des contrôles de l'opérateur |
|
AUTOCONTROLS_SUP_RESULT |
Smallint |
Résultat des contrôles du superviseur |
|
AUTOCONTROLS_DOUBLE_CONTROL |
Smallint |
1 = un superviseur doit faire un contrôle |
|
AUTOCONTROL_DATE |
Timestamp |
Date et heure du contrôle par l'opérateur |
|
AUTOCONTROL_USER |
Varchar(32) |
Nom de l'opérateur ayant réalisé les contrôles |
|
AUTOCONTROL_SUP_DATE |
Timestamp |
Date et heure du contrôle par le superviseur |
|
AUTOCONTROL_SUR_USER |
Varchar(32) |
Nom du superviseur ayant réalisé le double contrôle |
La table "VK_LOAD_PARTS"
Cette table contient la liste des pièces chargées sur chaque charge.
|
Champ |
Type |
Description |
|
PART_ID |
BigInt PK |
Numéro d'identification. Ce champ sera la clef primaire de la table |
|
LOAD_ID |
Integer |
Numéro de la charge |
|
MACHINE_ID |
Integer |
Numéro de la machine |
|
PART_NR |
Smallint |
Numéro de la pièce sur la charge (1..n) |
|
PART_TYPE |
Smallint |
Type de pièce : 0 : Outillage 1 : Pièce 2 : Billes |
|
REFERENCE |
Varchar(80) |
Référence de la pièce |
|
VAL_S1 |
Varchar(64) |
Texte N° 1 (dépend du type de poste de charge) |
|
VAL_S2 |
Varchar(64) |
Texte N° 2 (dépend du type de poste de charge) |
|
VAL_S3 |
Varchar(64) |
Texte N° 3 (dépend du type de poste de charge) |
|
VAL_S4 |
Varchar(64) |
Texte N° 4 (dépend du type de poste de charge) |
|
VAL_S5 |
Varchar(64) |
Texte N° 5 (dépend du type de poste de charge) |
|
VAL_S6 |
Varchar(64) |
Texte N° 6 (dépend du type de poste de charge) |
|
VAL_S7 |
Varchar(64) |
Texte N° 7 (dépend du type de poste de charge) |
|
VAL_S8 |
Varchar(64) |
Texte N° 8 (dépend du type de poste de charge) |
|
VAL_S9 |
Varchar(64) |
Texte N° 9 (dépend du type de poste de charge) |
|
VAL_S10 |
Varchar(64) |
Texte N° 10 (dépend du type de poste de charge) |
|
VAL_N1 |
Integer |
Nombre N° 1 (dépend du type de charge) |
|
VAL_N2 |
Integer |
Nombre N° 2 (dépend du type de charge) |
|
VAL_N3 |
Integer |
Nombre N° 3 (dépend du type de charge) |
|
VAL_N4 |
Integer |
Nombre N° 4 (dépend du type de charge) |
|
VAL_N5 |
Integer |
Nombre N° 5 (dépend du type de charge) |
|
VAL_N6 |
Integer |
Nombre N° 6 (dépend du type de charge) |
|
VAL_N7 |
Integer |
Nombre N° 7 (dépend du type de charge) |
|
VAL_N8 |
Integer |
Nombre N° 8 (dépend du type de charge) |
|
VAL_N9 |
Integer |
Nombre N° 9 (dépend du type de charge) |
|
VAL_N10 |
Integer |
Nombre N° 10 (dépend du type de charge) |
|
VAL_R1 |
Float |
Valeur N° 1 (Dépend du type de charge) |
|
VAL_R2 |
Float |
Valeur N° 2 (Dépend du type de charge) |
|
VAL_R3 |
Float |
Valeur N° 3 (Dépend du type de charge) |
|
VAL_R4 |
Float |
Valeur N° 4 (Dépend du type de charge) |
|
VAL_R5 |
Float |
Valeur N° 5 (Dépend du type de charge) |
|
VAL_R6 |
Float |
Valeur N° 6 (Dépend du type de charge) |
|
VAL_R7 |
Float |
Valeur N° 7 (Dépend du type de charge) |
|
VAL_R8 |
Float |
Valeur N° 8 (Dépend du type de charge) |
|
VAL_R9 |
Float |
Valeur N° 9 (Dépend du type de charge) |
|
VAL_R10 |
Float |
Valeur N° 10 (Dépend du type de charge) |
|
STATUS |
Char(1) |
Statut de l'enregistrement (pas utilisé) |
La table "VK_LOAD_TBS"
Cette table contient les données des blocs de traitement définis pour les charges au poste de charge.
|
Champ |
Type |
Description |
|
TB_ID |
BigInt PK |
Numéro d'identification. Ce champ sera la clef primaire de la table |
|
LOAD_ID |
Integer |
Numéro de la charge |
|
MACHINE_ID |
Integer |
Numéro de la machine |
|
TB_NB |
Smallint |
Index du bloc de traitement (1..8) |
|
TB |
Smallint |
Numéro du bloc de traitement |
|
TB_NAME |
Varchar(32) |
Nom du bloc de traitement |
|
TB_POSITION |
SmallInt |
Numéro de la position machine |
|
TB_GROUP |
SmallInt |
Numéro du groupe |
|
TB_CYCLE |
Smallint |
Nombre de cycle |
|
TB_TIME |
Integer |
Temps du bloc de traitement |
|
TB_SINGLEPOS |
Smallint |
Numéro de la position du groupe |
|
TB_RAMP |
Smallint |
Numéro de la forme de courant |
|
TB_RAMP_TYPE |
Smallint |
Type de régulation de la forme de courant : 0 : Courant 1 : Tension |
|
TB_DENSITY |
Float |
Densité de courant |
|
TB_THICKNESS |
Float |
Epaisseur désirée |
|
TB_MEASURE |
Float |
Epaisseur mesurée |
|
STATUS |
Char(1) |
Statut de l'enregistrement (pas utilisé) |
|
CHECK_SUM |
Integer |
pas utilisé |
La table "VK_LOAD_CONTROLS"
Cette table contient les données des résultats des contrôles en sortie des pièces.
|
Champ |
Type |
Description |
|
CONTROL_ID |
BigInt PK |
Numéro d'identification. Ce champ sera la clef primaire de la table |
|
LOAD_ID |
Integer |
Numéro de la charge |
|
MACHINE_ID |
Integer |
Numéro de la machine |
|
ARTICLE_NB |
Smallint |
Index de l'article |
|
ARTICLE_NAME |
Varchar(32) |
Nom de l'article |
|
VALID_COUNT |
SmallInt |
Numéro de la validation (1..10) |
|
VALID_SUP |
SmallInt |
0: Opérateur 1:Superviseur |
|
VALID_CONTROL |
Varchar(32) |
Nom du contrôle |
|
VALID_MESURE |
Varchar(32) |
Valeur mesurée par l'opérateur |
|
VALID_RESULT |
Smallint |
Résultat du contrôle: 1: CONFORME 2:NON-CONFORME |
|
VALID_NONCONFORMITY |
Varchar(64) |
Résultat de la non-conformité |
La table "VK_MESSAGES"
Cette table regroupe tous les messages produits par l'application. Les champs sont définis comme suit:
|
Nom du champ |
Type |
Fonction |
|
MESSAGE_ID |
Integer |
Numéro du message. |
|
LOAD_ID |
Integer |
Numéro de la charge |
|
MACHINE_ID |
Integer |
Numéro de la machine |
|
TYPE_ID |
Integer |
Type de message: |
|
MSG_DATE |
Date |
Date du message |
|
MSG_TIME |
Time |
Heure du message |
|
MSG_TIMESTAMP |
DateTime |
Date et heure du message |
|
USER_ID |
Integer |
Numéro de l'utilisateur (pas utilisé) |
|
MACHINE_NB |
Smallint |
Numéro de la machine (branche de la machine) |
|
POSITION_NB |
Smallint |
Numéro de position |
|
ACTION_ID |
Integer |
Type d'action: |
|
VAL_N1 |
Integer |
|
|
VAL_N2 |
Integer |
|
|
VAL_N3 |
Integer |
|
|
VAL_N4 |
Integer |
|
|
VAL_N5 |
Integer |
|
|
VAL_N6 |
Integer |
|
|
VAL_N7 |
Integer |
|
|
VAL_N8 |
Integer |
|
|
VAL_N9 |
Integer |
|
|
VAL_N10 |
Integer |
|
|
VAL_R1 |
Float |
|
|
VAL_R2 |
Float |
|
|
VAL_R3 |
Float |
|
|
VAL_R4 |
Float |
|
|
VAL_R5 |
Float |
|
|
VAL_R6 |
Float |
|
|
VAL_R7 |
Float |
|
|
VAL_R8 |
Float |
|
|
VAL_R9 |
Float |
|
|
VAL_R10 |
Float |
|
|
VAL_S1 |
Varchar(80) |
|
|
VAL_S2 |
Varchar(80) |
|
|
VAL_B1 |
SmallInt |
|
|
VAL_B2 |
SmallInt |
|
|
VAL_TIME1 |
Timestamp |
|
|
VAL_TIME2 |
Timestamp |
|
|
CHECK_SUM |
Integer |
Checksum de l'enregistrement (pas utilisé) |
|
STATUS |
Char(1) |
Etat de l'enregistrement (pas utilisé) |
Les messages "Take Load" sur une position avec redresseur
Ces messages sont générés lorsqu'un transporteur prend une charge sur une position équipée de redresseur:
|
Champ |
Valeur |
Description |
|
TYPE_ID |
100 |
Take/Drop |
|
ACTION_ID |
101 |
Take |
|
LOAD_ID |
n |
Numéro de la charge |
|
MACHINE_ID |
n |
Numéro de la machine |
|
MACHINE_NB |
n |
Numéro de la branche de machine |
|
POSITION_NB |
n |
Numéro de position |
|
VAL_N1 |
n |
Numéro du robot |
|
VAL_N2 |
n |
Numéro de rack |
|
VAL_N3 |
n |
Tmin |
|
VAL_N4 |
n |
Tmax |
|
VAL_N5 |
n |
Teff |
|
VAL_N6 |
n |
Nombre d'alarmes |
|
VAL_N7 |
n |
I/O à enregistrer I1 |
|
VAL_N8 |
n |
I/O à enregistrer I2 |
|
VAL_N9 |
n |
I/O à enregistrer I3 |
|
VAL_N10 |
n |
Type de régulation pendant le step de type " Immersion ? 0=Courant constant 1=Tension constante |
|
VAL_R1 |
n |
I/O à enregistrer R1 |
|
VAL_R2 |
n |
I/O à enregistrer R2 ou Moyenne R1 1 |
|
VAL_R3 |
n |
I/O à enregistrer R3 ou Min R1 1 |
|
VAL_R4 |
n |
I/O à enregistrer R4 ou Max R1 1 |
|
VAL_R5 |
n |
Ah réel avant |
|
VAL_R6 |
n |
Ah réel arrière ou U moyen 2 |
|
VAL_R7 |
n |
Ah théorique avant |
|
VAL_R8 |
n |
Ah théorique arrière ou I moyen 2 |
|
VAL_R9 |
n |
U max ou U Setpoint 3 |
|
VAL_R10 |
n |
I max ou I Setpoint 3 |
|
VAL_B1 |
n |
% d'erreur entre les Ah théoriques et le Ah réels. Ce % peut être modifié par l'utilisateur dans le programme client. |
*1) Les colonnes R2, R3 et R4 correspondent respectivement à la valeur moyenne, la valeur Min et la valeur Max de R1 si le mot clef Parameters.ini[Database]DBMeanAnalog=1.
*2) S'il n'y a qu'un seul redresseur défini sur la position alors enregistrement de la moyenne du courant ou de la tension sinon enregistrement des Ah réels et théoriques du deuxième redresseur.
*3) Les colonnes R9 et R10 correspondent respectivement à la valeur max de la tension et la valeur max du courant si le mot clef Parameters.ini[Database]LogUISetPoints=0. Si le mot clef = 1 alors les colonnes correspondent aux consignes de courant et de tension lors du premier step de type " Immersion ?
Les colonnes VAL_R1 à VAL_R10 peuvent contenir des données différentes selon la configuration du VKServer. Dans l'onglet " Database ? de la page " System Parameters ?, on peut sélectionner diverses fonctions :
La case " Log hoists movements ? indique au système qu'il doit enregistrer les mouvements des transporteurs (Take/Drop load ).
La case " Log alarms ? indique au système qu'il doit enregistrer les alarmes lorsque celles-ci sont générées.
La case " Log Loads ? indique au système qu'il doit enregistrer les informations des charges lors de leurs intégrations au poste de charge.
La case " Log equipment commands ? indique au système qu'il doit sauvegarder les commandes d'équipements lorque celles-ci sont exécutées.
La case " Log special counters ? indique au système d'il doit sauvegarder les compteurs spéciaux La fréquence de sauvegarde est indiqué dans le champ " Time ?. Les compteurs spéciaux sont définis dans le fichier IO.ini dans la section [Database]
La case " Average analog value ? permet d'enregistrer les moyennes de la valeur analogique N° 1. La valeur de R1 à la sortie de la cuve est enregistrée dans la colonne VAL_R1. La moyenne de R1 pendant toute l'immersion est enregistrée dans la colonne VAL_R2. La valeur minimale de R1 pendant toute l'immersion est enregistrée dans la colonne VAL_R3 et la valeur maximale de R1 pendant toutes l'immersion est enregistrée dans la colonne VAL_R4.
La case " Log rectifers ah/ah/theor/Imean/Umean/Imax/Umax ? indique au système qu'il doit enregistrer les messages correspondants à la sortie des charges des positions.
La case " Log rectifiers data ? Indique au système qu'il doit enregistrer les variations des redresseurs pendant l'immersion des charges.
Les messages "Take load" sur une position sans redresseur
Ces messages sont générés lorsqu'un transporteur prend une charge sur une position sans redresseur:
|
Champ |
Valeur |
Description |
|
TYPE_ID |
100 |
Take/Drop |
|
ACTION_ID |
101 |
Take |
|
LOAD_ID |
n |
Numéro de la charge |
|
MACHINE_ID |
n |
Numéro de la machine |
|
MACHINE_NB |
n |
Numéro de la branche de machine |
|
POSITION_NB |
n |
Numéro de position |
|
VAL_N1 |
n |
Numéro du robot |
|
VAL_N2 |
n |
Numéro de rack |
|
VAL_N3 |
n |
Tmin |
|
VAL_N4 |
n |
Tmax |
|
VAL_N5 |
n |
Teff |
|
VAL_N6 |
n |
Nombre d'alarmes |
|
VAL_N7 |
n |
I/O à enregistrer I1 |
|
VAL_N8 |
n |
I/O à enregistrer I2 |
|
VAL_N9 |
n |
I/O à enregistrer I3 |
|
VAL_N10 |
n |
I/O à enregistrer I4 |
|
VAL_R1 |
n |
I/O à enregistrer R1 |
|
VAL_R2 |
n |
I/O à enregistrer R2 ou Moyenne R1 1 |
|
VAL_R3 |
n |
I/O à enregistrer R3 ou Min R1 1 |
|
VAL_R4 |
n |
I/O à enregistrer R4 ou Max R1 1 |
|
VAL_R5 |
n |
I/O à enregistrer R5 |
|
VAL_R6 |
n |
I/O à enregistrer R6 |
|
VAL_R7 |
n |
I/O à enregistrer R7 |
|
VAL_R8 |
n |
I/O à enregistrer R8 |
|
VAL_R9 |
n |
I/O à enregistrer R9 |
|
VAL_R10 |
n |
I/O à enregistrer R10 |
*1) Les colonnes R2, R3 et R4 correspondent respectivement à la valeur moyenne, la valeur Min et la valeur Max de R1 si le mot clef Parameters.ini[Database]DBMeanAnalog=1.
Les messages "Drop load"
Ces messages sont générés lorsqu'un transporteur dépose une charge dans une position.
|
Champ |
Valeur |
Description |
|
TYPE_ID |
100 |
Take/Drop |
|
ACTION_ID |
102 |
Drop |
|
LOAD_ID |
n |
Numéro de la charge |
|
MACHINE_ID |
n |
Numéro de la machine |
|
MACHINE_NB |
n |
Numéro de la branche de machine |
|
POSITION_NB |
n |
Numéro de position |
|
VAL_N1 |
n |
Numéro du robot |
|
VAL_N2 |
n |
Numéro de rack |
|
VAL_N3 |
n |
Tmin |
|
VAL_N4 |
n |
Tmax |
|
VAL_N7 |
n |
I/O à enregistrer I1 |
|
VAL_N8 |
n |
I/O à enregistrer I2 |
|
VAL_N9 |
n |
I/O à enregistrer I3 |
|
VAL_N10 |
n |
I/O à enregistrer I4 |
|
VAL_R1 |
n |
I/O à enregistrer R1 |
|
VAL_R2 |
n |
I/O à enregistrer R2 |
|
VAL_R3 |
n |
I/O à enregistrer R3 |
|
VAL_R4 |
n |
I/O à enregistrer R4 |
|
VAL_R5 |
n |
I/O à enregistrer R5 |
|
VAL_R6 |
n |
I/O à enregistrer R6 |
|
VAL_R7 |
n |
I/O à enregistrer R7 |
|
VAL_R8 |
n |
I/O à enregistrer R8 |
|
VAL_R9 |
n |
I/O à enregistrer R9 |
|
VAL_R10 |
n |
I/O à enregistrer R10 |
Les messages "Ah réels"
|
Champ |
Valeur |
Description |
|
TYPE_ID |
100 |
|
|
ACTION_ID |
103 |
Ampères/heure réels |
|
LOAD_ID |
n |
Numéro de la charge |
|
MACHINE_ID |
n |
Numéro de la machine |
|
MACHINE_NB |
n |
Numéro de la branche de machine |
|
POSITION_NB |
n |
Numéro de position |
|
VAL_N1 |
n |
Différence entre ah réel et ah théor du redresseur 1 (ë) |
|
VAL_N2 |
n |
Différence entre ah réel et ah théor du redresseur 2 (ë) |
|
VAL_N3 |
n |
Différence entre ah réel et ah théor du redresseur 3 (ë) |
|
VAL_N4 |
n |
Différence entre ah réel et ah théor du redresseur 4 (ë) |
|
VAL_N5 |
n |
Différence entre ah réel et ah théor du redresseur 5 (ë) |
|
VAL_N6 |
n |
Différence entre ah réel et ah théor du redresseur 6 (ë) |
|
VAL_N7 |
n |
Différence entre ah réel et ah théor du redresseur 7 (ë) |
|
VAL_N8 |
n |
Différence entre ah réel et ah théor du redresseur 8 (ë) |
|
VAL_N9 |
n |
Numéro du bras |
|
VAL_N10 |
n |
Numéro du rack |
|
VAL_R1 |
n |
Ampères/heure réels redresseur 1 (Ah) |
|
VAL_R2 |
n |
Ampères/heure réels redresseur 2 (Ah) |
|
VAL_R3 |
n |
Ampères/heure réels redresseur 3 (Ah) |
|
VAL_R4 |
n |
Ampères/heure réels redresseur 4 (Ah) |
|
VAL_R5 |
n |
Ampères/heure réels redresseur 5 (Ah) |
|
VAL_R6 |
n |
Ampères/heure réels redresseur 6 (Ah) |
|
VAL_R7 |
n |
Ampères/heure réels redresseur 7 (Ah) |
|
VAL_R8 |
n |
Ampères/heure réels redresseur 8 (Ah) |
La différence entre ah réels et théorique est positive si il y a trop d'ampères/heure et négative si pas assez.
Les messages "Ah théoriques"
|
Champ |
Valeur |
Description |
|
TYPE_ID |
100 |
|
|
ACTION_ID |
104 |
Ampères/heure théoriques |
|
LOAD_ID |
n |
Numéro de la charge |
|
MACHINE_ID |
n |
Numéro de la machine |
|
MACHINE_NB |
n |
Numéro de la branche de machine |
|
POSITION_NB |
n |
Numéro de position |
|
VAL_N9 |
n |
Numéro du bras |
|
VAL_N10 |
n |
Numéro du rack |
|
VAL_R1 |
n |
Ampères/heure théoriques redresseur 1 (Ah) |
|
VAL_R2 |
n |
Ampères/heure théoriques redresseur 2 (Ah) |
|
VAL_R3 |
n |
Ampères/heure théoriques redresseur 3 (Ah) |
|
VAL_R4 |
n |
Ampères/heure théoriques redresseur 4 (Ah) |
|
VAL_R5 |
n |
Ampères/heure théoriques redresseur 5 (Ah) |
|
VAL_R6 |
n |
Ampères/heure théoriques redresseur 6 (Ah) |
|
VAL_R7 |
n |
Ampères/heure théoriques redresseur 7 (Ah) |
|
VAL_R8 |
n |
Ampères/heure théoriques redresseur 8 (Ah) |
Les messages "Courants moyens"
|
Champ |
Valeur |
Description |
|
TYPE_ID |
100 |
|
|
ACTION_ID |
105 |
Ampères/heure théoriques |
|
LOAD_ID |
n |
Numéro de la charge |
|
MACHINE_ID |
n |
Numéro de la machine |
|
MACHINE_NB |
n |
Numéro de la branche de machine |
|
POSITION_NB |
n |
Numéro de position |
|
VAL_N9 |
n |
Numéro du bras |
|
VAL_N10 |
n |
Numéro du rack |
|
VAL_R1 |
n |
Courant moyen redresseur 1 (A) |
|
VAL_R2 |
n |
Courant moyen redresseur 2 (A) |
|
VAL_R3 |
n |
Courant moyen redresseur 3 (A) |
|
VAL_R4 |
n |
Courant moyen redresseur 4 (A) |
|
VAL_R5 |
n |
Courant moyen redresseur 5 (A) |
|
VAL_R6 |
n |
Courant moyen redresseur 6 (A) |
|
VAL_R7 |
n |
Courant moyen redresseur 7 (A) |
|
VAL_R8 |
n |
Courant moyen redresseur 8 (A) |
Les messages "Tensions moyennes"
|
Champ |
Valeur |
Description |
|
TYPE_ID |
100 |
|
|
ACTION_ID |
106 |
Tension moyenne |
|
LOAD_ID |
n |
Numéro de la charge |
|
MACHINE_ID |
n |
Numéro de la machine |
|
MACHINE_NB |
n |
Numéro de la branche de machine |
|
POSITION_NB |
n |
Numéro de position |
|
VAL_N9 |
n |
Numéro du bras |
|
VAL_N10 |
n |
Numéro du rack |
|
VAL_R1 |
n |
Tension moyenne redresseur 1 (Volt) |
|
VAL_R2 |
n |
Tension moyenne redresseur 2 (Volt) |
|
VAL_R3 |
n |
Tension moyenne redresseur 3 (Volt) |
|
VAL_R4 |
n |
Tension moyenne redresseur 4 (Volt) |
|
VAL_R5 |
n |
Tension moyenne redresseur 5 (Volt) |
|
VAL_R6 |
n |
Tension moyenne redresseur 6 (Volt) |
|
VAL_R7 |
n |
Tension moyenne redresseur 7 (Volt) |
|
VAL_R8 |
n |
Tension moyenne redresseur 8 (Volt) |
Les messages "Courant max."
|
Champ |
Valeur |
Description |
|
TYPE_ID |
100 |
|
|
ACTION_ID |
107 |
Courant maximum |
|
LOAD_ID |
n |
Numéro de la charge |
|
MACHINE_ID |
n |
Numéro de la machine |
|
MACHINE_NB |
n |
Numéro de la branche de machine |
|
POSITION_NB |
n |
Numéro de position |
|
VAL_N9 |
n |
Numéro du bras |
|
VAL_N10 |
n |
Numéro du rack |
|
VAL_R1 |
n |
Courant max. redresseur 1 (A) |
|
VAL_R2 |
n |
Courant max. redresseur 2 (A) |
|
VAL_R3 |
n |
Courant max. redresseur 3 (A) |
|
VAL_R4 |
n |
Courant max. redresseur 4 (A) |
|
VAL_R5 |
n |
Courant max. redresseur 5 (A) |
|
VAL_R6 |
n |
Courant max. redresseur 6 (A) |
|
VAL_R7 |
n |
Courant max. redresseur 7 (A) |
|
VAL_R8 |
n |
Courant max. redresseur 8 (A) |
Les messages "Tensions max."
|
Champ |
Valeur |
Description |
|
TYPE_ID |
100 |
|
|
ACTION_ID |
108 |
Tension maximum |
|
LOAD_ID |
n |
Numéro de la charge |
|
MACHINE_ID |
n |
Numéro de la machine |
|
MACHINE_NB |
n |
Numéro de la branche de machine |
|
POSITION_NB |
n |
Numéro de position |
|
VAL_N9 |
n |
Numéro du bras |
|
VAL_N10 |
n |
Numéro du rack |
|
VAL_R1 |
n |
Tension max. redresseur 1 (Volt) |
|
VAL_R2 |
n |
Tension max. redresseur 2 (Volt) |
|
VAL_R3 |
n |
Tension max. redresseur 3 (Volt) |
|
VAL_R4 |
n |
Tension max. redresseur 4 (Volt) |
|
VAL_R5 |
n |
Tension max. redresseur 5 (Volt) |
|
VAL_R6 |
n |
Tension max. redresseur 6 (Volt) |
|
VAL_R7 |
n |
Tension max. redresseur 7 (Volt) |
|
VAL_R8 |
n |
Tension max. redresseur 8 (Volt) |
Les messages "Consignes de courant"
|
Champ |
Valeur |
Description |
|
TYPE_ID |
100 |
Take/Drop |
|
ACTION_ID |
109 |
Consignes de courant |
|
LOAD_ID |
n |
Numéro de la charge |
|
MACHINE_ID |
n |
Numéro de la machine |
|
MACHINE_NB |
n |
Numéro de la branche de machine |
|
POSITION_NB |
n |
Numéro de position |
|
VAL_N1 |
0 |
Type de régulation (0 :I 1 :U) du redresseur N° 1 |
|
VAL_N2 |
n |
Type de régulation (0 :I 1 :U) du redresseur N° 2 |
|
VAL_N3 |
n |
Type de régulation (0 :I 1 :U) du redresseur N° 3 |
|
VAL_N4 |
n |
Type de régulation (0 :I 1 :U) du redresseur N° 4 |
|
VAL_N5 |
n |
Type de régulation (0 :I 1 :U) du redresseur N° 5 |
|
VAL_N6 |
n |
Type de régulation (0 :I 1 :U) du redresseur N° 6 |
|
VAL_N7 |
n |
Type de régulation (0 :I 1 :U) du redresseur N° 7 |
|
VAL_N8 |
n |
Type de régulation (0 :I 1 :U) du redresseur N° 8 |
|
VAL_N9 |
n |
Numéro du bras |
|
VAL_N10 |
n |
Numéro du rack |
|
VAL_R1 |
n |
Consigne de courant du redresseur N° 1 |
|
VAL_R2 |
n |
Consigne de courant du redresseur N° 2 |
|
VAL_R3 |
n |
Consigne de courant du redresseur N° 3 |
|
VAL_R4 |
n |
Consigne de courant du redresseur N° 4 |
|
VAL_R5 |
n |
Consigne de courant du redresseur N° 5 |
|
VAL_R6 |
n |
Consigne de courant du redresseur N° 6 |
|
VAL_R7 |
n |
Consigne de courant du redresseur N° 7 |
|
VAL_R8 |
n |
Consigne de courant du redresseur N° 8 |
Les messages "Consignes de tension"
|
Champ |
Valeur |
Description |
|
TYPE_ID |
100 |
Take/Drop |
|
ACTION_ID |
110 |
Consignes de tension |
|
LOAD_ID |
n |
Numéro de la charge |
|
MACHINE_ID |
n |
Numéro de la machine |
|
MACHINE_NB |
n |
Numéro de la branche de machine |
|
POSITION_NB |
n |
Numéro de position |
|
VAL_N1 |
0 |
Type de régulation (0 :I 1 :U) du redresseur N° 1 |
|
VAL_N2 |
n |
Type de régulation (0 :I 1 :U) du redresseur N° 2 |
|
VAL_N3 |
n |
Type de régulation (0 :I 1 :U) du redresseur N° 3 |
|
VAL_N4 |
n |
Type de régulation (0 :I 1 :U) du redresseur N° 4 |
|
VAL_N5 |
n |
Type de régulation (0 :I 1 :U) du redresseur N° 5 |
|
VAL_N6 |
n |
Type de régulation (0 :I 1 :U) du redresseur N° 6 |
|
VAL_N7 |
n |
Type de régulation (0 :I 1 :U) du redresseur N° 7 |
|
VAL_N8 |
n |
Type de régulation (0 :I 1 :U) du redresseur N° 8 |
|
VAL_N9 |
n |
Numéro du bras |
|
VAL_N10 |
n |
Numéro du rack |
|
VAL_R1 |
n |
Consigne de tension du redresseur N° 1 |
|
VAL_R2 |
n |
Consigne de tension du redresseur N° 2 |
|
VAL_R3 |
n |
Consigne de tension du redresseur N° 3 |
|
VAL_R4 |
n |
Consigne de tension du redresseur N° 4 |
|
VAL_R5 |
n |
Consigne de tension du redresseur N° 5 |
|
VAL_R6 |
n |
Consigne de tension du redresseur N° 6 |
|
VAL_R7 |
n |
Consigne de tension du redresseur N° 7 |
|
VAL_R8 |
n |
Consigne de tension du redresseur N° 8 |
Les messages "Start job OSCILine"
|
Champ |
Valeur |
Description |
|
TYPE_ID |
100 |
Take/Drop |
|
ACTION_ID |
112 |
Start Job |
|
LOAD_ID |
n |
Numéro de la charge |
|
MACHINE_ID |
n |
Numéro de la machine |
|
MACHINE_NB |
n |
Numéro de la branche de machine |
|
POSITION_NB |
n |
Numéro de position |
|
VAL_N1 |
0 |
|
|
VAL_N2 |
n |
Numéro de rack |
|
VAL_N3 |
0 |
|
|
VAL_N4 |
n |
Consigne |
|
VAL_N7 |
n |
I/O à enregistrer I1 |
|
VAL_N8 |
n |
I/O à enregistrer I2 |
|
VAL_N9 |
n |
Job index |
|
VAL_N10 |
n |
Job num |
|
VAL_R1 |
n |
I/O à enregistrer R1 |
|
VAL_R2 |
n |
I/O à enregistrer R2 |
|
VAL_R3 |
n |
I/O à enregistrer R3 |
|
VAL_R4 |
n |
I/O à enregistrer R4 |
|
VAL_R5 |
n |
Ah réel avant ou I/O à enregistrer R5 |
|
VAL_R6 |
n |
Ah réel arrière ou I/O à enregistrer R6 |
|
VAL_R7 |
n |
Ah théorique avant ou I/O à enregistrer R7 |
|
VAL_R8 |
n |
Ah théorique arrière ou I/O à enregistrer R8 |
|
VAL_R9 |
n |
I/O à enregistrer R9 |
|
VAL_R10 |
n |
I/O à enregister R10 |
|
VAL_S1 |
n |
Nom du Job |
Les messages "End job OSCILine"
|
Champ |
Valeur |
Description |
|
TYPE_ID |
100 |
Take/Drop |
|
ACTION_ID |
111 |
End Job |
|
LOAD_ID |
n |
Numéro de la charge |
|
MACHINE_ID |
n |
Numéro de la machine |
|
MACHINE_NB |
n |
Numéro de la branche de machine |
|
POSITION_NB |
n |
Numéro de position |
|
VAL_N1 |
0 |
|
|
VAL_N2 |
n |
Numéro de rack |
|
VAL_N3 |
n |
Temps actuel |
|
VAL_N4 |
n |
Consigne |
|
VAL_N7 |
n |
I/O à enregistrer I1 |
|
VAL_N8 |
n |
I/O à enregistrer I2 |
|
VAL_N9 |
n |
Job index |
|
VAL_N10 |
n |
Job num |
|
VAL_R1 |
n |
I/O à enregistrer R1 |
|
VAL_R2 |
n |
I/O à enregistrer R2 |
|
VAL_R3 |
n |
I/O à enregistrer R3 |
|
VAL_R4 |
n |
I/O à enregistrer R4 |
|
VAL_R5 |
n |
Ah réel avant ou I/O à enregistrer R5 |
|
VAL_R6 |
n |
Ah réel arrière ou I/O à enregistrer R6 |
|
VAL_R7 |
n |
Ah théorique avant ou I/O à enregistrer R7 |
|
VAL_R8 |
n |
Ah théorique arrière ou I/O à enregistrer R8 |
|
VAL_R9 |
n |
I/O à enregistrer R9 |
|
VAL_R10 |
n |
I/O à enregister R10 |
|
VAL_S1 |
n |
Nom du Job |
|
VAL_B1 |
n |
% d'erreur entre les Ah théoriques et le Ah réels. Ce % peut être modifié par l'utilisateur dans le programme client. |
Les messages "Log Job Data OSCIILine"
|
Champ |
Valeur |
Description |
|
TYPE_ID |
100 |
Take/Drop |
|
ACTION_ID |
113 |
Log Job Data |
|
LOAD_ID |
n |
Numéro de la charge |
|
MACHINE_ID |
n |
Numéro de la machine |
|
MACHINE_NB |
n |
Numéro de la branche de machine |
|
POSITION_NB |
n |
Numéro de position |
|
VAL_N1 |
n |
Commande |
|
VAL_N2 |
n |
N° de rack |
|
VAL_N3 |
n |
Numéro du job |
|
VAL_N4 |
n |
Numéro du prochain Job |
|
VAL_N5 |
n |
Temps |
|
VAL_N6 |
n |
Paramètre 1 |
|
VAL_N7 |
n |
Paramètre 2 |
Les messages "Log Job Command OSCILine"
|
Champ |
Valeur |
Description |
|
TYPE_ID |
100 |
Take/Drop |
|
ACTION_ID |
114 |
Log Job Data |
|
LOAD_ID |
n |
Numéro de la charge |
|
MACHINE_ID |
n |
Numéro de la machine |
|
MACHINE_NB |
n |
Numéro de la branche de machine |
|
POSITION_NB |
n |
Numéro de position |
|
VAL_N1 |
n |
Commande |
|
VAL_N2 |
n |
N° de rack |
Les messages "Log Job Status change OSCILine"
|
Champ |
Valeur |
Description |
|
TYPE_ID |
100 |
Take/Drop |
|
ACTION_ID |
115 |
Log Job Data |
|
LOAD_ID |
n |
Numéro de la charge |
|
MACHINE_ID |
n |
Numéro de la machine |
|
MACHINE_NB |
n |
Numéro de la branche de machine |
|
POSITION_NB |
n |
Numéro de position |
|
VAL_N1 |
n |
Status |
|
VAL_N2 |
n |
N° de rack |
|
VAL_S2 |
n |
Statut en texte clair |
Les messages "RecDBOut"
|
Champ |
Valeur |
Description |
|
TYPE_ID |
100 |
|
|
ACTION_ID |
121..125 |
Enregistrement de db à la sortie d'une charge |
|
LOAD_ID |
n |
Numéro de la charge |
|
MACHINE_ID |
n |
Numéro de la machine |
|
MACHINE_NB |
n |
Numéro de la branche de machine |
|
POSITION_NB |
n |
Numéro de position |
|
VAL_N1 |
n |
Valeur entière N° 1 |
|
VAL_N2 |
n |
Valeur entière N° 2 |
|
VAL_N3 |
n |
Valeur entière N° 3 |
|
VAL_N4 |
n |
Valeur entière N° 4 |
|
VAL_N5 |
n |
Valeur entière N° 5 |
|
VAL_N6 |
n |
Valeur entière N° 6 |
|
VAL_N7 |
n |
Valeur entière N° 7 |
|
VAL_N8 |
n |
Valeur entière N° 8 |
|
VAL_N9 |
n |
Numéro du bras |
|
VAL_N10 |
n |
Numéro du rack |
|
VAL_R1 |
n |
Valeur réelle N° 1 |
|
VAL_R2 |
n |
Valeur réelle N° 2 |
|
VAL_R3 |
n |
Valeur réelle N° 3 |
|
VAL_R4 |
n |
Valeur réelle N° 4 |
|
VAL_R5 |
n |
Valeur réelle N° 5 |
|
VAL_R6 |
n |
Valeur réelle N° 6 |
|
VAL_R7 |
n |
Valeur réelle N° 7 |
|
VAL_R8 |
n |
Valeur réelle N° 8 |
Les messages "RecDBIn"
|
Champ |
Valeur |
Description |
|
TYPE_ID |
100 |
|
|
ACTION_ID |
131..135 |
Enregistrement de db à l'entrée d'une charge |
|
LOAD_ID |
n |
Numéro de la charge |
|
MACHINE_ID |
n |
Numéro de la machine |
|
MACHINE_NB |
n |
Numéro de la branche de machine |
|
POSITION_NB |
n |
Numéro de position |
|
VAL_N1 |
n |
Valeur entière N° 1 |
|
VAL_N2 |
n |
Valeur entière N° 2 |
|
VAL_N3 |
n |
Valeur entière N° 3 |
|
VAL_N4 |
n |
Valeur entière N° 4 |
|
VAL_N5 |
n |
Valeur entière N° 5 |
|
VAL_N6 |
n |
Valeur entière N° 6 |
|
VAL_N7 |
n |
Valeur entière N° 7 |
|
VAL_N8 |
n |
Valeur entière N° 8 |
|
VAL_N9 |
n |
Numéro du bras |
|
VAL_N10 |
n |
Numéro du rack |
|
VAL_R1 |
n |
Valeur réelle N° 1 |
|
VAL_R2 |
n |
Valeur réelle N° 2 |
|
VAL_R3 |
n |
Valeur réelle N° 3 |
|
VAL_R4 |
n |
Valeur réelle N° 4 |
|
VAL_R5 |
n |
Valeur réelle N° 5 |
|
VAL_R6 |
n |
Valeur réelle N° 6 |
|
VAL_R7 |
n |
Valeur réelle N° 7 |
|
VAL_R8 |
n |
Valeur réelle N° 8 |
Les messages "Login users"
|
Champ |
Valeur |
Description |
|
TYPE_ID |
200 |
Login |
|
ACTION_ID |
201,202 |
Login / Logout |
|
MACHINE_ID |
n |
Numéro de la machine |
|
VAL_S1 |
n |
Nom de l'utilisateur |
Les messages "Alarmes"
|
Champ |
Valeur |
Description |
|
TYPE_ID |
300 |
Alarme |
|
ACTION_ID |
301,302,303 |
Return/Ack/Alarm |
|
LOAD_ID |
n |
Numéro de la charge |
|
MACHINE_ID |
n |
Numéro de la machine |
|
MACHINE_NB |
n |
Numéro de la branche de machine |
|
POSITION_NB |
n |
Numéro de position |
|
VAL_N1 |
n |
Numéro de l'alarme |
|
VAL_N2 |
n |
Type d'alarme |
|
VAL_N3 |
n |
Groupe de l'alarme |
|
VAL_N4 |
n |
Numéro du message |
|
VAL_N5 |
n |
Priorité de l'alarme |
|
VAL_N6 |
n |
=1 Indique une alarme de conformité. |
|
VAL_N7 |
n |
Classe de l'alarme (à partir de 10.58.0.0) |
|
VAL_N8 |
n |
Colonne OPT1 de la définition des alarmes (à partir de 10.58.0.0) |
|
VAL_N9 |
n |
Colonne OPT2 de la définition des alarmes (à partir de 10.58.0.0) |
|
VAL_R1 |
n |
Valeur |
Les messages "Log Items"
|
Champ |
Valeur |
Description |
|
TYPE_ID |
400 |
Logger |
|
ACTION_ID |
401 |
Log item |
|
MACHINE_ID |
n |
Numéro de la machine |
|
POSITION_NB |
n |
Numéro de position |
|
VAL_N1 |
n |
Numéro de l'enregistreur |
|
VAL_N2 |
n |
Numéro de l'I/O |
|
VAL_N3 |
n |
Numéro du DB |
|
VAL_N4 |
n |
Numéro du registre |
|
VAL_R1 |
n |
Valeur |
Les messages "Log Rectifier"
|
Champ |
Valeur |
Description |
|
TYPE_ID |
400 |
Logger |
|
ACTION_ID |
402 |
Rectifier |
|
LOAD_ID |
n |
Numéro de la charge |
|
MACHINE_ID |
n |
Numéro de la machine |
|
MACHINE_NB |
n |
Numéro de la branche de machine |
|
POSITION_NB |
n |
Numéro de position |
|
VAL_N1 |
n |
Numéro du redresseur |
|
VAL_N2 |
n |
Numéro de rack |
|
VAL_N3 |
n |
Numéro du step redresseur |
|
VAL_R1 |
n |
Courant |
|
VAL_R2 |
n |
Tension |
|
VAL_R3 |
n |
Consigne courant |
|
VAL_R4 |
n |
Consigne tension |
Les messages "Log Validation Data"
|
Champ |
Valeur |
Description |
|
TYPE_ID |
400 |
Logger |
|
ACTION_ID |
404 |
Log validation data |
|
MACHINE_ID |
n |
Numéro de la machine |
|
POSITION_NB |
n |
Numéro de position |
|
VAL_N1 |
n |
Numéro de l'enregistreur |
|
VAL_N2 |
n |
Numéro de l'I/O |
|
VAL_N3 |
n |
Numéro du DB |
|
VAL_N4 |
n |
Numéro du registre |
|
VAL_R1 |
n |
Valeur |
Les messages "Log Validation Windows"
|
Champ |
Valeur |
Description |
|
TYPE_ID |
400 |
Logger |
|
ACTION_ID |
405 |
Log validation Windows |
|
MACHINE_ID |
n |
Numéro de la machine |
|
POSITION_NB |
n |
Numéro de position |
|
VAL_N1 |
n |
Numéro de la fenêtre |
|
VAL_N2 |
n |
Numéro de la courbe |
|
VAL_N3 |
n |
Début de la fenêtre |
|
VAL_N4 |
n |
Fin de la fenêtre |
|
VAL_N5 |
n |
Durée minimum |
|
VAL_N6 |
n |
Temps effectif dans la fenêtre |
|
VAL_N7 |
n |
=0 conforme, =1 temps effectif trop court, =2 la position du n° de pas ne correspond pas au numéro de la position de la charge de référence, =3 le numéro de pas est plus grand que le nombre de pas de la charge de référence |
|
VAL_N8 |
n |
N° du pas de séquence |
|
VAL_R1 |
n |
Valeur Minimum |
|
VAL_R2 |
n |
Valeur maximum |
|
VAL_R3 |
n |
Valeur moyenne dans la fenêtre de référence |
|
VAL_S1 |
x |
Nom de la courbe |
Les messages "Rectifier setpoints"
|
Champ |
Valeur |
Description |
|
TYPE_ID |
400 |
Logger |
|
ACTION_ID |
406 |
Rectifier setpoint |
|
LOAD_ID |
n |
Numéro de la charge |
|
MACHINE_ID |
n |
Numéro de la machine |
|
MACHINE_NB |
n |
Numéro de la branche de machine |
|
POSITION_NB |
n |
Numéro de position |
|
VAL_N1 |
n |
Numéro du redresseur |
|
VAL_N2 |
n |
Numéro de rack |
|
VAL_N3 |
n |
Type de régulation 0=courant constant 1=tension constante |
|
VAL_R1 |
n |
Consigne de courant |
|
VAL_R2 |
n |
Consigne de tension |
Les messages "Mode programme"
|
Champ |
Valeur |
Description |
|
TYPE_ID |
500 |
Programme/Buffer |
|
ACTION_ID |
501 |
Mode programme |
|
MACHINE_ID |
n |
Numéro de la machine |
|
VAL_N1 |
0/1 |
0=STOP 1=AUTO |
|
VAL_N2 |
n |
Temps depuis dernier changement |
Les messages "Mode gare"
|
Champ |
Valeur |
Description |
|
TYPE_ID |
500 |
Programme/Buffer |
|
ACTION_ID |
502 |
Mode Buffer |
|
MACHINE_ID |
n |
Numéro de la machine |
|
VAL_N1 |
0/1 |
0=STOP 1=AUTO |
Les messages "Mode machine"
|
Champ |
Valeur |
Description |
|
TYPE_ID |
500 |
Programme/Buffer |
|
ACTION_ID |
503 |
Mode machine |
|
MACHINE_ID |
n |
Numéro de la machine |
|
VAL_N1 |
n |
Contenu de l'I/O machineState |
Les messages "Log Counters"
|
Champ |
Valeur |
Description |
|
TYPE_ID |
500 |
Logger |
|
ACTION_ID |
504 |
Log dosing |
|
MACHINE_ID |
n |
Numéro de la machine |
|
VAL_R1 |
n |
Valeur compteur N° 1 |
|
VAL_R2 |
n |
Valeur compteur N° 2 |
|
VAL_R3 |
n |
Valeur compteur N° 3 |
|
VAL_R4 |
n |
Valeur compteur N° 4 |
|
VAL_R5 |
n |
Valeur compteur N° 5 |
|
VAL_R6 |
n |
Valeur compteur N° 6 |
|
VAL_R7 |
n |
Valeur compteur N° 7 |
|
VAL_R8 |
n |
Valeur compteur N° 8 |
|
VAL_R9 |
n |
Valeur compteur N° 9 |
|
VAL_R10 |
n |
Valeur compteur N° 10 |
Les messages "Log Dosing"
|
Champ |
Valeur |
Description |
|
TYPE_ID |
500 |
Logger |
|
ACTION_ID |
505 |
Log dosing |
|
MACHINE_ID |
n |
Numéro de la machine |
|
VAL_N1 |
n |
Numéro de la cuve |
|
VAL_N2 |
n |
Numéro du produit |
|
VAL_R1 |
n |
Quantité |
Les messages "Log Exchange mode"
|
Champ |
Valeur |
Description |
|
TYPE_ID |
500 |
Logger |
|
ACTION_ID |
506 |
Log exchange mode |
|
MACHINE_ID |
n |
Numéro de la machine |
|
VAL_N1 |
n |
Mode exchange 0 :local 1 :server |
Les messages "Log Execute mode"
|
Champ |
Valeur |
Description |
|
TYPE_ID |
500 |
Logger |
|
ACTION_ID |
507 |
Log Execute mode |
|
MACHINE_ID |
n |
Numéro de la machine |
|
VAL_N1 |
n |
Numéro du mode |
Les messages "Log Inc Delay"
|
Champ |
Valeur |
Description |
|
TYPE_ID |
500 |
Logger |
|
ACTION_ID |
508 |
Log Inc Delay |
|
MACHINE_ID |
n |
Numéro de la machine |
|
VAL_N1 |
n |
Temps de délai retardé. |
Les messages "Start/Stop Server"
|
Champ |
Valeur |
Description |
|
TYPE_ID |
500 |
Logger |
|
ACTION_ID |
509 |
Mode server Start/Stop |
|
MACHINE_ID |
n |
Numéro de la machine |
|
VAL_N1 |
0/1 |
0=STOP 1=AUTO |
Les messages "Log dosing pumps"
|
Champ |
Valeur |
Description |
|
TYPE_ID |
500 |
Logger |
|
ACTION_ID |
510 |
Dosing pumps |
|
MACHINE_ID |
n |
Numéro de la machine |
|
VAL_N1 |
n |
Numéro de position initiales |
|
VAL_N2 |
n |
Numéro du produit ID (ou numéro de la pompe si pas défini) |
|
VAL_N3 |
0/1/2 |
Mode d'envoi : 0: Automatique 1: Manuel 2: Makeup |
|
VAL_N4 |
n |
Numéro de la position finales |
|
VAL_R1 |
n.0000 |
Quantité envoyée à l'automate |
|
VAL_S1 |
s |
Nom du produit chimique |
|
VAL_S2 |
s |
Nom et numéro de la position |
Les messages "Log makeup"
|
Champ |
Valeur |
Description |
|
TYPE_ID |
500 |
Logger |
|
ACTION_ID |
511 |
Makeup |
|
MACHINE_ID |
n |
Numéro de la machine |
|
VAL_N1 |
n |
Numéro de produit |
|
VAL_N2 |
n |
Numéro de la position de destination |
|
VAL_R1 |
n |
Quantité dosée |
Les messages "Log messages"
|
Champ |
Valeur |
Description |
|
TYPE_ID |
600 |
Message |
|
ACTION_ID |
601,602,603 |
Return/Ack/Alarm |
|
LOAD_ID |
n |
Numéro de la charge |
|
MACHINE_ID |
n |
Numéro de la machine |
|
MACHINE_NB |
n |
Numéro de la branche de machine |
|
POSITION_NB |
n |
Numéro de position |
|
VAL_N1 |
n |
Numéro du message |
|
VAL_N2 |
n |
Type du message |
|
VAL_N3 |
n |
Groupe du message |
|
VAL_N4 |
n |
Numéro du message |
|
VAL_R1 |
n |
Valeur |
Les messages "Log chemical change"
|
Champ |
Valeur |
Description |
|
TYPE_ID |
700 |
Log chemicals |
|
ACTION_ID |
701,702 |
701 log auto 702 log mannal |
|
MACHINE_ID |
n |
Numéro de la machine |
|
VAL_N1 |
n |
Numéro du produit chimique |
|
VAL_S1 |
n |
Nom du produit chimique |
|
VAL_S2 |
n |
Numéro de lot du produit |
Les messages "Equipment Controls"
|
Champ |
Valeur |
Description |
|
TYPE_ID |
800 |
Equipment controls |
|
ACTION_ID |
801 |
Log execution d'une commande d'équipement |
|
LOAD_ID |
n |
Numéro de la charge |
|
MACHINE_ID |
n |
Numéro de la machine |
|
MACHINE_NB |
n |
Numéro de la branche de machine |
|
POSITION_NB |
n |
Numéro de position |
|
VAL_N1 |
n |
Numéro de la commande position (1..150) |
|
VAL_N2 |
n |
Numéro de l'I/O |
|
VAL_N3 |
n |
Start time |
|
VAL_N4 |
n |
Start time type |
|
VAL_R1 |
n |
Data |
|
VAL_S1 |
n |
Nom de l'I/O |
Les messages "Equipment Start"
|
Champ |
Valeur |
Description |
|
TYPE_ID |
800 |
Equipment controls |
|
ACTION_ID |
802 |
Log initialisation des commandes d'une position |
|
LOAD_ID |
n |
Numéro de la charge |
|
MACHINE_ID |
n |
Numéro de la machine |
|
MACHINE_NB |
n |
Numéro de la branche de machine |
|
POSITION_NB |
n |
Numéro de position |
|
VAL_N1 |
n |
Numéro d'immersion |
Les messages "Puls Rectifier Steps"
|
Champ |
Valeur |
Description |
|
TYPE_ID |
5000 |
Puls rectifiers |
|
ACTION_ID |
5003 |
Log recitifier steps |
|
LOAD_ID |
n |
Numéro de la charge |
|
MACHINE_ID |
n |
Numéro de la machine |
|
VAL_N1 |
n |
Numéro du redresseur |
|
VAL_N2 |
n |
Numéro du step |
|
VAL_N3 |
n |
Numéro du Batch Step |
|
VAL_R1 |
n |
Courant 1 |
|
VAL_R2 |
n |
Courant 2 |
|
VAL_R3 |
n |
Temps de la pulse 1 |
|
VAL_R4 |
n |
Temps de la pulse 2 |
|
VAL_R5 |
n |
Courant moyen |
Les messages "MQTT DB Commands"
|
Champ |
Valeur |
Description |
|
TYPE_ID |
1000 |
MQTT Commands |
|
ACTION_ID |
1001 |
DB write commands |
|
MACHINE_ID |
n |
Numéro de la machine |
|
VAL_N1 |
n |
Fonction: 1: WriteBit 2: WriteWord 3: WriteFloat
|
|
VAL_N2 |
n |
Numéro du DB |
|
VAL_N3 |
n |
Numéro du Registre |
|
VAL_N4 |
n |
Numéro du Bit |
|
VAL_N5 |
n |
Donnée lors de l'écriture d'un entier. |
|
VAL_R1 |
n |
Donnée lors de l'écriture d'un real. |
|
VAL_B1 |
n |
Donnée lors de l'écriture d'un bit |
|
VAL_S1 |
n |
Nom de l'utilisateur |
|
VAL_S2 |
n |
Nom de l'application |
Les messages "MQTT Login"
|
Champ |
Valeur |
Description |
|
TYPE_ID |
1000 |
MQTT Commands |
|
ACTION_ID |
1002 |
Login |
|
MACHINE_ID |
n |
Numéro de la machine |
|
VAL_N1 |
n |
0: Login fail 1 :Login ok |
|
VAL_S1 |
n |
Nom de l'utilisateur |
|
VAL_S2 |
n |
Nom de l'application |
Les messages "MQTT Hoists commands"
|
Champ |
Valeur |
Description |
|
TYPE_ID |
1000 |
MQTT Commands |
|
ACTION_ID |
1004 |
Hoist command |
|
MACHINE_ID |
n |
Numéro de la machine |
|
VAL_N1 |
n |
Numéro de robot |
|
VAL_N2 |
n |
Commande 1: Monter 2: Descente 3: Déplacement horizontal 5: Ajustement de la position 6: Enregistrement de la position du robot dans la position |
|
VAL_N3 |
n |
Paramètre: Si fonction 1 et 2 alors = type de montée/descente Si fonction 5 = delta à ajouter/soustraire de la position |
|
VAL_N4 |
n |
Numéro de position |
|
VAL_S1 |
n |
Nom de l'utilisateur |
|
VAL_S2 |
n |
Nom de l'application |
Les messages "Hoist change"
|
Champ |
Valeur |
Description |
|
TYPE_ID |
1100 |
Hoist change |
|
ACTION_ID |
1101 |
Hoist change |
|
LOAD_ID |
n |
Numéro de la charge |
|
MACHINE_ID |
n |
Numéro de la machine |
|
VAL_N1 |
n |
N° du robot |
|
VAL_N2 |
n |
N° du rack |
|
VAL_N3 |
n |
Registre de commande 1 |
|
VAL_N4 |
n |
Registre de commande 2 |
|
VAL_N5 |
n |
Registre de statut 1 |
|
VAL_N6 |
n |
Registre de statut 2 |
|
VAL_N7 |
n |
Registre d'alarmes |
|
VAL_N8 |
n |
Registre de messages |
Les messages "LastHour DailyData"
|
Champ |
Valeur |
Description |
|
TYPE_ID |
1200 |
DailyData |
|
ACTION_ID |
1201 |
LastHour DailyData |
|
MACHINE_ID |
n |
Numéro de la machine |
|
VAL_N1 |
n |
Batches IN |
|
VAL_N2 |
n |
Batches OUT |
|
VAL_N3 |
n |
Reliability |
|
VAL_N4 |
n |
Utilisation |
|
VAL_N5 |
n |
Error Hoist |
|
VAL_N6 |
n |
Alarm On Load |
|
VAL_N7 |
n |
Manu mode |
|
VAL_N8 |
n |
Power On |
|
VAL_N9 |
n |
Safety Door |
Les messages "Position En Service"
|
Champ |
Valeur |
Description |
|
TYPE_ID |
1300 |
Position En/Hors service |
|
ACTION_ID |
1301 |
Position en service |
|
MACHINE_ID |
n |
Numéro de la machine |
|
VAL_N1 |
n |
Position |
Les messages "Position Hors Service"
|
Champ |
Valeur |
Description |
|
TYPE_ID |
1300 |
Position En/Hors service |
|
ACTION_ID |
1302 |
Position Hors service |
|
MACHINE_ID |
n |
Numéro de la machine |
|
VAL_N1 |
n |
Position |
La structure de la base de données "Articles"
Cette base de données est composée de 5 tables :
|
LOADS |
Table de chargement prédéfinie |
|
PARTS |
Table des articles |
|
PROCESSES |
Table des gammes de traitement |
|
TOOLS |
Table des outillages |
|
REF_TOOLING |
Table de référencement des outillages |
|
CONTROLS |
Table des contrôles en sortie à effectuer |
La table "Parts"
Cette table contient les différentes pièces (articles) utilisées sur les machines.
|
Champ |
Type |
Description |
|
REC_ID |
BigInt PK |
Numéro d'identification. Ce champ sera la clef primaire de la table |
|
REFERENCE_C |
Varchar(64) |
Référence de la pièce. Ce champ sera référencé dans une table d'index |
|
DESCRIPTION_C |
Varchar(255) |
Description de la pièce. |
|
CREATE_DT |
DateTime |
Date et heure de création de la pièce |
|
CREATE_USER_C |
Varchar(128) |
Nom de l'utilisateur ayant créé la pièce |
|
MODIFY_DT |
Date |
Date et heure de la dernière modification |
|
MODIFY_USER_C |
Varchar(128) |
Nom de l'utilisateur ayant modification |
|
MACHINEID_N |
Smallint |
Numéro de la machine |
|
TYPE_C |
Varchar(64) |
Type de pièce. |
|
CLIENT_C |
Varchar(64) |
Nom du client final. |
|
USER_INFO_C |
Varchar(255) |
Information à afficher à l'utilisateur lors du chargement |
|
METAL_AREA_A_N |
Float |
Surface métallique A de la pièce (surface avant pour PCB) |
|
METAL_AREA_B_N |
Float |
Surface métallique B de la pièce (surface arrière pour PCB) |
|
CHEMICAL_AREA_N |
Float |
Surface totale de la pièce |
|
UNIT_AREA_A_N |
SmallInt |
Unité de surface pour la surface métallique A |
|
UNIT_AREA_B_N |
SmallInt |
Unité de surface pour la surface métallique B |
|
UNIT_CHEMICAL_AREA_N |
SmallInt |
Unité de surface pour la surface totale |
|
WEIGHT_N |
Float |
Poids de la pièce |
|
UNIT_WEIGHT_C |
SmallInt |
Unité de poids pour le poids de la pièce |
|
PARTCOUNT_N |
Integer |
Nombre de pièces disponibles en stock |
|
TOTALPART_N |
Integer |
pas utilisé |
La table "Tools"
Cette table contient les différents outillages utilisés sur les machines.
|
Champ |
Type |
Description |
|
REC_ID |
BitInt PK |
Numéro d'identification. Ce champ sera la clef primaire de la table |
|
REFERENCE_C |
Varchar(64) |
Nom de l'outillage. Ce champ sera référencé dans une table d'index. |
|
DESCRIPTION_C |
Varchar(255) |
Description de l'outillage. |
|
CREATE_DT |
DateTime |
Date et heure de la création de l'outillage |
|
CREATE_USER_C |
Varchar(128) |
Nom de l'utilisateur ayant créé l'outillage |
|
MODIFY_DT |
DateTime |
Date et heure de la dernière modification |
|
MODIFY_USER_C |
Varchar(128) |
Nom de l'utilisateur ayant fait la dernière modification |
|
MACHINE_ID |
Smallint |
Numéro de la machine |
|
TYPE_C |
Varchar(64) |
Type d'outillage |
|
USER_INFO_C |
Varchar(255) |
Information à afficher à l'utilisateur lors du chargement |
|
TOOL_ID |
Integer |
Numéro d'identification de l'outillage |
|
METAL_AREA_A_N |
Float |
Surface métallique A de l'outillage. |
|
METAL_AREA_B_N |
Float |
Surface métallique B de l'outillage |
|
CHEMICAL_AREA_N |
Float |
Surface totale immergée de l'outillage |
|
MAX_CURRENT_N |
Float |
Courant maximum autorisé. |
|
UNIT_AREA_A_N |
Smallint |
Unité de la surface A: 0:mm2 1:cm2 2:dm2 3:m2 4:in2 5:ft2 |
|
UNIT_AREA_B_N |
Smallint |
Unité de la surface B |
|
UNIT_CHEMICAL_AREA_N |
Smallint |
Unité de la surface chimique |
|
MAX_WEIGHT_N |
Float |
Poids maximum autorisé |
|
UNIT_MAX_WEIGHT_N |
Smallint |
Unité du poids: 0:g 1:Kg 2:lb 3:oz. |
|
MIN_PART_N |
Integer |
Nombre minimum de pièces |
|
MAX_PART_N |
Integer |
Nombre maximum de pièces autorisé |
|
MIN_SURFACE_N |
Float |
Surface minimale |
|
MAX_SURFACE_N |
Float |
Surface maximale |
|
UNIT_MIN_SURFACE_N |
Smallint |
Unité de la surface minimale |
|
UNIT_MAX_SURFACE_N |
Smallint |
Unité de la surface maximale |
|
TOTALUSE_N |
Integer |
Nombre total d'utilisation de l'outillage |
|
TOTALUSE_LIMIT_N |
Integer |
Limite d'utilisation autorisée |
|
INC_NOGALVANIC_N |
Smallint |
0: Incrément le nombre d'utilisation seulement avec les gamme passant pas une cuve de déposition électro. 1: Incrément pour toues les gammes |
|
TOTALUSE_NOGALVANIC_N |
Integer |
Nombre d'utilisation non galvanique |
|
TOTALUSE_GALVANIC_N |
Integer |
Nombre total d'utilisation galvanique |
|
RFID_C |
Varchar(32) |
Numéro de code du RFID utilisé pour identifier l'outillage |
|
LOCATION_N |
Smallint |
Lieu où se trouve l'outillage: 0: Indéterminé 1: stockage 2: Production 3: Accrochage 4: Décrochage 5: Stripage |
|
LASTSTRIP_DT |
Datetime |
Date du dernier stripage |
|
LASTSTRIPBY_C |
Varchar(64) |
Nom de l'utilisateur ayant effectué le dernier stripage |
|
STARTINGDATE_DT |
DateTime |
Date de mise en service |
|
ENDINGDATE_DT |
DateTime |
Date de maintenance ou de retrait de l'outillage |
|
DISABLED_N |
Smallint |
0: En service 1=Hors service |
|
DISABLEREASON_C |
Varchar(80) |
Raison de la mise hors service |
|
WORKOUT_N |
Float |
Quantité d'entrainement de l'outillage |
|
PICTURE_F |
String |
Nom du fichier image de l'outillage |
La table "REF_TOOLING"
Cette table contient les liaisons entre pièces et outillages. Certaines pièces devant utiliser des outillages spécifiques.
|
Champ |
Type |
Description |
|
REC_ID |
BitInt PK |
Numéro d'identification |
|
MACHINEID_N |
Smallint |
Numéro de la machine |
|
PARTREF |
Varchar(64) |
Référence de la pièce |
|
TOOLREF |
Varchar(64) |
Référence de l'outillage |
La table "PROCESSES"
Cette table contient les données des gammes de traitement.
|
Champ |
Type |
Fonction |
|
REC_ID |
BigInt PK |
Numéro de gamme. |
|
REFERENCE_C |
Varchar(64) |
Nom de la gamme |
|
DESCRIPTION_C |
Varchar(255) |
Description de la gamme. |
|
CREATE_DT |
DateTime |
Date et heure de la création de la gamme |
|
CREATE_USER_C |
Varchar(128) |
Utilisateur ayant créé la gamme |
|
MODIFY_DT |
DateTime |
Date et heure de la dernière modification |
|
MODIFY_USER_C |
Varchar(128) |
Utilisateur ayant modifié la gamme en dernier |
|
MACHINEID_N |
Smallint |
Numéro de la machine |
|
PROG_NB_N |
Integer |
Numéro de programme. |
|
PROG_VER_N |
Integer |
Numéro de version du programme |
|
MODE_NB_N |
Integer |
Numéro de mode. |
|
MODE_VER_N |
Integer |
Numéro de version du mode |
|
SUPPORT_TYPE_N |
Integer |
Type de support |
|
UP_TYPE_N |
Integer |
Type de montée |
|
DOWN_TYPE_N |
Integer |
Type de descente |
|
DRIP_TIME_N |
Integer |
Temps d'égouttage |
|
ADJUST_TYPE_N |
Integer |
Mode d'ajustement des temps/densité/épaisseur |
|
TB_COUNT_N |
Integer |
Nombre de blocs de traitement |
|
DENSITY_TYPE_N |
Integer |
Mode de fonctionnement de la densité de courant : pondération ou densité réelle |
|
TB1_N |
Integer |
Numéro de bloc de traitement N° 1 |
|
GROUP1_N |
Integer |
Numéro du groupe du bloc de traitement N° 1 |
|
POSITION1_N |
Integer |
Numéro de position du bloc de traitement N° 1 |
|
SINGLE_POS1_N |
Integer |
Numéro de la position forcée du groupe du bloc de traitement N° 1 |
|
TIME1_N |
Integer |
Temps d'immersion en secondes dans le bloc de traitement N° 1 |
|
CYCLE_COUNT1_N |
Integer |
Nombre de cycle dans le bloc de traitement N° 1 |
|
FORM1_N |
Integer |
Numéro de la forme de courant à utiliser dans le bloc de traitement N° 1 |
|
THICKNESS1_N |
Float |
Epaisseur désirée en um dans le bloc de traitement N° 1 |
|
DENSITY1_N |
Float |
Densité de courant à utiliser dans le bloc de traitement N° 1 |
|
VOLTAGE1_N |
Float |
Tension à utiliser dans le bloc de traitement N° 1 lorsque le type de bain = Dégraissage Electro |
|
TB2_N |
Integer |
Numéro de bloc de traitement N° 2 |
|
GROUP2_N |
Integer |
Numéro du groupe du bloc de traitement N° 2 |
|
POSITION2_N |
Integer |
Numéro de position du bloc de traitement N° 2 |
|
SINGLE_POS2_N |
Integer |
Numéro de la position forcée du groupe du bloc de traitement N° 2 |
|
TIME2_N |
Integer |
Temps d'immersion en secondes dans le bloc de traitement N° 2 |
|
CYCLE_COUNT2_N |
Integer |
Nombre de cycle dans le bloc de traitement N° 2 |
|
FORM2_N |
Integer |
Numéro de la forme de courant à utiliser dans le bloc de traitement N° 2 |
|
THICKNESS2_N |
Float |
Epaisseur désirée en um dans le bloc de traitement N° 2 |
|
DENSITY2_N |
Float |
Densité de courant à utiliser dans le bloc de traitement N° 2 |
|
VOLTAGE2_N |
Float |
Tension à utiliser dans le bloc de traitement N° 2 lorsque le type de bain = Dégraissage Electro |
|
Etc... jusqu'à 8 |
|
|
|
SEQUENCE_T |
Varchar(MAX) |
Fichier séquence |
|
COMMAND_T |
Varchar(MAX) |
Fichier des commandes d'équipements |
|
TAGNAME_C |
Varchar(64) |
Etiquette associée à la référence |
|
START_MODE_N |
Smallint |
Numéro du mode de démarrage |
|
SELECT_MODE_N |
Smallint |
Numéro de mode de sélection |
|
ROTATION_N |
Smallint |
Type de rotation |
|
VERSION_N |
Integer |
Numéro de version de la gamme |
|
COMMENT_C |
Varchar(250) |
Commentaire sur la version |
La table "LOADS"
Cette table contient la liste des charges prédéfinies permettant d'être directement chargées sur les postes de charge des machines.
|
Champ |
Type |
Fonction |
|
REC_ID |
Integer PK |
Numéro d'identification |
|
REFERENCE_C |
Varchar(64) |
Nom de la charge |
|
DESCRIPTION_C |
Varchar(255) |
Description de la charge |
|
CREATE_DT |
DateTime |
Date et heure de la création de la charge |
|
CREATE_USER_C |
Varchar(128) |
Utilisateur ayant créé la charge |
|
MODIFY_DT |
DateTime |
Date et heure de la dernière modification |
|
MODIFY_USER_C |
Varchar(128) |
Utilisateur ayant modifié la charge en dernier |
|
MACHINEID_N |
Smallint |
Numéro de la machine |
|
TOOL_C |
Varchar(64) |
Nom de l'outillage à utiliser |
|
PART1_C |
Varchar(64) |
Nom de l'article N° 1 |
|
PART1_COUNT_N |
Integer |
Nombre de pièce de l'article N° 1 |
|
PART2_C |
Varchar(64) |
Nom de l'article N° 2 |
|
PART2_COUNT_N |
Integer |
Nombre de pièce de l'article N° 2 |
|
PART3_C |
Varchar(64) |
Nom de l'article N° 3 |
|
PART3_COUNT_N |
Integer |
Nombre de pièce de l'article N° 3 |
|
PART4_C |
Varchar(64) |
Nom de l'article N° 4 |
|
PART4_COUNT_N |
Integer |
Nombre de pièce de l'article N° 4 |
|
PART5_C |
Varchar(64) |
Nom de l'article N° 5 |
|
PART5_COUNT_N |
Integer |
Nombre de pièce de l'article N° 5 |
|
PROCESS_C |
Varchar(64) |
Nom de la gamme à utiliser |
|
UNLOADDEST_N |
Smallint |
Destination à la décharge. Valeur envoyée à l'automate pour diriger la barre vers sa destination finale |
|
PICTURE_F |
Varchar(250) |
Nom du fichier de l'image |
|
DISABLE_N |
Smallint |
0: La référence n'est pas hors service 1: la référence est hors service |
|
DISABLEREASON_C |
Varchar(80) |
Raison pourquoi la référence est hors service |
|
QUANTITY_MIN1_N.. QUANTITY_MIN5_N |
Integer |
Quantité min 1 autorisée |
|
QUANTITY_MAX1_N.. QUANTITY_MAX5_N |
Integer |
Quantité max autorisée |
|
PROCESS_MINMAX1_C.. PROCESS_MINMAX5_C |
Varchar(64) |
|
|
USERINFO_C |
Varchar(250) |
Information pour l'utilisateur |
|
TOOLSQUANTITY_N |
Integer |
Nombre de montage sur la charge |
|
BALLS_N |
Integer |
Type de billes à utiliser |
|
BALLSWEIGHT_N |
Integer |
Poids des billes en grammes |
La table "CONTROLS"
Cette table contient les données des contrôles à effectuer à la sortie des charges
|
Champ |
Type |
Description |
|
REC_ID |
BitInt PK |
Numéro d'identification |
|
MACHINEID_N |
Smallint |
Numéro de la machine |
|
REFERENCE_C |
Varchar(64) |
Référence de la pièce |
|
DESCRIPTION_C |
Varchar(255) |
Description de la pièce |
|
CREATE_DT |
DATETIME |
Date de la création de l'enregistrement |
|
CREATE_USER_C |
Varchar(128) |
Nom de l'utilisateur ayant créé l'enregistrement |
|
MODIFY_DT |
DATETIME |
Date de la dernière modification de l'enregistrement |
|
MODIFY_USER_C |
Varchar(128) |
Nom de l'utilisateur ayant modifié l'enregistrement |
|
DOUBLECONTROL_N |
Smallint |
0=Pas de double contrôle. 1=Double contrôle |
|
QUANTITY_N |
Integer |
Nombre de pièces à contrôler |
|
CONTROLTYPE1_C.. CONTROLTYPE10_C |
Varchar(64) |
Nom du contrôle à effectuer |
|
INFO1_C.. INFO10_C |
Varchar(64) |
Information sur le contrôle à effectuer |
|
TOOL1_C.. TOOL10_C |
Varchar(64) |
Nom de l'outillage à utiliser pour faire le contrôle |
|
NUMRESULT1_N.. NUMRESULT10_N |
Smallint |
0=Par de résultat attendu 1=Besoin d'un résultat de mesure |
La structure de la base de données "CUSTOMER"
Cette base de données peut être composée de plusieurs tables mais uniquement la table définie par [PartLibrary]TableName sera utilisée.
Pour rechercher une référence, une requête sera faite avec la requête suivante:
SELECT * FROM inidata.PartLibraryTableName
WHERE inidata.PartLibraryReferenceName = Reference
Si la requête aboutit, les 10 champs suivants seront lus: [PartLibrary]FieldName1..10. Les types des champs ([PartLibrary]FieldType1..10) pourrons être l'un des types suivants: 0:String, 1:Integer et 2:Float.
Si le nom d'un champ n'est pas défini, celui-ci ne sera pas lu.
Les paramètres du système prioritaire
Introduction
Les paramètres du système prioritaire sont accessibles depuis l'onglet [Priority mode ] des paramètres du serveur:
Ces paramètres permettent de modifier le comportement du système prioritaire.
Le système prioritaire
Le système prioritaire gère le déplacement des robots sur une ligne de traitement de surfaces. Contrairement à un système optimisé, le système prioritaire ne calcule pas entièrement le diagramme des mouvements des robots mais estime le bon moment pour lancer une charge dans la machine. Une fois les charges lancées dans la machine, les robots seront appelés pour déplacer celle-ci selon un ordre de priorité défini dans les séquences:
Les priorités sont définissables de 0 à 255. 0 correspond à la priorité la plus basse et 255 la plus élevé. Cette dernière a également une signification importante c'est qu'une fois la charge déposée dans la cuve, le robot attendra sur la position pendant tout le temps défini dans le Tmin . Le robot sera bloqué pour toutes les autres charges.
Avant de lancer une charge, le système calcule l'occupation des positions dans lesquelles la charge devra passer. Si l'occupation des cuves est vérifié et que le système permet de chargement alors la charge est définie comme démarrée et la couleur de celle-ci dans la machine passe en vert-claire. Elle est alors traitée comme n'importe quelle autre charge dans la ligne.
Dans un système prioritaire, ce sont les cuves qui appellent un robot pour déplacer la charge. Lorsque le temps d'immersion Tmin est atteint, la cuve s'ajoute dans une liste de charges à déplacer. A chaque seconde, le système trie cette liste par ordre de priorité et cherche un robot libre pouvant effectuer le mouvement.
Les paramètres prioritaires
Check immersion time
Ce paramètre devrait toujours être coché. Il indique au système de calculer l'utilisation des cuves dans le temps lors de la validation du démarrage de la charge. Si ce paramètre n'est pas coché alors aucun vérification de l'utilisation des cuves n'est effectuée.
Dec transfert time from Tmin
La cuve est ajoutée dans la liste des charges à déplacer lorsque son temps d'immersion a atteint son Tmin. Lorsque ce paramètre est coché alors le temps de déplacement du robot (le plus susceptible pour faire le déplacement) de sa position actuelle à la cuve est décompté du Tmin pour anticiper l'appel du robot. Ceci permet que le robot soit prêt à prendre la charge une fois le Tmin atteint.
Over jig forbidden
Lors de l'utilisation de certains outillage encombrant, il faut interdire de passer une charge par dessus une autre charge dans la ligne. Ce paramètre permet cette fonctionnalité.
Express jig only from buffer
Si ce paramètre est coché, seules les charges ayant été définies comme "Prioritaires" sur le poste de charge seront prises en compte lors du chargement de la machine. En fait, si dans la gare il existe des charges "prioritaires" et des charges "non prioritaire", le système attendra que toutes les charges "prioritaires" soient chargées avant d'essayer de charger les charges "non prioritaires"
Special hoist attribution
Ce paramètre doit être coché sur les nouvelles machine. Il est là pour être compatible avec les anciens systèmes. Ce paramètre permet d'attribuer un robot à un mouvement même si le mouvement sort des marges "logicielles" des positions min et max. Cela permet d'attribuer un robot à un mouvement lorsque le robot "naturel" est occupé par un autre mouvement.
Optimize Buffer to machine
Ce paramètre permet d'utiliser un autre robot que le robot "naturel" pour venir chercher une charge dans le buffer et l'envoyer en machine. Ce paramètre doit être utilisé que sur certaines machines ayant une configuration spéciale.
Hoist do not wait above buffer
Si ce paramètre est coché alors les robots ne resteront pas sur une position de la gare pour attendre mais ils se déplaceront sur une position d'attente.
Load to machine in case of buffer full
Ce paramètre permet de charger un charge directement en machine sans passer par la gare dans le cas où cette dernière serai pleine (pas de position libre).
Check position ready (mode machine ready)
Lorsque ce paramètre est coché, le système vérifie que chaque position définie dans la séquence soit "prête" (cuve pas dessinée en mauve). Si toutes les cuves sont prêtes alors le chargement est autorisé. Dans le cas contraire, la charge reste en jaune et un message affiche le message "Le mode de démarrage n'est pas vérifié"
Lock load/unload at origin position
Ce paramètre permet de bloquer les postes de charge/décharge dès la position d'origine du robot au lieu de les bloquer avant une montée/descente sur le poste de charge/décharge.
New way of timeway's computation
Ce paramètre modifie la manière de calculer le diagramme de mouvements. Sans ce paramètre, le diagramme est calculé selon les séquences et les temps définis dans Tmin. Avec ce paramètre, le digramme est calculé également selon les séquences et le temps définis dans Tmin mais certains temps peuvent être modifiés selon l'occupation des cuves. Ceci permet d'optimiser le chargement de la machine.
Always check Tmax for reporting
Normalement le système indique une charge en erreur lorsqu'une priorité a été définie et que le temps dépasse le Tmax. Si ce paramètre est coché alors le système indiquera une erreur sur toutes les positions où le TMax est dépassé sans tenir compte du fait que la position ai une priorité ou non.
Do not make up/down on same position (origin = destination)
Il est possible de définir dans une séquence plusieurs fois la même position de suite (utilisé par exemple pour permettre des densités de courant différentes pendant l'immersion). Dans un cas normal, lorsque l'immersion a atteint le Tmin, un robot vient prendre la charge et la dépose dans la destination mais comme dans ce cas la destination et la même que la position alors le robot fera une montée/descente sur la position. Ce paramètre permet de ne pas faire cette montée/descente et seulement continuer avec les paramètres de la deuxième ou nème immersion.
Check no alarm in clear path to continue
Lorsqu'un "clear path" est défini sur un pas de la séquence, si ce paramètre est coché alors le système vérifiera qu'il n'y a pas d'alarme dans les positions du "clear path" avant d'autoriser la charge à ce déplacer.
Wait if priority time and zone not free
Lorsqu'une priorité 255 est définie dans une position, le robot est bloqué sur cette pendant tout l'immersion mais seulement à condition que la zone occupé par le robot en sortie (position de destination) est libre. Dans le cas où la zone n'est pas libre, la priorité 255 ne bloque pas le robot sur la position et permet au robot de faire d'autre mouvements- Si ce paramètre est coché alors le robot passera dans une boucle d'attente sur la position même si la zone est occupée.
Sort time by difference between dwell time and Tmax
Ce paramètre permet de trier la liste des charges devant être déplacées avec comme paramètre la différence de temps entre le temps actuel d'immersion et le Tmax. Les temps les plus court seront traités en premier. Si ce paramètre n'est pas coché alors le Tmax n'interviendra pas dans le choix de l'ordre des charges à déplacer.
Disable position not permitted
Lors du calcul de démarrage d'une charge, le système vérifie que toutes les positions dans lesquelles la charge doit passer sont en service. Si une ou plusieurs positions sont hors service, le système interdira le chargement. Une fois démarrée, la charge pourra être déposée dans toutes les positions même si celles-ci ont été mises hors service après le départ. Ce paramètre interdira à une charge d'être déposée dans une position hors service. La charge attendra dans la position précédente que la position soit à nouveau en service.
Do not take load from disabled position
Normalement, une position dans laquelle une charge est déposée peut être mise hors service pour empêcher les charges suivantes d'y venir. Lorsque son temps d'immersion a atteint le TMin, le système demande à un robot de venir prendre la charge. En activant ce paramètre, les charges se trouvant dans une position hors service ne sont plus déplacées.
Passing with a load over a loaded shuttle is not allowed
Si ce paramètre est coché alors une charge n'a pas le droit de passer par dessus une charge se trouvant dans le transfert si celui-ci se trouve dans la même machine que la charge.
Time between load (sec)
Ce paramètre correspond au temps minimum (en secondes) entre 2 chargements. Il permet de limiter le nombre de charges en ligne.
Time between check load from buffer (sec)
Une fois le temps entre charge atteint, le système essaiera de charger la machine toutes les n secondes indiquées dans ce paramètre. Une valeur adéquate est 5 secondes. Il ne faut pas introduire une valeur inférieure pour ne pas surcharger le système.
Short priority time (sec)
Ce paramètre permet de gérer les charges ayant un temps Tmin plus petit que le temps indiqué dans ce paramètre comme si 255 avait été défini dans la priorité de la position. 0 indique que ce paramètre n'est pas utilisé.
Add time to immersion (sec)
Lors du calcul du diagramme de mouvement, le Tmin des positions est augmenté du nombre de secondes indiqués dans ce paramètre ce qui empêche que le test d'utilisation de la position soit autorisé aussitôt que le temps d'immersion se termine. Ce nombre de secondes correspond en général au temps nécessaire pour charger et décharger une position (environ 45 secondes).
Lockup time (sec)
Ce la valeur de ce paramètre indique au système un temps qu'il faut déduire du Tmin avant l'appel d'un robot. Ce temps est fixe pour toutes les positions contrairement au paramètre "Dec transfert time from Tmin" qui est individuel pour chaque position.
Wait time before moving to a safe position
Ce paramètre indique en secondes après combien de temps le robot est envoyé sur une position de type "Safe" (pouvant rester dessus) lorsqu'il est positionné sur une position sur laquelle il n'a pas le droit de rester.
Empty jig program & Max empty jig program
Ces paramètres sont utilisés pour forcer un programme pour rack vide lorsqu'une charge doit entrer dans une position occupée par un rack vide. Le système essaie d'attribuer le programme "Empty jig program" à la charge. Si ce n'est pas possible (la position ne se trouve pas dans la séquence), il essaie avec le programme "Empty jig program"+1 et ainsi de suite jusqu'à "Max empty jig program". Lorsqu'un programme est trouvé, le programme est attribué au rack vide et celui-ci passe en couleur bleu indiquant un rack avec programme rack-vide.
Tmin in buffer before treatement (sec)
Ce paramètre indique en secondes le temps minimum qu'une charge doit rester dans la gare de chargement avant d'être intégré en ligne.
Maximum "Clear path" position allowed
Ce paramètre permet de limiter le nombre de positions de "Clear path" défini dans les pas de séquence. Si l'utilisateur a défini un nombre plus élevé que celui indiqué dans ce paramètre, le système tiendra compte uniquement de ce paramètre.
Liste of ignored positions in the occupancy calculation routine
Ce paramètre contient une liste de position dont l'occupation n'est pas vérifier lors du calcul d'utilisation des positions. La liste correspond aux numéros de position séparés par une virgule.
Drip time while up/down
Ce paramètre permet de définir un temps d'égouttage lorsque des montées/descentes sont programmées sur les positions.
Les paramètres OSCILine
Les paramètres spécifiques au système OSCILine se situent dans la deuxième partie de l'onglet:
Wait next station filled
Si, dans la séquence, le step actuel demande le remplissage de la cuve de destination avant de déplacer la charge
et que ce paramètre est activé alors le système envoie la commande de remplissage de la cuve de destination et attend que celle-ci soit pleine avant de déplacer la charge.
Maximum wait time next station filled (sec)
Ce paramètre correspond à un temps d'attente maximum pour que la cuve de destination soit pleine. Il est utilisé seulement lorsque le paramètre précédant est activé.
Move empty load to next empty tank
Lorsque ce paramètre est coché cela indique au système que celui-ci peut déplacer une charge vide se trouvant dans la position de destination d'une charge et la stocker dans une position vide de la machine.
Time move empty load (sec)
Ce paramètre est utilisé pour anticipé le déplacement d'une charge vide se trouvant dans la position de destination d'une charge. Avec le paramètre précédant, les charges vides sont déplacés si celles-ci se trouvent dans la destination d'une charge mais ce déplacement est effectué juste avant d'effectuer le mouvement. Avec ce paramètre > 0, ce déplacement est anticipé de la valeur de ce paramètre exprimée en secondes.
Do not move empty load on unload station
Si ce paramètre est activé alors les charges vides se trouvant sur un poste de décharge ne sont pas déplacées. Ce paramètre est utilisé en harmonie avec les 2 derniers paramètres.
Job time adjustment (sec)
Ce paramètre est utilisé pour ajuster le calcul total du temps d'utilisation d'une cuve. Tous les temps définis dans les jobs ainsi que les temps de remplissage et de vidange sont additionnés et pour charge job ce paramètre est ajouté. Il correspond au temps de communication (handshake) entre le système et l'automate.
Job 255 time adjustment (sec)
Ce paramètre est utilisé pour ajuster le calcul total du temps d'utilisation d'une cuve dont le job=255 (cuve jamais vidée). Ce temps est ajouté au temps défini dans la séquence. Il correspond au temps de communication (handshake) entre le système et l'automate.
Les paramètres d'occupation des transporteurs
Dans un système prioritaire, les temps de déplacement des transporteurs (occupation) ne sont pris en compte que pour le calcul du temps d'utilisation des cuves. Si deux mouvements doivent être effectués en même temps par le même transporteur, cette incompatibilité n'est pas prise en compte par le système car, au moment du calcul, les transporteurs sont attribués selon leurs taux d'occupation calculés mais cela ne veut pas dire qu'ils seront appelés de la même manière au moment de l'exécution en temps réel. Pour palier à ce problème, un taux d'occupation maximum des transporteurs a été ajouté au système. Ce taux d'occupation est calculé sur une période définie dans le paramètre Range. Par exemple, si la valeur est 600 cela veut dire que le taux d'occupation sera calculé sur des périodes de 10 minutes. Le calcul sera répété toutes les 10 minutes décalé de la moitié du temps défini soit 5 minutes. Dans l'illustration suivante, les 3 premières périodes sont représentées:
Le calcul est effectué jusqu'au dernier mouvement prévu.
Si le calcul du taux d'occupation de chaque transporteur pendant les périodes dépasse le taux d'occupation défini dans le tableau alors la charge ne sera pas autorisée à démarrer.
Dans le graphique, chaque colonne correspond au taux d'occupation de la période calculée. Dans l'exemple ci-dessus, le transporteur 1 sera occupé pendant 18% du temps de la première période puis plus rien dans les autres périodes. Le transporteur 2 sera occupé pendant 10% du temps de la première période, 16 % de la deuxième période, 11 % de la troisième période puis 4 % de la quatrième période puis plus rien. Pour le troisième transporteur, il sera occupé 9% pendant la première période, 0% pendant la deuxième, 7 % pendant la troisième, 14 % pendant la quatrième, 7 % pendant la cinquième, etc...
Le premier ensemble de colonnes correspond à la moyenne du taux d'occupation de tous les transporteurs.
Bien entendu, la case "Check hoists occupation" doit être cochée pour que la vérification soit effectuée.
Le mode de fonctionnement OSCILine
Introduction
Le mode de fonctionnement OSCILine permet l'utilisation de conteneurs contenant de la chimie ou des rinçages pouvant être pompés ou vidangés vers ou depuis la cuve de travail. L'utilisation de ces conteneurs est nommé "Job". Un "Job" correspond donc au remplissage de la cuve principale depuis un conteneur, à l'immersion de la charge pendant un temps défini puis à la vidange de la cuve de travail vers le conteneur. Il peut également correspondre à une douche pendant un certain temps et à la vidange vers l'égout ou vers un conteneur. Le fonctionnement du Job est programmé dans l'automate programmable et peut correspondre à n'importe quelle fonction. En mode OSCILine une cuve de travail est également appelée "Module".
Exemple d'une cascade en mode OSCILine
Exemple d'une cuve de rinçage en mode OSCILine
La définition des modules et jobs
La définition des modules et des jobs est réalisée dans le fichier OSCIDef.ini. Par exemple:
[Module11]
Type=1
StatusDB=28
StatusReg=11
CommandDB=27
CommandReg=44
JOB1=Spray DI;11;10;3;5
JOB2=Spray EV;16;10;3;5
JOB3=Rinçage;1;30;30;30
[Module12]
Type=0
StatusDB=0
StatusReg=0
CommandDB=0
CommandReg=0
JOB1=Traitement;255;45;0;0
[Module13]
Type=1
StatusDB=28
StatusReg=13
CommandDB=27
CommandReg=52
JOB1=Spray DI;11;10;3;5
JOB2=Spray EV;16;10;3;5
JOB3=Rinçage;1;30;30;30
...
[Module21]
Type=0
StatusDB=0
StatusReg=0
CommandDB=0
CommandReg=0
JobDB=29
JobReg=21
JOB1=Champagne NN ;51;180;0;0;0;1
JOB2=5N ;52;180;0;0;0;2
JOB3=2N18 ;53;180;0;0;0;3
Pour chaque position de la machine un module doit être défini. Le numéro du module correspond au numéro (index) de la position.
Les mots clef
| Mots clef | Type | Description |
| Type | Integer |
Indique le type de mode: 0: Cuve toujours pleine (pas de conteneur annexe). Le fonctionnement est géré par VKQuickView. 1: Cuve équipée de conteneurs annexes pouvant être remplie et vidée. Le fonctionnement est géré par l'automate programmable. Le statut du fonctionnement est lu depuis l'automate programmable dans le registre de statut. La commande est envoyé à l'automate programmable dans le registre de commande. Les divers statuts sont décrits dans la section "Statuts" et les diverses commandes sont décrites dans la section *Commandes" |
| StatusDB | Integer | Numéro du DB dans lequel se trouve le registre de statut |
| StatusReg | Integer | Numéro du registre de statut. |
| CommandDB | Integer | Numéro du DB dans lequel se trouve le registre de commande. |
| CommandReg | Integer | Numéro du registre de commande. |
| Job1..20 | String |
Définition des 20 jobs possibles par module. Les jobs sont composés de données séparées par un point virgule. Les données sont les suivantes: 1) Nom du job (texte affiché dans la définition des séquences) 2) Numéro interne du job dans l'automate. Les jobs 1..254 correspondent à des fonctions définies dans l'automate programmable. Le job 255 correspond à une cuve toujours pleine gérée par QuickView. 3) Temps (en secondes) par défaut dans la séquence. 4) Temps caché (en secondes) correspond au temps de remplissage de la cuve principale. 5) Temps (en secondes) de vidange de la cuve principale. 6) Numéro du job correspondant à un rinçage. Lorsqu'un job est avorté suite à une erreur de rotation par exemple, ce numéro correspond au numéro de job que QuickView va exécuter après l'arrêt du job en cours. 7) Numéro du redresseur par défaut (1..9). Un module peut comporter jusqu'à 8 redresseurs. 1 à 8 indique le numéro du redresseur, 9 indique tous les redresseurs. |
| JobDB | Integer | Numéro du DB dans lequel se trouve le registre de numéro de Job du module (1..20) |
| JobReg | Integer | Numéro du registre de job. Le numéro de job indique à QuickView quelle cuve mobile est en place. Les autorisations de démarrage d'un programme passant par des cuves mobiles vérifient que les bonnes cuves sont en place avant que l'autorisation soit accordée. Chaque bit du registre correspond à un numéro de job (1..20). Le bit 1 correspond au job numéro 1, le bit 2 au job numéro 2, le bit 15 au job numéro 15, etc.... Le bit 0 n'est pas utilisé. |
Le contenu du registre de statut
Le contenu du registre de statut de l'automate indique au système dans quel état se trouve le job dans l'automate. Les statuts suivants sont possibles:
| Valeur | Description |
| 0 | Le job est prêt à démarrer. Une nouvelle commande de démarrage peut être envoyée. |
| 1 | Le job a terminé son initialisation |
| 2 | Le job a démarré le décompte du temps |
| 3 | Le job a commencé la vidange |
| 4 | Le job a exécuté la fin de vidange |
| 5 | fin de job ou erreur |
La structure des registres de commande
La structure des registres de commande est composé de 4 registres:
| Registre | Type | Description |
| 0 | Word |
bits 0-7 = commande : 0=reset, fin de job, 1=démarrer le remplissage, 2=démarrage du temps, 3=démarrage vidange, 4=fin de vidange, 255=Reset alarme bits 8-15 = numéro de job |
| 1 | Word | Temps défini dans la séquence |
| 2 | Word |
bit 0-7 = numéro du prochain job dans la séquence ou 0 si dernier job. bits 8-15 = paramètre 1 |
| 3 | Word | Paramètre 2 |
Utilisation de plusieurs langues sur les pages graphiques
En général, les textes des pages graphiques sont définis dans la langue de l'utilisateur final et ne sont pas relative à la langue de l'utilisateur enregistré dans le système. Il est cependant possible de définir les textes dans la langue de l'utilisateur en modifiant la manière dont laquelle sont défini les textes sur une page graphique. Dans l'utilitaire QVConfig.exe, il existe un onglet (UserText0-3.ini) permettant de définir des textes spécifiques à l'application. Ces textes sont sauvegardés dans les fichiers WQVFiles\UserText0.ini, WQVFiles\UserText1.ini, etc...
Pour utiliser ces textes, il faut commencer le texte par {% suivi du numéro de texte. Par exemple, pour un bouton Ouvrir/Fermer qui serait affiché dans la langue de l'utilisateur, il faut introduire [\1:{%4\0:{%5] dans le texte du bouton. Ceci est valable pour tous les textes d'une page graphique.
Suivi des produits chimiques
Pour permettre le suivi des produits chimiques et leurs numéros de lots dans les rapports de suivi, une structure de données correspondant à une liste de produits chimiques a été introduite. Cette structure permet de définir 16 produits chimiques et numéros de lots différents . Les registres internes (DB 0) 12001..12016 correspondent aux noms des produits chimiques et les registres internes (DB 0) 13001..13016 correspondent aux numéros de lot. Ces données sont stockées dans le fichier WQVFiles\Chemicals.dat au format "Texte". Ces données sont associées aux charges lors du chargement au poste de charge. Elles peuvent donc être imprimées sur le rapport de suivi.
Les postes de charge
Description du fonctionnement des différents postes de charge intégrés dans l'application
Le poste de charge n° 52
Introduction
Le poste de charge n°52 est le poste de charge à utiliser pour les machines de traitement de surfaces en général car il contient toutes les options possibles existantes sur les postes de charge.
- Sélection de la référence à charger.
- Zone dédiée à la sélection du poste de charge.
- Tableau des articles et outillages
- Zone dédiée à la sélection de fonctions spéciales
- Tableau des blocs de traitement
- Zone des commandes de charge et décharge
- Zone des icônes de commande.
La configuration du poste de charge est effectuée à l’aide de mots clef. Ces mots clef sont éditables dans le fichier VKWinQV.ini dans la section [PDC] (ou au travers de l'icône "Options" du poste de charge)
ou au travers de la boîte de dialogue “Settings” de QuickView.
Les supports de pièces
Les supports de pièces correspondent aux outils utilisés sur la machine pour stocker les pièces sur le porte rack. Sur certaines machines, il sera possible de travailler avec divers supports de pièces. Dans ce cas, il est important de pouvoir indiquer au système quel type de support est utilisé. Ceci se fait au travers d'un combobox permettant de choisir le type de support. Pour afficher cet élément, la case à cocher [Settings][General]ShowSupportType doit être cochée.
La liste des supports est fixe et permet le choix entre: Rack, Tonneau ou Vibreur
La rotation sur le transporteur
Lorsque le support "Tonneau" est utilisé, il faut certaines fois pouvoir sélectionner si celui-ci doit tourner sur les transporteurs lorsque le tonneau est en l'air par le transporteur. Si uniquement le fait de tourner ou pas est exigé alors la case à cocher [Settings][General]LoadRotation permettra de pouvoir sélectionner cette fonction sur le poste de charge
Dans le cas où un type de rotation devait être sélectionner, la case à cocher [Settings][General]LoadRotationType affichera un combobox permettant un choix entre divers types de rotation.
Les types de rotations possibles sont:
- Pas de rotation
- Rotation continue jusqu'à destination
- Depuis le début du temps d'égouttage jusqu'en haut
- Depuis le début du temps d'égouttage jusqu'à destination
- Depuis la fin du temps d'égouttage jusqu'en haut
- Depuis la fin du temps d'égouttage jusqu'à destination
- Depuis le bas jusqu'à l'arrêt pour égoutter
- Depuis le bas jusqu'à la fin du temps d'égouttage
- Depuis le bas jusqu'en haut
Sélection du poste de charge
Lorsque la machine est équipé de plusieurs postes de charge, il est possible soit d'utiliser une boîte de dialogue pour chaque poste de charge ou une boîte de dialogue gérant tous les postes de charge. Pour choisir cette fonctionnalité, il faut cocher la case à cocher [Settings][General]SingleLoadForm. Le choix des poste de charge est alors affiché sur le haut de la boîte de dialogue.
Sélection du numéro de porte-rack
En général, les portes-rack d'une machine sont numérotés. Pour permettre le suivi de leur utilisation, il est possible d'afficher une zone de sélection à l'aide de la case à cocher [Settings][General]ShowVirtualJig.
Pour choisir le numéro de porte-rack, cliquez sur le bouton [Porte-rack], la liste des portes-racks s'affiche.
Travail avec une gare virtuelle
Il est possible de préparer des charges dans une gare virtuelle et les charger dans la machine une fois le chariot inséré dans le poste de charge. Cette gare virtuelle permet de choisir une charge plutôt qu'une autre selon les informations affichées sur le panneau latéral.
Le panneau latéral affiche en-haut les charges en cours dans la machine et en bas les charges dans la gare virtuelle. Pour définir une gare virtuel il faut définir un poste de charge virtuel dans la définition des postes de charge dans le fichier io.ini;
[Load2]
Position=EXT
mode=60
StackBuffer=15
Position=EXT indique que le chargement se fait dans la gare virtuelle. Mode=60 indique le mode de fonctionnement en gare virtuelle. StackBuffer=15 indique le nombre de positions maximum dans cette gare virtuelle.
Pour permettre un fonctionnement en gare virtuelle il faut donc:
- Activer le panneau latéral.
- Activer la sélection du numéro de porte-rack
- Définir le poste de charge extérieur
Les informations de production
Il est possible d'afficher l'heure du prochain départ, l'heure de la prochaine sortie et l'heure du dernier mouvement. Pour afficher ceci, il faut cocher la case [PDC]"Affichage des informations de production".
Inspections
Lorsque des inspections sont définies dans IO.ini, il est possible de les afficher dans un bloc.
Pour les inspections de type 0 et 1, l'opérateur doit indiquer quelles inspections devront être réalisées ou si des pièces témoin doivent être ajoutées lors de l'inspection.
Pour afficher ces informations, la case ci-dessous doit être activée:
Mode de fonctionnement
Lorsque le système peut travailler en local ou avec le serveur d'entreprise, le bloc "Mode de fonctionnement" s'affiche.
Destination après la décharge
Sur certaines machines équipées de tapis ou de robot à la décharge, il faut indiquer la destination des pièces après avoir été déchargées. Pour afficher la destination, il faut cocher la case [Settings][General]ShowUnloadDest
La liste des destinations possibles est définie dans [PDC]"Destination après décharge":
Mode de démarrage
Sur certaines machines, il peut être demandé d'enclencher ou déclencher des équipements lorsque certaines pièces sont chargées. Pour pouvoir faire ceci, les modes machine sont utilisés. Pour sélectionner un mode de démarrage, la case à cocher [Settings][General]ShowStartMode est utilisée.
Le combobox affichera la liste de tous les modes ayant la case "mode pouvant être utilisé comme mode de démarrage" cochée.
Sélection de l'heure de chargement
Sur certaines machines équipées d'une gare de chargement, il est possible de sélectionner une heure de démarrage. Pour permettre cette fonctionnalité, il faut cocher la case [Settings][General]ShowStartDateTime. Lorsque celle-ci est cochée, l'icône "Calendrier" est affichée dans la zone des icônes de commande.
En cliquant sur cette icône, le mode de démarrage sur calendrier est activé ou désactivé. Lorsque le mode de démarrage sur calendrier est sélectionné, le choix de la date et de l'heure de départ est affiché.
Si la date et l'heure sont affichées alors lorsque l'utilisateur cliquera sur le bouton [Charge], cette date et cette heure seront utilisées pour démarrer la charge en production. Si ceux-ci ne sont pas affichés alors la charge démarrera tout de suite lorsque l'état de la machine le permettra.
Utilisation d'une balance
Certaines machines sont équipées d'une balance au poste de charge permettant de peser la quantité de pièce introduite principalement dans des tonneaux. Pour permettre l'utilisation d'une balance, la case à cocher [Settings][General]ShowScaleButton doit être activée. Une I/O doit être définie dans la définition du poste de charge IO.ini[Load1]WeightIO=n° d'I/O. Cette I/O doit contenir le poids retourné par la balance. Lorsque tout ceci est défini, l'icône "Balance" s'affiche dans les icônes de commande.
Lorsqu'un article a été introduit et que le nombre de pièces n'est pas encore défini, il est possible de cliquer sur l'icône "Balance" et la boîte de dialogue suivante s'affiche:
Le poids max affiché dans la boîte correspond au poids maximum autorisé pour l'outillage. Cela veut dire qu'il est obligatoire d'introduire un type d'outillage avant de pouvoir peser des pièces.
Lors de l'ouverture de la boîte de dialogue, le poids affiché correspond en général au poids du tonneau et du porte-rack. L'utilisateur doit alors effectuer un tarage de la balance en cliquant sur le bouton [T]. Une fois taré, le poids s'affiche en vert, l'information NET est affichée en-dessous du poids et le bouton [Ok] devient actif.
Il faut ensuite ajouter les pièces désirées dans le tonneau. Le poids affiché correspond maintenant au poids réel des pièces chargées. Pressez sur le bouton [OK] pour terminer la pesée. Le nombre de pièces est alors calculé et mis à jour dans le tableau des pièces.
Le tableau des pièces
Le tableau des pièces permet l'introduction des données des pièces chargées sur la machine. Il est partiellement configurable à l'aide de la boîte de dialogue des options du poste de charge.
Le tableau ci-dessus indique que 2 outillages (rack #1796 et rack # 2457) sont chargés respectivement avec 100 pièces de l'article ayant la référence 123 et 50 pièces du même article. Ces deux outillages ont chacune une surface métallique de 0.23 dm² ainsi qu'une surface totale de 0.25 dm². 300 gammes de billes ont été ajoutés à la charge ce qui représente une surface de 1.87 dm². La surface métallique total est de 20.63 dm² (0.23 + 100x0.12 + 0.23 + 50x0.12 +1.87) et la surface chimique totale est de 24.87 dm².
Type de surface
Le type de surface affichée est sélectionnable dans [PDC]"Type de surface". Les types suivants sont possibles:
- Surface métallique et surface totale
- Surface avant et surface arrière (utilisé principalement dans le chargement de circuits imprimés)
- Surface métallique et poids
- Surface métallique
- Surface avant, surface arrière et surface totale
Utilisation de billes de contact
Lorsque des tonneaux sont utilisés, il est fréquent d'ajouter aux pièces des billes de contact. Le nombre de bille n'étant pas connu, l'utilisateur introduit le poids de ces billes. La surface ainsi ajoutée est calculée automatiquement. Pour afficher la ligne correspondant aux billes, il faut cocher la case [Settings][General]ShowBallsLib. Lorsque cette option est définie, l'onglet [Définition des billes] de la boîte de dialogue "Définition des bains" devient apparent.
Quantité d'outillages
Certaines fois, il est demandé de mentionner le nombre d'outillages de même type chargé sur un porte-rack. Dans ce cas, la quantité d'outillage est affichée devant le nom de l'outillage.
Le champ correspondant au nom de l'outillage devient le type d'outillage. Il est possible d'introduire le numéro de chaque outillage en cliquant sur le champ du type d'outillage. Une boîte de dialogue s'affiche:
Nombre de lignes de données du tableau
Il est possible d'indiquer le nombre de lignes de données affichées dans [PDC]"Nombre de lignes visibles dans la grille des pièces". Si le nombre sélectionné est plus petit que le nombre réel de lignes possibles, un ascenseur vertical sera affiché à droite du tableau permettant la navigation. Le tableau peut être composé de maximum 4 outillages ([PDC]"Nombre max. d'outillages") pouvant contenir chacun 5 articles ([PDC]"Nombre max. d'articles par outillage"). Les unités utilisés ainsi que le nombre de décimales affichés sont également définissable dans [PDC].
Le tableau des blocs de traitement
Les blocs de traitement sont en général utilisés pour modifier certains paramètres comme : la densité de courant, le temps de traitement, l'épaisseur, le profil de courant ou une position d'un groupe. Il peut être défini jusqu'à 8 blocs de traitements par séquence. Un bloc de traitement est défini lorsque l'option "Charge" est défini dans la colonne [Variable] de la définition des séquences. Par défaut, les 8 blocs possibles sont affichés mais il est possible de réduire ce nombre pour diminuer la surface utilisée par la boîte de dialogue du poste de charge. Le nombre de lignes affichées se défini dans [PDC]"Nombre de lignes visibles dans la grille des blocs de traitement". Il est possible d'introduire 0 dans cette option pour cacher le tableau complètement (aucun bloc utilisé dans la machine).
Lorsqu'aucun redresseur n'est configuré dans la machine, le tableau des blocs de traitement est raccourcis des colonnes utilisées par les redresseurs.
Les contrôles en sortie
Certaines fois, il est demandé à l'opérateur de faire certains contrôles lorsque les charge sont sorties de la machine. Lorsque cette option est activée, le panneau d'information contient un nouvel onglet "Contrôles à la sortie".
La table affichée dans cet onglet montre les n dernières charges déchargées de la machine. Lorsque des contrôles sont demandés, 2 colonnes indiquent le résultat des contrôles s'ils ont été effectués ou s'ils doivent être effectués. Pour effectuer un contrôle, l'opérateur doit double-cliquer sur la case "Conformité" de la charge correspondante. Une fenêtre s'affiche indiquant les contrôles à effectuer:
Dans cette fenêtre, les contrôles à réaliser sont affichés. L'opérateur doit indiquer si le contrôle est conforme ou non. Dans le cas ou le contrôle n'est pas conforme, il doit introduire une remarque dans le champ "Non-conformité".
Certaines fois, il est demandé d'introduire un résultat numérique tel que une épaisseur, ou un diamètre. Le champ mesure est fait pour cela.
Lorsque tous les champs ont été renseignés, un bouton de validation s'affiche dans le bas du tableau. Lorsque l'opérateur clique sur celui-ci, les résultats des contrôles sont enregistrés dans la base de données et ne sont plus modifiables.
Il peut être demandé qu'un deuxième contrôle soit requis. Ce deuxième contrôle doit être réalisé par un superviseur. L'opérateur ayant réalisé le premier contrôle ne peut pas effectuer le deuxième contrôle. Ce doit être un opérateur différent ayant les droits nécessaires.
Utilisation d'un lecteur de codes à barres
Pour fonctionner avec un lecteur de codes à barres, celui-ci doit être configuré dans VKWinQV.ini dans la section suivante:
[Barcode]
Comport=4
Baudrate=9600
StopBits=1
Databits=8
Parity=None
Encoding=14
Le lecteur doit être un lecteur connecté sur un port série physique ou virtuel. Lorsque l'encoding=14, la configuration des RegEx s'affiche dans la page de configuration du poste de charge.
Le groupe index permet de définir le même RegEx sur différents champs mais en indiquant l'index du groupe défini dans le RegEx. Ceci permet d'avoir plusieurs informations dans un même code à barres.
Les mots clefs des fichiers ini
Les mots clef possibles sont:
Poste de charge n°66
Suivre la procédure suivante pour scanner les différents barcode:
- Scan le barcode "Optima". Ce barcode fait le lien entre le programme de lavage et la commande d'équipement. Il doit être défini dans la DBase
.
- Scan du Basket carrier # (N° de panier). Pas de règle défini pour ce barcode.
- Scan du Shop order (N° de commande). Commence toujours avec le préfixe $6. Il contient aussi un suffixe de 1 caractère aléatoire. le préfixe et le suffixe sont automatiquement effacés pour l'enregistrement.
- Scan du Trace code (Code de suivi). Commence toujours avec le préfixe $7. Il contient aussi un suffixe de 1 caractère aléatoire. le préfixe et le suffixe sont automatiquement effacés pour l'enregistrement.
- La Quantity (Quantité) peut être insérée au clavier ou avec un barcode purement numérique sans règle (1-9999).
Lorsque l'on presse sur "Load", le système contrôle que tous les champs nécessaires sont remplis. Si ce n'est pas le cas, un message pop-up apparait à l'écran:
Poste de charge n°67
Suivre la procédure suivante pour scanner les différents barcode:
- Scan du Lot ID (N° de commande). Pas de règle défini pour ce barcode.
- Scan du Baseplate letter (Code de suivi). Commence toujours avec le préfixe $2. Le préfixe est automatiquement effacé pour l'enregistrement.
- Scan de la Quantity (Quantité). Commence toujours avec le préfixe $QTY + un numéro (1-8). Le préfixe est automatiquement effacé pour l'enregistrement.
- Scan du Lot ID du lot numéro 2
- Scan du Baseplate letter du lot numéro 2
- Scan de la Quantity du lot numéro 2
- Scan du Basket Carrier # (N° de panier). Commence toujours avec le préfixe $1.
Le programme et le mode sont renseignés la première fois puis automatiquement réinsérés lors du prochain chargement.
Si la quantité insérée n'est pas comprise entre 1 et 8, un message pop-up apparait:
Lorsque l'on presse sur "Load", le système contrôle que tous les champs nécessaires sont remplis. Si ce n'est pas le cas, un message pop-up apparait à l'écran:
Poste de charge n°69
Options...
Suivre la procédure suivante pour scanner les différents barcode:
- Scan du Product ID (Produit). Règle définie selon RegEx. Le système contrôle que ce numéro existe dans la base de donnée Optima. Le premier Product ID défini le programme à utiliser. Chaque Product ID supplémentaire doivent avoir le même programme de lavage lié dans la base de donnée.
- Scan du Lot ID (Lot). Règle définie selon RegEx.
- Scan de la Quantity (Quantité). Doit être un numéro (1-9999).
- Répéter les opérations de 1 à 3. Jusqu'à un maximum de 12 Product ID.
Si un Product ID n'a pas le même programme de lavage que les précédents, un message pop-up s'affiche:
Si le champs attendu ne correspond pas au RegEx:
Si on presse sur "Load" et que le numéro de lot est vide:
Si on presse sur "Load" et que le champs quantité est vide:
Si on presse sur "Load" et que l'option "Checking maximum number of parts" est cochée. Un message pop-up apparait si la quantité total insérée (en prenant en compte chaque ligne) est plus grande que le paramètre "Maximum quantity":
Si on presse sur "Load" et que l'option "Checking unique lot ID" est cochée. Un message pop-up apparait si un numéro de lot n'est pas unique:
Poste de charge n°71
Options...
Suivre la procédure suivante pour scanner les différents barcode:
- Scan du Product Code (Produit). Règle définie selon RegEx. Le système contrôle que ce numéro existe dans la base de donnée Optima. Le premier Product Code défini le programme à utiliser. Chaque Product Code supplémentaire doivent avoir le même programme de lavage lié dans la base de donnée.
- Scan du Work Order (Lot). Règle définie selon RegEx.
- Scan de la Quantity (Quantité). Doit être un numéro (1-9999).
- Répéter les opérations de 1 à 3 pour la deuxième ligne.
Si la case "Reading 2x barcode" est cochée et que le deuxième barcode lu est différent du premier, le message suivant apparait:
Si un Product Code inexistant dans la base de données est inséré:
Si un Product Code n'a pas le même programme de lavage que le précédent, un message pop-up s'affiche:
Si le champs attendu ne correspond pas au RegEx:
Poste de charge n°74
Options...
Suivre la procédure suivante pour scanner les différents barcode:
- Scan de la Référence (Dbase référence). N'importe quel barcode est autorisé. Le système contrôle que ce code existe dans la base de donnée Optima.
- Scan du Lot. Règle définie selon RegEx.
- Le nombre minimum de lot requis est défini dans les options et un maximum de 100 lots peut être inséré.
- Si l'option "Vérification des lots uniques" est cochée, lors d'un doublon en scannant, celui-ci est ignoré par le système et n'est donc pas inséré une deuxième fois.
Si le champs attendu (lot) ne correspond pas au RegEx:
Si la quantité minimale de lot définie dans les options du poste de charge n'est pas atteinte:
Si la référence scannée n'existe pas dans la base de donnée Optima:
Poste de charge n°77
Options...
Suivre la procédure suivante pour scanner les différents barcode:
- Scan de la référence. Pas de règle. Le système contrôle que ce code existe dans la base de donnée Optima. Il permet de définir le programme de lavage ainsi que le mode d'équipement.
- Scan du Numéro de commande. Règle définie selon RegEx
- Scan du (des) Numéro d'article. Règle définie selon RegEx. Un maximum de 100 articles peuvent être enregistré.
- Scan du Code opérateur. Règle définie selon RegEx.
Si la référence insérée n'existe pas dans la base de donnée Optima, un message pop-up s'affiche:
Poste de charge n°78
Options...
Suivre la procédure suivante pour scanner les différents barcode:
- Scan de la référence. Pas de règle. Le système contrôle que ce code existe dans la base de donnée Optima. Il permet de définir le programme de lavage ainsi que le mode d'équipement.
- Scan du Lot #. Règle définie selon RegEx
- Scan du Article #. Règle définie selon RegEx.
- Scan du Production order #. Règle définie selon RegEx.
Poste de charge n°79
Options...
Suivre la procédure suivante pour scanner les différents barcode:
- Scan de la Grundtrõger (Panier). Règle définie selon RegEx.
- Scan du Fertigungsauftrags (OF). Règle définie selon RegEx. Une requête est transmise à une base de données externe (côté client) avec ce numéro d'OF (WORK_ORDER). Les autres champs de la ligne correspondante sont alors automatiquement ajouté dans le poste de charge. Le programme de lavage ainsi que le mode d'équipement sont aussi automatiquement renseigné. Le mode d'équipement doit avoir le même numéro que le programme (CLEAN_PROGRAM).
- Répéter le point 2 pour insérer d'autres articles.
Configuration dans VKWinQV.ini:
Type=ODBC_CUSTOMER
ConnectionString=DSN=A3226_Parts;UID=sa;PWD=xxxxxxxxxxxxxxxx;
CloseConnectionAfterQuery=0
TableName=VEI_Barcode_Query1_CLEAN
ReferenceName=WORK_ORDER
FieldName1=MATERIAL
FieldType1=0
FieldName2=MATERIAL_DESC
FieldType2=0
FieldName3=BATCH
FieldType3=0
FieldName4=OPERATION_QUANTITY
FieldType4=1
FieldName5=CLEAN_PROGRAM
FieldType5=1
Il faut définir une connexion ODBC à la base de données.
Exemple de la table d'une base de données:
Si le champs attendu ne correspond pas au RegEx:
Si l'article scanné n'a pas le même programme de lavage que le premier, un message pop-up s'affiche et la ligne du poste de charge n'est pas remplie:
Poste de charge n°80
Options...
Suivre la procédure suivante pour scanner les différents barcode:
- Scan du N° de panier. Règle définie selon RegEx.
- Scan de la référence (Programme de lavage). Règle selon RegEx. Le système contrôle que ce numéro existe dans la base de donnée Optima. Il renseigne automatiquement le programme et le mode d'équipement.
- Scan du Article et Lot. Règle définie selon RegEx. l'article et le lot sont ensemble dans un même barcode. Le RegEx et le Groupe index permet de les différencier.
- Insérer au clavier le Plateau. Pas de règle défini.
- Choisir dans le menu déroulant parmi les 3 options pour le nombre de balancelle (1/1, 1/2, 2/2). Par défaut 1/1 est sélectionné.
Poste de charge n°82
Identique au poste de charge n°69 mais avec une colonne "Basket ID".
Options...
Suivre la procédure suivante pour scanner les différents barcode:
- Scan du Product ID (Produit). Règle définie selon RegEx. Le système contrôle que ce numéro existe dans la base de donnée Optima. Le premier Product ID défini le programme à utiliser. Chaque Product ID supplémentaire doivent avoir le même programme de lavage lié dans la base de donnée.
- Scan du Lot ID (Lot). Règle définie selon RegEx.
- Scan de la Quantity (Quantité). Doit être un numéro (1-9999).
- Scan du Basket ID (numéro de panier). Règle définie selon RegEx.
- Répéter les opérations de 1 à 4. Jusqu'à un maximum de 12 Product ID.
Si un Product ID n'a pas le même programme de lavage que les précédents, un message pop-up s'affiche:
Si le Product ID n'existe pas dans la base de donnée Optima:
Si le champs attendu ne correspond pas au RegEx:
Si on presse sur "Load" et que le numéro de lot est vide:
Si on presse sur "Load" et que le champs quantité est vide:
Si on presse sur "Load" et que l'option "Checking maximum number of parts" est cochée. Un message pop-up apparait si la quantité total insérée (en prenant en compte chaque ligne) est plus grande que le paramètre "Maximum quantity":
Si on presse sur "Load" et que l'option "Checking unique lot ID" est cochée. Un message pop-up apparait si un numéro de lot n'est pas unique:
Trucs et astuces
Rappel des fonctionnalités peu connues de QuickView
Affichage du MTO sur les rapports de suivi
Le MTO (Metal turn over) indique combien de fois le bain a subi une régénération complète du métal contenu dans celui-ci. Un bain de Nickel chimique contient un certain nombre de grammes de nickel par litre de bain (par exemple 6 g/L). Tout au long de son existence, ce nickel est déposé sur les pièces étant traitées. Un analyseur sur lequel des pompes doseuses sont connectées permettent d'ajouter du nickel dans le bain pour maintenir une concentration constante. La durée de vie du bain est mesurée à l'aide du MTO. Le fournisseur du bain définit un MTO maximum pour décider de sa fin de vie et de son remplacement.
Pour ajouter un compteur de MTO dans QuickView, il faut afficher le navigateur d'équipements puis cliquer à droite sur la position désirée. Un menu popup permet d'ajouter un compteur de MTO:
Pour ajouter un compteur MTO, il faut activer la case à cocher M.T.O. et indiquer le numéro de pompe dans la liste des pompes doseuses utilisée pour régénérer le Nickel.
Pour afficher le compteur, cliquez à droite sur la position de la machine dans laquelle vous avez ajouté le compteur.
Le compteur s'affiche:
| Fonction | Description |
| Volume du bain | Indique le volume du bain en litres |
| Concentration | Indique la concentration en métal du bain. |
| Concentration régénération | Indique la concentration en métal de la solution de régénération |
| Poids spécifique | Poids spécifique du métal. Ceci est utilisé lorsque le MTO est calculé par rapport à la surface passée dans le bain et à l'épaisseur définie au poste de charge. |
| Total consommé (régénération) | Poids total consommé par la pompe doseuse. |
| Total consommé (surface) | Si aucun pompe doseuse n'est définie alors la consommation est calculée par rapport à la surface passée selon la formule : surface des pièces * épaisseur * poids spécifique = total consommé. |
| Rajout manuel | Valeur ajoutée manuellement pour ajuster la concentration après analyse. |
| MTO | Valeur actuelle du MTO |
Pour faire apparaître cette valeur de MTO sur les rapports de suivi, il faut ajouter une I/O sur la position. Ceci est réalisé dans le navigateur d'équipement
ou directement dans le fichier I/O.ini
Il faut ensuite définir cette I/O dans les données à enregistrer dans la base de données. Ceci ce fait dans la section [Database] du fichier IO.ini:
Voila, le rapport contiendra la valeur du MTO du bain à la sortie de la charge.
Demande d'un outillage au poste de charge
Lorsque l'on charge des pièces en vrac dans une machine, celles-ci doivent être placées dans un tonneau ou un vibreur. Ces tonneaux ou vibreurs n'ont pas tous les mêmes caractéristiques, par exemple la grandeur des trous des tonneaux ou la charge maximum d'un vibreur.
Lors du chargement des pièces, il faut qu'un outillage (tonneau ou vibreur) soit amené au poste de charge mais il faut que le bon outillage soit utilisé. Pour résoudre ce problème, dans la bibliothèque d'articles, il est possible d'associer des outillages utilisables à chaque article.
Dans la liste de gauche, tous les types d'outillage disponibles sont affichés. Il faut sélectionner les outillages pouvant être utilisés par l'article et les transférer dans la liste de droite qui correspond aux outillages autorisés. Le transfert entre les 2 listes se fait à l'aide des boutons situés entre ces 2 listes.
Pour que la liste des outillages disponibles puisse être remplie, il faut qu'un type d'outillage soit attribué à chaque outillage. Ceci se fait dans la bibliothèque d'outillages.
Pour tous les articles utilisés dans la machine, il faut leur attribué les outillages autorisés.
Pour pouvoir appeler un outillage, il faut activer cette fonction dans la boîte de [Settings] dans l'onglet [Poste de charge]:
Lorsque cette case est cochée, le bouton permettant d'appeler un outillage s'affiche sur le poste de charge:
Pour que ce nouveau bouton soit fonctionnel, il faut tout d'abord sélectionner l'article que l'on désire charger dans la machine. Une fois que cet article est défini alors il est possible de cliquer sur le bouton [Outillage] pour afficher les positions contenant les outillages qui peuvent être utilisés pour cet article.
La liste est établie par rapport aux charges se trouvant dans le groupe associé au poste de charge (groupe correspondant à la gare de charge). Si aucun groupe n'est défini, alors les positions ayant la colonne [Jig] définie avec la valeur "Yes" dans la définition de la machine seront utilisées. Toutes les charges présentes dans le groupe étant vides ou terminées et ayant un outillage autorisé seront ajoutées à la liste.
En sélectionnant l'outillage désiré puis en cliquant sur le bouton [OK], le système ira chercher la barre et le ramènera au poste de charge. Si une barre est déjà sur le poste de charge, alors celle-ci sera tout d'abord envoyée en gare avant de retourner la barre désirée.
Les redresseurs de polarisation et d'amorçage
Sur les cuves de nickel chimique, il est fréquent de voir le redresseur de polarisation de la cuve utilisé également comme redresseur d'amorçage. Dans une telle configuration, il n'est pas possible d'utiliser ce type de redresseur comme les autres redresseurs de la machine.
Pour permettre ce mode de fonctionnement, il ne faut pas associer le redresseur à la position dans la définition machine. Les cases [Recti] et [Rectf] doivent rester vides. Il ne faut également pas définir le redresseur dans la liste des redresseurs du fichier VKServer.ini mais le redresseur fait qu'en même partie de la structure du databank utilisé pour la commande des redresseurs (PLCRECTIFIER).
Les redresseurs de polarisation doivent rester enclenchés tant que la température du bain est supérieure à une certaine température. Une consigne de tension doit être donnée au redresseur pour polariser la cuve pour éviter que celle-ci se plaque avec du nickel. Lorsque le courant généré par le redresseur dépasse une certaine consigne, cela indique que la cuve doit être strippée au plus vite et ne doit plus être utilisée en production.
Exemple de configuration
Définition du databank des redresseurs:
;DB Rectifier
[DataBank50]
Device=1
Channel=400
Regi=0
Regf=76
RegType=Struct(Word=2,Real=5)11;
Définition d'un databank interne utilisé pour stocker les consignes des redresseurs de polarisation:
;DB Alarm rectifier
;Reg0,Bit0 = Alarme courant max
;Reg1 = Consigne alarme courant max mode actuel
;Reg2 = Consigne alarme courant max mode polarisation
;Reg3 = Consigne alarme courant max mode amorçage
[DataBank51]
Device=0
Regi=0
Regf=23
RegType=Struct(Word=1,Real=3)6;
Retain=1
Définition d'un script effectuant le contrôle du courant max des redresseurs de polarisation:
//********************************************************
//* Génération d'alarmes sur redresseurs de polarisation *
//********************************************************
T:=TimerCreate(2000);
fin:=false;
repeat
if t.timerFinish then
begin
{ Position A21 Nickel Chimique }
if bit(50,21,0) then { le redresseur est-il en marche ? }
begin
if not bit(50,21,8) then { le redresseur est-il en mode polarisation ? }
begin
if bit(51,0,8) then { le mode a changé }
begin
if plcr(51,1)<>plcR(51,2) then plcr(51,1,plcr(51,2)); { récupère la bonne consigne }
bit(51,0,8,false);
end;
if plcr(51,1)<>plcr(51,2) then plcr(51,2,plcr(51,1)); { la consigne a changée alors enregistre la }
end else
begin
if not bit(51,0,8) then { le mode a changé }
begin
if plcr(51,1)<>plcR(51,3) then plcr(51,1,plcr(51,3)); { récupère la bonne consigne }
bit(51,0,8,true);
end;
if plcr(51,1)<>plcr(51,3) then plcr(51,3,plcr(51,1)); { la consigne a changée alors enregistre la }
end;
bit(51,0,0,plcr(50,25)>plcr(51,1)); { alarme si courant > alarme max }
end else bit(51,0,0,false); { reset alarme }
t.timerRestart;
end;
until fin;
Ce script devra être défini comme "Auto start" dans le VKServer.ini
[Script]
1=C:\VK-WinQV\Projets\44 - Emtech\A44004 - Verbrugge\SimulationA05.sct
2=C:\VK-WinQV\Projets\44 - Emtech\A44004 - Verbrugge\SimulationA07.sct
3=C:\VK-WinQV\Projets\44 - Emtech\A44004 - Verbrugge\Rectifiers.sct
Des I/O (mode de fonctionnement et consigne de tension) devront être définies pour chaque redresseur de polarisation:
;Pos.A21-Nickel Chimique
;==========
200=21,Pompe En/Hors,B,W,31,21,0
201=21,Chauffage En/Hors,B,W,31,21,10
202=21,Remplissage Auto/Hors,B,W,31,21,16
203=21,Ouvrir couvercle,B,W,31,21,26
204=21,Ouvrir aspiration,B,W,31,21,28
205=21,Etat couvercle ouvert,B,RC,32,21,26
206=21,Etat couvercle fermé,B,RC,32,21,27
207=21,Mode amorçage,B,WP,50,21,8
208=21,Consigne tension,F,WP,50,24,$ffff,0,10
Le mode d'amorçage est défini dans les commandes d'équipements:
Dans l'exemple ci-dessus, le redresseur est activé en mode "Amorçage" pendant 2 minutes. La tension d'amorçage est de 2.4 volts. Après 2 minutes, le mode passe à nouveau en mode "Polarisation" et la consigne de tension retourne à 1.3 volts.
Il faut également définir une alarme de dépolarisation de la cuve:
Sauvegarde des courbes de température
Les courbes de température, conductivité, etc.. sont sauvegardées normalement dans des fichiers. Chaque courbe est sauvegardée dans un fichier ayant l'extension ".rec". Ces fichiers se trouvent dans les répertoires Report/Année/Mois/Jours/n.rec. Le n correspond au numéro de l'enregistreur que vous pouvez trouver dans le fichier Recorder.ini:
Il faut être prudent lors de la définition des l'enregistreurs. Il faut définir correctement chaque enregistreur pour ne pas encombrer les fichiers de données inutiles. Par exemple, l'enregistrement des températures ne devrait se faire que toutes les minutes voir plus car ces données ne changent pas souvent.
Deux types d'enregistrement sont possibles:
- Realtime data: utilisé par les graphiques sélectionnables dans le menu popup d'une cuve. Sampling rate correspondant au temps (en secondes) entre chaque point. Horiz. axis width: correspond à la grandeur de l'axe du temps du graphique et Retain (sec) correspond au temps de rétention des données en mémoire. Ces valeurs ne doivent pas dépasser quelques heures pour ne pas saturer la mémoire du PC.
- Recording: utilisé pour sauvegarder les données dans les fichiers. Deadband (val) et deadband (sec) sont utilisés pour indiquer la zone morte qui doit être utilisée pour déclencher l'enregistrement. Dans l'exemple ci-dessus, si le système détecte un changement de valeur plus grand que 0.5 pendant une durée de 3 secondes, la valeur sera enregistrée. En plus, l'enregistrement sera effectué toutes les 60 secondes même si le deadband n'est pas atteint.
Chaque poste client génère ses propre fichiers d'enregistrement. Si vous avez plusieurs postes client, il faut activer l'enregistrement sur un seul poste.
A la place de sauvegarder les valeurs dans des fichiers, il est possible de les sauvegarder dans la base de données de reporting. Pour cela, il faut activer le mot clef VKWinQV.ini[Database]StoreChartInDatabase=1 (ce mot clef est activé par défaut).
Il est possible de demander au serveur de sauvegarder les données dans la base de données. Pour cela, il faut activer la case suivante:
Lorsque la sauvegarde est réalisée par le serveur, il faut décocher la case DoSaveRecorder des clients.
Utilisation du service VKSMSMessaging
Le programme VKSMSMessaging permet l'envoi de messages par SMS, Email ou Office365.
Le programme peut fonctionner en tant que service ou sous forme d'une application normal. Pour lancer le programme en tant qu'application normal, il faut lancer la ligne de commande et passer le paramètre suivant : -GUI. Vous pouvez également créer un raccourcis sur le programme et ajouter le paramètre dans les propriétés du raccourcis.
Pour installer le service, il faut passer par la ligne de commande et ajouter le paramètre -INSTALL. De même pour désinstaller le service, il faut passer le paramètre -UNINSTALL.
L'application fonctionne par la souscription à un topic MQTT. Lorsque ce topic reçoit un message, il est retransmit à un numéro de téléphone puis effacé.
Le mode application GUI
Lorsque l'application est lancée sous forme GUI, le programme démarre sous forme minimisée. L'icône suivante est affichée sur la barre des tÔches
Pour afficher la page principale de l'application cliquer sur l'icône. La page s'affichera au centre de l'écran. Cette page principale permet de configurer les différents services.
L'onglet "SMS"
Cet onglet est utilisé pour configurer la fonction SMS.
L'envoi d'SMS est réalisé par une connexion chez un fournisseur d'accès. Les fournisseurs suivants sont supportés:
- Twilio https://www.twilio.com/docs/sms/api
- Sinch https://developers.sinch.com/docs/sms/api-reference/
- SMS Global https://www.smsglobal.com/us/rest-api/
- SMS.to https://developers.sms.to/#intro
- Vonage https://developer.vonage.com/en/api/sms
-
Clickatell https://docs.clickatell.com/channels/one-api/one-api-reference/
Vous devez vous abonner à l'un de ces fournisseurs pour pouvoir utiliser le service. Une fois abonné, vous obtenez un numéro de compte ainsi qu'un clef secrète permettant la connexion au service.
Par exemple chez Sinch, les données de connexion se trouvent ici:
Le champ "Message From" est le nom affiché comme expéditeur sur votre téléphone. Certains fournisseurs ne permettent pas de changer le nom de l'expéditeur. Sinch lui le permet. Le champ "Recipient" indique le numéro de téléphone du destinataire. Pour la plupart des fournisseurs, le numéro de téléphone doit commencer par l'indicateur international + suivi du numéro du pays. Les noms du destinataire ainsi que le numéro de téléphone peuvent être envoyés dans les données du token depuis l'application VKQuickView.
Le champ message correspond au message qui sera envoyé au téléphone. Le message peut être composé de mot clef permettant de remplacer ces mots clef par les données en provenance de QuickView. Les mots clefs sont encadrés par des caractères %. Les mots clef suivants sont possibles:
| Mots clef | Description |
| %Subject% | Sujet du message |
| %Machine% | Nom ou numéro de la machine |
| %DateTime" | Date et heure du message d'alarme |
| %Type% | Type du message d'alarme |
| %Group% | Groupe du message d'alarme |
| %Message% | Message de l'alarme |
| %Number% | Numéro de l'alarme |
Pour effectuer un test de message, remplissez les champs de test et cliquez sur le bouton [Test]. Le message sera envoyé selon le contenu du champ "Message" et des champs "Test".
Activation du service dans QuickView
L'activation du service se fait grace à la commande Edition|Messagerie. L'image suivante s'affiche:
Il est nécessaire de définir les classes d'alarme devant être transmises.
Les statistiques avec la base de données de suivi
Lorsqu'une base de données de suivi est utilisée, il est possible de générer des statistiques avec les données récoltées.
Les statistiques sont atteignables à l'aide des menus suivants:
- Rapports de suivi
- Statistiques de production
- Historique des mouvements des robots
- Historique des alarmes et messages
- Statistiques d'utilisation des pompes doseuses
- MTBF et MTTR
- Courbes des redresseurs
Rapports de suivi
Par défaut, les charges passées durant le mois en cours sont affichées. Le graphique affiche le nombre de charges passées par jour. Il est possible de naviguer entre le total de charges passées sans tenir compte de l'état des charges terminées (jaune) ou le total des charges bonnes (vertes) et le total des charges pas bonnes (rouges). Ce choix est sélectionnée à l'aide des 2 premières icônes en dessus du graphique. Le centre de l'écran affiche le rapport sélectionné (avec ou sans les commandes d'équipements). La case à cocher "affichage des commandes d'équipements" permet de choisir entre 2 types de rapport : ReportFPL.frf ou ReportFPL_CMD.frf (pour les machines de type FPL) et ReportFCL.frf et ReportFCL_CMD.frf (pour les machines de type FCL). L'icône Imprimante permet d'afficher le graphique dans le centre de l'écran pour permettre son impression.
La liste de gauche affiche les charges du jour sélectionné. Il est possible de sélectionner le jour soit en le sélectionnant dans le calendrier ou soit en cliquant sur la colonne correspondante dans le graphique.
L'onglet "Recherche" donne l'accès à la recherche:
L'onglet "Export" donne l'accès aux fonctions d'exportation:
Le répertoire d'exportation affiché est également utilisé pour exporter les rapports lorsqu'une charge est déposée sur un poste de décharge. Les exportations sont faites à plat si la case à cocher "Structure de fichiers: années/mois/jours n'est pas cochée. Dans le cas contraire, les exportations sont faites dans la structure de fichiers années/mois/jours. Si les répertoires n'existent pas, ils sont créés automatiquement.
Si votre système a été configuré pour permettre l'introduction de mesures, lorsque vous cliquez avec le bouton droit de la souris sur une charge dans la liste, une fenêtre permettant l'introduction de mesures est affichée:
Statistiques de production
Le type de statistiques est sélectionnable à l'aide du combobox situé tout à gauche du menu. Les types suivants sont possibles:
- Références chargées
- Articles chargés
- Contrôles en sortie
- Productivité journalière
- Occupation des positions
Les références chargées
Pour chaque barre chargée, une ligne est affichée.
Articles chargés
Tous les articles chargés sont afficher dans cette table. Il peut y avoir plusieurs lignes (une par article) par charge.
Contrôles en sortie
Si l'option du contrôle en sortie a été configurée, vous pouvez afficher le résultat de ces contrôles dans cette table. Pour pouvez afficher le rapport correspondant à une ligne en double-cliquant sur la ligne.
Productivité journalière
Occupation des positions
L'occupation est calculé avec les enregistrements "Prise/Dépose" des robots dans les positions de la machine.
Historique des mouvements des robots
Deux onglets permet soit d'afficher la liste des mouvements des robots dans une table (table des mouvements) ou soit un diagramme des mouvement effectués pendant la période de recherche.
Table des mouvements
Diagramme des mouvements
Historique des alarmes et messages
Il est possible d'afficher 4 types de tableau:
- Alarmes et Messages
- Alarmes seulement
- Messages seulement
- Alarmes prioritaires
Alarmes et messages
La liste des alarmes et des messages est affichée en mélangeant chronologiquement les évènements.
Il est possible d'afficher toutes les alarmes d'un même type ou d'un même groupe ou d'un même message en double-cliquant sur la colonne désirée.
Dans l'exemple ci-dessus, l'utilisateur a double-cliqué sue le groupe "Robot 3". Pour revenir en arrière, double-cliquer sur le titre de la colonne en jaune.
Alarmes seulement
La liste ne contient que des alarmes.
Messages seulement
La liste ne contient que des messages.
Alarmes prioritaires
Lorsque ce type de statistique est choisi, une icône supplémentaire s'affiche dans l'entête. En cliquant sur cette icône, vous pouvez choisir les types et groupes d'alarmes désirés. Vous pouvez également choisir que les alarmes avec une priorité plus grande que 0.
Cette liste est la même qu'utilisée lors du calcul du MTBF et MTTR.
Cette liste tient compte des arrêts d'urgence. Lorsqu'une alarme d'arrêt d'urgence est activée, toutes les alarmes situés entre le début de l'arrêt d'urgence et la fin de celle-ci sont éliminées. De plus, lorsqu'une alarme sur un robot intervient, toutes les autres alarmes du même robot sont inhibées pendant la durée de la première alarme car certaines fois des alarmes sont générées à cause de la première alarme et elles sont pas significatives pour le calcul du MTBF.
Statistique d'utilisation des pompes doseuses
Sur cette page, il est possible d'afficher 3 types de liste:
- Le dosage manuel: L'utilisateur à sélectionné une quantité à ajouter sur la page des pompes doseuses.
- Le dosage automatique: Les quantités envoyées automatiquement par les pompes doseuses lorsque la consigne de dosage est atteinte.
- Le makeup: quantités envoyées par des fonctions de makeup (montage manuel d'un bain).
MTBF et MTTR
MTBF (temps moyen entre les défaillances)
Le temps moyen entre les défaillances (MTBF) est le temps moyen entre les défaillances de production qui peuvent être réparées. Il mesure la fiabilité et la disponibilité d'un appareil ou d'un bien. Plus la valeur du MTBF est élevée, plus le système est fiable.
L'objectif est d'obtenir un MTBF aussi élevé que possible, de l'ordre de plusieurs centaines ou milliers d'heures.
Exemple de calcul de la MTBF
Voici l'équation qui permet de calculer le MTBF :
MTBF = durée totale de fonctionnement / nombre de défaillances
Imaginez qu'une ligne de production fonctionne 130 heures par semaine avec 4 pannes. Les deux premières durent 2 heures chacune et les deux autres 3 heures chacune.
Durée totale de travail : 130 heures
Nombre de défaillances : 4 Interruptions
Durée totale de l'échec : 2(2 heures) + 2(3 heures) = 10 heures
(130 - 10) / 4 = 30
MTBF = 30
MTTF (temps moyen de défaillance)
Le temps moyen de défaillance (MTTF) est le temps moyen avant la défaillance d'un appareil ou d'un bien non réparable. Il mesure la durée d'utilisation fiable d'un appareil ou d'un bien avant qu'il ne tombe complètement en panne et prédit le moment où les opérateurs doivent s'attendre à remplacer l'appareil ou à effectuer des diagnostics réguliers. Il est synonyme de durée de vie des appareils.
Il est évident que plus le MTTF est long, moins l'entreprise doit dépenser pour remplacer l'appareil ou le bien en question.
Exemple de calcul du MTTF
Voici l'équation qui permet de calculer le MTTF :
MTTF = durée de vie totale des appareils ou des biens / nombre d'appareils ou de biens
Imaginez qu'une chaîne de production compte au total trois appareils du même type. Le premier appareil est tombé en panne à 5 200 heures, le deuxième à 4 200 heures et le troisième à 5 600 heures.
Durée de vie totale des appareils : 5,200 + 4,200 + 5,600 = 15,000
Nombre d'appareils : 3
15,000 / 3 = 500
MTTF = 500 heures
Cela signifie que cet appareil a une durée de vie moyenne de 5 000 heures. GrÔce à cette mesure, les entreprises peuvent déterminer si cette marque d'appareil ou d'équipement convient à leur production ou si elles doivent opter pour une solution plus durable et plus performante.
Période de fonctionnement
La période de fonctionnement est calculé avec les évènements Programme AUTO/STOP de la machine. Le MTBF est calculé uniquement lorsque le mode programme est sur AUTO. Toutes les alarmes (de la liste des types et groupes d'alarme) intervenues pendant cette période sont prise en compte. La disponibilité de la machine est calculé comme suit: MTBF/(MTBF+MTTR)*100.
Il ne faut pas choisir plus de 100 jours entre les dates de début et de fin.
Courbes des redresseurs
Les positions d'inspection
Dans l'application, il est possible de définir des positions d'inspection. Une position d'inspection est une position où l'on envoie une charge pour être inspectée. Les positions d'inspection sont définies dans le fichier IO.ini dans la section [Inspection]. Exemple:
;*****************************************************
;Inspection
;num=Name,position,inspectionposition,type,I/O,Programme
; Num = Numéro d'inspection 1..10
; Name = nom de l'inspection
; Position = position à laquelle démarre l'inspection
; InspectionPosition = position d'inspection
; Type = 0:Quality 1:Hanging dummy part 2:Wettability
; I/O = Inspection I/O Index 0: Statut Index 1: Commande
; Programme = numéro de la séquence à utiliser pour retourner en gare
;*****************************************************
[Inspection]
1=Cuivre,58,44,1,60,90
2=Palladium,72,82,0,61,91
| # | Paramètre | type | Description | ||||||||||||||||||||||||
| 1 | Numéro de l'inspection | Integer | de 1 à 10 | ||||||||||||||||||||||||
| 2 | Nom de l'inspection | String[64] | Ce nom est affiché sur le poste de charge | ||||||||||||||||||||||||
| 3 | Position | Integer | Numéro de la position de la machine qui permet de démarrer une inspection | ||||||||||||||||||||||||
| 4 | InspectionPosition | Integer | Numéro de la position vers laquelle la charge est envoyée pour une inspection. La position doit avoir le champ flag = 0 dans la définition de la machine. | ||||||||||||||||||||||||
| 5 | Type | Integer | Type d'inspection 0: Inspection de qualité 1: accroche d'une pièce témoin 2: inspection sur le robot | ||||||||||||||||||||||||
| 6 | I/O | Integer |
I/O indiquant le début de la table automate. La table est composée de 2 registres: le premier correspond au statut de la position d'inspection et le deuxième est utilisé comme commande de VK.
Le registre de statut est composé des bits :
Le registre de commande est composé des bits:
Il ne faut pas oublier de définir les bits 8 , 9 et 10 dans des alarmes pour que celles-ci soient enregistrées sur le rapport. |
||||||||||||||||||||||||
| 7 | Programme | Integer | Numéro de programme à utiliser pour retourner la charge en gare |
Il faut définir dans les séquences, les positions sur lesquelles les charges doivent subir une inspection. Pour cela, le mot clef "ShowMeasurementType" doit être activé:
En activant cette case à cocher, une colonne supplémentaire s'affiche dans l'éditeur de séquences:
Cette colonne permet de sélectionner une mesure (voir chapitre mesures) ou une inspection. Lors de l'enregistrement de la séquence, si une inspection est définie dans une position, le système vérifie que la position est bien définie dans la liste des positions d'inspection avant d'enregistrer la séquence. Si une inspection est définie dans une position ne faisant pas partie de la liste des positions d'inspection, l'enregistrement n'est pas possible et un message d'erreur vous en informera.
En général, les inspections sont réalisées sur quelques charges mais pas sur toutes. Pour définir sur quelles charges les inspections sont réalisées, le poste de charge n°52 permet cette sélection:
Pour que cet onglet s'affiche, il faut l'activer dans la configuration du poste de charge:
La zone "Information de production" n'est pas disponible lorsque cette option est activée.
Lorsqu'une charge est dans une position d'inspection (type 0 ou 1), une fois le temps d'immersion terminé, le système vérifie si la charge a été définie pour être inspectée. Si c'est le cas, le système vérifie si la position d'inspection est libre et que le registre de statut bit(0) est activé (prêt à recevoir une charge). Si c'est le cas, la charge est transférée à la position d'inspection et le bit 0 du registre de commande est activé s'il n'y a pas de demande d'accrochage dans le cas contraire, le bit 1 est activé. Les autres bits sont effacés.
Lorsqu'une charge est en position d'inspection et que le bit 0 du registre de statut est activé, le système vérifie le bit 1 ou le bit 2 soit activé. Si le bit 1 est activé alors la charge continue son traitement comme défini dans la séquence. Si le bit 2 est activé, le programme de retour en gare est assigné à la charge.
Pour le type=2, le fonctionnement est différent. Lorsqu'une charge sort de la position d'inspection, le système vérifie si la charge a été définie pour être inspectée. Si c'est le cas, le système active le bit 3 du registre de commande et est en attente d'une réponse de l'opérateur pendant 30 secondes. Pendant ces 30 secondes, l'opérateur doit indiquer si la charge continue sa séquence ou si celle-ci doit retourner en gare. Si aucune réponse n'est donnée pendant ces 30 secondes, la charge est considérée comme en erreur et est redéposée dans la position. Le programme de retour en gare est assigné à la charge.
Lecture de codes à barres au travers de MQTT
Pour permettre le partage d'un lecteur de codes à barres par plusieurs PC, il est possible d'utiliser un topic MQTT comme entrée de données. Pour cela, il faut modifier la configuration du lecteur dans VKWinQV.ini comme suit:
[Barcode]
ReaderType=MQTT
Comport=10
suffix=13
Baudrate=9600
Databits=8
Stopbits=2
Parity=Even
Encoding=14
bell=7
Dans la définition ci-dessus, ReaderType=MQTT indique que le lecteur est lié à un topic MQTT. La définition Comport n'est dans ce cas pas utilisé. Le mot clef ReaderType peut contenir les valeurs suivantes: MQTT, COM, ETHERNET
La section [MQTT] doit être définie pour que l'utilisation de MQTT soit utilisable par le client.
Les positions contrôlées par AlarmStop
Dans l'application, il est possible de définir des positions sur lesquelles un contrôle d'alarme est effectué. Le contrôle d'alarme permet d'interrompre une séquence dans certaines situations et de renvoyer la charge en gare. Les positions d'alarmstop sont définies dans le fichier IO.ini dans la section [AlarmStop]. Exemple:
;*****************************************************
;AlarmStop
;num=alarmstopPosition,I/O,Programme
; Num = Numéro d'alarmStop 1..10
; Position = position à laquelle se déroule l'alarmStop
; I/O = AlarmStop I/O Index 0: Statut Index 1: Commande
; Programme = numéro de la séquence à utiliser pour retourner en gare
;*****************************************************
[AlarmStop]
1=12,44,90
2=34,45,91
| # | Paramètre | type | Description | ||||||||
| 1 | Numéro de l'AlarmStop | Integer | de 1 à 10 | ||||||||
| 2 | Position | Integer | Numéro de la position de la machine sur laquelle le contrôle est effectué | ||||||||
| 3 | I/O | Integer |
I/O indiquant le début de la table automate. La table est composée de 2 registres: le premier correspond au statut de la position d'alarmstop et le deuxième est utilisé comme commande de VK.
Le registre de statut est composé des bits :
Le registre de commande n'est pour l'instant pas utilisé
Il ne faut pas oublier de définir le bit du registre de statut dans des alarmes pour que celle-ci soit enregistrée sur le rapport. |
||||||||
| 4 | Programme | Integer | Numéro de programme à utiliser pour retourner la charge en gare |
A la fin du temps de traitement, le système contrôle si le bit 0 du registre de statut est activé. Dans ce cas, le programme indiqué dans le paramètre 4 est assigné à la charge sinon le programme continue normalement sa séquence.
Les profils de courant
Sur le poste de charge (ou dans la définition des gammes de la bibliothèque de pièces), il est possible de définir un profil de courant sur les blocs de traitement utilisant un redresseur. Ce profil de courant correspond à un chiffre de 1 à 32. Ce numéro fait référence à une liste de profils définis par l'utilisateur.
Les profils de courant sont paramétrables en sélectionnant la commande suivante: Edition | Profils de courant.
Plusieurs types de profil sont définissables. Le type est défini lors de la mise en service de la machine. Il peut être modifié par la suite mais il faut impérativement redémarrer l'application (Client et Serveur). Attention: tous les types de redresseur ne supportent pas certains type de profil. Il faut se renseigner chez VK pour savoir si vos redresseurs supportent le type de profil désiré.
Le type de profil se défini dans Définition des paramètres système | Redresseurs:
Sur les applications récentes, NewCurrentForm doit être sélectionné. Les types de step possibles doivent être activés pour fonctionner. Encore une fois, tous les types de step ne fonctionnent pas avec tous les redresseurs. Se renseigner avant de modifier.
Type de profil "NewCurrentForm"
Dans ce type de profil, chaque profil comportent 6 steps. Les steps se déroulent les uns après les autres. Lorsque le temps prévu dans le step est atteint, le step suivant est sélectionné et les données sont envoyées au redresseur. Un step vide indique la fin de la liste des steps possibles. Un type de régulation est configuré sur chaque profil: régulation tension ou régulation courant. Tous les steps du profil utiliseront le même type de régulation.
En cliquant sur la cellule "Regul", la boîte de sélection du type de régulation s'affiche:
Vous pouvez choisir entre Régulation Courant avec une tension max paramétrable (0=Tension max du redresseur) ou Régulation Tension avec un courant max paramétrable (0=Courant max du redresseur).
En cliquant sur les cellules des steps, la boîte de configuration du step s'affiche:
Les types de step sont sélectionnables sur les onglets en haut de la boîte. Ces types sont configurés dans la définition des paramètres système (voir ci-dessus).
Pour chaque type de step des paramètres doivent être configurés. Pour les steps de type DC, les paramètres suivants sont définissables:
| T1 | Description |
| Immersion | Le step durera pendant le temps d'immersion calculé sur le poste de charge. Le champ "Valeur" n'est pas utilisé dans ce cas. |
| Secondes | Le step durera pendant le temps défini dans le champ "Valeur". |
| % immersion | Le step durera pendant le pourcentage du temps d'immersion indiqué dans le champ "Valeur". |
| V1 | Description |
| % consigne | Le champ "Valeur" indique un pourcentage de la consigne envoyée au redresseur. Par exemple pour une surface de 10dm2 avec une densité de 2.5A/dm2 soit une consigne total de 25A, avec une valeur de 15 dans ce champ une consigne de 3.75A sera envoyée au redresseur. |
| Valeur | Le champ "Valeur" indique la consigne à envoyer au redresseur. |
Une valeur négative dans le champ "Valeur" indique au système d'effectuer une inversion de polarité. Il faut bien sûr que le redresseur soit équipé d'un inverseur de polarité pour que cela fonctionne.
La case à cocher "Rampe" indique au système qu'une rampe sera effectuée pendant la durée du step. La valeur de départ de la rampe correspond à la valeur de consigne du dernier step. La valeur d'arrivée correspond à la valeur V1. Les consignes sont calculées toutes les 5 secondes. Il faut donc que le temps T1 soit assez grand pour permettre plusieurs étapes.
Pour les steps de type "Alterné", les paramètres suivants sont définissables:
Les consignes V1 et V2 sont appliquées alternativement pendant toute la durée du Step T1. T2 correspond à la durée de V1 et T3 correspond à la durée de V2.
Type de profil "StepCoating"
Ce type de profil est utilisé dans des cas bien précis et ne sont pas applicables à tous les types de redresseur.
Dans ce type de profil, 20 steps peuvent être définis par profil.
Type de profil "LargeCurrentForm"
Ce type de profil fonctionne de la même manière que "NewCurrentForm" sauf que le nombre de steps total est limité à 25 steps.
Une petite subtilité dans le type de régulation Tension, il est possible de spécifier une valeur QMax pour terminer le profil de courant.
Pour que cela fonctionne, le poste de charge doit être configurer pour permettre la définition d'un QMax.
Type de profil "LargeCurrentFormRegulation"
Ce type fonctionne comme le type précédent sauf que le type de régulation est défini pour chaque step.
Il est possible donc de mélanger des steps en régulation de courant et des steps en régulation de tension.
Il est également possible de définir de quelle manière le profil s'arrête à l'aide du combo box situé en haut de la page à droite: