Easyelectronics.ru

Электроника для всех
Текущее время: 18 сен 2019, 23:05

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 14 ] 
Автор Сообщение
 Заголовок сообщения: STM32 F4 отправка файла по ftp
СообщениеДобавлено: 21 июн 2019, 00:47 
Только пришел

Зарегистрирован: 26 окт 2013, 02:30
Сообщения: 14
На демонстрационную плату https://ru.aliexpress.com/item/32890029815.html (документации есть)
необходимо написать программу на FreeRTOS для приема сообщение по сети и отправки в ответ текстового файла на ftp сервер.

1. Задействовать сетевой контролер
2. Создать процедуру которая отправляет на ftp сервер сети файл, процедура может вызываться параллельно из нескольких входящих соединений (теоретически их не более 3х).
SetFtpPrint(uint8_t* ip, uint8_t* name, uint8_t* barcode)
Функция формирует текстовый файл в формате UTF8 (пример файла в приложении), строки «name» и «barcode» в шаблоне заменяется соответствующими параметрами, переданными в функцию. Далее файл отправляется на ftp сервер по ip адресу.
3. Обеспечить прием строки строки вида «Print;192.168.xxx.xxx;yyyyy;zzzzz» . При приеме такой сроки выполнять функцию SetFtpPrint , в случае ошибки вернуть результат «Print;192.168.xxx.xxx;error»


Прошу писать на почту
unduty@gmail.com


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 F4 отправка файла по ftp
СообщениеДобавлено: 21 июн 2019, 11:14 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2220
FTP не очень удачный выбор для МК. Тем более для передачи данных такого формата. FTP задействует 2 соединения - для управления и данных. Плюс есть активный и пассивный режим. Я уж молчу о всяких обрывах сети, RETR и прочем.
Есть куда более подходящие для этого протоколы. Ну хотя бы банально HTTP. Тут даже через метод GET передать всё можно. А дальше уже пусть на сервере файлик формируется и сохраняется куда надо. Это будет надежнее, быстрее и проще (читай - дешевле) в реализации.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 F4 отправка файла по ftp
СообщениеДобавлено: 21 июн 2019, 11:26 
Старожил

Зарегистрирован: 16 ноя 2012, 07:47
Сообщения: 2859
Писал FTP, но сервер для STM32F4. Там действительно куча тонкостей. Вроде делаешь все по RFC 959 1971 года, с которого и начался FTP, а затем под каждого клиента что-то исправляешь.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 F4 отправка файла по ftp
СообщениеДобавлено: 21 июн 2019, 11:48 
Старожил

Зарегистрирован: 08 янв 2011, 21:54
Сообщения: 228
Откуда: Ставрополь
Писал FTP сервер для PIC32MX795 без RTOS. Тонкостей очень много. Особенно когда начинаются каталоги и вложенные папки.
Оптимальнее не GET, а POST запрос используя режим для передачи файлов, особенно когда идет динамический вывод и конечная длина файла не всегда может быть вычислена.
Сервер может периодически слать запросы и если есть информация то она передается на сервер по uploud запросу.
Очень просто и надежно реализуется как на сервере , так и МК


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 F4 отправка файла по ftp
СообщениеДобавлено: 21 июн 2019, 11:57 
Старожил
Аватара пользователя

Зарегистрирован: 04 окт 2011, 10:19
Сообщения: 1740
Тонкости всегда есть, но ТС предлагает деньги за их решение.
Клиент FTP нормально работает.
Да - нужна два соединения.
На прием запроса достаточно telnet сервера.
Максимум 3 соединения - это просто ни о чём.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 F4 отправка файла по ftp
СообщениеДобавлено: 21 июн 2019, 11:59 
Только пришел

Зарегистрирован: 26 окт 2013, 02:30
Сообщения: 14
NStorm писал(а):
FTP не очень удачный выбор для МК. Тем более для передачи данных такого формата. FTP задействует 2 соединения - для управления и данных. Плюс есть активный и пассивный режим. Я уж молчу о всяких обрывах сети, RETR и прочем.
Есть куда более подходящие для этого протоколы. Ну хотя бы банально HTTP. Тут даже через метод GET передать всё можно. А дальше уже пусть на сервере файлик формируется и сохраняется куда надо. Это будет надежнее, быстрее и проще (читай - дешевле) в реализации.


Это принтер этикеток zebra , на нем сетевой фтп сервер .
Из CMD подключается такой строкой "ftp 192.168.xxx.xxx" (далее вводится пользователь ), далее команда "put TEST.ZPL" отправляет текстовый файл и он печатается.
Сам текстовый файл должен формироваться на stm32 , текст шаблон в коде.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 F4 отправка файла по ftp
СообщениеДобавлено: 21 июн 2019, 12:06 
Старожил

Зарегистрирован: 16 ноя 2012, 07:47
Сообщения: 2859
А этот принтер от партии к партии не меняет случайно протокол общения? Мало ли. Если нет, тогда можно написать очень усеченный клиент, который заточен только под этот принтер. Это куда проще.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 F4 отправка файла по ftp
СообщениеДобавлено: 21 июн 2019, 12:49 
Только пришел

Зарегистрирован: 26 окт 2013, 02:30
Сообщения: 14
Hold писал(а):
А этот принтер от партии к партии не меняет случайно протокол общения? Мало ли. Если нет, тогда можно написать очень усеченный клиент, который заточен только под этот принтер. Это куда проще.

Там нет протокола есть текстовый файл с командами , который нужно сформировать и отправить. Сам текст файла находится в коде , подменяется только одна строчка которая передается параметром.
Такой способ печати существует давно и не меняется, команды в самом файле стандартизированы на все принтеры производителя и его клонов.

Текст файла :
^XA
^LL2000
^PW1250
^FT40,40^A@A,50,50,TT0003M_^FH\^CI17^F8^FDНомер заказа:nomer^FS^CI0
^FT40,100^A@A,50,50,TT0003M_^FH\^CI17^F8^FDКонтрагент:пробный^FS^CI0
^FT380,350^A@A,100,100,TT0003M_^FH\^CI17^F8^FD5^FS^CI0
^FO140,380^BY3
^BCA,120,Y,N,N,U
^FDbarcode^FS
^PQ1,0,1,Y
^XZ

Нужно подставлять "nomer" из параметра , формировать файл и отправлять на принтер по ip. Далее принтер выполнит инструкцию и напечатает бирку.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 F4 отправка файла по ftp
СообщениеДобавлено: 21 июн 2019, 13:01 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2220
Спрашивали о другом немного. Сам протокол FTP не такой уж и простой. И там масса нюансов. Каждый сервер себя может по-разному вести. Если вам конкретно для одной модели принтера написать, без гарантий совместимости с абсолютно любым FTP-сервером - то эт попроще задача.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 F4 отправка файла по ftp
СообщениеДобавлено: 21 июн 2019, 13:14 
Старожил

Зарегистрирован: 16 ноя 2012, 07:47
Сообщения: 2859
к примеру - нужна ли работа с каталогами, подкаталогами, созданием/удалением файлов, активный/пассивные режимы, банальная авторизация? Это всё команды, которые надо тестить, отлаживать.
Банальный пример: что из списка команд ниже вам надо реализовать?
Код:
typedef struct
{
   List_IdFtpCmd   IdCmd;
   const uint8_t   *Cmd;
}   _FTP_COMMAND;

// Incoming commands from client
_FTP_COMMAND   FtpCommands[] = {
//   RFC 959
// Access control commands
   {   USER_CMD,   "USER"   },            // User name
   {   PASS_CMD,   "PASS"   },            // Password
   {   ACCT_CMD,   "ACCT"   },            // Account
   {   CWD_CMD,   "CWD"   },            // Change working directory
   {   CDUP_CMD,   "CDUP"   },            // Change to parent directory
   {   SMNT_CMD,   "SMNT"   },            // Structure mount
   {   QUIT_CMD,   "QUIT"   },            // Logout
   {   REIN_CMD,   "REIN"   },            // Reinitialise
// Transfer parameter command
   {   PORT_CMD,   "PORT"   },            // Data port
   {   PASV_CMD,   "PASV"   },            // Passive
   {   TYPE_CMD,   "TYPE"   },            // Representation type
   {   STRU_CMD,   "STRU"   },            // File structure
   {   MODE_CMD,   "MODE"   },            // Transfer mode
// Service command
   {   RETR_CMD,   "RETR"   },            // Retrieve
   {   STOR_CMD,   "STOR"   },            // Store
   {   STOU_CMD,   "STOU"   },            // Store unique
   {   APPE_CMD,   "APPE"   },            // Append with create
   {   ALLO_CMD,   "ALLO"   },            // Allocate
   {   REST_CMD,   "REST"   },            // Restart
   {   RNFR_CMD,   "RNFR"   },            // Rename from
   {   RNTO_CMD,   "RNTO"   },            // Rename to
   {   ABOR_CMD,   "ABOR"   },            // Abort
   {   DELE_CMD,   "DELE"   },            // Delete
   {   RMD_CMD,   "RMD"   },            // Remove directory
   {   MKD_CMD,   "MKD"   },            // Make directory
   {   PWD_CMD,   "PWD"   },            // Print working directory
   {   LIST_CMD,   "LIST"   },            // List
   {   NLST_CMD,   "NLST"   },            // Name list
   {   SITE_CMD,   "SITE"   },            // Site parameters
   {   SYST_CMD,   "SYST"   },            // System
   {   STAT_CMD,   "STAT"   },            // Status
   {   HELP_CMD,   "HELP"   },            // Help
   {   NOOP_CMD,   "NOOP"   },            // Noop
   {   NULL,      NULL   },            // End
};


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 F4 отправка файла по ftp
СообщениеДобавлено: 21 июн 2019, 13:57 
Только пришел

