La version V1.1 d' EcoStruxure Machine Expert ne prend pas en charge les contrôleurs M258, LMC058 et LMC078.

Méthode Send

Présentation

Type :

Méthode

Disponible à partir de :

V1.0.4.0

G-SE-0045952.1.gif-high.gif

 

 

Tâche

Transmettre des données à l'homologue

Description fonctionnelle

Transmet des données à l'homologue. Les données sont lues depuis le tampon fourni par l'application. Renvoie le nombre d'octets envoyés au site distant UDINT.

Pour plus d'informations sur les méthodes d'envoi, consultez la section Méthode d'envoi.

Interface

Entrée

Type de données

Plage valide

Description

i_pbySendBuffer

POINTER TO BYTE

-

Adresse de départ du tampon contenant les données à envoyer.

In_Out

Type de données

Plage valide

Description

iq_udiFillLevel

UDINT

1…2 147 483 647

Indique le niveau de remplissage du tampon.

Avant l’appel de la fonction :

Nombre d’octets à envoyer à partir de l’adresse de départ du tampon.

Après l’appel de la fonction :

Nombre d'octets du tampon qui n’ont pas pu être envoyés.

Utilisé par

oFB_TCPClient/FB_TCPClient2

Méthodes d'envoi

Les méthodes d'envoi des données, fournies par les blocs fonction FB_TCPClient/FB_TCPClient2 et FB_TCPServer/FB_TCPServer2 dans cette bibliothèque fournissent le paramètre d'entrée/sortie iq_udiFillLevel. Ce paramètre détermine le nombre d'octets dans le tampon qui ne sont pas encore envoyés. A chaque exécution de la fonction, la valeur est mise à jour en retirant le nombre d'octets écrits de la valeur d'origine. De plus, les octets conservés dans le tampon sont copiés dans la zone supérieure du tampon (les données sont envoyées à partir de l'adresse de début i_pbySendBuffer).

Si le niveau de remplissage est 0 après l'appel de fonction, toutes les données ont été envoyées et le contenu du tampon reste inchangé.

Si des données n'ont pas été copiées complètement dans la pile TCP du contrôleur dans un appel de fonction, la fonction d'envoi respective peut être appelée à nouveau sans modification du paramètre iq_udiFillLevel du dernier appel de fonction et sans déplacement des données dans le tampon.

Exemple d'appel de fonction

Les graphiques suivants représentent le contenu du tampon et la modification du paramètre iq_udiFillLevel pour deux appels de fonction, via lesquels la fonction a été correctement exécutée à chaque fois.

Etape

Description

Illustration

1

Avant le premier appel de la fonction, le pointeur est défini sur le premier index du tampon. Le niveau de remplissage est défini sur le nombre d'octets à envoyer.

Dans l'exemple représenté, le tampon de la pile TCP est vide et sa taille est inférieure au tampon d'envoi de l'application.

G-SE-0058217.1.gif-high.gif

 

 

2

Lors du premier appel de fonction, la quantité maximale de données (taille de la pile TCP) a été copiée du tampon d'envoi de l'application dans la pile TCP.

Les données restant dans le tampon d'envoi de l'application ont été copiées par la fonction dans la zone supérieure du tampon. Le paramètre iq_udiFillLevel a été mis à jour par la fonction et indique le nombre d'octets qui n'ont pas pu être envoyés.

Le second appel de fonction est exécuté sans modification des paramètres.

Pendant ce temps, la pile TCP a envoyé les données au site distant, libérant de l'espace dans son tampon.

G-SE-0058218.1.gif-high.gif

 

 

3

Lors du deuxième appel de fonction, les données restant dans le tampon d'envoi de l'application ont été copiées dans la pile TCP.

Le paramètre iq_udiFillLevel a été mis à jour par la fonction et indique 0. Le contenu du tampon d'envoi reste inchangé.

Un autre appel de fonction serait annulé avec le résultat FillLevelOutOfRange.

G-SE-0058219.1.gif-high.gif

 

 

Même si la fonction vous permet d'envoyer des données dans différents appels de fonction, veillez bien au rapport équilibré entre :

oTampon d'envoi de l'application et tampon d'envoi du socket TCP

oTampon d'envoi local et tampon d'envoi du site distant.

oIntervalle d'envoi de l'application et temps de traitement du site distant.

Pour modifier la taille du tampon d'envoi, utilisez les propriétés correspondantes du bloc fonction ou réglez les paramètres par défaut à l'aide des variables globales dans TCPUDP.GVL (consultez la section GVL).

Limites de données par appel de fonction

Selon le contrôleur, la quantité de données à copier dans un appel de fonction de l'une des deux méthodes (Receive, Send ou Peek) est limitée.

Contrôleur

Nombre d'octets qui peuvent être copiés en même temps*

M258, LMC058, M241, M251

2048 octets

LMC078, PacDrive LMC, M262

> 10 000 000 octets (limite : mémoire de l'application)

*Valeur maximale de la différence entre la taille du tampon et le niveau de remplissage.

Cas particulier - Aucune donnée envoyée

Si la valeur de retour de la méthode indique 0, aucune donnée n'est envoyée et le résultat du bloc fonction associé est différent de Ok. Vérifiez le résultat avec la méthode Result de l'instance du bloc fonction, après chaque appel de fonction. Si le résultat indique BufferFull, vous devez le réinitialiser et essayer d'envoyer les données à nouveau lors du cycle de programme suivant, si toutes n'ont pas été envoyées.

Si le résultat BufferFull est identique, optimisez le paramètre d'application :

oAugmentez la taille du tampon du socket

oAugmentez la taille du tampon de réception du socket sur le site distant

oAdaptez le cycle d'envoi du temps au temps de traitement du site distant.