Bufférisation des données
- Mise à jour2025-08-27
- Temps de lecture : 5 minute(s)
Par défaut, si vous utilisez des variables partagées publiées sur réseau ou une URL psp ou dstp pour partager des données par programmation, LabVIEW n'écrit que la valeur la plus récente sur toutes les sources de lecture. Lorsqu'un client écrit des valeurs sur le serveur plus rapidement qu'un autre client ne les lit, les nouvelles valeurs écrasent les anciennes valeurs non traitées avant que les clients n'aient eu le temps de les lire. Si le lecteur ne reçoit pas une valeur avant de recevoir la valeur suivante, les données sont perdues. Cette perte de données non traitées peut se produire au niveau du serveur ou au niveau du client. Il se peut que cette perte de données ne vous pose pas de problème si vous lisez des données et que vous voulez recevoir uniquement la valeur la plus récente écrite sur le serveur. Toutefois, si vous voulez recevoir chaque valeur publiée sur le serveur, ou si les transferts susceptibles de perdre des données sont inacceptables, vous devez buffériser les données sur le client. Sélectionnez l'option Utiliser la bufférisation, sur la page Réseau de la boîte de dialogue Propriétés de la variable partagée pour activer la mise en buffer pour la variable partagée.
Bufférisation côté client
La bufférisation vous permet de réduire l'écart de synchronisation éventuel entre les sources de lecture et d'écriture, mais ne garantit pas la distribution des données. Si les données d'un buffer au niveau du serveur ou du client dépassent la taille du buffer, celui-ci se débarrasse des anciennes valeurs et les remplace par des nouvelles. Vous pouvez définir la taille du buffer d'une variable partagée sur la page Réseau de la boîte de dialogue Propriétés de variable partagée pour définir combien de paquets de données la variable partagée conserve avant de commencer à écraser les anciennes données.
Vous pouvez aussi spécifier par programmation le nombre d'octets maximum et le nombre de valeurs maximum, en terme de paquets, que le buffer peut contenir. National Instruments vous conseille de spécifier les propriétés Nb d'octets max du buffer et Nb de paquets max du buffer lorsque vous bufférisez des données. Si les données entrantes dépassent le nombre d'octets ou le nombre de valeurs maximum, LabVIEW supprime les données les plus anciennes du buffer pour accepter les nouvelles données.
Quand vous configurez la bufférisation des données par programmation, câblez les données écrites à la fonction Définir un attribut de variant pour détecter les valeurs mises au rebut dans un flux de données de façon à identifier chaque valeur de manière unique dans la source d'écriture et recherchez les numéros d'identification manquants dans les séquences reçues.
Si vous publiez une variable partagée qui a moins de 8 kilo-octets de données, LabVIEW peut mettre jusqu'à 10 millisecondes pour envoyer ces données sur le réseau. Le VI Vider les données des variables partagées vous permet de vider immédiatement le buffer afin d'éliminer ce délai.
Si vous souhaitez activer le buffer client pour qu'il reçoive toutes les données, utilisez la fonction DataSocket « Écrire » afin d'écrire des données en direct par programmation. L'écriture de données à partir de la face-avant peut entraîner une perte de données.
Définissez l'entrée mode de la fonction DataSocket « Ouvrir » sur BufferedRead ou BufferedReadWrite et utilisez un nœud de propriété pour définir les propriétés de DataSocket pour la taille d'un buffer FIFO (First In-First Out). Ceci garantit que LabVIEW enregistre les valeurs que le client reçoit dans un buffer au lieu de les écraser chaque fois que la valeur change.
| Remarque Si vous utilisez les propriétés DataSocket pour définir la taille d'un buffer FIFO, vous devez définir l'entrée mode de la fonction DataSocket Ouvrir sur BufferedRead ou BufferedReadWrite. Sinon, l'élément au niveau du serveur ne sera pas bufférisé pour la connexion. |
Le diagramme suivant utilise la bufférisation par programmation.
Lors du partage des données, vous pouvez aussi activer la bufférisation à l'aide des fonctions DataSocket, en ajoutant la chaîne ?maxbytes=1000&maxpackets=10 à la fin de l'URL, où 1000 correspond au nombre d'octets maximum que le buffer contient et 10 au maximum de paquets que le buffer contient.
| Remarque L'utilisation du buffer s'applique si vous utilisez la fonction DataSocket Lire pour lire des données écrites par un serveur. La bufférisation n'est pas possible quand vous utilisez la liaison de données DataSocket de la face-avant pour lire les données. La bufférisation est possible pour lier des données de la face avant via le moteur de variables partagées si vous liez des commandes à des variables partagées et que la bufférisation est activée sur la page Réseau de la boîte de dialogue Propriétés de la variable partagée. |
Compte-rendu de diagnostic à l'aide de propriétés DataSocket
Utilisez la propriété Utilisation du buffer (octets) ou Utilisation du buffer (paquets) pour demander des informations de diagnostic sur les buffers que vous spécifiez. Utilisez ces propriétés pour vérifier le pourcentage de buffer utilisé côté client afin de déterminer si la taille du buffer actuel est adéquate. Si les valeurs de l'une de ces propriétés est proche de la valeur maximale du buffer, augmentez la taille du buffer pour être sûr de recevoir toutes les valeurs écrites par le serveur. Vous pouvez également augmenter la fréquence à laquelle s'exécute la boucle While qui contient les fonctions DataSocket afin d'augmenter la vitesse de lecture.
Bufférisation côté serveur
Quand vous configurez la bufférisation côté client, il arrive parfois que les serveurs perdent des données. C'est le cas par exemple si un serveur envoie les données plus rapidement que le réseau ne peut les accepter. Vous pouvez utiliser la bufférisation côté serveur pour la bufférisation NI-PSP (NI Publish-Subscribe Protocol) ou dstp. Pour utiliser la bufférisation NI-PSP, vous devez vous connecter à une variable partagée existante dont la bufférisation est activée. Pour utiliser la bufférisation dstp, vous devez également utiliser le DataSocket Server Manager pour configurer la bufférisation côté serveur. Reportez-vous à l'aide DataSocket Server Help pour obtenir de plus amples informations sur les buffers côté serveur pour le serveur DataSocket. Pour les autres protocoles, reportez-vous à la documentation qui accompagne le serveur pour obtenir des informations complémentaires sur la bufférisation côté serveur pour ce serveur.