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

Avantages

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

Le nom du répertoire peut être défini avec un autre répertoire sur la machine en local ou un répertoire sur un disque réseau à votre convenance.

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:


assets_quickview_-MNbb1r_pISNKzDxc0tz_-MNbma_WmKtzWNDO2VBY_0.png

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

Des routines d'enregistrement ont été ajoutées dans le programme client ainsi que dans le serveur. Chaque fois qu'une opération est effectuée par un utilisateur, celle-ci est enregistrée dans le fichier. Les fichiers sont sauvegardés selon la hiérarchie suivante :

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

Un programme séparé permet la visualisation et l'impression de l'audit trail. Il vérifie la validité des enregistrements en vérifiant le checksum de chacun d'entre eux. Il vérifie également la continuité des numéros d'enregistrement pour assurer qu'aucun d'entre eux n'ai été effacé. Une marque " Check " verte est affichée si le fichier visualisé est intègre. Dans le cas contraire, une marque " Stop " rouge informe l'utilisateur que l'audit a été manipulé.

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.

l'impression des enregistrements est possible. l'exportation sous forme de fichier pdf est également possible.

Les enregistrements sont affichés sous forme de table avec les colonnes suivantes :

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

Les fichiers sont de type csv. Le séparateur de liste est le point-virgule. Les champs suivants sont utilisés :

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 :

"RecordID";"TimeStamp";"UserID";"ObjectID";"Description";"Comment";"Checksum"

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é.

Exemple de DB de commandes:
[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.

Exemple de définition du device:
[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

b8453b86-83fc-4fa6-91f8-f97241191acd (2).png



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.

Exemple de définition du device:
[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

La société Banner propose le produit EZ-Light K50 Modbus Series Pick-to-Light Sensors ou Pick-IQ K50 Ces boutons doivent être connectés entre eux par un bus RS-485. Il existe des convertisseurs USB-RS-485 pour pouvoir les connecter sur un PC. La fiche technique peut être téléchargée ici.

Installation typique

assets_quickview_-MNbwgI6BeSb8NrJL_oJ_-MNbwtSjlY7h6qfbr47y_0.png

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

VK Pick-to-Light Gateway.png

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

04 - Marche.png

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.

21 - Marche 1.png

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.

29 - Marche avec erreur.png

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

02 - Menu principal.png

Sélectionner le menu "Mode de fonctionnement" à l'aide des boutons gauche et droit en les pressant brièvement. Une fois le menu surligné, presser sur le bouton central. Les modes possibles sont affichés:

03 - Menu mode de fonctionnement.png

Le mode "Arrêt":

01 - Hors service.png

Le mode "Arrêt" ne fait rien (pas d'action sur les boutons).

Le mode "Test":

05 - Test.png

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":

06 - Demo.png

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

07 - Menu configuration.png

Configuration de l'adresse Ethernet locale en mode cÔblé:

08 - Menu config Adresse UDP Local.png

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é:

09 - Menu config Adresse UDP distante.png

Configuration des boutons:

23 - Menu Boutons.png

Le premier menu permet de définir le type de bouton utilisé. Pour l'instant 2 types sont possibles:

24 - Menu Select button type.png

Le deuxième menu permet de définir les boutons utilisés:

30 - Menu config Configuration des boutons.png

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:

28 - Menu Wifi Mode selection.png

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:

Machine.png

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].

Settings.png

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

Machine 3.png

Autre exemple de string de configuration 0L47:0,48R0:1,88R46:1

Machine 2.png

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:

MachineGrid.png

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:

TankCell.png

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:

assets_quickview_-MNdCgB6KOmSUbr9JIEj_-MNdDBZu0xd9oNX2CjEs_0.png

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.

assets_quickview_-MNdCgB6KOmSUbr9JIEj_-MNdDBZvbKhxOBiHtOIv_1.png

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

Lecture de la licence (1).png

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:

TMSHttpConfigTool.png

Ajouter une nouvelle règle en pressant sur le bouton [Add]:

port8484.png

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.

image.png

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:

assets_quickview_-MNdUgAISwBJFTNfdQKs_-MNdZIxFIM7sUlhaa081_0.png

The "Settings" dialog box will be displayed:

assets_quickview_-MNdUgAISwBJFTNfdQKs_-MNdZIxGl5ZvMeUwQPxT_1.png

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:

assets_quickview_-MNdUgAISwBJFTNfdQKs_-MNdZIxHAcQuyo-rlHS6_2.png

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.

assets_quickview_-MNdUgAISwBJFTNfdQKs_-MNdZIxIMUU4M0BAk5MC_3.png

Running program with measurement

When a thickness measurement is requested, the jig requiring the measurement will be displayed in flashing fuchsia in the machine:

assets_quickview_-MNdUgAISwBJFTNfdQKs_-MNdZIxJo95P86TSySJj_4.gif

In order to open the measurement dialog box, you must right click on the load and select "Thickness measurement" in the popup menu:

assets_quickview_-MNdUgAISwBJFTNfdQKs_-MNdZIxKWLUboagcvPpQ_5.png

By clicking on this command, the following dialog box will be displayed:

assets_quickview_-MNdUgAISwBJFTNfdQKs_-MNdZIxLfxqx5AZGWPJy_6.png

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

1001_AI Architecture informatique_01.png


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:

2025-08-08_14-13-18.PNG

  • 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:

assets_quickview_-MNbXSmZHIPeRDlXJt_c_-MNbXf6QtUwVKM_bByZw_2.png

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:

assets_quickview_-MNbXSmZHIPeRDlXJt_c_-MNbXf6Ry9pYX_ScSsIj_3.png

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é.

Si le service n'a jamais été installé, il faut l'installer en lançant une fenêtre de commande en tant qu'Administrateur. Puis il faut taper VKQVRemoteDB.exe -install . Cette commande enregistrera le service dans Windows. Il faudra ensuite démarrer le service. Pour cela, il faut ouvrir les services et chercher le service "VKQV Remote Database Service" dans la liste, sélectionner le service et cliquer avec le bouton de droite puis sélectionner la commande "Propriétés" du menu popup. La boîte suivante s'affiche:

assets_quickview_-MNbXSmZHIPeRDlXJt_c_-MNbXf6SfCUEYz2Q2vcc_4.png

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

http://localhost:1888

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

http://localhost:1888

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.

Le programme serveur OPC s'appelle VKQVOPCRemoteDB.exe. Il est enregistré comme serveur COM lors de son installation. Le serveur OPC se nomme VKQVOPCRemoteDB.TVKQVRemoteDBOPCServer.1. Les variables accessibles sont:

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:

MainStart.jpg








La commande Options|Configuration permet d'accéder aux paramètres de l'application:

Config_general.jpg

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:

ReportMachineName.jpg

Numéro de la machine String

Numéro de la machine affiché sur les rapports:

ReportMachineNumber.jpg

Les programme pouvants être sélectionnés sont définis dans cette page de configuration. 30 noms de programmes peuvent être définis.

Config_Programs.jpg

Les connexions avec la base de données sont définies dans la page de configuration des connexions:

Config_Connections.jpg


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:

ReportMachineID.jpg


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:

Reference_OK.jpg

Si la référence n'est pas trouvée dans la base de données, un message l'indique:

Error_reference.jpg

Une fois les informations de la référence affichées, l'utilisateur doit introduire les données obligatoires:

Reference_Start.jpg

Le bouton de démarrage s'affiche en vert. L'utilisateur doit cliquer dessus pour démarrer la démétallisation.

Reference_Stop.jpg

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 ).

1001_AI Architecture informatique_08.jpg

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:

ISA-95 equipment hierarchy model.png

Exemple d'un Unified Name Space:

MQTT.png

2026-07-20_09-46-44.PNG


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.

assets_quickview_-MNbofKPQVP3lfIcEA04_-MNbs97iuZ0DBAv92vJq_0.png

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.

assets_quickview_-MNbofKPQVP3lfIcEA04_-MNbs97jk7GUF7nhWl0J_1.png

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": {
        "positions": [
            {
                "pos": 1,
                "jn": 3,
                "js": 0,
                "jp": 0,
                "rdy": 1,
                "ala": false
            },
            {
                "pos": 2,
                "rdy": 1,
                "ala": false
            },
            {
                "pos": 3,
                "jn": 1,
                "js": 0,
                "jp": 0,
                "ena": true,
                "rdy": 1,
                "ala": false
            },

...

    ],
        "hoists": [
            {
                "hoist": 1,
                "rdy": true,
                "blockingala": 0,
                "ala": 0,
                "height": 0,
                "destheight": 0,
                "position": 0,
                "destpos": 0,
                "origin": 0,
                "destination": 0,
                "mode": 0,
                "moveHforward": false,
                "moveHbackward": false,
                "moveVup": false,
                "moveVdown": false
            },
            {
                "hoist": 2,
                "rdy": true,
                "blockingala": 0,
                "ala": 0,
                "height": 0,
                "destheight": 0,
                "position": 0,
                "destpos": 0,
                "origin": 0,
                "destination": 0,
                "mode": 0,
                "moveHforward": false,
                "moveHbackward": false,
                "moveVup": false,
                "moveVdown": false
            } 

        ]
    },
    "T": "MachineStatus",
    "TS": "2024-04-26T06:55:30.333"
}

 

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:

