Lire une ligne d’un fichier d’une carte mémoire SD spécifié
Cette instruction FP lit le fichier spécifié par s_FullFileName de la position du pointeur spécifiée par d2_dutReadLine à un nombre maximum d’octets spécifié ou jusqu’à ce qu’un caractère de fin de ligne (CR, LF, CR+LF) soit détecté. Le résultat est sauvegardé dans la zone spécifiée par d1_Out.
Entrée
Nom du fichier
Entrée/sortie
Position du pointeur et nombre maximum de caractères à lire
Sortie
Zone de sortie
Voir également Introduction aux instructions de carte mémoire SD.
Le drapeau "Accès mémoire SD actif" (sys_bIsSDMemoryAccessActive) devient TRUE lorsque le déclencheur EN de l’instruction de carte mémoire SD devient TRUE et reste TRUE jusqu’à ce que l’exécution de l’instruction soit terminée. Pendant ce temps, les autres instructions de carte mémoire SD ne peuvent pas être exécutées.
Le drapeau "Accès mémoire SD terminé" (sys_blsSDMemoryAccessDone) est FALSE lorsque l’instruction est exécutée, et devient TRUE et reste TRUE lorsque l’instruction est terminée.
Les données de la zone de sortie ne doivent pas être lues tant que l’exécution de l’instruction n’est pas terminée.
Veillez à ce que le nombre d’octets lus (spécifié par uiMaxCharsToRead de FP_SD_READ_LINE_DUT,) n’excède pas la taille maximale de la chaîne de caractères de la variable de sortie d1_Out. Sinon les variables suivantes seront remplacées et des erreurs d’opération peuvent se produire.
FALSE : lorsque l’instruction a été exécutée sans erreur.
TRUE : lorsqu’une erreur est apparue lors de l’exécution de l’instruction.
Utilisez sys_iSDMemoryAccessErrorCode pour vérifier le code d’erreur.
Si la zone spécifiée à l’aide du modificateur d’adresse est en dehors des limites autorisées.
Si la zone spécifiée à l’aide du modificateur d’adresse est en dehors des limites autorisées.
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
bStart: BOOL:=FALSE;
dutReadLine: FP_SD_READ_LINE_DUT;
sLineRead: STRING[32]:='';
END_VAR
La fonction est exécutée lorsque la variable bStart passe de FALSE à TRUE.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_CONTACT,,bStart,4,2,6,4,R);
B(B_F,E_MOVE!,,26,1,32,5,,?DEN?D?AENO?C);
B(B_VARIN,,sLineRead,12,3,14,5,);
B(B_F,MAX_LEN!,,14,3,20,5,,?D?C);
B(B_F,TO_UINT!,,20,3,26,5,,?D?C);
B(B_VAROUT,,dutReadLine.uiMaxCharsToRead,32,3,34,5,);
L(1,0,1,5);
L(1,3,4,3);
L(6,3,26,3);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_CONTACT,,bStart,4,1,6,3,R);
B(B_CONTACT,,sys_bIsSDMemoryAccessActive,12,1,14,3,N);
B(B_F,FP_SD_READ_LINE!,,26,0,41,5,,?DEN?Ds_FullFileName?Dd2_dutReadLine?Ad2_dutReadLine?AENO?Cd1_Out);
B(B_VARIN,,'\TestLine.csv',24,2,26,4,);
B(B_VAROUT,,sLineRead,41,2,43,4,);
B(B_VARIN,,dutReadLine,24,3,26,5,);
L(1,0,1,5);
L(1,2,4,2);
L(6,2,12,2);
L(14,2,26,2);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF DF(bStart) AND NOT sys_bIsSDMemoryAccessActive then
dutSDReadString.uiMaxCharsToRead := TO_UINT(MAX_LEN(sStringRead1));
FP_SD_READ_LINE(s_FullFileName := '\TestLine.csv',
d2_dutReadLine := dutSDReadString,
d1_Out => sStringRead1);
END_IF;