SendData

Envoyer des données via le port de communication ou une connexion utilisateur Ethernet

Cette instruction envoie des données, à l’aide d’un tampon de transmission, vers des périphériques (ordinateur, appareil de mesure, lecteur de codes-barres, etc.) connectés au port de communication indiqué ou via une connexion utilisateur Ethernet. Appliquée au port COM de l’unité centrale, elle permet également d’effacer le tampon de réception, de réinitialiser le drapeau "Réception terminée" et de recevoir d’autres données.

Paramètres

Entrée

Port (WORD, INT, UINT)

Indique les ports de communication (selon le type d’API) :

  • Port COM, par ex. SYS_COM0_PORT

  • Port Ethernet, par ex. SYS_ETHERNET_USER_CONNECTION_1

  • MCU/SCU, par ex. 16#xx01 (xx = numéro du connecteur) dans COM01

Start (WORD, INT, UINT)

Tampon de transmission

NumberOfBytes (WORD, INT, UINT)

Nombre d’octets à envoyer :

  • Valeur négative : Le délimiteur sélectionné dans les registres système n’est pas ajouté à la chaîne de caractères à envoyer.

  • 0 (zéro octet) : Préparer le système à recevoir d’autres données

  • 16#8000: Changer de mode de communication

Remarques

  • Lorsque le nombre d’octets spécifié a été envoyé, le drapeau "Transmission terminée" devient TRUE. De nouvelles données peuvent être envoyées ou reçues. Toute instruction d’envoi fait passer le drapeau "Transmission terminée" à FALSE et aucune donnée ne peut être reçue. L’évaluation du drapeau "Transmission terminée" est recommandée lorsque aucune réponse n’est attendue, par ex. les messages de broadcast.

  • SendData est encapsulée dans les instructions suivantes :

    • SendCharacters

    • SendCharactersAndClearString

    • ClearReceiveBuffer

    • SetCommunicationMode

Drapeaux d’erreur

sys_bIsOperationErrorHold (passe à TRUE et reste TRUE)
  • Si la zone spécifiée à l’aide du modificateur d’adresse est en dehors des limites autorisées.

  • Si le nombre d’octets à envoyer, spécifié par NumberOfBytes est en dehors de l’intervalle indiqué.

  • Drapeaux uniquement pour le module MCU :

    • Si le module MCU n’existe pas dans le connecteur spécifié

    • Si 16#8000 est indiqué en mode MEWTOCOL-COM maître / esclave.

sys_bIsOperationErrorNonHold (passe à TRUE pendant un cycle)
  • Si la zone spécifiée à l’aide du modificateur d’adresse est en dehors des limites autorisées.

  • Si le nombre d’octets à envoyer, spécifié par NumberOfBytes est en dehors de l’intervalle indiqué.

  • Drapeaux uniquement pour le module MCU :

    • Si le module MCU n’existe pas dans le connecteur spécifié

    • Si 16#8000 est indiqué en mode MEWTOCOL-COM maître / esclave.

Exemple

Dans cet exemple, les caractères de la chaîne de caractères sSendData sont transmis. Définissez un tampon de transmission pour 30 octets (ARRAY [0...15] OF WORD) et copiez une chaîne de caractères de 8 caractères (""ABCDEFGH"") dans le tampon de transmission.

Structure du tampon de transmission :

Le premier mot du tampon de transmission (offset 0) est réservé au nombre d’octets à transmettre. Les données doivent donc être copiées dans l’offset 1 (SendBuffer[1]).

Lorsque la transmission commence (condition d’exécution de l’instruction d’envoi devient TRUE), la valeur de l’offset 0 passe à 8. À la fin de la transmission, la valeur dans l’offset 0 est automatiquement réinitialisée sur 0. Les données dans l’offset 1 à 4 sont envoyées à la suite les unes des autres à partir de l’octet de poids faible.

Transmission des caractères "ABCDEFGH" vers un périphérique connecté au port COM 1. Par défaut, les paramètres pour l’en-tête et le délimiteur sont "Sans STX" et "CR"

  1.  (1)  Drapeau "Transmission terminée"
  2.  (2) Condition d’exécution
  3.  (3) Exécution de l’instruction d’envoi
  4.  (4) Transmission

En-tête du POU

Toutes les variables d’entrée et de sortie utilisées pour programmer cette fonction ont été déclarées dans l’en-tête du POU. Le même en-tête de POU est utilisé pour tous les langages de programmation.

	VAR
		bSend: BOOL:=FALSE;
			(*activates function*)
		sSendData: STRING[30]:='ABCDEFGH';
			(*up to 30 chars*)
		awSendBuffer: ARRAY [0..15] OF WORD:=[16(0)];
			(*for 30 chars + 1 word*)
	END_VAR

Corps du POU

Lorsque bSend est TRUE, F10_BKMV copie les caractères de la chaîne de caractères de sSendData vers le tampon awSendBuffer à partir de awSendBuffer[1]. Les deux premiers mots d’une chaîne de caractères contiennent les informations de l’en-tête de la chaîne de caractères (nombre maximum de caractères et nombre actuel de caractères). L’en-tête de la chaîne de caractères ne doit pas être copié dans le tampon. Par conséquent, entrez un offset de 2 à l’adresse de départ de la chaîne de caractères avant de copier les données. Vérifiez que la taille du tampon de transmission est suffisante pour toutes les données à envoyer. Chaque élément du tableau (Array) de SendBuffer peut contenir deux caractères de la chaîne de caractères de SendString. SendBuffer[0] est réservé au nombre total d’octets à envoyer.

SendData envoie les données à partir du premier élément du tampon de transmission (awSendBuffer[0]) spécifié par Start. La longueur de la chaîne de caractères à envoyer (8 octets) est définie dans NumberOfBytes. Utilisez la fonction LEN pour calculer le nombre d’octets. Les données sont sorties via le port COM 1 comme indiqué par Port.

Corps en LD

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 10 ;
        NETWORK_BODY
B(B_COMMENT,,Creating the send buffer,1,0,14,1,);
B(B_CONTACT,,bSend,3,2,5,4,R);
B(B_VAROUT,,awSendBuffer[1],26,4,28,6,);
B(B_F,F10_BKMV,,18,2,26,7,,?DEN?D@'s1'?Ds2?AENO?Cd);
B(B_F,Adr_Of_VarOffs_I!,,9,3,18,7,,?D@'Var'?DOffs?CAdr);
B(B_VARIN,,sSendData,7,4,9,6,);
B(B_F,AdrLast_Of_Var_I!,,9,7,18,9,,?D?C);
B(B_VARIN,,sSendData,7,7,9,9,);
B(B_VARIN,,2,7,5,9,7,);
L(5,3,18,3);
L(1,3,3,3);
L(18,3,18,4);
L(1,0,1,10);
L(18,6,18,8);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 7 ;
        NETWORK_BODY
B(B_COMMENT,,bSend sign of the bSend buffer via the serial interface,1,0,25,1,);
B(B_CONTACT,,bSend,3,2,5,4,R);
B(B_VARIN,,awSendBuffer[0],14,4,16,6,);
B(B_F,LEN!,,9,4,14,7,,?DIN?C);
B(B_VARIN,,sSendData,7,5,9,7,);
B(B_F,E_SendData!,,16,1,26,7,,?DEN?DPort?DStart?DNumberOfBytes?AENO);
B(B_VARIN,,1,14,3,16,5,);
L(1,3,3,3);
L(5,3,16,3);
L(14,6,16,6);
L(1,0,1,7);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

Corps en ST

if (DF(bSend)) then
    (* Copy all characters of the SendString to the SendBuffer from position 1 *)
    F10_BKMV(s1_Start := Adr_Of_VarOffs(Var := sSendData, Offs :=2), 
         s2_End := AdrLast_Of_Var(sSendData), 
         d_Start => awSendBuffer[1]);
    (* Send the data of the SendBuffer via the COM Port 2 of the MCU unit in slot 3 *)
    (* In SendBuffer[0] the number of bytes not yet transmitted is stored *)         
    SendData(Port :=1, start := awSendBuffer[0], NumberOfBytes := LEN(sSendData));
end_if;

IsTransmissionDone

Modifié le : 2022-01-17Commentaires sur cette pageAssistance téléphonique