{
    "V": {
        "alarms": [
            {
                "evt": 2,
                "num": 50,
                "time": "07:16:19",
                "type": "Programme",
                "group": "Général",
                "mess": "Programme en mode STOP",
                "tnum": 1,
                "gnum": 150,
                "mnum": 2
            },
            {
                "evt": 2,
                "num": 897,
                "time": "07:16:19",
                "type": "Communication",
                "group": "M5Stack",
                "mess": "Erreur de communication avec l'automate",
                "tnum": 14,
                "gnum": 148,
                "mnum": 35
            },
            {
                "evt": 3,
                "num": 2,
                "time": "07:16:20",
                "type": "Système",
                "group": "HMI",
                "mess": "Watchdog communication avec automate",
                "tnum": 2,
                "gnum": 140,
                "mnum": 37
            }
        ]
    },
    "T": "AlarmStatus",
    "TS": "2024-04-26T07:16:46.639"
}

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": {
        "DateOfData": "20240426",
        "Date": "26.04.2024",
        "BatchesIn": 0,
        "BatchesOut": 0,
        "IdleTime": 0,
        "ErrorStopTime": 0,
        "ErrorWarningTime": 28,
        "ManuModeTime": 28,
        "SafetyDoorTime": 0,
        "PowerOnTime": 28,
        "Utilization": 100,
        "Reliability": 100,
        "24hours": [
            {
                "Hour": 9,
                "BachesIn": 0,
                "BachesOut": 0,
                "Reliability": 0,
                "Utilization": 0
            },
            {
                "Hour": 10,
                "BachesIn": 0,
                "BachesOut": 0,
                "Reliability": 0,
                "Utilization": 0
            },
            {

...

    },
    "T": "DailyData",
    "TS": "2024-04-26T07:23:31.594"
}

BaseName/GroupName/VKQV/Status/Rectifiers

Statut des redresseurs:

 

{
    "V": {
        "rectifiers": [
            {
                "rectifier": 1,
                "position": 13,
                "name": "",
                "status": 128,
                "step": 0,
                "ahamn": 1,
                "surface": 0,
                "density": 0,
                "current": 0,
                "voltage": 0,
                "Q": 0,
                "QTheo": 0,
                "QTheoAct": 0,
                "QTotal": 1406.11250237337,
                "setpoint": 0,
                "reverse": 0,
                "maxU": 15,
                "maxI": 100,
                "minU": 0,
                "minI": 100,
                "pcsetpoint": 100,
                "alternation": 0,
                "flag0": 0,
                "flag1": 1,
                "flag2": 0,
                "surfaceflag": 7,
                "currentform": 0
            },
            {

...

            }

        ]
    },
    "T": "RectifiersStatus",
    "TS": "2024-04-26T06:55:30.353"
}

