1 321 (2025-04-25 15:39:51 отредактировано Владимир_К)

Re: Простой стабилизированный регулятор мощности ТЭНа из китайских модулей

JohnJohnov ©:

Монитор порта ардуинки не реагирует на CR (0x0D), потому что у него в настройках стоит NL(новая строка). Внизу справа поправь.

Нет, пробовал там все режимы - не реагирует, а вот когда заменил в 566 строке скетча стаба 0х0D на 0х0A, то стало так:

Он реагирует, просто по 0х0D он ставит курсор в эту же строку и печатает новые данные в начале строки.

JohnJohnov ©:

Если заслать стабу подряд М0, М1, М2,

Ну вот за что меня так - я кнопочками с экрана моего контроллера посылаю, вдумчиво и не торопясь, дабы увидеть результат посыла - например включение разгона:

JohnJohnov ©:

На гитхабе есть тестовый скетч для отладки порта "Serial_test.ino". Он отражает на дисплее все принятые из порта команды. Известные ему команды -  с расшифровкой.

Пробовал - не реагирует - также как и стаб.  *WALL*

  • Снимок экрана 2025-04-25 150038.png
    size: 42.11Кб type: png
  • Снимок экрана 2025-04-25 150038.png
    size: 42.11Кб type: png
  • photo_2025-04-25_15-22-21.jpg
    size: 29.39Кб type: jpg
Магазинное... Не заставите.

1 322

Re: Простой стабилизированный регулятор мощности ТЭНа из китайских модулей

Владимир_К ©:

Нет, пробовал там все режимы - не реагирует

Если не ошибаюсь, там после каждого изменения надо перезапускать монитор порта.

Владимир_К ©:

Пробовал - не реагирует - также как и стаб.

Т.е. на вход порта ничего не приходит? Ну значит надо звонить линию Tx-Rx от контроллера к стабу.

С уважением, <дата, подпись>, отвечайте нам, а то...
РК 28/1500
Простой стабилизированный регулятор

1 323

Re: Простой стабилизированный регулятор мощности ТЭНа из китайских модулей

JohnJohnov ©:

перезапускать монитор порта.

Естественно

JohnJohnov ©:

надо звонить линию Tx-Rx от контроллера к стабу.

Ага, только светодиоды RX и TX весело моргают и осцилографом пачки импульсов видно.
Чудеса!

Магазинное... Не заставите.

1 324

Re: Простой стабилизированный регулятор мощности ТЭНа из китайских модулей

А попробуйте монитор порта другой.
Например такой:
https://github.com/vladimkov/Terminal_b … 2328235768

РК 35х1600

1 325 (2025-04-26 17:23:31 отредактировано JohnJohnov)

Re: Простой стабилизированный регулятор мощности ТЭНа из китайских модулей

Владимир_К ©:

Естественно

Я ардуиноIDE давно не пользую, но когда пользовал - настроить корректную обработку конца строки по CR получалось. В принципе - пофиг, на работу оно не влияет. В конце-концов, есть другие проги-мониторы COM-порта.

Владимир_К ©:

Чудеса!

Они.  :D
Если ардуинка шьётся, то порт у неё живой.
Если пачки импульсов видны (на приемной стороне, на соответствующей ноге, надеюсь), значит контакт есть.
Если скетч не менялся, соответствующие строки закомменчены/раскомменчены и льётся корректная посылка, значит программно всё пучком.
Что остаётся?
Настройки порта в FLProg проверить.
И сходить в церковь грехи отмолить.  :)
Когда найдем косячок - смеяться будем.

А если из монитора порта ArduinoIDE заслать управляющую посылку (например, M0 с CR в конце строки), стаб отзывается?

С уважением, <дата, подпись>, отвечайте нам, а то...
РК 28/1500
Простой стабилизированный регулятор

1 326 (2025-04-26 20:14:56 отредактировано Владимир_К)

Re: Простой стабилизированный регулятор мощности ТЭНа из китайских модулей

JohnJohnov ©:

А если из монитора порта ArduinoIDE заслать управляющую посылку (например, M0 с CR в конце строки), стаб отзывается?

Вот это я и сделал. Что увидел? А увидел, что комада выполнилась, а светодиод RX на ардуинке как-то повеселел. Рысью включаю осцилограф и наблюдаю, что китайский преобразователь уровня выдаёт на RX ардуинки сигнал на уровне чуть ли не 1.5 вольта - не дотягивает до уверенного уровня нолика, но светодиодик моргает мне прямо в глаз, мерзавец эдакий. Вот привычка - сигнал есть - значит порядок :rolleyes:
Быстренько вкорячиваю оптопару по схеме, что выкладывал ранее и всё поехало как надо, только я там не верно резюки нарисовал - что-то мне взбрело в голову, что в РС817 5 мА светодиоды стоят, а там 20 мА. На кнопках нормально, а тут почётче сигнальчик нужен. 150 Ом самый то, а 15 мА за глаза.
Если кто будет повторять - помните - при включении на RX и TX у ESP8266 дожен быть высокий уровень, иначе не запустится.
Сейчас уеду на пару дней, а дальше буду допиливать.
Благодарю kvic и Автора.

Магазинное... Не заставите.

1 327 (2025-04-27 23:45:17 отредактировано Владимир_К)

Re: Простой стабилизированный регулятор мощности ТЭНа из китайских модулей

Так получилось, что приехал раньше, и полез допиливать.
И во что сразу же упёрся - есть через UART три кнопки управления:
1. Включение работы стабилизации.
2. Включение разгона.
3. Выключение разгона и стабилизации, либо - если во время стабилизации был включен разгон, то оба выключаются. Мне кажется, логичнее выключить разгон, а вторым нажатием стабилизацию. Но это просто логично с моей точки зрения. (Хотя есть КНОПКА выключить режим разгона и оставить рабочим режим стабилизации, опять же КНОПКА). Очень удобная и нужная КНОПКА.
С UARTа, даже если послать РХХХХ0D ((установить мощность)(в мониторе всё проходит)), то включить режим стабилизации всё равно нет возможности, только если войти в меню (С КНОПОК), выбрать уставку, то только тогда можно включить режим стабилизации. И для чего тогда нужен UART, если без кнопки не обойтись? Может я опять в танке, и чего-то не понял?

Добавлю.
Кнопки + и - очень удобны при подборе режима предзахлёба - в UART их нет. При вводе PXXXX0D значение мощности стабилизации не меняется.
Вывод:
Пока делаю на кнопках. Экранчик 1.3 дюйма рулит. :)

Магазинное... Не заставите.

1 328 (2025-04-28 11:11:12 отредактировано JohnJohnov)

Re: Простой стабилизированный регулятор мощности ТЭНа из китайских модулей

Владимир_К ©:

Мне кажется, логичнее выключить разгон, а вторым нажатием стабилизацию.

Зачем делать в два нажатия то, что можно сделать одним нажатием?

Владимир_К ©:

1. Включение работы стабилизации.
2. Включение разгона.
3. Выключение разгона и стабилизации

Ну почти так. Номер 3 - это стоп из любого режима, так точнее.
Поясню логику вкратце: у стаба всего три режима - "стабилизация", "разгон" и "стоп". Любой из них можно установить ОДНОЙ командой по UART вне зависимости от текущего режима.
Например, если из разгона нужно перейти к стабилизации - отправляем "стабилизацию", если остановиться - отправляем "стоп". А третьего и не дано.
А нужную уставку отправляем отдельной командой (Pxxxx<CR>), опять же, вне зависимости от текущего режима.

Владимир_К ©:

При вводе PXXXX0D значение мощности стабилизации не меняется.

Должно меняться! Давай подробности.

С уважением, <дата, подпись>, отвечайте нам, а то...
РК 28/1500
Простой стабилизированный регулятор

1 329 (2025-04-28 18:59:10 отредактировано Владимир_К)

Re: Простой стабилизированный регулятор мощности ТЭНа из китайских модулей

JohnJohnov ©:

Давай подробности.

Попробую подробности.
Скорее всего я передаю не правильно. Посылаю это:

В другом мониторе так:

Эх, можно было бы так:

Тогда всё гораздо проще. Понимаю, что лишние два байта и, наверное, преобразовывать сложнее, но как по мне красивее и человечнее, а пока так:

Нижняя сторока - то, что принимаю, а в десятичном было бы 1 байт заголовок, 1 режим, 4 байта мощность и 4 напряжение - итого 10 байт, сейчас 13. Я не программист и скорее всего говорю глупости - не бейте пожалуйста, но помечтать то можно.


Добавлю - стандартный приём из UART в FIProg, если принимать строку, то он после каждого символа 0D вставляет ]:-> , попробую разобраться с этим.

  • Снимок экрана 2025-04-28 154848.png
    size: 55.9Кб type: png
  • Снимок экрана 2025-04-28 161501.png
    size: 6.2Кб type: png
  • Снимок экрана 2025-04-28 155810.png
    size: 69.25Кб type: png
  • photo_2025-04-28_16-44-43.jpg
    size: 56.4Кб type: jpg
Магазинное... Не заставите.

1 330 (2025-04-28 18:36:21 отредактировано JohnJohnov)

Re: Простой стабилизированный регулятор мощности ТЭНа из китайских модулей

Владимир_К,
Уставка должна передаваться в HEX-формате и цифры числА должны передаваться в ASCII-коде. Т.е. команда, устанавливающая уставку 1250Вт, должна выглядеть так:
ASCII - P04E2<CR>
HEX - 50 30 34 45 32 0D

А если передать Р1250, то стаб расшифрует сие как просьбу установить 4688Вт, и, заметив превышение номинальной мощности, выставит номинальную.

С уважением, <дата, подпись>, отвечайте нам, а то...
РК 28/1500
Простой стабилизированный регулятор

1 331 (2025-04-29 19:01:09 отредактировано Владимир_К)

Re: Простой стабилизированный регулятор мощности ТЭНа из китайских модулей

цифры числА должны передаваться в ASCII-коде

Каюсь, не внимательно прочитал.
Теперь выглядит вот так, но это пока намётки, да и доделать перевод во float надо, запись в ПЗУ тоже, просто сейчас опять ехать надо - урывками рисую. Если бы можно было вводить мощность тэна (сейчас это просто данные из переменной)(может я чего недопонял), то экранчик становится не нужным и тогда ног хватит без расширителя выводов.

Табло "Авария сети" по 06 тоже есть, оно справа.
Очень прошу критики и дополнений.

Добавлю - мне кажется, что при разгоне надо передавать мощность не подсчитанную, а равную мощности тэна. Мощность отражаемая над полем ввода - то, что передаёт стаб. Хотя это просто эстетика - сам сделаю.

  • photo_2025-04-29_15-51-17.jpg
    size: 63.24Кб type: jpg
  • photo_2025-04-29_15-51-17.jpg
    size: 63.24Кб type: jpg
  • photo_2025-04-29_15-51-32.jpg
    size: 64.19Кб type: jpg
  • photo_2025-04-29_15-51-39.jpg
    size: 65.33Кб type: jpg
  • photo_2025-04-29_15-51-46.jpg
    size: 67.26Кб type: jpg
  • photo_2025-04-29_16-26-11.jpg
    size: 50.27Кб type: jpg
Магазинное... Не заставите.

1 332 (2025-04-30 05:35:50 отредактировано JohnJohnov)

Re: Простой стабилизированный регулятор мощности ТЭНа из китайских модулей

Владимир_К ©:

Очень прошу критики и дополнений.

По мне - всё очень неплохо.
Особенно понравилась индикация "разгона" зеленой рамкой на кнопке.  *THUMBSUP*
Предполагаю, запрет разгона с внешнего управляющего входа отображается красной рамкой (и обесцвечиванием?) кнопки.
Я бы выкинул показания напряжения сети, бо представляет только статистический интерес да и то только в виде графика, а нам совсем не нужный параметр.
Шапку, думаю, есть смысл сделать поскромнее. Нафик она нужна на полэкрана?
Поначалу показались лишними кнопки "+", "-", но подумал и понял, что они вполне в тему и удобны для оперативной корректировки.

Владимир_К ©:

при разгоне надо передавать мощность не подсчитанную, а равную мощности тэна

Идея в том, чтобы в основном параметре всегда передавать ту мощность, которая в данный момент выделяется на нагревателе, текущую мощность. Измеренную или расчетную.

Владимир_К ©:

Если бы можно было вводить мощность тэна (сейчас это просто данные из переменной)(может я чего недопонял), то экранчик становится не нужным и тогда ног хватит без расширителя выводов.

Вот тут не совсем понял, но...в меру понимания...:
Соединение по UART отменяет кнопки полностью. По UART можно переключить режимы, послать нужную уставку и проконтролировать состояние стаба.
Освобожденных от кнопок ног не хватает?

