Объявление

Свернуть
Пока нет объявлений.

Проверка наличия USB-накопителя в ПЛК-50

Свернуть
X
 
  • Фильтр
  • Время
  • Показать
Очистить всё
новые сообщения

  • Проверка наличия USB-накопителя в ПЛК-50

    Есть ли какой-то способ проверки того, что USB-накопитель смонтирован?
    Согласно документации флешка монтируется в "/run/media/sda". И действительно, смотрю с помощью WinSCP, втыкаю USB-накопитель, в "/run/media" появляется папка "sda". Соответственно вынимаю накопитель - папка пропадает.
    Сделал небольшую программу определения наличия папки на виртуальном контроллере (CODESYS Control Win V3), используя библиотеку CAA File и на основе примеров оттуда.
    Код:
    PROGRAM DirectoryExists
    VAR
      xDirInit: BOOL := FALSE;
      sDirNewName: CAA.FILENAME:='c:/TestDirectory';//'/run/media/sda';
      DirectoryOpen: FILE.DirOpen;
      DirectoryOpenDone: BOOL;
      DirectoryExists: BOOL;
    END_VAR
    
    IF NOT xDirInit THEN
      DirectoryOpen( xExecute:=FALSE);
      xDirInit:=TRUE;
      DirectoryOpenDone := FALSE;
    ELSE
    IF NOT DirectoryOpenDone THEN
      DirectoryOpen.sDirName:=sDirNewName;
      DirectoryOpen( xExecute:=TRUE);
      IF DirectoryOpen.xDone THEN
        DirectoryOpenDone := TRUE;
        DirectoryExists := TRUE;
      END_IF
      IF DirectoryOpen.xError THEN
        DirectoryOpenDone := TRUE;
        DirectoryExists := FALSE;
      END_IF
    END_IF
      IF DirectoryOpenDone THEN
        xDirInit := FALSE;
      END_IF
    END_IF
    На виртуальном контроллере данный код сработал. Чётко определяется наличие/отсутствие 'c:/TestDirectory'.
    Перенёс данный код на "Agava PLC-40/50 TV+WV". И тут уже проверяю наличие/отсутствие '/run/media/sda'. Вставляю USB-накопитель - DirectoryExists=TRUE. Вынимаю USB-накопитель - '/run/media/sda' не пропадает. Снова вставляю флешку, появляется папка '/run/media/sdb' с содержимым флешки. Такое впечатление, что папка "удерживается" DirectoryOpen. Пробовал делать DirectoryClose - не помогло, да и логика программы сильно усложнилась.
    Собственно вопрос в начале топика. Есть ли более простой способ (библиотека) проверки наличия смонтированного USB-накопителя, как это сделано у OWEN?

  • #2
    Простого способа или готовой библиотеки на подобие как у OWEN в данный момент нет, появится в скором времени.
    Для определения наличия нужного каталога необходимо использовать ФБ DirList из биб-ки CAA File. Перед этим необходимо использовать ФБ DirOpen, открыть необходимый каталог, а именно /run/media/ далее получить успешный статус открытия директории xDone, а также получить handle открытой директории, после завершения работы блока DirList, необходимо освободить дескриптор открытой директории перед извлечением накопителя с помощью DirClose.

    В Вашем случае, после открытия каталога и извлечении накопителя, дескриптор открытого каталога полученный ФБ DirOpen остается открытым, поэтому когда накопитель извлечен каталог продолжает существовать, после того как открыли каталог и скопировали данные из накопителя, следующим шагом нужно освободить дескриптор открытого каталога.

    например так

    fbDirClose(xExecute:=TRUE, hDir:= hDirHandle);
    if fbDirClose.xError then
    fbDirClose(xExecute:=FALSE);
    iStep := 5;
    end_if

    if fbDirClose.xDone then
    fbDirClose(xExecute:=FALSE);
    iStep := 5;
    end_if

    Вам желательно сделать ФБ сканирования через инструкцию CASE, далее по шагам выполнить весь список требуемых операций

    1. открыть каталог, получить дескриптор(hDirHandle)
    2. запустить блок dirList и дождаться успешного результата его выполнения(сформировать массив найденных вложенных каталогов). Завершить работу блока dirList, и перейти на сл.шаг.
    3. закрыть каталог используя DirClose, получить успешное завершение блока, завершить выполнение ФБ сканирования извлечь накопитель.

    Комментарий


    • #3
      Сделал вот так проверку на подключение USB, если кому-то интересно. Работает. Посмотрите, критика приветствуется.

      Комментарий


      • #4
        Сообщение от Selya Посмотреть сообщение
        Сделал вот так проверку на подключение USB, если кому-то интересно. Работает. Посмотрите, критика приветствуется.
        поменял sda на sda1 и заработало.

        Комментарий

        Обработка...
        X