Schneider M251 SDCard data write Jan 29, 2024 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