С уважением, <дата, подпись>, отвечайте нам, а то...
РК 28/1500
Простой стабилизированный регулятор

1 333 (2025-04-30 07:02:45 отредактировано JohnJohnov)

Re: Простой стабилизированный регулятор мощности ТЭНа из китайских модулей

Владимир_К ©:

доделать перевод во float надо

float - довольно тяжеловесная штука в плане памяти/быстродействия и имеет некоторые неочевидные особенности использования в коде. Не стоит её использовать без необходимости.

С уважением, <дата, подпись>, отвечайте нам, а то...
РК 28/1500
Простой стабилизированный регулятор

1 334

Re: Простой стабилизированный регулятор мощности ТЭНа из китайских модулей

JohnJohnov ©:

float - довольно тяжеловесная штука в плане памяти/быстродействия и имеет некоторые неочевидные особенности использования в коде. Не стоит её использовать без необходимости.

Ну не так прямо страшно. Дело ещё в том, как часто они будут пересчитываться. Если их значение должно считаться каждый цикл, то да, нагрузит. Я пробовал пересчёт и вывод на дисп раз в 3 секунды, и 5 переменных float нисколько не повесили выполнение кода. И памяти заняло не на много больше, чем с одной такой переменной.

1 335 (2025-04-30 21:14:41 отредактировано Владимир_К)

Re: Простой стабилизированный регулятор мощности ТЭНа из китайских модулей

JohnJohnov ©:

запрет разгона с внешнего управляющего входа отображается красной рамкой (и обесцвечиванием?) кнопки.

Рамки вокруг кнопок зажигаются по команде со стаба - ноль - работа, всё в порядке, один - режим разгона, 2 - стоп. Всё по протоколу стаба. 6 и 8 табло рядом с напругой в сети.

JohnJohnov ©:

а нам совсем не нужный параметр.

Но параметр то красивый, эдакая вкусняшка в приборе. Информационная вкусняшка. Пояснение ниже.

JohnJohnov ©:

Шапку, думаю, есть смысл сделать поскромнее

Считаю, что авторство, даже при переделке должно быть сохранено однозначно, я представляю сколько сил и времени было нужно, чтобы написать такую программу.
Я просто скопировал шапку. Если Автор пожелает, я нарисую так, как будет желать Автор.

JohnJohnov ©:

Идея в том, чтобы в основном параметре всегда передавать ту мощность, которая в данный момент выделяется на нагревателе, текущую мощность. Измеренную или расчетную.

Согласен абсолютно, был не прав, виноват, погорячился. Уже переделал, но сделаю так как было.

JohnJohnov ©:

Освобожденных от кнопок ног не хватает?

Очень хочется с ESP32 вернуться на ESP8266, а тут как раз ног не хватает.
С ESP32 слишком много заморочек при прошивке, я вообще, пока на ардуино v2.3.4 не переехал, то сплошной геммморррой был, да и с 2.3.4 тоже хватает.
И ещё - зачем городить второй экран, если первый убрать нет возможности?
Вот и получается, что единственным препятствием убрать первый экран, является отсутствие возможности ввода мощности тэна.
Так же всё проще получается - ввёл мощность тэна, ввёл мощность предзахлёба, записал в EEPROM контроллера и всё, ну может иногда плюсиком и минусиком побаловаться захочется. 
Да и вообще - Простой стабилизированный регулятор мощности ТЭНа из китайских модулей с кнопками и экраном на телефоне + автоматическая ректификационная колонна + узел отбора... (тут пока не ясно на клапанах или на перестальтическом насосе (если Авторы будут согласны), а дальше вместе решить - через точку доступа ли, или как клиент на роутере, да в конце концов - хоть через облачный сервер...  Легко.

JohnJohnov ©:

float - довольно тяжеловесная штука в плане памяти/быстродействия и имеет некоторые неочевидные особенности использования в коде

С точки зрения 168 ардуинки, то да, но тем не менее Автор индицирует сие на экране. (я не знаю как, может просто графическую точку поставил перед четвёртым знаком) :D
С токи зрения ESP даже 8266 - вопрос ни о чём.
А что такое код я вообще не знаю - я рисую программу как схемотехник.
Например - надо принять данные из UART - ставлю на экран (плату) блок приёма UART, включаю выход "новые данные" на блоке приёма, и по импульсу с этого выхода сую данные в стэк, а потом из стэка по индексу читаю данные, расшифровываю их, всё.
О какой либо оптимизации в FLProg и речи не идёт - если есть задача положить ручку двери на стол, то можно взять отвёртку, открутить ручку и положить её на стол - задача выполнена. А можно снять дверь с петель и положить ручкой на стол - задача выполнена. Если стол AVR168 - это одно, если ESP8266 - это другое, если ESP32 - это третье итд.


Добавлю: Да не казнят меня носители ассемблера :cool: В начале девяностых с синклером профи сам чуточку баловался в Новогиреево. Это так, отступление и ностальгия, сорри.


Если со стаба можно получить красивую вкусность, то её надо получить, вывести на экран и сразу понимать почему иногда может возникнуть ситуация - недостаточно напруги - уставка выше реальной мощности, нет напруги - в сети меньше 100 вольт :(
Это не статистический показатель - это информационный показатель.

И заключительное от себя - в UART есть смысл только при ПОЛНОМ управлении и ПОЛНОМ чтении.
При любом ограничении в UART смысла нет.

Магазинное... Не заставите.

1 336

Re: Простой стабилизированный регулятор мощности ТЭНа из китайских модулей

И ещё - если Автор будет чего либо менять в стабе, предлагаю ввести в установки период посыла данных в UART, а то раз в полсекунды как-то частовато.

Магазинное... Не заставите.

1 337 (2025-05-01 08:58:53 отредактировано JohnJohnov)

Re: Простой стабилизированный регулятор мощности ТЭНа из китайских модулей

Maxus ©:

Ну не так прямо страшно.

:D
1) 3 секунды - это вечность для микроконтроллера. У тебя в коде просто пока нет мест, критичных к времени выполнения. У меня в стабе - есть. А float - нет, бо нафик не нужны.
2) Одна float или десять, один фиг компилятор добавляет в код процедуры работы с float. Попробуй сравнить использование памяти для одной/десяти float и совсем без float.
3) Ну а на тонкости кода с float ты просто ещё не налетал. Всё впереди.  :P

Владимир_К ©:

предлагаю ввести в установки период посыла данных в UART, а то раз в полсекунды как-то частовато.

Раз в секунду, примерно. Смысл - в постоянном контроле со стороны контроллера (простите за тафтологию). Стаб шлёт своё состояние раз в секунду, контроллер каждую секунду знает точное состояние стаба. Нормальный период, считаю.

Владимир_К ©:

Считаю, что авторство, даже при переделке должно быть сохранено однозначно

Ну не сам стаб же меняется, стаб прикручивается к контроллеру и смартфону и тут авторство уже не моё.  :)
За добрые слова - спасибо. Приятно.  :[

Владимир_К ©:

И ещё - зачем городить второй экран, если первый убрать нет возможности?
Вот и получается, что единственным препятствием убрать первый экран, является отсутствие возможности ввода мощности тэна.

Вот всё-таки никак не пойму этой чехарды с экранами...
Хочешь выкинуть дисплей стаба? Или выкинуть дисплей своего контроллера на ESP и управлять только со смарта? Почему нельзя ввести мощность, если можно (по UART)?
Объясни, пожалуйста, свою идею поподробнее.

Владимир_К ©:

И заключительное от себя - в UART есть смысл только при ПОЛНОМ управлении и ПОЛНОМ чтении.
При любом ограничении в UART смысла нет.

А кто и в чем ограничивает?

Владимир_К ©:

Да не казнят меня носители ассемблера :cool: В начале девяностых с синклером профи сам чуточку баловался в Новогиреево. Это так, отступление и ностальгия, сорри.

Хотя в своё время собрал с десяток спектрумов, на ассемблере для Z80 не писал. Зато писал для K1816 (который MCS-48). В 90-лохматом году... *BYE*  :D
А коли внутренности МК понятны, то должно быть понятно, что никаких float в нутре МК нет, а всё это с запятыми - тот же код. В языке высокого уровня оно не заметно, однако, банальная С-строчка

float pi = 3,14159


подтягивает в программу кода, отнимает места в оперативе и процессорного времени в разы больше, чем такие, к примеру, строки

int pi = 314159
int piInt = pi/100000
int piRes = pi%100000

Используя аналогию с дверью: современные МК сильные и многороукие, пару раз мож и незаметна будет разница между "открутить ручку отверткой" и "снять дверь с петель и припереть на стол", но во время еды придет аппетит и через какое-то время сильный многорукий МК только тем и будет заниматься, что бегать с выдергой снимать/ставить двери. На, собственно, операции с ручкой на столе ни сил, ни времени не останется. Это, кстати, наиболее распространенная ошибка начинающих - неэкономное использование ресурсов.
А основная оптимизация кода происходит на уровне алгоритмов, язык программирования тут не особо важен, важнее понимать как оно всё работает. В этом смысле графические языки, типа FLProg, даже в выигрыше, поскольку более наглядно представляют именно алгоритм программы.
Но...я не настаиваю.  :)
В конце концов, хорошая программа - та что хорошо работает, а не та, что грамотнее написана (хотя взаимосвязь очевидна).

