Управление мощностью ТЭНа

  • В этой теме 422 ответа, 52 участника, последнее обновление 3 года сделано Андрей.
Просмотр 15 сообщений - с 211 по 225 (из 422 всего)
  • Автор
    Сообщения
  • #45686
    Mef_poter
    Участник
    • Ответов: 112
    @mefody

    Я в коде глубоко не ковырялся…. Но раз имеется UART, то добавить такой фукционал, как обратная связь – вообще не проблема. Хотя я бы реализовал блок управления на мультишине – к примеру SPI . Это для масштабирования схемы к примеру в 3-фазную или на несколько ТЭНов.

    А вопрос с автономной работой можно решить перемычкой на плате… Есть перемычка – меряем ТЭН, нету – оператор сам виноват. )))

    #45688
    Mef_poter
    Участник
    • Ответов: 112
    @mefody

    Кстати для автономки можно предусмотреть менюшку настроек – макс. мощность, автоопределение ТЭН, 5-6 предустановленных значений мощности, пусковая мощность при включении регулятора и т.д. Тут величайший простор для фантазии… )))

    #45690
    Роман
    Участник
    • Ответов: 291
    @papazol

    UART был выбран из соображений помехоустойчивости при достаточной длине соединительного кабеля. К тому же обвязка UART’а присутствует во всех применяемых микропроцессорах, а SPI требует “драйвера”.

    Для конечного пользователя удобнее либо полное отсутствие настроек (т. е. всё автоматически), либо всё-таки через меню. Перемычка на плате, плата в корпусе…

    Если уж мечтать, то я хотел бы иметь в регуляторе MODBUS по WiFi 🙂

    #45693
    Sergey_r
    Участник
    • Ответов: 2934
    @serjrv

    В скетче есть такая строка:

    if ( powerMax > 9000 && ( powerMax % 50 ) != 0 ) powerMax = 3000;

    Как я понял, это если при первом включении в EEPROM будет записана ересь, чтобы сразу поменять её на валидное значение мощности. Но почему условия логически умножаются? Ведь любое из них должно вызывать принудительное назначение мощности 3 кВт.

    В каком же из мест видим умножение? Просто сравниваем два условия, не более 9000 и кратность 50-ти (остаток от деления), т.е. должно срастись по условию и первое выражение и второе. Как то в языке “Си” у Вас прострация )))

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

    Потому что И от ИЛИ отличается кардинално. По Вашей логике 100500 примется за нормальный вариант. А у меня в алгоритме управления энкодером заложена кратность 50-ти и не более 9000. Что не так то? При первой установке с левыми китайскими данными из еепром все встанет на свои места.

    p.s. А где все были, когда написать просил ПО по готовому алгоритму?

    p.p.s. Ну и если “&” стало нынче умножением, увольте меня нафиг. Даже в битовых операциях этот операнд не прокатит. А с другой стороны, я без работы не останусь, пока народ так учат.

    #45701
    Mef_poter
    Участник
    • Ответов: 112
    @mefody

    Тогда уж RS-485 можно применить. Всего-то по одному МАХ485 добавить, зато мультишина получится. Кстати под нее отлично MODBUS подходит, благо и библиотеки для Ардуины имеются )

    P.S. Кстати никто не мешает в силовой блок впендюрить старую, добрую ESP8266 и реализовать на WiFi MODBUS TCP…

    #45702
    Роман
    Участник
    • Ответов: 291
    @papazol

    При первой установке с левыми китайскими данными из еепром все встанет на свои места.

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

    Давайте медленно рассмотрим, как работает код.

    if ( powerMax > 9000 && ( powerMax % 50 ) != 0 ) powerMax = 3000;

    Говоря человеческим языком: если максимальная мощность больше 9000 И максимальная мощность НЕ кратна 50, то принимаем максимальную мощность равной 3000.

    Ещё раз: чтобы считанное из EEPROM значение мощности считалось невалидным и было заменено на значение по умолчанию, требуется одновременное выполнение двух Условий: 1) мощность больше 9000 и 2) мощность не кратна 50.

    Допустим, что мы считали из EEPROM значение 1234. Это значение должно быть заменено на 3000? Конечно! Но Условие № 1 не выполняется (мощность не больше 9000). И, хотя Условие № 2 выполняется (мощность не кратна 50), значение мощности не будет заменено на 3000.

    По Вашей логике 100500 примется за нормальный вариант.

    Допустим, мы считали из EEPROM значение 100500. Должно ли это значение быть заменено на 3000? Естественно! Условие № 1 выполняется (мощность больше 9000). Но Условие № 2 не выполняется (мощность-то кратна 50). Опять значение мощности не будет заменено на 3000.

    Если же строку кода написать так:

    if ( powerMax > 9000 || ( powerMax % 50 ) != 0 ) powerMax = 3000;

    то при выполнении любого из Условий значение мощности будет заменено на 3000.

    Ну и если “&” стало нынче умножением, увольте меня нафиг.

    …но истина дороже! Не знаю, является ли для Вас Википедия авторитетным источником, но https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BD%D1%8A%D1%8E%D0%BD%D0%BA%D1%86%D0%B8%D1%8F. Впрочем, и другие источники говорят то же самое: https://dic.academic.ru/dic.nsf/fin_enc/24761. Но дело не в терминологии, а в том, что мы с Вами должны понимать действие логической операции && одинаково, вне зависимости от того, как её называть: “логическое И”, “конъюнкция” или “логическое умножение”. Надеюсь, так и есть.

    #45703
    Роман
    Участник
    • Ответов: 291
    @papazol

    Тогда уж RS-485 можно применить.

    Это проводной интерфейс, а хочется-то беспроводного!

    #45705
    Mef_poter
    Участник
    • Ответов: 112
    @mefody

    Это проводной интерфейс, а хочется-то беспроводного!

    Тогда только ESP и дополнительный АЦП 😉

    #45710
    Sergey_r
    Участник
    • Ответов: 2934
    @serjrv

    Роман, давайте вы своему преподу мозг поклюете. Ну или по новой все попробуете понять. Не надо читать гребанную викепедию где жертвы ЕГЭ пишут. И не надо путать ЛОГИЧЕСКОЕ умножение, где участвуют только биты: нолики и единички. В моем “if” должны срастись именно 2 условия одновременно, при не выполнении любого из условий (9000 или кратность 50) значение будет 3000.

    А так, в принципе, делайте все сами.

    #45711
    Sergey_r
    Участник
    • Ответов: 2934
    @serjrv

    Тогда уж RS-485 можно применить.

    Это проводной интерфейс, а хочется-то беспроводного!

    Ну мы же подразумеваем силовой блок сразу и с блоком питания 12 вольт. Поэтому и не стал городить беспроводную связь. Вот с весами это реализую в дальнейшем.

    #45716
    Sergey_r
    Участник
    • Ответов: 2934
    @serjrv

    Роман, извиняюсь, ступил. Сейчас на отдыхе уже больше литра вина во мне ))) , а когда писал, торопился до отпуска все выдать. Действительно надо на ИЛИ условие поменять. Но к краху эта ошибка не приведет, т.к. изначально в чистом контроллере FFFF будет. Ну или при любом крайнем положении значений крутя энкодер все встанет на свои места.

    Еще раз извиняюсь за наезд (((

    #45732
    Mantis
    Участник
    • Ответов: 1279
    @mantis

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

    Ибо не х… в отпуске работать)))) А другим приставать , когда человек в отпуске ))))

    modern distiller, разрушаем "каноны")
    https://vk.com/club173629256
    Я хочу синего джина, я хочу чёрного рома....

    #45736
    Kostyan_nsk
    Участник
    • Ответов: 82
    @kostyan-nsk

    В скетче есть такая строка:

    if ( powerMax > 9000 && ( powerMax % 50 ) != 0 ) powerMax = 3000;

    Как я понял, это если при первом включении в EEPROM будет записана ересь, чтобы сразу поменять её на валидное значение мощности. Но почему условия логически умножаются? Ведь любое из них должно вызывать принудительное назначение мощности 3 кВт.

    В каком же из мест видим умножение? Просто сравниваем два условия, не более 9000 и кратность 50-ти (остаток от деления), т.е. должно срастись по условию и первое выражение и второе. Как то в языке “Си” у Вас прострация )))

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

    Потому что И от ИЛИ отличается кардинално. По Вашей логике 100500 примется за нормальный вариант. А у меня в алгоритме управления энкодером заложена кратность 50-ти и не более 9000. Что не так то? При первой установке с левыми китайскими данными из еепром все встанет на свои места. p.s. А где все были, когда написать просил ПО по готовому алгоритму? p.p.s. Ну и если “&” стало нынче умножением, увольте меня нафиг. Даже в битовых операциях этот операнд не прокатит. А с другой стороны, я без работы не останусь, пока народ так учат.

    Слово “логическое” намеренно игнорируем? Хотя, выше Роман уже всё разложил по полочкам, не буду повторяться…

    #45767
    Роман
    Участник
    • Ответов: 291
    @papazol

    Всё нормально, истина родилась 🙂

    Поэтому можно продолжить шлифовку кода 🙂

    Следующее, что нужно было бы добавить, это запись значения мощности ТЭНа по умолчанию в EEPROM непосредственно после присваивания переменной powerMax этого значения. Иначе, если пользователь не отрегулирует мощность ТЭНа вручную, то в EEPROM останется записано неверное значение. А не отрегулировать пользователь вполне может, если у него реальная мощность ТЭНа 3 кВт, при этом регулятор будет работать правильно. Вроде бы и не критично, но если задуматься об обмене данными с ЛБ, то.

    #45771
    Dark
    Участник
    • Ответов: 864
    @dark

    Так и мне можно сказать маленькое мнение?

    Думаю надо сначала проверить на кратность 50 и получить значение (например 3240 моща, значит надо int(3240/50)*50=3200 вторым шагом надо проверить на максимум 9000 и если это не противоречит принять 3200 а не 3000 и да если больше то не надо скидывать на меньшее значение и максимально допустимую мощу прошить намертво в блок, воизбежание.

     

    Да! Я с виду шут, но в душе король, и ни кто как я не может...

Просмотр 15 сообщений - с 211 по 225 (из 422 всего)
  • Для ответа в этой теме необходимо авторизоваться.