Schneider M251 SDCard data write
Code to get information about and write data to an SDCard in a Schneider M251 PLC.
Variables:
PROGRAM SR_Main
VAR
sBla: STRING(11);
bla: PLC_R_SDCARD_STATUS;
dResult: DINT;
dTotalSpaceResult: DINT;
uliTheTotalIs: ULINT;
rTotalMB: REAL;
uliTheFreeIs: ULINT;
dFreeSpaceResult: DINT;
rFreeMB: REAL;
rPercentAvailable: REAL;
sTemp: STRING;
bDoIt: BOOL;
bFileCopyDone: BOOL;
bFileCopyBusy: BOOL;
bFileCopyError: BOOL;
bFileCopyErrorEnum: DataFileCopyError;
MyDataFileCopy: DataFileCopy;
baMyBytes: ARRAY[0..99] OF BYTE;
END_VAR
Code:
//What is the status of the SD card?
bla := PLC_R.i_wSdCardStatus;
IF bla = SDCARD_READWRITE THEN //If the card isn't there this crashes stuff..
//What is its label?
dResult := FC_GetLabel(i_sVolumeName:='/sd0' , iq_sLabel:= sBla);
//What is the size of the SD Card?
dTotalSpaceResult := FC_GetTotalDiskSpace(i_sVolumeName:= '/sd0', iq_uliTotalDiskSpace:= uliTheTotalIs);
rTotalMB := ULINT_TO_REAL(uliTheTotalIs) / 1048576.0; //convert to MB
//How much space is left?
dFreeSpaceResult := FC_GetFreeDiskSpace(i_sVolumeName:= '/sd0', iq_uliFreeDiskSpace:= uliTheFreeIs);
rFreeMB := ULINT_TO_REAL(uliTheFreeIs) / 1048576.0;
//What percentage is that?
rPercentAvailable := rFreeMB / rTotalMB * 100.0;
END_IF
//Lets write some data to the SD card
sTemp := 'This is a test of the emergency broadcast system';
MyDataFileCopy(
xExecute:= bDoIt,
sFileName:= 'BLABLA',
xRead:= FALSE, //Write from memory to the controller
xSecure:= FALSE,
iLocation:= 1, //1 = the SD card
uiSize:= LEN(sTemp),
dwAdd:= ADR(sTemp),
xDone=> bFileCopyDone,
xBusy=> bFileCopyBusy,
xError=>bFileCopyError ,
eError=> bFileCopyErrorEnum);
IF bFileCopyDone THEN
bDoIt := false;
END_IF