BaseName/GroupName/VKQV/Status/PositionsStat

Statut d'utilisation des positions de la machine et des barres:

 

{
    "V": {
        "positions": [
            {
                "pos": 1,
                "time": 13,
                "load": "",
                "surftotal": 128,
                "surfmetal": 0,
                "entrainment": 1
            },
            {

...

            }

        ]

      "jigs":[

         {

              "jig": 1,

              "loaded": 45,

              "total": 234

         },

         {

         ...

         }   

      ]    },
    "T": "RectifiersStatus",
    "TS": "2024-04-26T06:55:30.353"
}

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:

{"V":269,"T":"Int","TS":"2022-06-03T10:28:01.936"}

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:

{
    "V": {
        "positioncount": 65,
        "hoistcount": 4,
        "positions": [
            {
                "pos": 1,
                "name": "01 - Charge",
                "flag": 2,
                "addr": 1,
                "group": 0,
                "tank": 1,
                "disable": false,
                "width": 0,
                "process": 1,
                "dist": 200,
                "branch": 0,
                "num": 1,
                "layout": 0
            },
            {
                "pos": 2,
                "name": "02 - Transfert 1",
                "flag": 10,
                "addr": 2,
                "group": 0,
                "tank": 2,
                "disable": false,
                "width": 0,
                "process": 2,
                "dist": 200,
                "branch": 0,
                "num": 2,
                "layout": 0
            },
            {

..

            }

        ],
        "hoists": [
            {
                "hoist": 1,
                "type": 13,
                "driptray": true,
                "halfup": true,
                "pmin": 1,
                "pmax": 26
            },
            {
                "hoist": 2,
                "type": 13,
                "driptray": true,
                "halfup": true,
                "pmin": 12,
                "pmax": 36
            },
            {
                "hoist": 3,
                "type": 13,
                "driptray": true,
                "halfup": true,
                "pmin": 37,
                "pmax": 56
            },
            {
                "hoist": 4,
                "type": 13,
                "driptray": true,
                "halfup": true,
                "pmin": 45,
                "pmax": 65
            }
        ]
    },
    "T": "MachineDefinition",
    "TS": "2024-04-26T06:54:58.864"
}

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é

2024-12-14_12-00-40.PNG

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:

VKQV_NCOM.png

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:

VKQV SAPDM-2026-08-24-150941.png


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"

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.

1001_ST_FluxDeDonnées_02.jpg

Echanges avec des équipements

Ce chapitre décrit les échanges effectués entre le PC et les divers équipement

Echanges avec des équipements

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:

image-1607596449572.png

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

  • 1 = Déplacement horizontal (Bit 8-14 = position de destination)

  • 2 = Déplacement vertical (Bit 4-7 = hauteur de destination 1:en haut, 2: en bas, 4:up 1/2 Bit 12..14 = vitesse à utiliser 0..7)

  • 4 = Déplacement vertical (Bit 4-7 = hauteur de destination 1:en haut, 2: en bas, 8: hauteur HLiftout. La vitesse semi-verticale doit être utilisée) (nouveau)

Bit 15: trigger nouvelle commande (inversé à chaque commande)

Echanges avec des équipements

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>

In order to send a new command to hoist, VKQV will check the following conditions :
?
  1. Hoist mode is in Auto ( Reg2 Bit 0-2 == 4)

  2. Hoist is ready to accept new command ( Reg2 Bit 3 == ON)

  3. Hoist has no blocking alarm activated (Reg2 Bit 4 == OFF)

  4. Command trigger = status trigger (Reg0 Bit 15 == Reg2 Bit 15)

If all of those conditions are verified than a new command can be send.

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:

assets_quickview_-MNh2ifGif2o49BTcYu2_-MNiOqxcEqCdiOlHfeeM_0.png

Move to logical position #3, program mode = STOP, there is no rack holder on the hoist:

assets_quickview_-MNh2ifGif2o49BTcYu2_-MNiOqxdNcZtBonlerLi_1.png

Command is accepted by the PLC:

assets_quickview_-MNh2ifGif2o49BTcYu2_-MNiOqxdNcZtBonlerLi_1.png

Hoist is moving horizontally and is actually in logical position #9:

assets_quickview_-MNh2ifGif2o49BTcYu2_-MNiOqxfsKFmaywx4GcI_3.png

Hoist is in the logicial position 3 and is ready to accept a new command:

assets_quickview_-MNh2ifGif2o49BTcYu2_-MNiOqxgEZ-5iGmxN3q0_4.png

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:

assets_quickview_-MNh2ifGif2o49BTcYu2_-MNiOqxhZ7NiaYo_VmLf_5.png

Move to top:

assets_quickview_-MNh2ifGif2o49BTcYu2_-MNiOqxiv_PDBxoo1BYi_6.png

Command is accepted by the PLC:

assets_quickview_-MNh2ifGif2o49BTcYu2_-MNiOqxjaCjhVNwa5A3i_7.png

Hoist is moving vertically. It is in logical position #3 and is clipped:

assets_quickview_-MNh2ifGif2o49BTcYu2_-MNiOqxkRNHSqwhTYeO-_8.png

Hoist is in logical position #3 in upper vertical position and is ready to accept a new command:

assets_quickview_-MNh2ifGif2o49BTcYu2_-MNiOqxl9qMe6NP5up5l_9.png

Hoist agitation command

