Transmettre des données à l'homologue
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.
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. |
oFB_TCPClient/FB_TCPClient2
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.
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. |
![]()
|
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. |
![]()
|
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. |
![]()
|
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.