jenya7 0 21 июля, 2020 Опубликовано 21 июля, 2020 (изменено) · Жалоба На этот пост меня вдохновил вот этот топик. Там человека с говном смешали раскритиковали. Вот это мне и нужно – чтобы ткнули мордой в ту же субстанцию. Я сделал что то вроде PLC для теплиц. В нем есть входы и выходы. Вход может быть Quote Дигитальный - 1/0 Аналоговый - 0-4096(12 бит) Счетчик - uint32_t Сенсор – температура, давление и так далее (float) Выход может быть Quote Дигитальный - 1/0 PWM 0-100% Кроме этого есть вспомогательные переменные VAR0-VARn для промежуточных вычислений. Есть скрипт который определяет поведение системы. Например. Самое элементарное - включение выхода при замыкании входа IF IN5==1 AND IN6==1 THEN OUT14=1 ELSE OUT14=0; Простая поливалка по времени IF TIME==14:30:00 THEN OUT14=1; IF TIME==15:30:00 THEN OUT14=0; Регулировка скорости вентилятора по температурному датчику IF SNS0>40 THEN PWM4=90; IF SNS0>30 AND SNS0<40 THEN PWM4=70; IF SNS0>20 AND SNS0<30 THEN PWM4=20; Инвертирование выхода каждые 4 пульса на входе IF IN5>=4 THEN OUT14^=1 IN5=0; Ну и всякие промежуточные вычисления IF SNS0>SNS1 THEN VAR2=(SNS0-SNS1) VAR3=1; IF SNS1>SNS0 THEN VAR2=(SNS1-SNS0) VAR3=2; IF VAR3==1 THEN VAR0-=VAR2 VAR1+=VAR2; Прогнал все сценарии вроде все четко работает. Но так не бывает чтоб все было хорошо. Но я как то не могу придумать какой нибудь сценарий чтоб завалить мою стройную теорию. А может нужен дополнительный функционал? У меня глаз замылился а со стороны виднее какие факи я не учел. Что скажете? Изменено 21 июля, 2020 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Herz 4 21 июля, 2020 Опубликовано 21 июля, 2020 · Жалоба А о чём здесь? Где здесь стройная теория, где алгоритм? Вижу несколько строчек типа Ардуино-скрипта. На чём сделано что то вроде PLC для теплиц? И вот, кстати, о поливалке. А что, если время не 14:30 и не 15:30? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nice_vladi 1 21 июля, 2020 Опубликовано 21 июля, 2020 · Жалоба Spoiler Порвало с "ДИГИТАЛЬНОГО", извините, не удержался Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 21 июля, 2020 Опубликовано 21 июля, 2020 · Жалоба 32 минуты назад, jenya7 сказал: IF SNS0>SNS1 THEN VAR2=(SNS0-SNS1) VAR3=1; Про "атомарность" слыхивали? Если да, то что будет если перед IF: SNS0>SNS1, а перед THEN станет: SNS0<SNS1 ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 21 июля, 2020 Опубликовано 21 июля, 2020 · Жалоба 1 hour ago, Herz said: И вот, кстати, о поливалке. А что, если время не 14:30 и не 15:30? ну выполниться код OUT14=1 (WRITE_REG(out->port->BSRR, out->pin);) или OUT14=0 (WRITE_REG(out->port->BRR, out->pin);) в течении секунды (в 14:30:01 условие вернет false). это проблема? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 21 июля, 2020 Опубликовано 21 июля, 2020 · Жалоба 5 минут назад, jenya7 сказал: ну выполниться код OUT14=1 (WRITE_REG(out->port->BSRR, out->pin);) или OUT14=0 (WRITE_REG(out->port->BRR, out->pin);) в течении секунды (в 14:30:01 условие вернет false). это проблема? А где гарантия, что период вашего суперлупа всегда меньше 1 секунды? И что в системе не будет переводов часов во время её работы к примеру? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 21 июля, 2020 Опубликовано 21 июля, 2020 · Жалоба 1 hour ago, jcxz said: Про "атомарность" слыхивали? Если да, то что будет если перед IF: SNS0>SNS1, а перед THEN станет: SNS0<SNS1 ? ну датчики не такие быстрые. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 21 июля, 2020 Опубликовано 21 июля, 2020 · Жалоба 3 минуты назад, jenya7 сказал: ну датчики не такие быстрые. Какая разница насколько быстрые датчики? Или то что будет глючить, но не часто - это для вас нормально? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 21 июля, 2020 Опубликовано 21 июля, 2020 · Жалоба 1 hour ago, jcxz said: 1 - А где гарантия, что период вашего суперлупа всегда меньше 1 секунды? 2 -И что в системе не будет переводов часов во время её работы к примеру? 1 -ну пожалуй таки да - надо выделить временное окно или придумать что то поумнее. 2 -для модификации параметров пользователь должен войти в сервис режим - а в нем скрипт не бежит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 21 июля, 2020 Опубликовано 21 июля, 2020 · Жалоба 46 минут назад, jenya7 сказал: Инвертирование выхода каждые 4 пульса на входе IF IN5>=4 THEN OUT14^=1 IN5=0; Опять-же: в зависимости от того, обеспечена атомарность или нет, условие THEN будет срабатывать или через 4 инкремента IN5 или через 5 инкрементов. Как фишка ляжет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 21 июля, 2020 Опубликовано 21 июля, 2020 · Жалоба 1 hour ago, jcxz said: Какая разница насколько быстрые датчики? Или то что будет глючить, но не часто - это для вас нормально? ну тут надо помозговать. а что предложите? 1 hour ago, jcxz said: Опять-же: в зависимости от того, обеспечена атомарность или нет, условие THEN будет срабатывать или через 4 инкремента IN5 или через 5 инкрементов. Как фишка ляжет. то есть скрипт должен быть достаточно быстрым чтоб перекрыть все критические ситуации. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 21 июля, 2020 Опубликовано 21 июля, 2020 · Жалоба 5 минут назад, jenya7 сказал: ну тут надо помозговать. а что предложите? Обеспечить атомарность доступа ко всем этим SNS0, IN5 и пр. А прочее - зависит от алгоритма работы вашей программы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 21 июля, 2020 Опубликовано 21 июля, 2020 (изменено) · Жалоба 1 hour ago, jcxz said: Обеспечить атомарность доступа ко всем этим SNS0, IN5 и пр. А прочее - зависит от алгоритма работы вашей программы. проблемка однако. Изменено 21 июля, 2020 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 21 июля, 2020 Опубликовано 21 июля, 2020 (изменено) · Жалоба 2 hours ago, jenya7 said: 1 -ну пожалуй таки да - надо выделить временное окно или придумать что то поумнее. 2 -для модификации параметров пользователь должен войти в сервис режим - а в нем скрипт не бежит. кстати тут у меня серьезный фак. если пользователь завис в сервис режиме вся система осталась без присмотра. капец. вопрос на каком уровне я должен контролировать пользователя. вдруг он переопределил входы-выходы, переписал скрипт, я должен догадаться что у него в башке? он как бы должен сам контролировать свои действия. Изменено 21 июля, 2020 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Oymyacon 0 21 июля, 2020 Опубликовано 21 июля, 2020 (изменено) · Жалоба 6 hours ago, jcxz said: И что в системе не будет переводов часов во время её работы к примеру? А нафига в теплице локальный перевод часов? Его и глобального не надо. Подстройка локального времени к глобальному осуществляется плавно. Изменено 21 июля, 2020 пользователем Oymyacon Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться