FP_SD_READ

Lire des données de la carte mémoire SD

Cette instruction FP lit le nombre de données spécifié par n_NumberOfDataToRead dans le fichier spécifié par s1_FullFileName sur la carte mémoire SD. Le DUT FP_SD_READ_DUT à s2_dutRead indique les paramètres d’écriture. Le résultat est sauvegardé dans la zone spécifiée par d_Start. Le code ASCII requiert 8 bits (un octet) pour exprimer un caractère BCD. Après conversion en code ASCII, les données converties sont deux fois plus longues que les données sources.

Paramètres

Entrée

s1_FullFileName (STRING)

Nom du fichier

n_NumberOfDataToRead (WORD, INT, UINT)

Nombre de données qui doivent être lues.

Valeurs :

  • 0–65535 (données de 16 bits)

  • 0–32767 (données de 32 bits)

  • 0–1999 (chaîne de caractères)

Entrée/sortie

s2_dutRead (FP_SD_READ_DUT)

Format, mode de lecture, position du pointeur, etc.

Sortie

d_Start (ANY)

Adresse de départ

Mode pointeur

Si un mode pointeur est sélectionné dans FP_SD_READ_DUT à s2_dutRead (wMode=2 ou wMode=3), la lecture commence à la position du pointeur. Après lecture, le pointeur se positionne là où la lecture s’est terminée. La lecture suivante commence à cette position.La position du pointeur peut aussi être spécifiée par udiBytePosition dans le DUT. Dans les exemples ci-dessous, les flèches indiquent les positions du pointeur valides :

Données INT 16 bits (fichier de format BIN) :

Données ASCII (fichier de format CSV) :

Dans les fichiers CSV, le pointeur se positionne toujours après un espace, une virgule ou un saut de ligne. Les espaces, virgules et sauts de ligne à la fin des données sont ignorés.

Remarques

  • Voir également les précautions relatives à l’accès à la 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.

  • Deux guillemets successifs ("") dans des chaînes de caractères sont lus comme un caractère ("). Un seul guillemet est ignoré.

  • Dans les fichiers CSV, les champs vides (par ex. les parties avec une succession de virgules) sont comptées comme faisant partie du nombre de données à lire mais les données ne sont pas enregistrées.

Drapeaux d’erreur

sys_bIsSDMemoryAccessError (passe à TRUE et reste TRUE)
  • 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.

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.

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.

Exemple

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
		bStart: BOOL:=FALSE;
			(*activates the instruction*)
		sFile_Test_Csv: STRING[32]:='\Test.csv';
		dutFpReadTest_csv: FP_SD_READ_DUT;
		sStringRead: STRING[32]:='';
		iStringLengthRead: INT:=0;
	END_VAR

Corps du POU

Lorsque la variable bStart passe de FALSE à TRUE et lorsque la variable système sys_bIsSDMemoryAccessActive n’est pas TRUE, la fonction est exécutée.

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 := 3 ;
        NETWORK_BODY
B(B_COMMENT,,ø^Read string ASCII data from SD card memory - ASCII value,3,0,58,3,);
L(1,0,1,3);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 4 ;
        NETWORK_BODY
B(B_CONTACT,,bStart,2,1,4,3,R);
B(B_CONTACT,,sys_bIsSDMemoryAccessActive,10,1,12,3,N);
B(B_F,E_MOVE!,,17,0,23,4,,?DEN?D?AENO?C);
B(B_VARIN,,10,15,2,17,4,);
B(B_VAROUT,,dutFpReadTest_csv.wFormat,23,2,25,4,);
L(1,2,2,2);
L(4,2,10,2);
L(12,2,17,2);
L(1,0,1,4);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 7 ;
        NETWORK_BODY
B(B_VARIN,,sFile_Test_Csv,15,3,17,5,);
B(B_VAROUT,,sStringRead,30,3,32,5,);
B(B_VARIN,,dutFpReadTest_csv,15,5,17,7,);
B(B_CONTACT,,bStart,2,1,4,3,R);
B(B_CONTACT,,sys_bIsSDMemoryAccessActive,10,1,12,3,N);
B(B_F,FP_SD_READ!,,17,1,30,7,,?DEN?Ds1_FullFileName?Dn_NumberOfDataToRead?Ds2_dutRead?As2_dutRead?AENO?Cd_Start);
B(B_VARIN,,iStringLengthRead,15,4,17,6,);
L(1,2,2,2);
L(4,2,10,2);
L(12,2,12,3);
L(12,3,17,3);
L(1,0,1,7);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

Corps en ST

eneral">(* Read string ASCII data from SD card memory - ASCII value *)
IF DF(bStart)And not sys_bIsSDMemoryAccessActive then
    dutFpReadTest_csv.wFormat:=10;
    FP_SD_READ(s1_FullFileName := sFile_Test_Csv,
               n_NumberOfDataToRead := iStringLengthRead,
               s2_dutRead := dutFpReadTest_csv,
               d_Start => sStringRead);
END_IF;

Modifié le : 2024-03-07Commentaires sur cette pageAssistance téléphonique