PDA

Просмотр полной версии : Использование библиотеки CAA.File для доступа к файлам через FTP и HTTP



porada
15.01.2016, 18:07
В хэлпе Codesys о библиотеке CAA.File написано, что CAA.FILENAME кроме обычных путей может быть указано и в виде:

Complete path specification for a file on a FTP Server: ftp://<user>:<passwd>@<ip-addr>[:<port>]/home/user/Test.txt
Complete path specification for a file on a HTTP Server: http://<ip-addr>[:<port>]/dir/Test.txt

Я пробовал различные варианты с FTP, и читать и создавать, но FILE.Open всегда возвращает eError= NOT_EXIST (5104 insert lib standardized errors here). В отличие от прочих описанных в библиотеке стандартных для файловых систем ошибок, комментарий к этой я бы перевел как "Прочая_ошибка" (хотя среди ошибок есть и отдельная ERROR_UNKNOWN).

Подозрительно так же, что среди зависимостей CAA.File нет сетевых библиотек. Есть только SysFile, но что-то слабо верится что FTP пути напрямую должны туда передаваться, тем более, что параметр szFile для SysFileOpen описан практически как в MS-DOS.

Потому вопрос:
Был ли у кого-нибудь положительный опыт с FTP\HTTP?
Насколько можно верить тому что написано в хэлпе Codesys?
Каким макаром можно прояснить вопрос у разработчиков системных библиотек (есть ли смысл обращаться через PК Пролог или они как всегда бесполезны в подобных вопросах?)

sa_mut
19.04.2017, 07:34
Присоединяюсь к вопросу. Кто может подсказать листинг для открытия файла на ftp-сервере.

porada
19.04.2017, 15:20
Проблема до сих пор не решена. На сегодня для меня потеряла актуальность (до следующего раза).

Что удалось прояснить: в зависимостях CAA.File нет библиотек связанных с Ethernet. Так что похоже FTP-возможности библиотеки описаны в ее доках "на вырост"

Пока что самый перспективный вариант: FTP_CLIENT из библиотеки OSCAT_NETWORK 1.21

sa_mut
19.04.2017, 16:58
Спасибо, понял. Буду курить ftp_client.

приборист
19.04.2017, 21:54
В СПК207 работал вариант с sysexec и ftpput.
Правда я пробовал лишь выкладывать файл на FTP.

porada
28.04.2017, 18:39
Звучит заманчиво. Выкладывать файл на FTP - тоже хлеб.
Но дальше непонятки: СПК207 на Codesys v3. Среди библиотек Codesys v3 не находится никакой SysExec. Есть только FUNCTION SysExecuteCommand из SysOS23. Предположим это она и есть. Документации там ноль, только:

input: pszCommand:STRING; (* Command line to execute as system command *)
output: SysExecuteCommand:DINT;

Последний раз я имел дело с подобными функциями во времена GW-Basic. Аргументы хоть как должны разделяться? пробелами? имена-пути в кавычках или нет? Возвращается только DINT, даже не понятно это ошибка OS, ошибка FTP или только 0\1=success\unsuccesses как в GW-Basic.

Дальше еще мрачнее: у меня есть ПЛК на Linux-RT и другой на WinCE6.0 Embed.

В Linux-RT хоть можно зайти telnet и убедиться что ftpput отсутствует. Шелл там сделан на BusyBox:

-----
BusyBox v1.18.3 (2014-03-21 15:23:32 CET) multi-call binary.
Copyright (C) 1998-2009 Erik Andersen, Rob Landley, Denys Vlasenko
and others. Licensed under GPLv2.
See source distribution for full notice.

Usage: busybox [function] [arguments]...
or: busybox --list[-full]
or: function [arguments]...

BusyBox is a multi-call binary that combines many common Unix
utilities into a single executable. Most people will create a
link to busybox for each function they wish to use and BusyBox
will act like whatever it was invoked as.

Currently defined functions:
[, [[, acpid, ar, arp, arping, ash, base64, basename, bbconfig, beep,
blockdev, bootchartd, bunzip2, bzcat, bzip2, cat, chgrp, chmod, chown,
chrt, cksum, clear, cmp, cp, cpio, cut, date, dc, dd, depmod, devmem,
df, dhcprelay, diff, dirname, dmesg, dnsdomainname, du, dumpleases,
echo, egrep, env, expr, fgconsole, fgrep, find, flock, free, fsync,
fuser, getopt, getty, grep, gunzip, gzip, halt, hd, head, hexdump,
hostname, httpd, hwclock, id, ifconfig, ifplugd, init, insmod, ionice,
iostat, ipcrm, ipcs, kill, killall, klogd, last, length, less, linuxrc,
ln, logger, login, losetup, ls, lsattr, lsmod, lspci, lsusb, lzop,
lzopcat, md5sum, mdev, mesg, mkdir, mkdosfs, mke2fs, mkfifo, mkfs.ext2,
mkfs.vfat, mknod, modinfo, modprobe, more, mount, mpstat, mv,
nbd-client, nc, netstat, nice, nohup, nslookup, ping, pmap, poweroff,
powertop, printf, ps, pwd, rdate, rdev, reboot, renice, reset, rev, rm,
rmdir, rmmod, route, scriptreplay, sed, seq, sh, sha256sum, sha512sum,
sleep, smemcap, sort, stat, strings, stty, su, sync, sysctl, syslogd,
tail, tar, taskset, tcpsvd, tee, telnet, telnetd, test, tftp, tftpd,
time, timeout, top, touch, tr, traceroute, tunctl, udhcpc, udhcpd,
udpsvd, umount, uname, uncompress, unexpand, unlzop, unxz, uptime,
usleep, vi, volname, wall, watch, watchdog, wc, wget, which, who,
whoami, xargs, xz, xzcat, yes, zcat
---------
Usage: tftp [OPTIONS] HOST [PORT] Transfer a file from/to tftp server
------
tftpd - соотв.: демон, обслуживающий TFPD запросы

tftp насколько я понимаю - это не одно и тоже что FTP-протокол, как минимум не запрашиваются пароли, потому сомневаюсь, что он сможет подключиться к FTP-серверу.

Есть еще отдельно vsftpd, но это не клиент, а сервер, не думаю что его можно использовать в роли ftpput.

В WinCE я не могу даже достучаться в командную строку, чтобы посмотреть какие команды есть.

capzap
28.04.2017, 20:54
ну изучите команду nc, а винсе всегда подключалась через телнет без всяких проблем, может с ssh путаете

porada
05.05.2017, 14:10
"Изучал" команду nc, получил:

Usage: nc [-iN] [-wN] [-l] [-p PORT] [-f FILE|IPADDR PORT] [-e PROG]
Open a pipe to IP:PORT or FILE
-e PROG Run PROG after connect
-l Listen mode, for inbound connects (use -l twice with -e for persistent server)
-p PORT Local port
-w SEC Timeout for connect
-i SEC Delay interval for lines sent
-f FILE Use file (ala /dev/ttyS0) instead of network

И что-то не пойму как она может заменить отсутствующий FTP-клиент. "Дяденька, я не настоящий юниксоид, я эту штуку в песочнице нашел !"
Если это реально, прошу объяснить мысль поподробнее.
Эмулировать через nc + SysExecuteCommand одну за одной FTP-команды, причем не видя, что FTP-сервер отвечает -- не предлагать, ибо чистейший мазохизм.

А в другом ПЛК, что на WinCE просканировал все порты. Нашлись: 80:web-server, 21:FTP, 1217:Codesys и еще непонятно что на 2100, при соединении туда telnet выдает:

220 XHMI Remote Configurator: READY.
530 Please login with USER and PASS.

последняя строка похоже на приглашение FTP, но по FTP с логином\паролем от сессии ftp:21 не соединяется на этот порт, продолжает отвечать "530 Please login with USER and PASS".

Putty по SSH после соединения на этот порт показывает пустой экран и не на что не реагирует. Похоже это какой-то спец. сервис от производителя: заливка firmware, выгрузка архива логов диагностики и т.п. фичи, реализованные в оболочке для этого ПЛК.

capzap
05.05.2017, 14:37
да ни как она не заменит, просто вот так (https://habrahabr.ru/post/56049/) она работает

uncleson
19.11.2021, 09:09
Привет всем, искал библиотеки для FTP Клиента. Нигде толком нет, OSCAT работает постольку поскольку, зарегался на том форуме, если есть у кого-то желание и интерес, могу скинуть написанный мной листинг программы простого FTP-логера, нужно его только причесать. А так работает. Программа дописывает в файл, если его нет, то создает и дописывает, данные-строчку. Если покопаться и найти команды загрузки, открытия и удаления и т.д. для FTP-сервера, можно остальное допилить. Правда куда и как это делается не в курсе, на форумах сижу очень редко. Библиотека CAA NetBaseServicies