Показано с 1 по 3 из 3

Тема: Скрипт архивирование на USB (панель СП3хх)

  1. #1

    По умолчанию Скрипт архивирование на USB (панель СП3хх)

    Добрый день! На основе примера Евгения Кислова переделываю скрипт под свои нужды.
    Задача состоит в том чтобы имя файла формировалось с помощью функции snprintf и состояло из даты и времени формата ддммггггччммсс.csv
    snprintf(filename,(FILENAMESIZE+1), "%02d%02d%04d%02d%02d%02d.csv", wDay, wMonth, wYear, wHour, wMinute, wSecond);
    Происходит ошибка открытия файла. Друзья, что у меня не верно? Если ли ошибка в длине имени файла FILENAMESIZE = 18?



    // e.kislov@owen.ru

    // DECLARATION PART

    #define BUFSIZE 80
    #define TITLESIZE 100
    #define FILENAMESIZE 18


    #define LF 0x0A
    #define CR 0x0D

    char acBuffer[BUFSIZE]; // buffer for archive entry
    char acTitle[TITLESIZE]; // buffer for title entry

    FILE *ptrFile; // pointer to file

    WORD wYear; // system date-time
    WORD wMonth;
    WORD wDay;
    WORD wHour;
    WORD wMinute;
    WORD wSecond;

    float fVoltage; // variable for arhcive (float)
    float fCurrent; // variable for arhcive (float)
    float fTemp; // variable for arhcive (float)

    char filename[FILENAMESIZE];

    // END_DECLARATION



    // MACRO_ARCHIVE

    // get data for archive to macro
    fVoltage = *(float*)(PSW+256);
    fCurrent = *(float*)(PSW+258);
    fTemp = *(float*)(PSW+260);

    // get system date-time and convert it from BCD to DEC
    wYear = 2000 + (LOBYTE(PSW[30]) / 16) * 10 + LOBYTE(PSW[30]) % 16;
    wMonth = (PSW[31] / 16) * 10 + PSW[31] % 16;
    wDay = (PSW[32] / 16) * 10 + PSW[32] % 16;
    wHour = (PSW[33] / 16) * 10 + PSW[33] % 16;
    wMinute = (PSW[34] / 16) * 10 + PSW[34] % 16;
    wSecond = (PSW[35] / 16) * 10 + PSW[35] % 16;

    if (PSW[312]==1)
    {
    Reads(HMI_LOCAL_MCH, 0, TYPE_PSW, 316, FILENAMESIZE/2, &filename);
    }
    else
    {
    //open file, choose your name as you wish (no CAPS, no space, no keywords, no signs (like _), no russian letters)
    snprintf(filename,(FILENAMESIZE+1), "%02d%02d%04d%02d%02d%02d.csv", wDay, wMonth, wYear, wHour, wMinute, wSecond);

    //Write filename to register
    Writes(HMI_LOCAL_MCH, 0, TYPE_PSW, 316, FILENAMESIZE/2, &filename);
    }

    ptrFile = fopen(filename, "w");

    if(ptrFile==NULL)
    {
    PSW[310]=1; // no USB, create warning message
    }
    else
    {
    PSW[310]=2; // USB detected, create inform message

    if ( PSW[312]==0 ) // no title, we need to write it once
    {
    // create title as format string
    // use ASCII-codes (Win1251) for russian letters
    // choose your text and format as you wish
    snprintf(acTitle, (TITLESIZE-1), "Log file;%c%c%c%c%c%c%c%c;%c%c%c%c%c;Voltage;Current;T emperature;%c%c",
    CR, LF, CR, LF, 0xC4, 0xE0, 0xF2, 0xE0, 0xC2, 0xF0, 0xE5, 0xEC, 0xFF, CR, LF);

    // write title to file
    fwrite(acTitle, 1, strlen(acTitle), ptrFile);

    PSW[312]=1; // this way we will not write title anymore
    PSW[314]=PSW[314]+strlen(acTitle);// move position for next writing
    //WriteToPFW_DW(400, GetPFW(400)+strlen(acTitle)); // move position for next writing
    }

    // now we need to write archive data in file

    // move position for writing in file
    fseek(ptrFile, PSW[314], SEEK_SET);

    // convert your archive data to format string
    // use ASCII-codes (Win1251) for russian letters
    // choose your data and format as you wish
    snprintf(acBuffer, (BUFSIZE-1), "%02d.%02d.%04d;%02d:%02d:%02d;%.2f;%.2f;%.0f;%c%c ",
    wDay, wMonth, wYear, wHour, wMinute, wSecond, fVoltage, fCurrent, fTemp, CR, LF);

    // write data to file
    fwrite(acBuffer, 1, strlen(acBuffer), ptrFile);

    // close file
    fclose(ptrFile);

    // move position for next writing
    PSW[314] = PSW[314]+strlen(acBuffer);

    }

    // END_MACRO_ARCHIVE

  2. #2

    По умолчанию

    Друзья, в общем похоже всё дело в том, что имя файла длиннее 8 символов не поддерживаются. Имя в 8 символов записывается нормально. Можно что-то сделать для того чтобы сохранить длинное имя?

  3. #3
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,064

    По умолчанию

    Цитата Сообщение от akphantom Посмотреть сообщение
    Друзья, в общем похоже всё дело в том, что имя файла длиннее 8 символов не поддерживаются. Имя в 8 символов записывается нормально. Можно что-то сделать для того чтобы сохранить длинное имя?
    Добрый день.
    Действительно, имя файла ограничено 8 символами (не включая формат). Сделать с этим ничего нельзя.

Похожие темы

  1. Скрипт
    от BSA в разделе Master SCADA 3
    Ответов: 26
    Последнее сообщение: 04.04.2019, 13:23
  2. Панель СП3хх
    от Р.Александр в разделе Панели оператора (HMI)
    Ответов: 20
    Последнее сообщение: 16.08.2018, 19:28
  3. Скрипт MasterScada
    от Straik в разделе Master SCADA 3
    Ответов: 1
    Последнее сообщение: 18.03.2018, 20:18
  4. Экон134 и панель сп3хх
    от Aleksandr в разделе Эксплуатация
    Ответов: 6
    Последнее сообщение: 17.03.2016, 08:53
  5. С-скрипт документация
    от Falvik в разделе Master SCADA 3
    Ответов: 1
    Последнее сообщение: 18.03.2014, 11:56

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •