FP_SD_READ_BIN

从SD卡读取二进制数据

此FP指令从SD卡上文件编号s_FileNumber指定的二进制格式文件中读取n_Words指定的字数。目录名称为\data,文件名为dtxxx.bin,其中"xxx"为文件编号。结果存储在d_Start指定的区域中。ASCII代码需要8位(1个字节)来表示1个BCD字符。转换为ASCII后,数据长度将是源数据长度的两倍。

参数

输入

s_FileNumber (WORD, INT, UINT)

文件编号0–999

n_Words (WORD, INT, UINT)

字数0–65535

输出

d_Start (WORD, INT, UINT)

起始地址

标注

  • 也请参阅有关SD卡访问的注意事项。

  • 在SD存储卡指令的触发器EN变为TRUE后,SD存储访问活动标志(sys_bIsSDMemoryAccessActive)变为TRUE,并保持为TRUE直到执行完成。在此期间,无法执行其他SD存储卡指令。

  • 执行指令时,SD存储访问完成标志(sys_blsSDMemoryAccessDone)为FALSE,指令完成后变为TRUE并保持TRUE

  • 在完成指令执行之前,请勿从输出区域读取数据。

  • 如果没有目录\data或文件中没有指定文件编号的文件,则发生错误。

  • 如果文件中的数据数小于要读取的数据数,则将数据一直读取到文件中的数据数。

错误标志

sys_bIsSDMemoryAccessError
  • FALSE:指令完成且没有错误时

  • TRUE:指令完成但有错误时

  • 使用sys_iSDMemoryAccessErrorCode评估错误代码。

sys_bIsOperationErrorHold(变为TRUE并保持为TRUE)
  • 如果使用索引寄存器指定的区域超出限制。

sys_bIsOperationErrorNonHold(对于一次扫描变为TRUE)
  • 如果使用索引寄存器指定的区域超出限制。

示例

DUT

使用数据单元类型(DUT),可以定义由其他数据类型组成的数据单元类型。DUT首先在DUT池中定义,然后像全局变量列表或POU头中的标准数据类型(BOOLINT等)一样进行处理。

POU头

所有用于编程此函数的输入和输出变量已在POU头中声明。所有编程语言使用相同的POU头。

	VAR
		bStart: BOOL:=FALSE;
			(*activates the instruction*)
		dutValuesRead: DUT_VALUES;
		iFileNumberDut: INT:=2;
	END_VAR

POU本体

当变量bStartFALSE变为 TRUE且系统变量sys_bIsSDMemoryAccessActive不是TRUE时,执行此函数。

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

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;

最后更新日期: 2024-03-07此页面上的反馈松下热线