Перейти к содержанию
    

Помогите убить мой алгоритм.

На этот пост меня вдохновил вот этот топик.

Там человека с говном смешали раскритиковали. Вот это мне и нужно – чтобы ткнули мордой в ту же субстанцию.

Я сделал что то вроде 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;

Прогнал все сценарии вроде все четко работает. Но так не бывает чтоб все было хорошо.

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

А может нужен дополнительный функционал?

У меня глаз замылился а со стороны виднее какие факи я не учел. Что скажете?

 

Изменено пользователем jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А о чём здесь? Где здесь стройная теория, где алгоритм? Вижу несколько строчек типа Ардуино-скрипта.

На чём сделано что то вроде PLC для теплиц?

И вот, кстати, о поливалке. А что, если время не 14:30 и не 15:30?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

32 минуты назад, jenya7 сказал:

IF SNS0>SNS1 THEN VAR2=(SNS0-SNS1) VAR3=1;

Про "атомарность" слыхивали? Если да, то что будет если перед IF: SNS0>SNS1, а перед THEN станет: SNS0<SNS1 ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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). это проблема?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 секунды? И что в системе не будет переводов часов во время её работы к примеру?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, jcxz said:

Про "атомарность" слыхивали? Если да, то что будет если перед IF: SNS0>SNS1, а перед THEN станет: SNS0<SNS1 ?

ну датчики не такие быстрые.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 минуты назад, jenya7 сказал:

ну датчики не такие быстрые.

Какая разница насколько быстрые датчики? Или то что будет глючить, но не часто - это для вас нормально? :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, jcxz said:

1 - А где гарантия, что период вашего суперлупа всегда меньше 1 секунды? 2 -И что в системе не будет переводов часов во время её работы к примеру?

1 -ну пожалуй таки да - надо выделить временное окно или придумать что то поумнее. 2 -для модификации параметров пользователь должен войти в сервис режим - а в нем скрипт не бежит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

46 минут назад, jenya7 сказал:

Инвертирование выхода каждые 4 пульса на входе


IF IN5>=4 THEN OUT14^=1 IN5=0;

 

Опять-же: в зависимости от того, обеспечена атомарность или нет, условие THEN будет срабатывать или через 4 инкремента IN5 или через 5 инкрементов. Как фишка ляжет.  :unknw:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, jcxz said:

Какая разница насколько быстрые датчики? Или то что будет глючить, но не часто - это для вас нормально? :biggrin:

ну тут надо помозговать. а что предложите?

1 hour ago, jcxz said:

Опять-же: в зависимости от того, обеспечена атомарность или нет, условие THEN будет срабатывать или через 4 инкремента IN5 или через 5 инкрементов. Как фишка ляжет.  :unknw:

то есть скрипт должен быть достаточно быстрым чтоб перекрыть все критические ситуации.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 минут назад, jenya7 сказал:

ну тут надо помозговать. а что предложите?

Обеспечить атомарность доступа ко всем этим SNS0, IN5 и пр. А прочее - зависит от алгоритма работы вашей программы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, jcxz said:

Обеспечить атомарность доступа ко всем этим SNS0, IN5 и пр. А прочее - зависит от алгоритма работы вашей программы.

проблемка однако. :cray:

Изменено пользователем jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 hours ago, jenya7 said:

1 -ну пожалуй таки да - надо выделить временное окно или придумать что то поумнее. 2 -для модификации параметров пользователь должен войти в сервис режим - а в нем скрипт не бежит.

кстати тут у меня серьезный фак. если пользователь завис в сервис режиме вся система осталась без присмотра. капец.

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

Изменено пользователем jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 hours ago, jcxz said:

И что в системе не будет переводов часов во время её работы к примеру?

А нафига в теплице локальный перевод часов? Его и глобального не надо.

Подстройка локального времени к глобальному осуществляется плавно.

Изменено пользователем Oymyacon

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...