A hoist agitation command is specified in writting 4 in the Reg0 HoistCommand bits. This command tells to the hoist controller to agitate a load. The hoist must be in lower position and centered. When the controller receive this command, it starts to agitate while a time defined in the controller. It must stop in lower position. While the hoist is agitating, the bit22 of status register is set by the controller. QuickView will not pick/drop load while this bit is activated.

Echanges avec des équipements

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

Echanges avec des équipements

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.

Echanges avec des équipements

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

Pulsrectifier.jpg

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

FormePulsée.png

Echanges avec des équipements

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 :

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:

  1. Commande de descendre à la hauteur de passage sous la balancelle à la hauteur "Haute" du liftout (Dépose en position haute).
  2. 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:

  1. Commande de monter à la hauteur de passage sous la balancelle (HLiftout).
  2. 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:

  1. Vitesse de montée en mm/sec lors d'un déplacement dans le liquide (word)
  2. Vitesse de montée en mm/sec lors d'un déplacement en dehors du liquide (word)
  3. Vitesse de descente en mm/sec lors d'un déplacement dans le liquide (word)
  4. Vitesse de descente en mm/sec lors d'un déplacement en dehors du liquide (word)
  5. Position en mm lorsque l'ascenseur est en bas (word)
  6. 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:

  1. Arrêter = 0
  2. Monter = 1
  3. Descendre = 2

Un registre de commande doit être réservé pour transmettre la commande à l'automate (word)

Les statuts suivants doivent être disponibles:

  1. l'ascenseur est en haut (bit)
  2. l'ascenseur est en bas (bit)
  3. l'ascenseur monte (bit)
  4. l'ascenseur descend (bit)
  5. 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.

Echanges avec des équipements

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

Echanges avec des équipements

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:

image.png

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
Echanges avec des équipements

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 !

 

9      Optimisation des anticipations

-       Régler les paramètres suivants :

Afin que les mouvements des robots ne soient pas retardés, mais tout en conservant un temps maximum d'agitation. 

Echanges avec des équipements

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.

image-1618919916417.png

Dans la barre des notifications Windows, vous trouverez Cobian: image-1618920108806.png

Copier le dossier "C:\VK-WinQV\Addon\Cobian\Backup" dans le dossier racine Quickview "C:\VK-WinQV\Backup"

image-1618920397899.png

image-1618920473420.png

image-1618920511332.png

Dans le script "BackupDatabase.bat", vérifier le chemin d'accès à l'outil de compression Firebird "Gbak.exe".

image-1618922477727.png

Sauvegarde des fichiers de l'application Quickview

Clique droit, Edit task...

image-1618920628965.png

image-1618920640785.png

Définir le dossier de destination des sauvegardes:

image-1618921260576.png

Définir la fréquence des sauvegardes:

image-1618920693953.png

Le nombre de copies à conserver:

image-1618920738869.png

Compression du fichier

image-1618920782626.png

Ne pas copier la base de donnée:

image-1618920808818.png

Sauvegarde de la base de donnée Quickview

Clique droit, Edit task...

image-1618920945997.png

Créer manuellement le dossier source "C:\VK-WinQV\Backup\DBase":

image-1618923620590.png

Définir le dossier de destination des sauvegardes:

image-1618921430436.png

Définir la fréquence des sauvegardes:

image-1618921477703.png

Le nombre de copies à conserver:

image-1618921541913.png

Compression du fichier

image-1618920782626.png

image-1618921596886.png

Scripts à exécuter avant et après la sauvegarde:

image-1618921660528.png

Résultats

Lancer un test en cliquant sur RUN:

image-1618921912778.png

image-1618923110351.png

image-1618922929325.png

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 bases de données

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.

BDE.png

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. 

Les bases de données

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


100

Take/Give load

200

Login/Logout

300

Alarm/return/ack

310

Alarm rack

400

Logger

500

Programme/Buffer mode/Divers

600

Message/return/ack

700

Chemical

800

Equipment controls

900

Buffer Messages

1000

MQTT Commands

1100

Hoist changes

1200

DailyData

1300

Position En/Hors service

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


101

Take Load

102

Drop Load

103

Ampères/heure réels

104

Ampères/heure théorique

105

Courants moyens

106

Tensions moyennes

107

Courants max

108

Tensions max

109

Consignes de courant

110

Consignes de tension

111

End Job OSCILine

112

Start Job OSCILine

113

Log Job data OSCILine

114

Log Job commande OSCILine

115

Log Job Status Change OSCILine

121..

125

RecDBOut

131..

135

RecDBIn

201

Login

202

Logout

301

Return

302

Acknowlege

303

Alarm

401

Log item

402

Log rectifier

403

Log US

404

Log validation data

405

Log validation Windows

406

Log rectifier setpoints

501

Programme Mode

502

Buffer Mode

503

Machine Mode

504

Log counters

505

Log dosing

506

Log Exchange mode

507

Log Execution Mode

508

Log Increment Delay

509

Log server Start/Stop

510

Log dosing pumps

511

Log makeup

601

Return message

602

Acknowlege

603

Message

701

Auto add chemical

702

Manu add chemical

801

Equipment controls

802

Equipment commands start

900

Save Buffer Messages

1001

MQTT DB Commands

1002

MQTT Login

1003

MQTT Alarm/Message ack

1004

MQTT Hoists commands

1101

Hoist change

1201

LastHour dailydata

1301

Position En Service

1302

Position Hors service


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 :

rectparam.png

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


Les bases de données

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

Les bases de données

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:

PrioParameters.png

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:

Sequenceprio.png

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:

PrioOSCI.png

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

OSCIFillBefore.png

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:

PériodeTimeway.png

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.

HoistOccupation.png

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".

CascadeOSCI.png

Exemple d'une cascade en mode OSCILine

RinçageOSCI.png

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

Multilangues.png

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.

Suividesproduits.png

Les postes de charge

Description du fonctionnement des différents postes de charge intégrés dans l'application

Les postes de charge

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.

pdc52.png

  1. Sélection de la référence à charger.
  2. Zone dédiée à la sélection du poste de charge.
  3. Tableau des articles et outillages
  4. Zone dédiée à la sélection de fonctions spéciales
  5. Tableau des blocs de traitement
  6. Zone des commandes de charge et décharge
  7. 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)

PDC52Options.png

ou au travers de la boîte de dialogue “Settings” de QuickView.

SettingsPDC.png

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.

PDC52CBSupport.png

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

PDC52LoadRotation.png

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.

PDC52LoadRotationType.png

Les types de rotations possibles sont:

  1. Pas de rotation
  2. Rotation continue jusqu'à destination
  3. Depuis le début du temps d'égouttage jusqu'en haut
  4. Depuis le début du temps d'égouttage jusqu'à destination
  5. Depuis la fin du temps d'égouttage jusqu'en haut
  6. Depuis la fin du temps d'égouttage jusqu'à destination
  7. Depuis le bas jusqu'à l'arrêt pour égoutter
  8. Depuis le bas jusqu'à la fin du temps d'égouttage
  9. 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.

PDC52DCSelection.png 

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.

PDC52ShowVirtualJig.png

Pour choisir le numéro de porte-rack, cliquez sur le bouton [Porte-rack], la liste des portes-racks s'affiche.

PDC52ListePorte-rack.png

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.

Gare virtuelle.png

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:

  1. Activer le panneau latéral.
  2. Activer la sélection du numéro de porte-rack
  3. 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".

PDC52ProductionInfo.png

Inspections

Lorsque des inspections sont définies dans IO.ini, il est possible de les afficher dans un bloc. 

2026-05-29_11-44-37.PNG

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:

2026-05-29_11-48-25.PNG

Mode de fonctionnement

Lorsque le système peut travailler en local ou avec le serveur d'entreprise, le bloc "Mode de fonctionnement" s'affiche.

2026-05-29_11-57-09.PNG

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

PDC52ShowUnloadDest.png

La liste des destinations possibles est définie dans [PDC]"Destination après décharge":

PDC52UnloadDestination.png

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.

PDC52StartMode.png

Le combobox affichera la liste de tous les modes ayant la case "mode pouvant être utilisé comme mode de démarrage" cochée.

ModesDémarrage.png

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.

PDC52ShowStartDateTime.png

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é.

PDC52StartDateTime.png

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.

PDC52Scale.png

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:

ScaleBox.png

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.

ScaleNet.png

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.

PDC52TablePart.png

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:

  1. Surface métallique et surface totale
  2. Surface avant et surface arrière (utilisé principalement dans le chargement de circuits imprimés)
  3. Surface métallique et poids
  4. Surface métallique
  5. 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.

DefinitionDesBilles.png

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.

2024-09-29_09-16-26.PNG

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:

2024-09-29_09-25-01.PNG

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.

PDC52NoRectifier.png

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".

2024-09-29_09-32-03.PNG

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:

2024-09-29_09-40-34.PNG

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.

2024-09-29_09-45-24.PNG

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.

2026-05-29_12-06-01.PNG

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:

Mot clef

Type

Valeur par défaut

Configuration

Description

DefaultSupport

Integer

0

INI

Indique le type de support à utiliser par défaut lorsque l’on efface le poste de charge (0: Rack 1: Tonneau 2: Vibarrel)

DefaultRotation

Integer

0

INI

Indique le type de rotation sur les transporteurs à utiliser par défaut (0= sans 1=avec)

MaxTools

Integer

4

PDC

Indique le nombre d’outillages à afficher.

MaxReferences

Integer

5

PDC

Indique le nombre de références par outillage à afficher.

DefaultMetalUnit

Integer

2

PDC

Indique le type d’unité de mesure pour la surface métallique (0: mm2 1:cm2 2: dm2 3: m2 4: in2 5: ft2)

DefaultChemicalUnit

Integer

2

PDC

Indique le type d’unité de mesure pour la surface chimique (0: mm2 1:cm2 2: dm2 3: m2 4: in2 5: ft2)

TotalMetalUnit

Integer

2

PDC

Indique le type d’unité de mesure pour le total de la surface métallique (0: mm2 1:cm2 2: dm2 3: m2 4: in2 5: ft2)

TotalChemicalUnit

Integer

2

PDC

Indique le type d’unité de mesure pour le total de la surface chimique (0: mm2 1:cm2 2: dm2 3: m2 4: in2 5: ft2)

WeightUnit

Integer

0

PDC

Indique le type d’unité de mesure pour le poids (0: g 1: kg 2: lb 3: oz.)

TotalWeightUnit

Integer

0

PDC

Indique le type d’unité de mesure pour le total de poids (0: g 1: kg 2: lb 3: oz.)

NbDecimalDensity

Integer

2

PDC

Indique le nombre de décimales à afficher dans les champs “Densité”

NbDecimalMicron

Integer

2

PDC

Indique le nombre de décimales à afficher dans les champs “Epaisseur”

NbDecimalWeight

Integer

2

PDC

Indique le nombre de décimales à afficher dans les champs “Poids”

NbDecimalTotalWeight

Integer

2

PDC

Indique le nombre de décimales à afficher dans le total du poids

NbdecimalCurrent

Integer

1

PDC

Indique le nombre de décimales à afficher dans les champs “Courant”

NbDecimalTotal

Integer

2

PDC

Indique le nombre de décimales à afficher dans le total de la surface métallique

NbDecimalSurface

Integer

2

PDC

Indique le nombre de décimales à afficher dans le total de la surface chimique

ChangeProgramMode

Integer

0

PDC

Indique comment utiliser les champs “Densité”, “Temps” et “Epaisseur” lors d’un changement de programme. (0: Utiliser la densité et le temps, 1: Utiliser le temps et l'épaisseur 2: Utiliser la densité et l'épaisseur)