С уважением, <дата, подпись>, отвечайте нам, а то...
РК 28/1500
Простой стабилизированный регулятор

1 338 (2025-05-01 15:32:04 отредактировано Владимир_К)

Re: Простой стабилизированный регулятор мощности ТЭНа из китайских модулей

Хочешь выкинуть дисплей стаба?

Хочу сделать его не нужным.
Про ноги я оговорился - отвлекли тут меня и малость задёргали.

JohnJohnov ©:

неэкономное использование ресурсов.

Рисовал весьма большие программы в FLProg (с точки зрения кода 5-6 тысяч строк) и ни разу не смог заполнить память ESP полностью или заставить его "спотыкаться"

JohnJohnov ©:

в разы больше, чем такие, к примеру, строки

так я подобным образом и решил - получаю четырёхзначное число от стаба (напруга сети) и просто умножаю на 0,1. При получении из UART 0D (<CR>) записываю в переменную U и кидаю на экран.

JohnJohnov ©:

Почему нельзя ввести мощность, если можно (по UART)?

Что-то я в протоколе это можно не нашёл. Опять я в танк залез?
РХХХХ0D вижу, так и ввожу мощность, а мощность тэна не вижу.

Или вот это? - h03 - мощность в нагрузке (если основной - мощность, то мощность уставки)

Дополнение
Или вот это? - h07 - номинальная мощность нагрузки.
А как должна выглядеть команда?
Если послал N070D, то РХХХХ0D запишет мощность тэна?

  • Снимок экрана 2025-05-01 141717.png
    size: 18.23Кб type: png
  • photo_2025-05-01_14-45-09.jpg
    size: 62.14Кб type: jpg
Магазинное... Не заставите.

1 339 (2025-05-01 17:54:17 отредактировано JohnJohnov)

Re: Простой стабилизированный регулятор мощности ТЭНа из китайских модулей

Владимир_К ©:

Что-то я в протоколе это можно не нашёл. Опять я в танк залез?

Понял. Просто о разном говорим.
Да, действительно, протокол не предполагает установку номинала ТЭНа. Ну потому что это константа и, вообще, исходные данные.
Но есть возможность спросить у стаба номинал ТЭНА: да, послав ему N07<CR> получим искомое в следующей посылке от стаба вместо напруги сети, послав N00<CR> - снова будем получать напругу сети.
UPD. Если после включения не трогать кнопки, стаб автоматом принимает номинал ТЭНа, записанный в первой ячейке.

Владимир_К ©:

и просто умножаю на 0,1

И вот тут у нас в программе возникает вся трихомудия с float. А оно точно надо? Можно ж поделить на 10 и получить целую часть, а потом спросить остаток от деления на 10 и вывести эти два целых числа через запятую, сэкономив кучу памяти и времени.
Ну это я так...ворчу. Не обращай внимания. :)

С уважением, <дата, подпись>, отвечайте нам, а то...
РК 28/1500
Простой стабилизированный регулятор

1 340

Re: Простой стабилизированный регулятор мощности ТЭНа из китайских модулей

JohnJohnov ©:

И вот тут у нас в программе возникает вся трихомудия с float. А оно точно надо? Можно ж поделить на 10 и получить целую часть, а потом спросить остаток от деления на 10 и вывести эти два целых числа через запятую, сэкономив кучу памяти и времени.

Полезный совет, спасибо!