баг/фича при работе с платами

На этом форуме Вы можете задать вопросы знатокам программы и автору.
Ответить
holodaleksey
Лейтенант
Сообщения: 566
Зарегистрирован: 10.01.2016{, 13:47}
Репутация: 14

баг/фича при работе с платами

#1

Сообщение holodaleksey » 14.01.2022{, 11:01}

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

при работе с разбивкой на платы, и выполнению этих плат по условиям "нашел" (а вот тут выбери сам) баг/фича/нюанс.
если на плате есть выходы на физические пины (что найдено мной, а может, и скорее всего будет распространяться и на выходные переменные на этой плате), а плата выполняется по условию (в моем случае чек-бокс на вебе), то в случае отключения платы - выход зависнет в том состоянии, в котором он находился в момент выключения платы.
(у меня было 2 выхода: шим и дискрет, и если в момент отключения платы на них было состояние, отличное от "выключено", то именно это состояние и оставалось, до момента включения платы, потом все работает штатно).

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

так что - считаю что это Нюанс, который надо учитывать. и более-менее требовательные к выполнению процессы (цикличная работа или терморегулятор) - на фактическое отключение пинов по отключению плат не привязывать, а только через блоки "И".
Подпись удалена мною по требованию администрации форума, что является нарушение демократии )

Naladchik
Капитан
Сообщения: 823
Зарегистрирован: 04.10.2015{, 19:10}
Репутация: 153
Откуда: Новосибирск
Имя: Павел

баг/фича при работе с платами

#2

Сообщение Naladchik » 14.01.2022{, 11:08}

holodaleksey писал(а):
14.01.2022{, 11:01}
... именно это поведение по факту норма ...
На мой взгляд это так и есть. Отключил плату - состояние зафиксировалось (если в другом месте не меняется).
Иначе потом с ума сойдешь искать кто где и в какой момент сигнал сбросил.
Win10-64. FLProg Portable.
Изображение

Аватара пользователя
Phazz
Полковник
Сообщения: 2552
Зарегистрирован: 17.10.2016{, 15:38}
Репутация: 367
Откуда: Сургут
Имя: Анатолий

баг/фича при работе с платами

#3

Сообщение Phazz » 14.01.2022{, 11:44}

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

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

баг/фича при работе с платами

#4

Сообщение Dryundel » 14.01.2022{, 14:19}

holodaleksey писал(а):
14.01.2022{, 11:01}
если на плате есть выходы на физические пины...
...
если в момент отключения платы на них было состояние, отличное от "выключено", то именно это состояние и оставалось, до момента включения платы...
Это абсолютно нормальное и правильное поведение. Так и должно быть. Никакого бага и нюанса в этом нет.
Phazz, правильно рассказал что требуется сделать для осуществления, задуманной конкретно Вами, логики.
Давайте рассмотрим этот момент с точки зрения программирования.
Для полного понимания, рекомендую почитать эту тему - Создание пользовательского блока (Code-Basic) простым языком.. Конкретно пост #4 из этой темы.

Как выглядит работа платы по условию.

if (условие работы платы == истина)
{
Изменяем состояние выхода;
}


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

if (условие работы платы == ложь)
{
Состояние выхода = 0;
}


Эта дополнительная плата будет выглядеть так:
Выход.jpg
Выход.jpg (1.61 КБ) 225 просмотров

Ответить

Вернуться в «Спросить у знатоков»