ChangeDensityMode

Integer

0

PDC

Indique ce qu’il faut modifier lorsque l’on change la densité de courant (0: Le temps 1: l'épaisseur)

ChangeTimeMode

Integer

0

PDC

Indique ce qu’il faut modifier lorsque l’on change le temps (0: la densité 1: l'épaisseur)

ChangeThicknessMode

Integer

0

PDC

Indique ce qu’il faut modifier lorsque l’on change l'épaisseur (0: la densité 1: le temps)

SurfaceMode

Integer

0

PDC

Indique quels champs de surface qu’il faut afficher dans le tableau des articles:

0: Surface métallique et surface totale

PDC52SurfaceType0.png

1: Surface avant et surface arrière (circuits imprimés):

PDC52SurfaceType1.png

2: Surface métallique et poids

PDC52SurfaceType2.png

3: Surface métallique uniquement

PDC52SurfaceType3.png

4: Surface avant, arrière et totale (circuits imprimés)

PDC52SurfaceType4.png

CheckProgramVersion

Boolean

True

PDC

Vérification lors de la pression sur le bouton [Charge] que le numéro de version du programme enregistré dans la référence bibliothèque correspond au numéro de version du programme actuel. Si la version est différente, le chargement n’est pas possible et un message s’affiche vous l’indiquant.

CheckModeVersion

Boolean

True

PDC

Vérification lors de la pression sur le bouton [Charge] que le numéro de version du mode d'équipement enregistré dans la référence bibliothèque correspond au numéro de version du mode d'équipement actuel. Si la version est différente, le chargement n’est pas possible et un message s’affiche vous l’indiquant.

CheckDensityRange

Boolean

True

PDC

Vérification que la densité de courant introduite dans les blocs de traitement soit bien comprise entre le minimum et le maximum autorisé. Si en dehors des marge, les champs correspondant sont affichés en rouge.

PDC52CheckCurrentDensity.png

CheckVoltageRange

Boolean

False

PDC

Vérification que la consigne de tension introduite dans les blocs de traitement soit bien comprise entre le minimum et le maximum autorisé. Si en dehors des marge, les champs correspondant sont affichés en rouge. Le champ “tension” n’est affiché que lorsque les profils de tension sont configurés comme “LargecurrentFormRegulation” dans l'écran de settings des redresseurs:

PDC52CheckVoltageRange.png

CheckThicknessRange

Boolean

False

PDC

Vérification que l'épaisseur introduite dans les blocs de traitement soit bien comprise entre le minimum et le maximum autorisé. Si en dehors des marge, les champs correspondant sont affichés en rouge.

CheckMaxRectifier

Boolean

True

Settings

Vérification de la capacité des redresseurs soit bien en dessous de la valeur autorisée. Si en dessus de la capacité des redresseurs, les champs correspondant sont affichés en rouge et le chargement est interdit.

PDC52CheckMaxRectifier.png

CheckAuthorisedTools

Boolean

False

PDC

Lorsque les outillages sont associés au porte-rack, il est possible de vérifier que les pièces chargées soient bien chargées dans le bon outillage.

CheckNumberOfBlock

Boolean

True

PDC

Vérification que le nombre de blocs de traitement définis dans la référence correspond bien au nombre de blocs actuellement utilisés par le programme sélectionné.

CheckWeight

Boolean

False

PDC

Vérification du poids maximum autorisé.

ShowToolButton

Boolean

False

Settings

Affichage du bouton permettant d’appeler un rack en décharge selon le type d’outillage nécessaire.

PDC52ShowToolButton.png

ShowScaleButton

Boolean

False

Settings

Affichage de l’icône permettant de visualiser les données de la balance.

PDC52Scale.png

ProgramAuto

Boolean

False

PDC

Permet d'interdire le chargement si le mode programme n'est pas en automatique

ToolUsage

Boolean

False

PDC

Permet d'activer la fonction de vérification de l'utilisation des outillages

ToolUsageLimit

Integer

0

PDC

Limite d'utilisation des outillages lors de la création d'un nouvel outillage

MonoCopyPaste

Boolean

False

Settings

Utilise le même copier/coller pour tous les postes de charge

DisplayTimeInHour

Boolean

False


Affichage des temps en heures (pour les positions utilisant des minutes comme unité de temps)

UserQuestion

String


PDC

Question affichée lorsque l'utilisateur clique sur le bouton [Charge].

ShowUnloadDest

Boolean

False

Settings

Affichage du combobox permettant le choix de la destination lors de la décharge.

LoadDest.png

UnloadDest[1..10]

String


PDC

Définition du choix des destinations affichées dans le combobox ci-dessus

ShowStartDateTime

Boolean

False

Settings

Permet d'afficher la date et l'heure de démarrage désirées

StartTime.png

CheckProgramOverload

Boolean

False

PDC


CalcMicronRampe

Boolean

True

PDC


HideChemicalSurface

Boolean

False



CurrentDensity

Integer

0

PDC


PartGridLineCount

Integer

6

PDC

Nombre de ligne dans le tableau des articles

ShowStartMode

Boolean

False

Settings

Affichage du mode de démarrage

StartMode.png

ShowLoadPicture

Boolean

False

Settings

Affichage d'images associées aux articles dans le panneau d'information

ShowProductionInfo

Boolean

False

PDC

Affichage des informations de production:

ProductionInfo.png

RFIDEqualReference

Boolean

True

RFID Settings


RFIDTimeout

Integer

30

PDC


RFIDOnTool

Boolean

False

Settings


CheckPartUsage

Boolean

False

PDC


CalcPartQuantity

Boolean

False

PDC


ReportFile

String


INI


FocusOnProcessFirst

Boolean

False

PDC


AutoLoadEnabled

Boolean

False

Settings


ResetToLoad1

Boolean

False

Settings


CheckJigUsage

Boolean

False

PDC


ShowToolQuantity Boolean False Settings
MaxToolQuantity Integer 20 PDC
ShowBarcodeIcon Boolean False PDC
CheckTBDiffTime Boolean False PDC Permet de vérifier si le changement de temps d'un bloc de traitement ne dépasse pas les limites autorisées:2026-05-29_12-17-22.PNG
DefaultPDC Integer 1 Settings Poste de charge par défaut. L'affiche lorsque l'on presse F5
LoadingDisabledRackForbiden Boolean false PDC Interdiction d'utiliser des barres hors-service
BypassVerification Boolean false PDC Ne pas effectuer les vérifications d'usage (utilisé lors de fonctionnement avec serveur d'entreprise)


Les postes de charge

Poste de charge n°66

Suivre la procédure suivante pour scanner les différents barcode:

  1. 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 image.png.
  2. Scan du Basket carrier # (N° de panier). Pas de règle défini pour ce barcode.
  3. 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.
  4. 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.
  5. La Quantity (Quantité) peut être insérée au clavier ou avec un barcode purement numérique sans règle (1-9999). 

image.png

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:

image.png

Les postes de charge

Poste de charge n°67

Suivre la procédure suivante pour scanner les différents barcode:

  1. Scan du Lot ID (N° de commande). Pas de règle défini pour ce barcode.
  2. Scan du Baseplate letter (Code de suivi). Commence toujours avec le préfixe $2. Le préfixe est automatiquement effacé pour l'enregistrement.
  3. 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.
  4. Scan du Lot ID du lot numéro 2
  5. Scan du Baseplate letter du lot numéro 2
  6. Scan de la Quantity du lot numéro 2
  7. Scan du Basket Carrier # (N° de panier). Commence toujours avec le préfixe $1.

image.png

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:

image.png

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:

image.png

 

Les postes de charge

Poste de charge n°69

Options...

image.png

Suivre la procédure suivante pour scanner les différents barcode:

  1. 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.
  2. Scan du Lot ID (Lot). Règle définie selon RegEx.
  3. Scan de la Quantity (Quantité). Doit être un numéro (1-9999).
  4. Répéter les opérations de 1 à 3. Jusqu'à un maximum de 12 Product ID.

image.png

Si un Product ID n'a pas le même programme de lavage que les précédents, un message pop-up s'affiche:

image.png

Si le champs attendu ne correspond pas au RegEx:

image.png

Si on presse sur "Load" et que le numéro de lot est vide:

image.png

Si on presse sur "Load" et que le champs quantité est vide:

image.png

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":

image.png

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:

image.png

Les postes de charge

Poste de charge n°71

Options...

image.png

Suivre la procédure suivante pour scanner les différents barcode:

  1. 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.
  2. Scan du Work Order (Lot). Règle définie selon RegEx.
  3. Scan de la Quantity (Quantité). Doit être un numéro (1-9999).
  4. Répéter les opérations de 1 à 3 pour la deuxième ligne.

image.png

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:

image.png

Si un Product Code inexistant dans la base de données est inséré:

image.png

Si un Product Code n'a pas le même programme de lavage que le précédent, un message pop-up s'affiche:

image.png

Si le champs attendu ne correspond pas au RegEx:

image.png

Les postes de charge

Poste de charge n°74

Options...

image.png

Suivre la procédure suivante pour scanner les différents barcode:

  1. 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. Ujmimage.png
  2. Scan du Lot. Règle définie selon RegEx.
  3. Le nombre minimum de lot requis est défini dans les options et un maximum de 100 lots peut être inséré.
  4. 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.

image.png

Si le champs attendu (lot) ne correspond pas au RegEx:

image.png

Si la quantité minimale de lot définie dans les options du poste de charge n'est pas atteinte:

image.png

Si la référence scannée n'existe pas dans la base de donnée Optima:

image.png

Les postes de charge

Poste de charge n°77

Options...

image.png

Suivre la procédure suivante pour scanner les différents barcode:

  1. 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. YJrujmimage.png
  2. Scan du Numéro de commande. Règle définie selon RegEx
  3. Scan du (des) Numéro d'article. Règle définie selon RegEx. Un maximum de 100 articles peuvent être enregistré.
  4. Scan du Code opérateur. Règle définie selon RegEx.

image.png

Si la référence insérée n'existe pas dans la base de donnée Optima, un message pop-up s'affiche:

image.png

Les postes de charge

Poste de charge n°78

Options...

image.png

Suivre la procédure suivante pour scanner les différents barcode:

  1. 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. YJrujmimage.png
  2. Scan du Lot #. Règle définie selon RegEx
  3. Scan du Article #. Règle définie selon RegEx.
  4. Scan du Production order #. Règle définie selon RegEx.

image.png

Les postes de charge

Poste de charge n°79

Options...

image.png

Suivre la procédure suivante pour scanner les différents barcode:

  1. Scan de la Grundtrõger (Panier). Règle définie selon RegEx.
  2. 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).
  3. Répéter le point 2 pour insérer d'autres articles.

image.png

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:

image.png

Si le champs attendu ne correspond pas au RegEx:

image.png

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:

image.png

Les postes de charge

Poste de charge n°80

Options...

image.png

Suivre la procédure suivante pour scanner les différents barcode:

  1. Scan du N° de panier. Règle définie selon RegEx.
  2. 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.
  3. 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.
  4. Insérer au clavier le Plateau. Pas de règle défini.
  5. 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é.

image.png

Les postes de charge

Poste de charge n°82

Identique au poste de charge n°69 mais avec une colonne "Basket ID".

Options...

image.png

Suivre la procédure suivante pour scanner les différents barcode:

  1. 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.
  2. Scan du Lot ID (Lot). Règle définie selon RegEx.
  3. Scan de la Quantity (Quantité). Doit être un numéro (1-9999).
  4. Scan du Basket ID (numéro de panier). Règle définie selon RegEx.
  5. Répéter les opérations de 1 à 4. Jusqu'à un maximum de 12 Product ID.

image.png

Si un Product ID n'a pas le même programme de lavage que les précédents, un message pop-up s'affiche:

image.png

Si le Product ID n'existe pas dans la base de donnée Optima:

image.png

Si le champs attendu ne correspond pas au RegEx:

image.png

Si on presse sur "Load" et que le numéro de lot est vide:

