Сообщение от Selya
Посмотреть сообщение
Объявление
Свернуть
Пока нет объявлений.
Проверка наличия USB-накопителя в ПЛК-50
Свернуть
В этой теме есть сообщения, помеченные как ответы.
X
X
-
Простого способа или готовой библиотеки на подобие как у 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, получить успешное завершение блока, завершить выполнение ФБ сканирования извлечь накопитель.
- 1 нравится
Прокомментировать:
-
Проверка наличия USB-накопителя в ПЛК-50
Есть ли какой-то способ проверки того, что USB-накопитель смонтирован?
Согласно документации флешка монтируется в "/run/media/sda". И действительно, смотрю с помощью WinSCP, втыкаю USB-накопитель, в "/run/media" появляется папка "sda". Соответственно вынимаю накопитель - папка пропадает.
Сделал небольшую программу определения наличия папки на виртуальном контроллере (CODESYS Control Win V3), используя библиотеку CAA File и на основе примеров оттуда.
На виртуальном контроллере данный код сработал. Чётко определяется наличие/отсутствие 'c:/TestDirectory'.Код: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
Перенёс данный код на "Agava PLC-40/50 TV+WV". И тут уже проверяю наличие/отсутствие '/run/media/sda'. Вставляю USB-накопитель - DirectoryExists=TRUE. Вынимаю USB-накопитель - '/run/media/sda' не пропадает. Снова вставляю флешку, появляется папка '/run/media/sdb' с содержимым флешки. Такое впечатление, что папка "удерживается" DirectoryOpen. Пробовал делать DirectoryClose - не помогло, да и логика программы сильно усложнилась.
Собственно вопрос в начале топика. Есть ли более простой способ (библиотека) проверки наличия смонтированного USB-накопителя, как это сделано у OWEN?Метки: Нет

Прокомментировать: