Cicode function logging to a .CSV file and file Sizes?

I have a running Cicode function that logs to a  device of .CSV file type.

this function works well without issue until the file size reaches 5758kb (5.758Mb) which is 5127 rows of data (including my headers) and it then stops logging?

my work around is to save a copy of the file every 8 hours as it takes 14 hours and 15 mins to reach this size i have stated above ( it logs data every 10 seconds),

My version is Citect SCADA 2018 V8.1 update 26

My Question is

"Is this a citect cicode known issue for size file restriction or rows restriction or something else ?"

Parents
  • Hi Eric,

    please see cicode below.

    i also have another issue as my device stops logging intermittantly ? i have redundant server config hence the code

    IF ServerInfoEx("Report", 0, "Report") = "1" THEN

    Regards
    Alan


    ============================================================================

    /*

    FUNCTION: DataLog_EnergyShell

    Author: Alan Hoon - E.I.C.S. Pty Ltd
    Version: Rev 1
    Date: 13th May, 2021
    Revisions: Rev 1 - added logging enable based on date period 18/05/2021

    Called from: Events

    Purpose: Temporary Data Logging For "Shell Energy" (Consultants) Audit - Compressed Air

    Commissioning:

    Status: WIP

    Parameters: None

    Arguments:

    */

    FUNCTION
    DataLog_EnergyShell()

    // Declare the date period for looging and "Enable" Bit for the duration required based on Date - Rev 1 (WIP)
    STRING sCurrent_Date = ""; // Current Date
    STRING sStart_Date = ""; // Start Date of logging period
    STRING sEnd_Date = ""; // End Date of logging period
    INT bEnable = 0; // Enable Logging

    //Initialising Centac # 1 Variables
    STRING sCentac1_Load = ""; // Load Status
    STRING sCentac1_Amps = ""; // Motor Current
    STRING sCentac1_IGV_Pos = ""; // IGV Position %
    STRING sCentac1_Bypass_Pos = ""; // Bypass Position %

    //Initialising Centac # 2 Variables
    STRING sCentac2_Load = ""; // Load Status
    STRING sCentac2_Amps = ""; // Motor Current
    STRING sCentac2_IGV_Pos = ""; // IGV Position %
    STRING sCentac2_Bypass_Pos = ""; // Bypass Position %

    //Initialising Centac # 3 Variables
    STRING sCentac3_Load = ""; // Load Status
    STRING sCentac3_Amps = ""; // Motor Current
    STRING sCentac3_IGV_Pos = ""; // IGV Position %
    STRING sCentac3_Bypass_Pos = ""; // Bypass Position %

    //Initialising Kaeser DSD 281 (Compressor Room) Variables
    STRING sKaeser281_Run_Stat = ""; // Run Status
    STRING sKaeser281_Amps = ""; // Motor Current

    //Initialising Air Dryer (Compressor Room) Variables
    STRING sCR_AirDryer_Run_Stat = ""; // Run Status

    //Initialising Main Receiver (Compressor Room) Pressure Variables
    STRING sMain_Air_kpa = ""; // Main Receiver Air Pressure

    //Initialising Instrument Air Variables
    STRING sInstrument_Air_kpa = ""; // Intstrument Air Pressure

    //Initialising D1 Bagger Air Blast Compressor Variables
    STRING sD1BagAirBlast_Stat = ""; // Run Status

    //Initialising D1 Baggers Ingersoll Rand MH160 Compressor Variables
    STRING sD1_IR_MH160_Load = ""; // Load Status
    STRING sD1_IR_MH160_Stat = ""; // Run Status

    //Initialising D1 Baggers Kaeser DSD 241 Variables
    STRING sKaeser241_Run_Stat = ""; // Run Status
    STRING sKaeser241_Run_Load = ""; // Load Status
    STRING sKaeser241_Run_Idle = ""; // Idle Status
    STRING sKaeser241_Amps = ""; // Motor Current

    //Initialising D1 Baggers Air Receiver Variables
    STRING sD1_Baggers_Air_kpa = ""; // D1 Baggers Air Receiver Air Pressure

    //Initialising Lapping Compressors Variables
    STRING sLapping_VSD_Stat = ""; // VSD Lapping Compressor Run Status
    STRING sLapping_DOL_Stat = ""; // DOL Lapping Compressor Run Status

    //Declare the handler for opening the CSV file used for "Shell Energy" Data Logging
    INT hDev_DataLog_Shell_Energy;

    /**

    Requires Work - Rev 1 (WIP)

    //Date and Enable Variables - Rev 1
    sCurrent_Date = Date(2); // (2) - Short date format, dd/mm/yy.
    ! sStart_Date = "18/05/21"; // Start Date of logging period (Future Use)
    sEnd_Date = "02/06/21"; // End Date of logging period

    bEnable = 0; // Ensure Logging is NOT Enabled before running date code

    // Check if the Date is any of the below Dates and NOT sEnd_Date and if so set bEnable = 1

    **/ /**

    IF ((sCurrent_Date = "18/05/21") OR (sCurrent_Date = "19/05/21") OR (sCurrent_Date = "20/05/21") OR (sCurrent_Date = "21/05/21") OR (sCurrent_Date = "22/05/21") OR (sCurrent_Date = "23/05/21")
    OR (sCurrent_Date = "24/05/21") OR (sCurrent_Date = "25/05/21") OR (sCurrent_Date = "26/05/21") OR (sCurrent_Date = "27/05/21") OR (sCurrent_Date = "28/05/21") OR (sCurrent_Date = "29/05/21")
    OR (sCurrent_Date = "30/05/21") OR (sCurrent_Date = "31/05/21") OR (sCurrent_Date = "01/06/21")) THEN // Start logging at these dates
    bEnable = 1; // enable logging
    END

    IF (sCurrent_Date = sEnd_Date) THEN // Stop logging at this date - Reset bEnable
    bEnable = 0;
    END

    // bEnable = 1; // "Needs placement in key Area's"
    **/

    IF ServerInfoEx("Report", 0, "Report") = "1" THEN


    //Centac # 1 Variables
    sCentac1_Load = TagRead("CR_Centac_1_Load_Status"); //Load Status
    sCentac1_Amps = TagRead("CR_Centac_1_AMPS"); //Motor Current
    sCentac1_IGV_Pos = TagRead("CR_Centac_1_IGV_POS"); //IGV Position %
    sCentac1_Bypass_Pos = TagRead("CR_Centac_1_BYPASS_POS"); //Bypass Position %

    //Centac # 2 Variables
    sCentac2_Load = TagRead("CR_Centac_2_Load_Status"); //Load Status
    sCentac2_Amps = TagRead("CR_Centac_2_AMPS"); //Motor Current
    sCentac2_IGV_Pos = TagRead("CR_Centac_2_IGV_POS"); //IGV Position %
    sCentac2_Bypass_Pos = TagRead("CR_Centac_2_BYPASS_POS"); //Bypass Position %

    //Centac # 3 Variables
    sCentac3_Load = TagRead("CR_Centac_3_Load_Status"); //Load Status
    sCentac3_Amps = TagRead("CR_Centac_3_AMPS"); //Motor Current
    sCentac3_IGV_Pos = TagRead("CR_Centac_3_IGV_POS"); //IGV Position %
    sCentac3_Bypass_Pos = TagRead("CR_Centac_3_BYPASS_POS"); //Bypass Position %

    //Kaeser DSD 281 (Compressor Room) Variables
    sKaeser281_Run_Stat = TagRead("CR_Kaeser_Run_Status"); // Run Status
    sKaeser281_Amps = TagRead("CR_Kaeser_AMPS"); // Motor Current

    //Air Dryer (Compressor Room) Variables
    sCR_AirDryer_Run_Stat = TagRead("CR_Air_Drier_Comp_Run_Status"); // Run Status

    //Main Receiver (Compressor Room) Pressure Variables
    sMain_Air_kpa = TagRead("CR_Main_Pressure_Kpa"); // Main Receiver Air Pressure

    //Instrument Air Variables
    sInstrument_Air_kpa = TagRead("FN_INSTRAIR_PV"); // Intstrument Air Pressure

    //D1 Bagger Air Blast Compressor Variables
    sD1BagAirBlast_Stat = TagRead("PL_D1BAGR_AIRB_COMP_RUN"); // Run Status

    //D1 Baggers Ingersoll Rand MH160 Compressor Variables
    sD1_IR_MH160_Load = TagRead("D1_Ingersoll_Loaded"); // Load Status
    sD1_IR_MH160_Stat = TagRead("D1_Ingersoll_Run"); // Run Status

    //D1 Baggers Kaeser DSD 241 Variables
    sKaeser241_Run_Stat = TagRead("D1_Kaeser_Run_Status"); // Run Status
    sKaeser241_Run_Load = TagRead("D1_Kaeser_Loaded_Status"); // Load Status
    sKaeser241_Run_Idle = TagRead("D1_Kaeser_Idle_Status"); // Idle Status
    sKaeser241_Amps = TagRead("D1_Kaeser_Current"); // Motor Current

    //D1 Baggers Air Receiver Variables
    sD1_Baggers_Air_kpa = TagRead("D1_Baggers_Air_Pressure"); // D1 Baggers Air Receiver Air Pressure

    //Lapping Compressors Variables
    sLapping_VSD_Stat = TagRead("FM_CMPSR31_003_RUN"); // VSD Lapping Compressor Run Status
    sLapping_DOL_Stat = TagRead("FM_CMPSR31_004_RUN"); // DOL Lapping Compressor Run Status

    //Assign the handler for opening the CSV file used for Energy Data Logging
    hDev_DataLog_Shell_Energy = DevOpen("DataLog_ShellEng", 1); // Opens the device "DataLog_ShellEng"

    //If the database file opened successfully and it is not the end of the file,
    //go to the next line for data entry
    IF (hDev_DataLog_Shell_Energy >= 0) THEN // Rev 1 Added bEnable = 1 for logging Control

    WHILE (DevEOF(hDev_DataLog_Shell_Energy) = 0) DO
    DevNext(hDev_DataLog_Shell_Energy);
    END

    //Append database for data entry
    DevAppend(hDev_DataLog_Shell_Energy);

    //Log the Data

    // format file "DataLog_ShellEnergy_Fmt.cii" is the order of {Date,20},{Time,20},{Centac_1_Load,20},{Centac_1_Amps,20},{Centac_1_IGV,20},{Centac_1_Bypass,20} etc etc

    //Date and Time
    DevSetField(hDev_DataLog_Shell_Energy, "Date", Date(2)); // Log Date
    DevSetField(hDev_DataLog_Shell_Energy, "Time", Time(1)); // Log Time

    //Centac # 1 Variables
    DevSetField(hDev_DataLog_Shell_Energy, "Centac_1_Load", sCentac1_Load); // Load Status
    DevSetField(hDev_DataLog_Shell_Energy, "Centac_1_AMPS", sCentac1_Amps); // Motor Current
    DevSetField(hDev_DataLog_Shell_Energy, "Centac_1_IGV", sCentac1_IGV_Pos); // IGV Position %
    DevSetField(hDev_DataLog_Shell_Energy, "Centac_1_BYPASS", sCentac1_Bypass_Pos); // Bypass Position %

    //Centac # 2 Variables
    DevSetField(hDev_DataLog_Shell_Energy, "Centac_2_Load", sCentac2_Load); // Load Status
    DevSetField(hDev_DataLog_Shell_Energy, "Centac_2_AMPS", sCentac2_Amps); // Motor Current
    DevSetField(hDev_DataLog_Shell_Energy, "Centac_2_IGV", sCentac2_IGV_Pos); // IGV Position %
    DevSetField(hDev_DataLog_Shell_Energy, "Centac_2_BYPASS", sCentac2_Bypass_Pos); // Bypass Position %

    //Centac # 3 Variables
    DevSetField(hDev_DataLog_Shell_Energy, "Centac_3_Load", sCentac3_Load); // Load Status
    DevSetField(hDev_DataLog_Shell_Energy, "Centac_3_AMPS", sCentac3_Amps); // Motor Current
    DevSetField(hDev_DataLog_Shell_Energy, "Centac_3_IGV", sCentac3_IGV_Pos); // IGV Position %
    DevSetField(hDev_DataLog_Shell_Energy, "Centac_3_BYPASS", sCentac3_Bypass_Pos); // Bypass Position %


    //Kaeser DSD 281 (Compressor Room) Variables
    DevSetField(hDev_DataLog_Shell_Energy, "Kaeser281_Run_Stat", sKaeser281_Run_Stat); // Run Status
    DevSetField(hDev_DataLog_Shell_Energy, "Kaeser281_Amps", sKaeser281_Amps); // Motor Current

    //Air Dryer (Compressor Room) Variables
    DevSetField(hDev_DataLog_Shell_Energy, "Comp_Room_AirDryer_Run_Stat", sCR_AirDryer_Run_Stat); // Run Status

    //Main Receiver (Compressor Room) Pressure Variables
    DevSetField(hDev_DataLog_Shell_Energy, "Main_Air_kpa", sMain_Air_kpa); // Main Receiver Air Pressure

    //Instrument Air Variables
    DevSetField(hDev_DataLog_Shell_Energy, "Instrument_Air_kpa", sInstrument_Air_kpa); // Intstrument Air Pressure

    //D1 Bagger Air Blast Compressor Variables
    DevSetField(hDev_DataLog_Shell_Energy, "D1BagAirBlast_Stat", sD1BagAirBlast_Stat); // Run Status

    //D1 Baggers Ingersoll Rand MH160 Compressor Variables
    DevSetField(hDev_DataLog_Shell_Energy, "D1_IR_MH160_Load", sD1_IR_MH160_Load); // Load Status
    DevSetField(hDev_DataLog_Shell_Energy, "D1_IR_MH160_Stat", sD1_IR_MH160_Stat); // Run Status

    //D1 Baggers Kaeser DSD 241 Variables
    DevSetField(hDev_DataLog_Shell_Energy, "Kaeser241_Run_Stat", sKaeser241_Run_Stat); // Run Status
    DevSetField(hDev_DataLog_Shell_Energy, "Kaeser241_Run_Load", sKaeser241_Run_Load); // Load Status
    DevSetField(hDev_DataLog_Shell_Energy, "Kaeser241_Run_Idle", sKaeser241_Run_Idle); // Idle Status
    DevSetField(hDev_DataLog_Shell_Energy, "Kaeser241_Amps", sKaeser241_Amps); // Motor Current

    //D1 Baggers Air Receiver Variables
    DevSetField(hDev_DataLog_Shell_Energy, "D1_Baggers_Air_kpa", sD1_Baggers_Air_kpa); // D1 Baggers Air Receiver Air Pressure

    //Lapping Compressors Variables
    DevSetField(hDev_DataLog_Shell_Energy, "Lapping_VSD_Stat", sLapping_VSD_Stat); // VSD Lapping Compressor Run Status
    DevSetField(hDev_DataLog_Shell_Energy, "Lapping_DOL_Stat", sLapping_DOL_Stat); // DOL Lapping Compressor Run Status

    END

    //Close the database file after recording the above data
    DevClose(hDev_DataLog_Shell_Energy, 0);

    Sleep(2);

    //Copy the file to allow viewing access
    FileCopy("\\FIDNDNSRVFIL01\DNDUsers\Process_DataLogging\EnergyForShell\DO_NOT_OPEN_DataLog_Energy.csv",
    "\\FIDNDNSRVFIL01\DNDUsers\Process_DataLogging\EnergyForShell\DataLog_DataLog_Energy_Copy.csv", 0);
    END

    END

    /*

    FUNCTION: Archive_DataLog_EnergyShell

    Author: Alan Hoon - E.I.C.S. Pty Ltd
    Version: Rev 1
    Date: 13th May, 2021
    Revisions: NA

    Called from: Events

    Purpose: Archive Data Logging For "Shell Energy" (Consultants) Audit - Compressed Air
    - Executes ONCE at Midnight

    Commissioning:

    Status: WIP

    Parameters: None

    Arguments:

    */


    FUNCTION
    Archive_DataLog_EnergyShell()

    //Declaring a Date & Time Variables as Strings
    STRING sDate = "";
    STRING sTime = "";

    //Declare the handler for opening the DO_NOT_OPEN_DataLog_Energy CSV File
    INT hDev_DataLog_Shell_Energy;

    IF ServerInfoEx("Report", 0, "Report") = "1" THEN

    Sleep(2);

    //Assigning the Date as a String
    sDate = StrLeft(Date(10), 10);

    //Assigning the Time as a String
    sTime = StrLeft(Time(), 2);

    //Copy the file to create the archive
    FileCopy("\\FIDNDNSRVFIL01\DNDUsers\Process_DataLogging\EnergyForShell\DO_NOT_OPEN_DataLog_Energy.csv",
    "\\FIDNDNSRVFIL01\DNDUsers\Process_DataLogging\EnergyForShell\"+sDate+"_"+sTime+"_DataLog_Energy.csv", 0);

    //Assign the handler for opening the DO_NOT_OPEN_DataLog_Energy CSV File

    hDev_DataLog_Shell_Energy = DevOpen("DataLog_ShellEng", 1); ! DataLog_ShellEng

    //Once opened, ZAP the file (delete all records)
    IF (hDev_DataLog_Shell_Energy >= 0) THEN
    DevZap(hDev_DataLog_Shell_Energy);
    END

    //Go to the next line and prepare for data entry
    DevNext(hDev_DataLog_Shell_Energy);
    DevAppend(hDev_DataLog_Shell_Energy);

    // format file "DataLog_ShellEnergy_Fmt.cii" is the order of {Date,20},{Time,20},{Centac_1_Load,20},{Centac_1_Amps,20},{Centac_1_IGV,20},{Centac_1_Bypass,20} etc etc


    //Record the following headers to the table
    //Date and Time
    DevSetField(hDev_DataLog_Shell_Energy, "Date", "Date"); //Log Date
    DevSetField(hDev_DataLog_Shell_Energy, "Time", "Time"); //Log Time

    //Centac # 1 Variables
    DevSetField(hDev_DataLog_Shell_Energy, "Centac_1_Load", "Centac 1 Load Status"); //Load Status
    DevSetField(hDev_DataLog_Shell_Energy, "Centac_1_AMPS", "Centac 1 Motor Amps"); //Motor Current
    DevSetField(hDev_DataLog_Shell_Energy, "Centac_1_IGV", "Centac 1 IGV (%)"); //IGV Position %
    DevSetField(hDev_DataLog_Shell_Energy, "Centac_1_BYPASS", "Centac 1 Bypass (%)"); //Bypass Position %

    //Centac # 2 Variables
    DevSetField(hDev_DataLog_Shell_Energy, "Centac_2_Load", "Centac 2 Load Status"); //Load Status
    DevSetField(hDev_DataLog_Shell_Energy, "Centac_2_AMPS", "Centac 2 Motor Amps"); //Motor Current
    DevSetField(hDev_DataLog_Shell_Energy, "Centac_2_IGV", "Centac 2 IGV (%)"); //IGV Position %
    DevSetField(hDev_DataLog_Shell_Energy, "Centac_2_BYPASS", "Centac 2 Bypass (%)"); //Bypass Position %

    //Centac # 3 Variables
    DevSetField(hDev_DataLog_Shell_Energy, "Centac_3_Load", "Centac 3 Load Status"); //Load Status
    DevSetField(hDev_DataLog_Shell_Energy, "Centac_3_AMPS", "Centac 3 Motor Amps"); //Motor Current
    DevSetField(hDev_DataLog_Shell_Energy, "Centac_3_IGV", "Centac 3 IGV (%)"); //IGV Position %
    DevSetField(hDev_DataLog_Shell_Energy, "Centac_3_BYPASS", "Centac 3 Bypass (%)"); //Bypass Position %

    //Kaeser DSD 281 (Compressor Room) Variables
    DevSetField(hDev_DataLog_Shell_Energy, "Kaeser281_Run_Stat", "Kaeser 281 Run Status"); // Run Status
    DevSetField(hDev_DataLog_Shell_Energy, "Kaeser281_Amps", "Kaeser 281 Amps"); // Motor Current

    //Air Dryer (Compressor Room) Variables
    DevSetField(hDev_DataLog_Shell_Energy, "Comp_Room_AirDryer_Run_Stat", "Comp Room AirDryer Run Stat"); // Run Status

    //Main Receiver (Compressor Room) Pressure Variables
    DevSetField(hDev_DataLog_Shell_Energy, "Main_Air_kpa", "Main Air kpa"); // Main Receiver Air Pressure

    //Instrument Air Variables
    DevSetField(hDev_DataLog_Shell_Energy, "Instrument_Air_kpa", "Instrument Air kpa"); // Intstrument Air Pressure

    //D1 Bagger Air Blast Compressor Variables
    DevSetField(hDev_DataLog_Shell_Energy, "D1BagAirBlast_Stat", "D1 Bag Air Blast Stat"); // Run Status

    //D1 Baggers Ingersoll Rand MH160 Compressor Variables
    DevSetField(hDev_DataLog_Shell_Energy, "D1_IR_MH160_Load", "D1 Ingersoll MH160 Load"); // Load Status
    DevSetField(hDev_DataLog_Shell_Energy, "D1_IR_MH160_Stat", "D1 Ingersoll MH160 Stat"); // Run Status

    //D1 Baggers Kaeser DSD 241 Variables
    DevSetField(hDev_DataLog_Shell_Energy, "Kaeser241_Run_Stat", "Kaeser 241 Run Stat"); // Run Status
    DevSetField(hDev_DataLog_Shell_Energy, "Kaeser241_Run_Load", "Kaeser 241 Run Load"); // Load Status
    DevSetField(hDev_DataLog_Shell_Energy, "Kaeser241_Run_Idle", "Kaeser 241 Run Idle"); // Idle Status
    DevSetField(hDev_DataLog_Shell_Energy, "Kaeser241_Amps", "Kaeser 241 Amps"); // Motor Current

    //D1 Baggers Air Receiver Variables
    DevSetField(hDev_DataLog_Shell_Energy, "D1_Baggers_Air_kpa", "D1 Baggers Air kpa"); // D1 Baggers Air Receiver Air Pressure

    //Lapping Compressors Variables
    DevSetField(hDev_DataLog_Shell_Energy, "Lapping_VSD_Stat", "Lapping VSD Stat"); // VSD Lapping Compressor Run Status
    DevSetField(hDev_DataLog_Shell_Energy, "Lapping_DOL_Stat", "Lapping DOL Stat"); // DOL Lapping Compressor Run Status





    //Close the CSV File
    DevClose(hDev_DataLog_Shell_Energy, 0);

    Sleep(2);

    //Copy the file
    FileCopy("\\FIDNDNSRVFIL01\DNDUsers\Process_DataLogging\EnergyForShell\DO_NOT_OPEN_DataLog_Energy.csv",
    "\\FIDNDNSRVFIL01\DNDUsers\Process_DataLogging\EnergyForShell\DataLog_DataLog_Energy_Copy.csv", 0);

    END

    END
Reply
  • Hi Eric,

    please see cicode below.

    i also have another issue as my device stops logging intermittantly ? i have redundant server config hence the code

    IF ServerInfoEx("Report", 0, "Report") = "1" THEN

    Regards
    Alan


    ============================================================================

    /*

    FUNCTION: DataLog_EnergyShell

    Author: Alan Hoon - E.I.C.S. Pty Ltd
    Version: Rev 1
    Date: 13th May, 2021
    Revisions: Rev 1 - added logging enable based on date period 18/05/2021

    Called from: Events

    Purpose: Temporary Data Logging For "Shell Energy" (Consultants) Audit - Compressed Air

    Commissioning:

    Status: WIP

    Parameters: None

    Arguments:

    */

    FUNCTION
    DataLog_EnergyShell()

    // Declare the date period for looging and "Enable" Bit for the duration required based on Date - Rev 1 (WIP)
    STRING sCurrent_Date = ""; // Current Date
    STRING sStart_Date = ""; // Start Date of logging period
    STRING sEnd_Date = ""; // End Date of logging period
    INT bEnable = 0; // Enable Logging

    //Initialising Centac # 1 Variables
    STRING sCentac1_Load = ""; // Load Status
    STRING sCentac1_Amps = ""; // Motor Current
    STRING sCentac1_IGV_Pos = ""; // IGV Position %
    STRING sCentac1_Bypass_Pos = ""; // Bypass Position %

    //Initialising Centac # 2 Variables
    STRING sCentac2_Load = ""; // Load Status
    STRING sCentac2_Amps = ""; // Motor Current
    STRING sCentac2_IGV_Pos = ""; // IGV Position %
    STRING sCentac2_Bypass_Pos = ""; // Bypass Position %

    //Initialising Centac # 3 Variables
    STRING sCentac3_Load = ""; // Load Status
    STRING sCentac3_Amps = ""; // Motor Current
    STRING sCentac3_IGV_Pos = ""; // IGV Position %
    STRING sCentac3_Bypass_Pos = ""; // Bypass Position %

    //Initialising Kaeser DSD 281 (Compressor Room) Variables
    STRING sKaeser281_Run_Stat = ""; // Run Status
    STRING sKaeser281_Amps = ""; // Motor Current

    //Initialising Air Dryer (Compressor Room) Variables
    STRING sCR_AirDryer_Run_Stat = ""; // Run Status

    //Initialising Main Receiver (Compressor Room) Pressure Variables
    STRING sMain_Air_kpa = ""; // Main Receiver Air Pressure

    //Initialising Instrument Air Variables
    STRING sInstrument_Air_kpa = ""; // Intstrument Air Pressure

    //Initialising D1 Bagger Air Blast Compressor Variables
    STRING sD1BagAirBlast_Stat = ""; // Run Status

    //Initialising D1 Baggers Ingersoll Rand MH160 Compressor Variables
    STRING sD1_IR_MH160_Load = ""; // Load Status
    STRING sD1_IR_MH160_Stat = ""; // Run Status

    //Initialising D1 Baggers Kaeser DSD 241 Variables
    STRING sKaeser241_Run_Stat = ""; // Run Status
    STRING sKaeser241_Run_Load = ""; // Load Status
    STRING sKaeser241_Run_Idle = ""; // Idle Status
    STRING sKaeser241_Amps = ""; // Motor Current

    //Initialising D1 Baggers Air Receiver Variables
    STRING sD1_Baggers_Air_kpa = ""; // D1 Baggers Air Receiver Air Pressure

    //Initialising Lapping Compressors Variables
    STRING sLapping_VSD_Stat = ""; // VSD Lapping Compressor Run Status
    STRING sLapping_DOL_Stat = ""; // DOL Lapping Compressor Run Status

    //Declare the handler for opening the CSV file used for "Shell Energy" Data Logging
    INT hDev_DataLog_Shell_Energy;

    /**

    Requires Work - Rev 1 (WIP)

    //Date and Enable Variables - Rev 1
    sCurrent_Date = Date(2); // (2) - Short date format, dd/mm/yy.
    ! sStart_Date = "18/05/21"; // Start Date of logging period (Future Use)
    sEnd_Date = "02/06/21"; // End Date of logging period

    bEnable = 0; // Ensure Logging is NOT Enabled before running date code

    // Check if the Date is any of the below Dates and NOT sEnd_Date and if so set bEnable = 1

    **/ /**

    IF ((sCurrent_Date = "18/05/21") OR (sCurrent_Date = "19/05/21") OR (sCurrent_Date = "20/05/21") OR (sCurrent_Date = "21/05/21") OR (sCurrent_Date = "22/05/21") OR (sCurrent_Date = "23/05/21")
    OR (sCurrent_Date = "24/05/21") OR (sCurrent_Date = "25/05/21") OR (sCurrent_Date = "26/05/21") OR (sCurrent_Date = "27/05/21") OR (sCurrent_Date = "28/05/21") OR (sCurrent_Date = "29/05/21")
    OR (sCurrent_Date = "30/05/21") OR (sCurrent_Date = "31/05/21") OR (sCurrent_Date = "01/06/21")) THEN // Start logging at these dates
    bEnable = 1; // enable logging
    END

    IF (sCurrent_Date = sEnd_Date) THEN // Stop logging at this date - Reset bEnable
    bEnable = 0;
    END

    // bEnable = 1; // "Needs placement in key Area's"
    **/

    IF ServerInfoEx("Report", 0, "Report") = "1" THEN


    //Centac # 1 Variables
    sCentac1_Load = TagRead("CR_Centac_1_Load_Status"); //Load Status
    sCentac1_Amps = TagRead("CR_Centac_1_AMPS"); //Motor Current
    sCentac1_IGV_Pos = TagRead("CR_Centac_1_IGV_POS"); //IGV Position %
    sCentac1_Bypass_Pos = TagRead("CR_Centac_1_BYPASS_POS"); //Bypass Position %

    //Centac # 2 Variables
    sCentac2_Load = TagRead("CR_Centac_2_Load_Status"); //Load Status
    sCentac2_Amps = TagRead("CR_Centac_2_AMPS"); //Motor Current
    sCentac2_IGV_Pos = TagRead("CR_Centac_2_IGV_POS"); //IGV Position %
    sCentac2_Bypass_Pos = TagRead("CR_Centac_2_BYPASS_POS"); //Bypass Position %

    //Centac # 3 Variables
    sCentac3_Load = TagRead("CR_Centac_3_Load_Status"); //Load Status
    sCentac3_Amps = TagRead("CR_Centac_3_AMPS"); //Motor Current
    sCentac3_IGV_Pos = TagRead("CR_Centac_3_IGV_POS"); //IGV Position %
    sCentac3_Bypass_Pos = TagRead("CR_Centac_3_BYPASS_POS"); //Bypass Position %

    //Kaeser DSD 281 (Compressor Room) Variables
    sKaeser281_Run_Stat = TagRead("CR_Kaeser_Run_Status"); // Run Status
    sKaeser281_Amps = TagRead("CR_Kaeser_AMPS"); // Motor Current

    //Air Dryer (Compressor Room) Variables
    sCR_AirDryer_Run_Stat = TagRead("CR_Air_Drier_Comp_Run_Status"); // Run Status

    //Main Receiver (Compressor Room) Pressure Variables
    sMain_Air_kpa = TagRead("CR_Main_Pressure_Kpa"); // Main Receiver Air Pressure

    //Instrument Air Variables
    sInstrument_Air_kpa = TagRead("FN_INSTRAIR_PV"); // Intstrument Air Pressure

    //D1 Bagger Air Blast Compressor Variables
    sD1BagAirBlast_Stat = TagRead("PL_D1BAGR_AIRB_COMP_RUN"); // Run Status

    //D1 Baggers Ingersoll Rand MH160 Compressor Variables
    sD1_IR_MH160_Load = TagRead("D1_Ingersoll_Loaded"); // Load Status
    sD1_IR_MH160_Stat = TagRead("D1_Ingersoll_Run"); // Run Status

    //D1 Baggers Kaeser DSD 241 Variables
    sKaeser241_Run_Stat = TagRead("D1_Kaeser_Run_Status"); // Run Status
    sKaeser241_Run_Load = TagRead("D1_Kaeser_Loaded_Status"); // Load Status
    sKaeser241_Run_Idle = TagRead("D1_Kaeser_Idle_Status"); // Idle Status
    sKaeser241_Amps = TagRead("D1_Kaeser_Current"); // Motor Current

    //D1 Baggers Air Receiver Variables
    sD1_Baggers_Air_kpa = TagRead("D1_Baggers_Air_Pressure"); // D1 Baggers Air Receiver Air Pressure

    //Lapping Compressors Variables
    sLapping_VSD_Stat = TagRead("FM_CMPSR31_003_RUN"); // VSD Lapping Compressor Run Status
    sLapping_DOL_Stat = TagRead("FM_CMPSR31_004_RUN"); // DOL Lapping Compressor Run Status

    //Assign the handler for opening the CSV file used for Energy Data Logging
    hDev_DataLog_Shell_Energy = DevOpen("DataLog_ShellEng", 1); // Opens the device "DataLog_ShellEng"

    //If the database file opened successfully and it is not the end of the file,
    //go to the next line for data entry
    IF (hDev_DataLog_Shell_Energy >= 0) THEN // Rev 1 Added bEnable = 1 for logging Control

    WHILE (DevEOF(hDev_DataLog_Shell_Energy) = 0) DO
    DevNext(hDev_DataLog_Shell_Energy);
    END

    //Append database for data entry
    DevAppend(hDev_DataLog_Shell_Energy);

    //Log the Data

    // format file "DataLog_ShellEnergy_Fmt.cii" is the order of {Date,20},{Time,20},{Centac_1_Load,20},{Centac_1_Amps,20},{Centac_1_IGV,20},{Centac_1_Bypass,20} etc etc

    //Date and Time
    DevSetField(hDev_DataLog_Shell_Energy, "Date", Date(2)); // Log Date
    DevSetField(hDev_DataLog_Shell_Energy, "Time", Time(1)); // Log Time

    //Centac # 1 Variables
    DevSetField(hDev_DataLog_Shell_Energy, "Centac_1_Load", sCentac1_Load); // Load Status
    DevSetField(hDev_DataLog_Shell_Energy, "Centac_1_AMPS", sCentac1_Amps); // Motor Current
    DevSetField(hDev_DataLog_Shell_Energy, "Centac_1_IGV", sCentac1_IGV_Pos); // IGV Position %
    DevSetField(hDev_DataLog_Shell_Energy, "Centac_1_BYPASS", sCentac1_Bypass_Pos); // Bypass Position %

    //Centac # 2 Variables
    DevSetField(hDev_DataLog_Shell_Energy, "Centac_2_Load", sCentac2_Load); // Load Status
    DevSetField(hDev_DataLog_Shell_Energy, "Centac_2_AMPS", sCentac2_Amps); // Motor Current
    DevSetField(hDev_DataLog_Shell_Energy, "Centac_2_IGV", sCentac2_IGV_Pos); // IGV Position %
    DevSetField(hDev_DataLog_Shell_Energy, "Centac_2_BYPASS", sCentac2_Bypass_Pos); // Bypass Position %

    //Centac # 3 Variables
    DevSetField(hDev_DataLog_Shell_Energy, "Centac_3_Load", sCentac3_Load); // Load Status
    DevSetField(hDev_DataLog_Shell_Energy, "Centac_3_AMPS", sCentac3_Amps); // Motor Current
    DevSetField(hDev_DataLog_Shell_Energy, "Centac_3_IGV", sCentac3_IGV_Pos); // IGV Position %
    DevSetField(hDev_DataLog_Shell_Energy, "Centac_3_BYPASS", sCentac3_Bypass_Pos); // Bypass Position %


    //Kaeser DSD 281 (Compressor Room) Variables
    DevSetField(hDev_DataLog_Shell_Energy, "Kaeser281_Run_Stat", sKaeser281_Run_Stat); // Run Status
    DevSetField(hDev_DataLog_Shell_Energy, "Kaeser281_Amps", sKaeser281_Amps); // Motor Current

    //Air Dryer (Compressor Room) Variables
    DevSetField(hDev_DataLog_Shell_Energy, "Comp_Room_AirDryer_Run_Stat", sCR_AirDryer_Run_Stat); // Run Status

    //Main Receiver (Compressor Room) Pressure Variables
    DevSetField(hDev_DataLog_Shell_Energy, "Main_Air_kpa", sMain_Air_kpa); // Main Receiver Air Pressure

    //Instrument Air Variables
    DevSetField(hDev_DataLog_Shell_Energy, "Instrument_Air_kpa", sInstrument_Air_kpa); // Intstrument Air Pressure

    //D1 Bagger Air Blast Compressor Variables
    DevSetField(hDev_DataLog_Shell_Energy, "D1BagAirBlast_Stat", sD1BagAirBlast_Stat); // Run Status

    //D1 Baggers Ingersoll Rand MH160 Compressor Variables
    DevSetField(hDev_DataLog_Shell_Energy, "D1_IR_MH160_Load", sD1_IR_MH160_Load); // Load Status
    DevSetField(hDev_DataLog_Shell_Energy, "D1_IR_MH160_Stat", sD1_IR_MH160_Stat); // Run Status

    //D1 Baggers Kaeser DSD 241 Variables
    DevSetField(hDev_DataLog_Shell_Energy, "Kaeser241_Run_Stat", sKaeser241_Run_Stat); // Run Status
    DevSetField(hDev_DataLog_Shell_Energy, "Kaeser241_Run_Load", sKaeser241_Run_Load); // Load Status
    DevSetField(hDev_DataLog_Shell_Energy, "Kaeser241_Run_Idle", sKaeser241_Run_Idle); // Idle Status
    DevSetField(hDev_DataLog_Shell_Energy, "Kaeser241_Amps", sKaeser241_Amps); // Motor Current

    //D1 Baggers Air Receiver Variables
    DevSetField(hDev_DataLog_Shell_Energy, "D1_Baggers_Air_kpa", sD1_Baggers_Air_kpa); // D1 Baggers Air Receiver Air Pressure

    //Lapping Compressors Variables
    DevSetField(hDev_DataLog_Shell_Energy, "Lapping_VSD_Stat", sLapping_VSD_Stat); // VSD Lapping Compressor Run Status
    DevSetField(hDev_DataLog_Shell_Energy, "Lapping_DOL_Stat", sLapping_DOL_Stat); // DOL Lapping Compressor Run Status

    END

    //Close the database file after recording the above data
    DevClose(hDev_DataLog_Shell_Energy, 0);

    Sleep(2);

    //Copy the file to allow viewing access
    FileCopy("\\FIDNDNSRVFIL01\DNDUsers\Process_DataLogging\EnergyForShell\DO_NOT_OPEN_DataLog_Energy.csv",
    "\\FIDNDNSRVFIL01\DNDUsers\Process_DataLogging\EnergyForShell\DataLog_DataLog_Energy_Copy.csv", 0);
    END

    END

    /*

    FUNCTION: Archive_DataLog_EnergyShell

    Author: Alan Hoon - E.I.C.S. Pty Ltd
    Version: Rev 1
    Date: 13th May, 2021
    Revisions: NA

    Called from: Events

    Purpose: Archive Data Logging For "Shell Energy" (Consultants) Audit - Compressed Air
    - Executes ONCE at Midnight

    Commissioning:

    Status: WIP

    Parameters: None

    Arguments:

    */


    FUNCTION
    Archive_DataLog_EnergyShell()

    //Declaring a Date & Time Variables as Strings
    STRING sDate = "";
    STRING sTime = "";

    //Declare the handler for opening the DO_NOT_OPEN_DataLog_Energy CSV File
    INT hDev_DataLog_Shell_Energy;

    IF ServerInfoEx("Report", 0, "Report") = "1" THEN

    Sleep(2);

    //Assigning the Date as a String
    sDate = StrLeft(Date(10), 10);

    //Assigning the Time as a String
    sTime = StrLeft(Time(), 2);

    //Copy the file to create the archive
    FileCopy("\\FIDNDNSRVFIL01\DNDUsers\Process_DataLogging\EnergyForShell\DO_NOT_OPEN_DataLog_Energy.csv",
    "\\FIDNDNSRVFIL01\DNDUsers\Process_DataLogging\EnergyForShell\"+sDate+"_"+sTime+"_DataLog_Energy.csv", 0);

    //Assign the handler for opening the DO_NOT_OPEN_DataLog_Energy CSV File

    hDev_DataLog_Shell_Energy = DevOpen("DataLog_ShellEng", 1); ! DataLog_ShellEng

    //Once opened, ZAP the file (delete all records)
    IF (hDev_DataLog_Shell_Energy >= 0) THEN
    DevZap(hDev_DataLog_Shell_Energy);
    END

    //Go to the next line and prepare for data entry
    DevNext(hDev_DataLog_Shell_Energy);
    DevAppend(hDev_DataLog_Shell_Energy);

    // format file "DataLog_ShellEnergy_Fmt.cii" is the order of {Date,20},{Time,20},{Centac_1_Load,20},{Centac_1_Amps,20},{Centac_1_IGV,20},{Centac_1_Bypass,20} etc etc


    //Record the following headers to the table
    //Date and Time
    DevSetField(hDev_DataLog_Shell_Energy, "Date", "Date"); //Log Date
    DevSetField(hDev_DataLog_Shell_Energy, "Time", "Time"); //Log Time

    //Centac # 1 Variables
    DevSetField(hDev_DataLog_Shell_Energy, "Centac_1_Load", "Centac 1 Load Status"); //Load Status
    DevSetField(hDev_DataLog_Shell_Energy, "Centac_1_AMPS", "Centac 1 Motor Amps"); //Motor Current
    DevSetField(hDev_DataLog_Shell_Energy, "Centac_1_IGV", "Centac 1 IGV (%)"); //IGV Position %
    DevSetField(hDev_DataLog_Shell_Energy, "Centac_1_BYPASS", "Centac 1 Bypass (%)"); //Bypass Position %

    //Centac # 2 Variables
    DevSetField(hDev_DataLog_Shell_Energy, "Centac_2_Load", "Centac 2 Load Status"); //Load Status
    DevSetField(hDev_DataLog_Shell_Energy, "Centac_2_AMPS", "Centac 2 Motor Amps"); //Motor Current
    DevSetField(hDev_DataLog_Shell_Energy, "Centac_2_IGV", "Centac 2 IGV (%)"); //IGV Position %
    DevSetField(hDev_DataLog_Shell_Energy, "Centac_2_BYPASS", "Centac 2 Bypass (%)"); //Bypass Position %

    //Centac # 3 Variables
    DevSetField(hDev_DataLog_Shell_Energy, "Centac_3_Load", "Centac 3 Load Status"); //Load Status
    DevSetField(hDev_DataLog_Shell_Energy, "Centac_3_AMPS", "Centac 3 Motor Amps"); //Motor Current
    DevSetField(hDev_DataLog_Shell_Energy, "Centac_3_IGV", "Centac 3 IGV (%)"); //IGV Position %
    DevSetField(hDev_DataLog_Shell_Energy, "Centac_3_BYPASS", "Centac 3 Bypass (%)"); //Bypass Position %

    //Kaeser DSD 281 (Compressor Room) Variables
    DevSetField(hDev_DataLog_Shell_Energy, "Kaeser281_Run_Stat", "Kaeser 281 Run Status"); // Run Status
    DevSetField(hDev_DataLog_Shell_Energy, "Kaeser281_Amps", "Kaeser 281 Amps"); // Motor Current

    //Air Dryer (Compressor Room) Variables
    DevSetField(hDev_DataLog_Shell_Energy, "Comp_Room_AirDryer_Run_Stat", "Comp Room AirDryer Run Stat"); // Run Status

    //Main Receiver (Compressor Room) Pressure Variables
    DevSetField(hDev_DataLog_Shell_Energy, "Main_Air_kpa", "Main Air kpa"); // Main Receiver Air Pressure

    //Instrument Air Variables
    DevSetField(hDev_DataLog_Shell_Energy, "Instrument_Air_kpa", "Instrument Air kpa"); // Intstrument Air Pressure

    //D1 Bagger Air Blast Compressor Variables
    DevSetField(hDev_DataLog_Shell_Energy, "D1BagAirBlast_Stat", "D1 Bag Air Blast Stat"); // Run Status

    //D1 Baggers Ingersoll Rand MH160 Compressor Variables
    DevSetField(hDev_DataLog_Shell_Energy, "D1_IR_MH160_Load", "D1 Ingersoll MH160 Load"); // Load Status
    DevSetField(hDev_DataLog_Shell_Energy, "D1_IR_MH160_Stat", "D1 Ingersoll MH160 Stat"); // Run Status

    //D1 Baggers Kaeser DSD 241 Variables
    DevSetField(hDev_DataLog_Shell_Energy, "Kaeser241_Run_Stat", "Kaeser 241 Run Stat"); // Run Status
    DevSetField(hDev_DataLog_Shell_Energy, "Kaeser241_Run_Load", "Kaeser 241 Run Load"); // Load Status
    DevSetField(hDev_DataLog_Shell_Energy, "Kaeser241_Run_Idle", "Kaeser 241 Run Idle"); // Idle Status
    DevSetField(hDev_DataLog_Shell_Energy, "Kaeser241_Amps", "Kaeser 241 Amps"); // Motor Current

    //D1 Baggers Air Receiver Variables
    DevSetField(hDev_DataLog_Shell_Energy, "D1_Baggers_Air_kpa", "D1 Baggers Air kpa"); // D1 Baggers Air Receiver Air Pressure

    //Lapping Compressors Variables
    DevSetField(hDev_DataLog_Shell_Energy, "Lapping_VSD_Stat", "Lapping VSD Stat"); // VSD Lapping Compressor Run Status
    DevSetField(hDev_DataLog_Shell_Energy, "Lapping_DOL_Stat", "Lapping DOL Stat"); // DOL Lapping Compressor Run Status





    //Close the CSV File
    DevClose(hDev_DataLog_Shell_Energy, 0);

    Sleep(2);

    //Copy the file
    FileCopy("\\FIDNDNSRVFIL01\DNDUsers\Process_DataLogging\EnergyForShell\DO_NOT_OPEN_DataLog_Energy.csv",
    "\\FIDNDNSRVFIL01\DNDUsers\Process_DataLogging\EnergyForShell\DataLog_DataLog_Energy_Copy.csv", 0);

    END

    END
Children
No Data