Envoyer des données via le port de la CPU ou du module MCU
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é. 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.
Entrée
Tampon de transmission
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 entre "Contrôle via le programme API" et MEWTOCOL maître/esclave
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
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.
F159_MTRN est encapsulée dans les instructions suivantes :
SendCharacters
SendCharactersAndClearString
ClearReceiveBuffer
SetCommunicationMode
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 n_Number 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.
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 n_Number 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.
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"
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
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.
F159_MTRN envoie les données à partir du premier élément du tampon de transmission (awSendBuffer[0]) spécifié par s_Start. La longueur de la chaîne de caractères à envoyer (8 octets) est définie dans n_Number. Utilisez la fonction LEN pour calculer le nombre d’octets. Les données sont renvoyées via le port COM 1 comme indiqué par d_Port.
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_F,F159_MTRN!,,17,1,25,7,,?DEN?Ds_Start?Dn_Number?Dd_Port?AENO);
B(B_VARIN,,awSendBuffer[0],15,3,17,5,);
B(B_VARIN,,1,15,5,17,7,);
B(B_F,LEN!,,9,3,14,6,,?DIN?C);
B(B_VARIN,,sSendData,7,4,9,6,);
L(5,3,17,3);
L(1,3,3,3);
L(14,5,17,5);
L(1,0,1,7);
END_NETWORK_BODY
END_NET_WORK
END_BODY
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 *)
F159_MTRN(s_Start := SendBuffer[0], n_Number := LEN(sSendData), d_Port :=16#0302);
end_if;