SilGetWeight()
Définition :
La fonction SilGetWeight a pour vocation d’établir une communication avec un périphérique de type balance pour récupérer le poids lu par une balance.
La fonction retourne donc soit le poids lu soit un code d’erreur de valeur négative si la fonction a échoué dans sa tentative de communication avec le périphérique.
Syntaxe :
SilGetWeight(Nom de la balance, Nom de la Dll de communication, Paramètres)
Nom de la balance : Le nom de la balance est une chaîne de caractères. Ce nom est utilisé pour identifier une balance de manière unique. Ce nom est utilisé pour mémoriser les paramètres et la dll utilisée une fois chargée au premier appel.
Nom de la dll : Le nom de la dll est une chaîne de caractères qui permet de déterminer quelle dll est à utiliser pour établir la communication avec la balance.
Paramètres de fonctionnement de la communication : Les paramètres de fonctionnement sont définis dans une chaîne de caractères. Ces paramètres sont utilisés par la dll pour la communication avec la balance en fonction du mode de communication utilisé (port série ou réseau). Dans la mesure où ces paramètres peuvent être nombreux et différents selon le mode de communication, il est possible de les enregistrer dans un fichier et passer ce nom de fichier en paramètre de la fonction sous la forme ‘’FICHIER=chemin+nom fichier’’.
Le format à utiliser pour renseigner les paramètres de fonctionnement de la communication avec la balance dépend de la dll utilisée.
Par défaut, nous utilisons le format d’un fichier ini avec deux sections :[Port Serie] : Section des définitions de la communication avec un port série
[Trame lue] : Section de définition des contrôles et de lecture de l’information retournée par la balance.
Communication avec un port série : Ce paragraphe définit les paramètres à renseigner pour établir et configurer une communication avec une balance via un port série.
La section [Port Serie] permet de définir les paramètres de communication avec une balance en termes de vitesse de transfert, nom du port série, …
La section peut donc comporter les paramètres suivants :Nom=xxx : nom du port série tel que COM1, COM2, … Ce paramètre est obligatoire,
Vitesse=9600 : vitesse de transfert (9600 par défaut, facultatif),
Bits de données=8. Ce paramètre peut prendre les valeurs 5, 6, 7 ou 8 (8 par défaut, facultatif),
Parité=Aucune. Ce paramètre peut prendre les valeurs Paire, Impaire, Aucune, Marque ou Espace (Aucune par défaut, facultatif),
Bit d’arret=1. Ce paramètre peut prendre les valeurs 1, 1.5 ou 2 (1 par défaut, facultatif),
Timeout=500. Ce paramètre doit contenir une valeur supérieure à 50 (500 par défaut, facultatif).
Exemple de définition des paramètres :
[Port Serie]
Nom=COM1
Vitesse=4800
Bits de donnee=7
Parite=Paire
Bit d'arret=1
Timeout=500
Récupération du poids dans la trame de communication : La section [Trame lue] permet de configurer la méthode de récupération du poids dans la chaîne de caractères retournée par la balance.
Chaque balance retourne une trame différente et ces paramètres permettent ainsi de configurer les contrôles à effectuer et la localisation du poids dans la trame.
Il est également possible de préciser un coefficient multiplicateur au poids lu pour le transformer en une unité attendue. Il faut par exemple affecter 0.001 au coefficient pour obtenir un poids en kilo avec une balance qui retourne des grammes.
La section peut donc comporter les paramètres suivants :Longueur=xxx : correspond à la longueur de la chaîne retournée par la balance (Obligatoire),
Position poids=xx,xx : Permet de définir la position des caractères qui correspondent au poids dans la trame en donnant la position du premier et du dernier caractère dans la trame (Obligatoire),
Coefficient=0.001 : Coefficient de multiplication du poids lu (1 par défaut, facultatif),
Controle caractere x=xx : permet de définir des contrôles de comparaison à effectuer sur les caractères de la trame pour s’assurer que la trame lue est celle attendue. Ce paramètre peut être répété autant de fois qu’il y a des caractères à contrôler. Le x à gauche du égal correspond à la position du caractère dans la trame, les xx à droite du égal correspond au code du caractère attendu par rapport à la table ASCII sous forme d’un entier.
Trame de demande : des modèles de balance attendent une chaîne de caractères spécifiques avant de retourner le poids. Cette chaîne peut être configurée en indiquant les caractères qui constituent cette chaîne par une suite d’entiers séparés par une virgule. Chaque entier représentant un octet spécifique.
Exemple de section de contrôle de la trame :
[Trame lue]
Longueur=54
Position poids=15,21
Coefficient=1
Controle caractere 1=1
Controle caractere 53=13
Controle caractere 54=10
Trame de demande=23,80
La trame attendue doit faire 54 caractères. La valeur du poids sera stockée dans les caractères 15 à 21 inclus. Les caractères 1, 53 et 54 seront contrôlés pour s’assurer qu’ils contiennent respectivement les caractères correspondant au code 1, 13 et 10.
La trame de demande est composée de deux octets 23 et 80.
Autorisation d’utilisation de la fonction :
Chaque dll fournie pour communiquer avec une balance est soumise à autorisation par contrôle du KCode. Le noyau vérifie que le nom de la dll passée en paramètre de la fonction soit bien présent dans le KCode utilisé. Seul le nom du fichier est contrôlé dans le KCode sans son extension ni le chemin d’accès éventuellement précisé.
Codes d’erreur de retour :
Les codes d’erreur déclarés dans le noyau pour la fonction SilGetWeight sont représentés par des valeurs négatives pour ne pas être confondus avec des valeurs de poids valides.
Les valeurs suivantes correspondent à des codes d’erreur recensés dans le noyau et dans la fonction SilGetWeight pour identifier les causes d’un fonctionnement anormal :
-1000 : la dll passée en paramètre est introuvable.
-1001 : Une erreur est survenue au chargement de la dll.
-1002 : Le nom de la dll est vide en paramètre de la fonction.
-1003 : Le KCode n’autorise pas l’utilisation de la dll.
-1004 : La fonction attendue est introuvable dans la dll.
-1005 : la fonction de la dll a rencontré une erreur (le détail de l’erreur sera accessible par l’affichage de celle-ci ou dans le journal si celui-ci a été activé).
-1006 : Une exception a été déclenchée lors de l’appel à la fonction de la dll : cela peut se produire si le prototype de la fonction ne correspond pas à celui attendu.
-1007 : Le nom de la balance passé en paramètre de la fonction est vide.
Fonctions d’affichages et de récupération du message d’erreur :
Les fonctions suivantes permettent de récupérer le message d’erreur correspondant au code d’erreur retourné par la fonction SilGetWeight ou de l’afficher.
SilGetLastError : Cette fonction retourne une chaîne de caractères correspondant au dernier message d’erreur enregistré dans le noyau si celui-ci correspond au code passé en paramètre de la fonction. Dans notre exemple, un appel à la fonction SilGetWeight qui retournerait un poids négatif peut correspondre à une erreur. Un appel à SilGetLastError avec la valeur négative retournée permettra de récupérer le message d’erreur associée s’il existe pour l’afficher en suite.
SilDisplayLastError : Cette fonction permet d’afficher la fenêtre des erreurs standard du noyau si le code erreur passé en paramètre de la fonction correspond bien à la dernière erreur rencontrée.
Activer la trace pour les dlls de communication avec les balances :
Depuis la version 8.4R3 de la V8, il est possible d’activer un système de traces qui s’inscrivent dans des fichiers du dossier "Tempo\Logs" du répertoire de l’ERP.
Pour que des traces de ce qui se passent dans les dlls des balances s’inscrivent dans ces fichiers, il est nécessaire de les activer en modifiant ou en créant le fichier SilogTrace.ini présent dans le dossier d’exécution de l’ERP.
Le fichier doit contenir le tag TRACE_DLLBALANCE=1 dans la section [CODE] pour activer les traces dans ces dlls.
Exemple de contenu du fichier d’activation des traces :
[GENERAL]
Active=1
DelIfNoError=1
AllCode=0
AllLevel=0
MaxFileSize=3
[CODE]
TRACE_SILDDE2=0
TRACE_SILMACRO=0
TRACE_SILDATA=0
TRACE_SILGRAPH=0
TRACE_SILCLIENTLICENCE=0
TRACE_SILOGERP=0
TRACE_DLLBALANCE=1
[LEVEL]
SILTRACE=1
SILWARNING=1
SILERROR=1
SILEXCEPTION=1
SILBEGINEND=0
Donnez votre avis sur la Base de connaissance Silog ici ou contactez-nous directement par mail sur confluence@silog.fr