|
Вопросы о программировании Вопросы, касающиеся программирования на FBD |
|
Опции темы | Поиск в этой теме |
16.02.2012, 00:19 | #1 |
Member
Регистрация: Dec 2008
Сообщения: 60
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Логические головоломки
Предлагаю немного развеяться, отойти от повседневных дел и немного поиграть.
Вся соль заключается в том, что бы выполнить предложенное задание, написанное в Лоджике, с как можно меньшим количеством блоков FBD и наиболее оптимизированным по времени обработки FBD кода. Пример и задачка одновременно: Как определить, число 0 и 21 четное или не четное. Т.е. на входе в макрос ставим число, а на выходе имеем 0=четное, 1=нечет. тип данных на выходе не имеет значения. задачка интересна и вполне решаема, я ее решил в 3 блока. пока не покажу исходник, жду ваших решений и задач. Последний раз редактировалось RenatAVR, 16.02.2012 в 00:34 |
16.02.2012, 03:02 | #2 |
Member
Регистрация: Mar 2007
Сообщения: 39
Благодарил(а): 0 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
Ответ: Логические головоломки
А если так?
|
16.02.2012, 08:16 | #3 |
Member
Регистрация: Dec 2008
Сообщения: 60
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Логические головоломки
О, а я чет не подумал что так тоже можно.
а я вчера вот такую фигу сделал. |
16.02.2012, 10:55 | #4 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 117
Благодарил(а): 15 раз(а)
Поблагодарили:
660 раз(а) в 604 сообщениях
|
Ответ: Логические головоломки
Цитата:
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|
16.02.2012, 11:05 | #5 | |
Senior Member
Регистрация: Jul 2007
Адрес: Калининград
Сообщения: 422
Благодарил(а): 0 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
Ответ: Логические головоломки
Цитата:
А если булево, то как-то так: __________________ Автомат АК - самый распространенный преобразователь стека в очередь |
|
16.02.2012, 11:10 | #6 | |
Senior Member
Регистрация: Jul 2007
Адрес: Калининград
Сообщения: 422
Благодарил(а): 0 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
Ответ: Логические головоломки
Цитата:
__________________ Автомат АК - самый распространенный преобразователь стека в очередь |
|
16.02.2012, 11:21 | #7 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 117
Благодарил(а): 15 раз(а)
Поблагодарили:
660 раз(а) в 604 сообщениях
|
Ответ: Логические головоломки
Цитата:
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|
16.02.2012, 12:01 | #8 |
Member
Регистрация: Dec 2008
Сообщения: 60
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Логические головоломки
Анука-анука, давай ктонить предлож ешо че нить.
|
16.02.2012, 12:41 | #9 |
Member
Регистрация: Nov 2008
Сообщения: 50
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Логические головоломки
предлагаю написать функцию знака числа (sign, сигнум): на входе имеем любое число, на выходе должны получить 1, если число положительное, 0 если число равно 0, и -1 если число отрицательное
|
16.02.2012, 13:09 | #10 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 117
Благодарил(а): 15 раз(а)
Поблагодарили:
660 раз(а) в 604 сообщениях
|
Ответ: Логические головоломки
Цитата:
ABS()+CMP() - это общее решение для выяснения знака + CMP() для сравнения с нулём. При этом блок "xxx->bool" с успеход заменит второй компаратор. Для целых типов можно использовать быстрый алгоритм: старший бит указывает на знак числа. Как сравнить с нулём я написал ранее. __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|
16.02.2012, 13:32 | #11 |
Member
Регистрация: Nov 2008
Сообщения: 50
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Логические головоломки
Изначальная задача про четность числа тоже на головоломку не тянет, а вот реализации этих задач с наименьшим количеством блоков и лучшим быстродействием - это как раз и есть головоломка
В условии написано, что на вход подается любое число, т.е. целые не подходят, и ответ должен быть в виде числа, и еще мне не совсем понятно для чего здесь ABS() нужен |
16.02.2012, 13:57 | #12 | |
Senior Member
Регистрация: Dec 2007
Адрес: Томск
Сообщения: 4 163
Благодарил(а): 240 раз(а)
Поблагодарили:
165 раз(а) в 157 сообщениях
|
Ответ: Логические головоломки
Цитата:
if(abs(x)>0) { y=1 if(x<0)y=-1 } else y=0 v2 if(x<0)y=-1 else if(x>0)y=1 else y=0 v3 см.картинко еслип в палитре фбд былип блоки шифратор-дешифратор, то многие такие функции выглядилип поизящней. |
|
16.02.2012, 14:24 | #13 |
Member
Регистрация: Nov 2008
Сообщения: 50
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Логические головоломки
реализация на лоджике во вложении, а вот в текстовом виде я бы написал так:
y=0; if (x>0) y=1; if (x<0) y=-1; |
16.02.2012, 14:27 | #14 | |
Senior Member
Регистрация: Jul 2007
Адрес: Калининград
Сообщения: 422
Благодарил(а): 0 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
Ответ: Логические головоломки
Цитата:
Для real пришлось использовать мультиплексор (недолюбливаю я их за прожорливость ресурсов). __________________ Автомат АК - самый распространенный преобразователь стека в очередь |
|
16.02.2012, 14:37 | #15 | |
Senior Member
Регистрация: Jul 2007
Адрес: Калининград
Сообщения: 422
Благодарил(а): 0 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
Ответ: Логические головоломки
Цитата:
http://forum.segnetics.com/showthrea...10019#poststop Еще головоломка, которую на прошлой недели решил: Есть три термодатчика, у каждого по бинарному выходу неисправности и реальному выходу температуры. Надо сделать максимально надежный и отказоустойчивый селектор 0 - температура датчика 1 1 - температура датчика 2 2 - температура датчика 3 3 - минимальная температура датчиков 1 и 2 4 - максимальная температура датчиков 1 и 2 5 - средняя температура датчиков 1 и 2 6 - минимальная температура датчиков 1, 2 и 3 7 - максимальная температура датчиков 1, 2 и 3 8 - средняя температура датчиков 1, 2 и 3 У меня получилось 27 блоков. __________________ Автомат АК - самый распространенный преобразователь стека в очередь Последний раз редактировалось Sergey Cherevko, 16.02.2012 в 14:49 |
|
16.02.2012, 15:01 | #16 | |
Senior Member
Регистрация: Jun 2007
Адрес: Tyumen
Сообщения: 2 052
Благодарил(а): 20 раз(а)
Поблагодарили:
21 раз(а) в 21 сообщениях
|
Ответ: Логические головоломки
Цитата:
И что делать с выходами "авария"? |
|
16.02.2012, 15:04 | #17 |
Member
Регистрация: Nov 2008
Сообщения: 50
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Логические головоломки
что и при каких условиях должен давать селектор на выходе?
|
16.02.2012, 15:19 | #18 | ||
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 117
Благодарил(а): 15 раз(а)
Поблагодарили:
660 раз(а) в 604 сообщениях
|
Ответ: Логические головоломки
Цитата:
Цитата:
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
||
16.02.2012, 15:27 | #19 | |
Senior Member
Регистрация: Dec 2007
Адрес: Томск
Сообщения: 4 163
Благодарил(а): 240 раз(а)
Поблагодарили:
165 раз(а) в 157 сообщениях
|
Ответ: Логические головоломки
Цитата:
|
|
16.02.2012, 15:29 | #20 | |
Senior Member
Регистрация: Jul 2007
Адрес: Калининград
Сообщения: 422
Благодарил(а): 0 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
Ответ: Логические головоломки
Цитата:
Допустим вычисляется среднее по двум датчикам, а один датчик вдруг отвалился. На выходе должно быть корректное значение оставшегося работоспособным датчика. Вот для этого и нужны выходы аварии. __________________ Автомат АК - самый распространенный преобразователь стека в очередь |
|
16.02.2012, 15:30 | #21 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 117
Благодарил(а): 15 раз(а)
Поблагодарили:
660 раз(а) в 604 сообщениях
|
Ответ: Логические головоломки
Цитата:
Тем более, что позиция старшего бита известна в виде константы: 16 для инте и 32 для лонга __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|
16.02.2012, 15:35 | #22 | |
Senior Member
Регистрация: Jul 2007
Адрес: Калининград
Сообщения: 422
Благодарил(а): 0 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
Ответ: Логические головоломки
Цитата:
Ну если совсем все датчики мертвые, то хотя бы 0 на выходе температуры и флажок фатальной невозможности выполнить вычисления. __________________ Автомат АК - самый распространенный преобразователь стека в очередь |
|
16.02.2012, 15:45 | #23 | |
Senior Member
Регистрация: Jun 2007
Адрес: Tyumen
Сообщения: 2 052
Благодарил(а): 20 раз(а)
Поблагодарили:
21 раз(а) в 21 сообщениях
|
Ответ: Логические головоломки
Цитата:
А если я выбираю ноль (т.е. датчик Т1), а он "отвалился"? Что тогда надо делать? |
|
16.02.2012, 16:00 | #24 | ||
Senior Member
Регистрация: Jul 2007
Адрес: Калининград
Сообщения: 422
Благодарил(а): 0 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
Ответ: Логические головоломки
Цитата:
Цитата:
Если вычислить возможно - то вычисляется с игнорированием неработоспособного датчика. На выходе должно быть корректное значение. Например: Вычисляется минимальная из температур от всех трех датчиков. Второй отвалился. На выходе - минимальная от первого и третьего датчика. У меня при этом еще взводился флажок нефатальной тревоги. Фатальная авария - если совсем никак не вычислить. Нефатальная тревога - просто предупреждение. Если работа по одному датчику и он отвалился - то конечно авария без вариантов. __________________ Автомат АК - самый распространенный преобразователь стека в очередь |
||
16.02.2012, 16:49 | #25 |
Member
Регистрация: Nov 2008
Сообщения: 50
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Логические головоломки
вот такой вот макрос с селектором получился, блоков 25 штук
макрос min_max взят отсюда: http://forum.segnetics.com/showpost....41&postcount=5 |
16.02.2012, 17:00 | #26 | |
Senior Member
Регистрация: Jul 2007
Адрес: Калининград
Сообщения: 422
Благодарил(а): 0 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
Ответ: Логические головоломки
Цитата:
Хотя я тоже в итоге решил задачу "в лоб", не очень красиво... __________________ Автомат АК - самый распространенный преобразователь стека в очередь |
|
16.02.2012, 17:31 | #27 |
Senior Member
Регистрация: May 2010
Адрес: Novosibirsk
Сообщения: 761
Благодарил(а): 1 раз(а)
Поблагодарили:
10 раз(а) в 10 сообщениях
|
Ответ: Логические головоломки
Для инт и лонг. Для реал надо подумать.
|
16.02.2012, 17:37 | #28 | |
Member
Регистрация: Nov 2008
Сообщения: 50
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Логические головоломки
Цитата:
|
|
16.02.2012, 17:40 | #29 |
Member
Регистрация: Nov 2008
Сообщения: 50
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Логические головоломки
ujin , шикарное решение. Вопрос только, почему для real не подойдет?
|
16.02.2012, 17:45 | #30 |
Senior Member
Регистрация: May 2010
Адрес: Novosibirsk
Сообщения: 761
Благодарил(а): 1 раз(а)
Поблагодарили:
10 раз(а) в 10 сообщениях
|
Ответ: Логические головоломки
для реал
|