Renvoyer l’adresse DT de l’entrée/sortie avec offset
A partir de la valeur d’entrée/sortie Offs, la fonction génère une adresse de 16 bits dans la zone DT en entrée/sortie AdrDT. Cette entrée doit être directement connectée à l’entrée ou la sortie de 16 bits d’une fonction de base. La valeur d’entrée/sortie Offs correspond à l’adresse offset dans la zone de données DT. Avec GetPointer, elle peut être transférée avec une valeur pour la zone mémoire vers une fonction ou un bloc fonction utilisateur.
Entrée
Génère une adresse offset DT de 16 bits
Cette broche doit être connectée à l’entrée/la sortie d’une fonction de base pour laquelle le type de données INT, WORD est autorisé.
Sortie
Offset pour l’adresse DT0
Notez que l’exécution de la fonction de base qui utilise l’adresse créée dans la zone DT est contrôlée en affectant la valeur pour la zone mémoire de la variable d’entrée EN à la fonction Is_AreaDT.
Cette fonction accède, en interne, à l’un des registres d’index également utilisé pour le calcul des tableaux Arrays.
Pour les éditeurs LD et FBD uniquement : Utilisez Instruction d’entrée ou Instruction de sortie à partir du volet Instructions pour insérer l’instruction requise dans la fenêtre de programmation.
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
start: BOOL:=FALSE;
(*activation of the function*)
DutNonBoolean: @'Dut_NonBoolean';
(*structured data type*)
ActualPosition: DINT:=0;
(*beginning position from which the data should be read to the IC card*)
END_VAR
La variable DutNonBoolean du type de données affecté dans le DUT ci-dessus est déclarée. Les valeurs n’ont pas été affectées aux éléments de la variable DutNonBoolean dans l’en-tête ou le corps du POU car les valeurs de la variable DutNonBoolean sont surécrites après exécution de la fonction ReadFromIcCard.
La fonction ReadFromIcCard est exécutée lorsque la variable start passe de FALSE à TRUE. La fonction lit les valeurs sur la carte CI à partir de l’adresse ActualPosition et écrit les informations dans la variable DutNonBoolean. Veillez à ce que la carte CI soit formatée correctement via le menu et à ce que les valeurs à partir de l’adresse ActualPosition soient disponibles sur la carte CI.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 8 ;
NETWORK_BODY
B(B_CONTACT,,start,6,1,8,3,);
B(B_F,ReadFromIcCard!,Instance,18,1,27,8,,?DEN?DArea?DOffset?DSize?DPosition?AENO?C);
B(B_VARIN,,2,16,4,18,6,);
B(B_VARIN,,ActualPosition,16,6,18,8,);
B(B_VAROUT,,ActualPosition,27,3,29,5,);
B(B_F,GetPointer!,Instance,11,3,18,5,,?D?C);
B(B_VARIN,,Dut_NonBoolean,7,3,9,5,);
B(B_F,Size_Of_Var!,Instance,9,5,16,7,,?D?C);
L(18,2,18,3);
L(8,2,18,2);
L(1,2,6,2);
L(9,4,11,4);
L(9,4,9,6);
L(16,6,18,6);
L(1,0,1,8);
END_NETWORK_BODY
END_NET_WORK
END_BODY
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_INPUT
p32Pointer: POINTER32;
(*area, offset and size of data values*)
diPosition: DINT:=0;
(*beginning position from which the data should be read from the IC card*)
END_VAR
VAR_OUTPUT
p32ActualPosition: POINTER32;
(*shows the area, offset and size where the data of the IC card is stored*)
END_VAR
VAR
END_VAR
Si la variable, dont les valeurs de Area et Offset sont livrées via le programme appelé, est dans la zone DT ou FL (l’adresse pour la variable p32Pointer étant affectée à la zone DT ou FL par le compilateur), les données de la carte CI sont lues à partir de p32ActualPosition. La position est augmentée de la taille de cette variable et renvoyée.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 9 ;
NETWORK_BODY
B(B_VARIN,,2,20,3,22,5,);
B(B_VARIN,,1000,20,4,22,6,);
B(B_VARIN,,awProcessDataToGet[0],10,5,12,7,);
B(B_CONTACT,,bGetData,5,2,7,4,R);
B(B_F,Size_Of_Var!,Instance,12,5,19,7,,?D?C);
B(B_F,E_ReadFromIcCard!,Instance,22,1,37,7,,?DEN?DBankNumber?DBankOffset?DDataNumberOfWords?AENO?CDataStartAddress);
B(B_F,Adr_Of_Var_O!,Instance,37,3,45,5,,?D?C);
B(B_VAROUT,,awProcessDataToGet,45,3,47,5,);
L(1,3,5,3);
L(19,6,22,6);
L(1,0,1,9);
L(7,3,22,3);
END_NETWORK_BODY
END_NET_WORK
END_BODY
Autres exemples de projets (répertoire "Samples" dans le répertoire d’installation de FPWIN Pro) :