Зарегистрирован: 26 окт 2013, 02:30
Сообщения: 14
NStorm писал(а):
Спрашивали о другом немного. Сам протокол FTP не такой уж и простой. И там масса нюансов. Каждый сервер себя может по-разному вести. Если вам конкретно для одной модели принтера написать, без гарантий совместимости с абсолютно любым FTP-сервером - то эт попроще задача.


Только с FTP сервером принтера (это стандартная плата расширения https://scanberry.ru/catalog/kupit/upgr ... 80383-033/ )


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 F4 отправка файла по ftp
СообщениеДобавлено: 21 июн 2019, 14:07 
Только пришел

Зарегистрирован: 26 окт 2013, 02:30
Сообщения: 14
Hold писал(а):
к примеру - нужна ли работа с каталогами, подкаталогами, созданием/удалением файлов, активный/пассивные режимы, банальная авторизация? Это всё команды, которые надо тестить, отлаживать.
Банальный пример: что из списка команд ниже вам надо реализовать?
Код:
typedef struct
{
   List_IdFtpCmd   IdCmd;
   const uint8_t   *Cmd;
}   _FTP_COMMAND;

// Incoming commands from client
_FTP_COMMAND   FtpCommands[] = {
//   RFC 959
// Access control commands
   {   USER_CMD,   "USER"   },            // User name
   {   PASS_CMD,   "PASS"   },            // Password
   {   ACCT_CMD,   "ACCT"   },            // Account
   {   CWD_CMD,   "CWD"   },            // Change working directory
   {   CDUP_CMD,   "CDUP"   },            // Change to parent directory
   {   SMNT_CMD,   "SMNT"   },            // Structure mount
   {   QUIT_CMD,   "QUIT"   },            // Logout
   {   REIN_CMD,   "REIN"   },            // Reinitialise
// Transfer parameter command
   {   PORT_CMD,   "PORT"   },            // Data port
   {   PASV_CMD,   "PASV"   },            // Passive
   {   TYPE_CMD,   "TYPE"   },            // Representation type
   {   STRU_CMD,   "STRU"   },            // File structure
   {   MODE_CMD,   "MODE"   },            // Transfer mode
// Service command
   {   RETR_CMD,   "RETR"   },            // Retrieve
   {   STOR_CMD,   "STOR"   },            // Store
   {   STOU_CMD,   "STOU"   },            // Store unique
   {   APPE_CMD,   "APPE"   },            // Append with create
   {   ALLO_CMD,   "ALLO"   },            // Allocate
   {   REST_CMD,   "REST"   },            // Restart
   {   RNFR_CMD,   "RNFR"   },            // Rename from
   {   RNTO_CMD,   "RNTO"   },            // Rename to
   {   ABOR_CMD,   "ABOR"   },            // Abort
   {   DELE_CMD,   "DELE"   },            // Delete
   {   RMD_CMD,   "RMD"   },            // Remove directory
   {   MKD_CMD,   "MKD"   },            // Make directory
   {   PWD_CMD,   "PWD"   },            // Print working directory
   {   LIST_CMD,   "LIST"   },            // List
   {   NLST_CMD,   "NLST"   },            // Name list
   {   SITE_CMD,   "SITE"   },            // Site parameters
   {   SYST_CMD,   "SYST"   },            // System
   {   STAT_CMD,   "STAT"   },            // Status
   {   HELP_CMD,   "HELP"   },            // Help
   {   NOOP_CMD,   "NOOP"   },            // Noop
   {   NULL,      NULL   },            // End
};


User name "admin "
Password "pas"

Просто отправка файла и возврат результата "1" отправился "0" ошибка , получать описание ошибки. Важно понимать файл доставлен или нет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 F4 отправка файла по ftp
СообщениеДобавлено: 21 июн 2019, 23:29 
Старожил

Зарегистрирован: 08 янв 2011, 21:54
Сообщения: 228
Откуда: Ставрополь
Получается , что нужно написать КЛИЕНТа для конекта к принтеру. Принтер выступает СЕРВЕРом.
Задача решаема, жаль что не мой проц.
А может быть есть иные способы отправки на печать? Например RS232 или RS485 ?
Если уж желаете отправлять данные на печать по ЛАН , то можно сделать ТСР-RS232 мост и работать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 F4 отправка файла по ftp
СообщениеДобавлено: 22 июн 2019, 00:32 
Старожил
Аватара пользователя

Зарегистрирован: 04 окт 2011, 10:19
Сообщения: 1740
smart_pic писал(а):
Получается , что нужно написать КЛИЕНТа для конекта к принтеру. Принтер выступает СЕРВЕРом.
Задача решаема, жаль что не мой проц.
А может быть есть иные способы отправки на печать? Например RS232 или RS485 ?
Если уж желаете отправлять данные на печать по ЛАН , то можно сделать ТСР-RS232 мост и работать.

Это было написано в п.2 первого сообщения.
А зачем переходник, если принтер уже в сети и есть STM32+DP83848
Было бы больше денег предложено - можно было сделать дня за 3-4.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 14 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot]


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

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB