FP_SD_WRITE

将数据写入SD卡

此FP指令读取存储在以s_Start开头的地址的n_NumberOfDataToWrite指定的数据数量,并将数据写入SD卡上由d1_FullFileName指定的文件。d2_dutWrite处的DUT FP_SD_WRITE_DUT指定写入参数。

参数

输入

s_Start (ANY)

起始地址

n_NumberOfDataToWrite (WORD, INT, UINT)

由DUT成员udiNumberOfDataWritten指定的要写入的数据数量

  • 对于wFormat=1–8:16位/32位逗号分隔数据数

  • 对于wFormat=10:8位字符数

  • 对于wFormat=11:16位数据数

d1_FullFileName (STRING)

带有扩展名的文件名,例如'\Test.csv'

输入/输出

d2_dutWrite (FP_SD_WRITE_DUT)

写入格式、写入模式、指针位置等

指针模式

如果已在s2_dutWrite处的FP_SD_WRITE_DUT中选择了指针模式(wMode=2wMode=3),则写入从指针的位置开始。写入后,指针移动到写入完成的位置。下一次的写入操作将从该位置开始。指针位置也可由DUT中的udiBytePosition指定。在下例中,针对不同的数据格式指示文件指针位置。

  1.  (1) 16位INT数据(BIN格式文件)
  2.  (2) 16位INT数据(CSV格式文件)
  3.  (3) ASCII数据(CSV格式文件)
  4.  (4) 文件指针

标注

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

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

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

  • 当文件属性为只读时,无法写入任何数据。

  • 保存ASCII数据时,写入的字符串用双引号括起来。

  • 字符串中的双引号(")转换为两个双引号("")。

错误标志

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

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

  • 使用sys_iSDMemoryAccessErrorCode评估错误代码。

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

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

示例

POU头

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

	VAR
		bStart: BOOL:=FALSE;
			(*activates the instruction*)
		sStringWrite1: STRING[32]:='Test String1';
	END_VAR

POU本体

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

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,,ø^Write string ASCII data into 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!,,18,0,24,4,,?DEN?D?AENO?C);
B(B_VARIN,,10,16,2,18,4,);
B(B_VAROUT,,dutFpWriteTest_csv.wFormat,24,2,26,4,);
L(1,2,2,2);
L(4,2,10,2);
L(12,2,18,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,,sStringWrite,16,2,18,4,);
B(B_CONTACT,,bStart,2,1,4,3,R);
B(B_VARIN,,sFile_Test_Csv,16,4,18,6,);
B(B_VARIN,,dutFpWriteTest_csv,16,5,18,7,);
B(B_CONTACT,,sys_bIsSDMemoryAccessActive,10,1,12,3,N);
B(B_F,FP_SD_WRITE!,,18,0,31,7,,?DEN?Ds_Start?Dn_NumberOfDataToWrite?Dd1_FullFileName?Dd2_dutWrite?Ad2_dutWrite?AENO);
B(B_VARIN,,iStringLength,16,3,18,5,);
L(1,2,2,2);
L(4,2,10,2);
L(12,2,18,2);
L(1,0,1,7);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

ST本体

IF DF(bStart)AND not sys_bIsSDMemoryAccessActive then
    dutFpWriteTest_csv.wFormat:=10;
    FP_SD_WRITE(s_Start := sStringWrite,
                n_NumberOfDataToWrite := iStringLength,
                d1_FullFileName := sFile_Test_Csv,
                d2_dutWrite := dutFpWriteTest_csv);
END_IF;

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