FP_SD_READ_BIN

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

Cette instruction FP lit le nombre de mots, spécifié par n_Words, dans le fichier au format binaire spécifié par le numéro de fichier s_FileNumber sur la carte mémoire SD. Le nom du répertoire est \data et le nom du fichier est dtxxx.bin, "xxx" correspondant au numéro du fichier. 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

s_FileNumber (WORD, INT, UINT)

Numéro du fichier (0–999)

n_Words (WORD, INT, UINT)

Nombre de mots (0–65535)

Sortie

d_Start (WORD, INT, UINT)

Adresse de départ

Remarques

  • 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.

  • S’il n’y a pas de répertoire \data ou s’il n’y a pas de fichier correspondant au numéro de fichier spécifié dans le répertoire, une erreur apparaît.

  • Si le fichier contient un nombre de données inférieur au nombre de données à lire, les données sont lues jusqu’au nombre de données dans le fichier.

Drapeaux d’erreur

sys_bIsSDMemoryAccessError
  • 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

DUT

Un type de données structurées (DUT) peut être composé d’autres types de données. Un DUT est tout d’abord défini dans le gestionnaire de DUT et ensuite traité comme les autres types de données standard (BOOL, INT, etc.) dans la liste des variables globales ou l’en-tête du POU.

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*)
		dutValuesRead: DUT_VALUES;
		iFileNumberDut: INT:=2;
	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

eneral">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_CONTACT,,sys_bIsSDMemoryAccessActive,10,2,12,4,N);
B(B_CONTACT,,bStart,2,2,4,4,R);
B(B_VARIN,,iFileNumberDut,14,5,16,7,);
B(B_F,FP_SD_READ_BIN!,,16,3,27,8,,?DEN?Ds_FileNumber?Dn_Words?AENO?Cd_Start);
B(B_F,Size_Of_Var!,,9,6,16,8,,?D?C);
B(B_VARIN,,dutValuesRead,7,6,9,8,);
B(B_F,Adr_Of_Var_O!,,27,5,35,7,,?D?C);
B(B_VAROUT,,dutValuesRead,35,5,37,7,);
L(1,3,2,3);
L(4,3,10,3);
L(12,3,12,5);
L(12,5,16,5);
L(1,0,1,9);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

Corps en ST

IF DF(bStart)AND not sys_bIsSDMemoryAccessActive then
    FP_SD_READ_BIN(s_FileNumber := iFileNumberDut,
                   n_Words := Size_Of_Var(dutValuesRead),
                   d_Start => Adr_Of_Var(dutValuesRead));
END_IF;

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