image.png

Si on presse sur "Load" et que le champs quantité est vide:

image.png

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":

image.png

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:

image.png

Trucs et astuces

Rappel des fonctionnalités peu connues de QuickView

Trucs et astuces

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:

AddMTO.png

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.

DefineMTO.png

Pour afficher le compteur, cliquez à droite sur la position de la machine dans laquelle vous avez ajouté le compteur.

MenuMTO.png

Le compteur s'affiche:

MTOCounter.png

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

AddMTOIO.png

ou directement dans le fichier I/O.ini

AddMTOIOFile.png

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:

AddMTOIODabase.png

Voila, le rapport contiendra la valeur du MTO du bain à la sortie de la charge.

MTOReport.png

Trucs et astuces

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.

ToolTypes.png

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.

ToolDef.png

Pour tous les articles utilisés dans la machine, il faut leur attribué les outillages autorisés.

PartDef.png

Pour pouvoir appeler un outillage, il faut activer cette fonction dans la boîte de [Settings] dans l'onglet [Poste de charge]:

ShowToolButton.png

Lorsque cette case est cochée, le bouton permettant d'appeler un outillage s'affiche sur le poste de charge:

ToolButton.png

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.

ToolSelection.png

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.

BufferInMachine.png

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.

Trucs et astuces

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

NickelChimique.png

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

AutoStartScript.png

[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:

RectPolarisationCommands.png

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:

RectAlarm.png

Trucs et astuces

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:

2026-06-10_07-39-50.PNG

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.

2026-06-10_08-03-44.PNG

Deux types d'enregistrement sont possibles:

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.

2026-06-10_07-23-40.PNG

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:

2026-06-10_07-23-40.PNG

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.

2024-05-09_14-06-03.PNG

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.

2024-05-09_12-41-53.PNG

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 2024-05-09_13-16-39.PNG

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. 

2024-05-09_13-43-27.PNG

L'envoi d'SMS est réalisé par une connexion chez un fournisseur d'accès.  Les fournisseurs suivants sont supportés:

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:

2024-05-09_13-36-16.PNG

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:

2025-07-20_10-44-05.PNG

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:

Les statistiques avec la base de données de suivi

Rapports de suivi

2025-12-25_10-13-22.PNG

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:

2025-12-25_10-31-38.PNG

L'onglet "Export" donne l'accès aux fonctions d'exportation:

2025-12-25_10-33-19.PNG

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:

2025-12-25_10-42-30.PNG

Les statistiques avec la base de données de suivi

Statistiques de production

Le type de statistiques  est sélectionnable à l'aide du combobox situé tout à gauche du menu. Les types suivants sont possibles:

Les références chargées

2025-12-25_10-45-16.PNG

Pour chaque barre chargée, une ligne est affichée. 

Articles chargés
2025-12-25_10-59-51.PNG

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

2025-12-25_11-03-14.PNG

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

2025-12-25_11-06-14.PNG

Occupation des positions

2025-12-25_11-08-03.PNG

L'occupation est calculé avec les enregistrements "Prise/Dépose" des robots dans les positions de la machine.

 

Les statistiques avec la base de données de suivi

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

2025-12-25_11-13-07.PNG

Diagramme des mouvements

2025-12-25_11-18-43.PNG

Les statistiques avec la base de données de suivi

Historique des alarmes et messages

Il est possible d'afficher 4 types de tableau:

Alarmes et messages

2025-12-25_18-32-16.PNG

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. 

2025-12-25_18-35-20.PNG

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.

2025-12-25_18-40-10.PNG

2025-12-25_18-41-41.PNG

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. 

Les statistiques avec la base de données de suivi

Statistique d'utilisation des pompes doseuses

Sur cette page, il est possible d'afficher 3 types de liste:

2025-12-25_18-53-10.PNG

Les statistiques avec la base de données de suivi

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.

2025-12-25_19-11-47.PNG

Il ne faut pas choisir plus de 100 jours entre les dates de début et de fin.

 

Les statistiques avec la base de données de suivi

Courbes des redresseurs

2025-12-25_19-16-33.PNG

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 :

Bit Fonction
0 Position d'inspection prête.
1 Inspection terminée. Continuer la séquence
2 Inspection terminée. Retour en gare

Le registre de commande est composé des bits:

Bit Fonction
0 Ajout pièce témoin
1 Inspection terminée, continue la séquence
2 Inspection terminée, retour en gare
3 En attente d'une réponse de l'opérateur
8 Erreur poste d'inspection non disponible
9 Erreur d'inspection, rack not OK
10 Erreur d'inspection, timeout réponse

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é:

2026-01-05_12-26-42.PNG

En activant cette case à cocher, une colonne supplémentaire s'affiche dans l'éditeur de séquences:

2026-01-05_12-31-49.PNG

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.

2026-01-05_12-37-20.PNG

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:

2026-01-05_12-40-56.PNG

Pour que cet onglet s'affiche, il faut l'activer dans la configuration du poste de charge:

2026-01-05_12-44-39.PNG

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 :

Bit Fonction
0 Alarme active. Le programme doit retourner en gare
1
2

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.

image.png

Les profils de courant sont paramétrables en sélectionnant la commande suivante: Edition | Profils de courant.

image.png

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:

image.png

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"

image.png

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:

image.png

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:

image.png

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:

image.png

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.

image.png

 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.

image.png

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.

image.png

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.

image.png

image.png

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:

image.png