Segnetics

Вернуться   Segnetics > Форум Segnetics > Вопросы о программировании

Вопросы о программировании Вопросы, касающиеся программирования на FBD

Ответ
 
Опции темы Поиск в этой теме
Старый 16.02.2012, 00:19   #1
RenatAVR
Member
 
Регистрация: Dec 2008
Сообщения: 60
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Smile Логические головоломки

Предлагаю немного развеяться, отойти от повседневных дел и немного поиграть.
Вся соль заключается в том, что бы выполнить предложенное задание, написанное в Лоджике, с как можно меньшим количеством блоков FBD и наиболее оптимизированным по времени обработки FBD кода.

Пример и задачка одновременно:

Как определить, число 0 и 21 четное или не четное.
Т.е. на входе в макрос ставим число, а на выходе имеем 0=четное, 1=нечет.
тип данных на выходе не имеет значения.

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

Последний раз редактировалось RenatAVR, 16.02.2012 в 00:34
RenatAVR вне форума   Ответить с цитированием
Старый 16.02.2012, 03:02   #2
Aard
Member
 
Регистрация: Mar 2007
Сообщения: 39
Благодарил(а): 0 раз(а)
Поблагодарили: 1 раз в 1 сообщении
По умолчанию Ответ: Логические головоломки

А если так?
Изображения
Тип файла: png EvenOdd.PNG (3.3 Кбайт, 483 просмотров)
Aard вне форума   Ответить с цитированием
Старый 16.02.2012, 08:16   #3
RenatAVR
Member
 
Регистрация: Dec 2008
Сообщения: 60
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Ответ: Логические головоломки

О, а я чет не подумал что так тоже можно.
а я вчера вот такую фигу сделал.
Изображения
Тип файла: jpg Точечный рисунок.JPG (13.5 Кбайт, 439 просмотров)
RenatAVR вне форума   Ответить с цитированием
Старый 16.02.2012, 10:55   #4
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 117
Благодарил(а): 15 раз(а)
Поблагодарили: 660 раз(а) в 604 сообщениях
По умолчанию Ответ: Логические головоломки

Цитата:
Сообщение от RenatAVR
О, а я чет не подумал что так тоже можно.
а я вчера вот такую фигу сделал.
Я вволю посмеялсо =)


__________________
Программа делает то что написал программист, а не то что он хотел.

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie сейчас на форуме   Ответить с цитированием
Старый 16.02.2012, 11:05   #5
Sergey Cherevko
Senior Member
 
Аватара для Sergey Cherevko
 
Регистрация: Jul 2007
Адрес: Калининград
Сообщения: 422
Благодарил(а): 0 раз(а)
Поблагодарили: 1 раз в 1 сообщении
По умолчанию Ответ: Логические головоломки

Цитата:
Сообщение от Aard
А если так?
Это если нужно интовое значение.
А если булево, то как-то так:
Изображения
Тип файла: jpg 1.JPG (6.7 Кбайт, 337 просмотров)


__________________
Автомат АК - самый распространенный преобразователь стека в очередь
Sergey Cherevko вне форума   Ответить с цитированием
Старый 16.02.2012, 11:10   #6
Sergey Cherevko
Senior Member
 
Аватара для Sergey Cherevko
 
Регистрация: Jul 2007
Адрес: Калининград
Сообщения: 422
Благодарил(а): 0 раз(а)
Поблагодарили: 1 раз в 1 сообщении
По умолчанию Ответ: Логические головоломки

Цитата:
Сообщение от Arsie
Я вволю посмеялсо =)
А что смеяться, нормальное вычисление остатка от деления. Я так тоже делаю, только разумеется не для делителей, кратных степени двойки.


__________________
Автомат АК - самый распространенный преобразователь стека в очередь
Sergey Cherevko вне форума   Ответить с цитированием
Старый 16.02.2012, 11:21   #7
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 117
Благодарил(а): 15 раз(а)
Поблагодарили: 660 раз(а) в 604 сообщениях
По умолчанию Ответ: Логические головоломки

Цитата:
Сообщение от Sergey Cherevko
А что смеяться, нормальное вычисление остатка от деления. Я так тоже делаю, только разумеется не для делителей, кратных степени двойки.
Авторское решение оказалось самым громоздким для предложенных исходных условий - это не может не улыбать


__________________
Программа делает то что написал программист, а не то что он хотел.

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie сейчас на форуме   Ответить с цитированием
Старый 16.02.2012, 12:01   #8
RenatAVR
Member
 
Регистрация: Dec 2008
Сообщения: 60
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Ответ: Логические головоломки

Анука-анука, давай ктонить предлож ешо че нить.
RenatAVR вне форума   Ответить с цитированием
Старый 16.02.2012, 12:41   #9
SSeVa
Member
 
Регистрация: Nov 2008
Сообщения: 50
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Ответ: Логические головоломки

предлагаю написать функцию знака числа (sign, сигнум): на входе имеем любое число, на выходе должны получить 1, если число положительное, 0 если число равно 0, и -1 если число отрицательное
SSeVa вне форума   Ответить с цитированием
Старый 16.02.2012, 13:09   #10
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 117
Благодарил(а): 15 раз(а)
Поблагодарили: 660 раз(а) в 604 сообщениях
По умолчанию Ответ: Логические головоломки

Цитата:
Сообщение от SSeVa
предлагаю написать функцию знака числа (sign, сигнум): на входе имеем любое число, на выходе должны получить 1, если число положительное, 0 если число равно 0, и -1 если число отрицательное
Это типовая функция, никакой головоломки не содержит.

ABS()+CMP() - это общее решение для выяснения знака + CMP() для сравнения с нулём. При этом блок "xxx->bool" с успеход заменит второй компаратор.

Для целых типов можно использовать быстрый алгоритм: старший бит указывает на знак числа. Как сравнить с нулём я написал ранее.


__________________
Программа делает то что написал программист, а не то что он хотел.

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie сейчас на форуме   Ответить с цитированием
Старый 16.02.2012, 13:32   #11
SSeVa
Member
 
Регистрация: Nov 2008
Сообщения: 50
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Ответ: Логические головоломки

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

В условии написано, что на вход подается любое число, т.е. целые не подходят, и ответ должен быть в виде числа, и еще мне не совсем понятно для чего здесь ABS() нужен
SSeVa вне форума   Ответить с цитированием
Старый 16.02.2012, 13:57   #12
LordN
Senior Member
 
Регистрация: Dec 2007
Адрес: Томск
Сообщения: 4 163
Благодарил(а): 240 раз(а)
Поблагодарили: 165 раз(а) в 157 сообщениях
По умолчанию Ответ: Логические головоломки

Цитата:
Сообщение от SSeVa
Изначальная задача про четность числа тоже на головоломку не тянет, а вот реализации этих задач с наименьшим количеством блоков и лучшим быстродействием - это как раз и есть головоломка

В условии написано, что на вход подается любое число, т.е. целые не подходят, и ответ должен быть в виде числа, и еще мне не совсем понятно для чего здесь ABS() нужен
v1
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 см.картинко


еслип в палитре фбд былип блоки шифратор-дешифратор, то многие такие функции выглядилип поизящней.
Изображения
Тип файла: png sign.PNG (9.8 Кбайт, 228 просмотров)


__________________
C уважением, LordN
LordN вне форума   Ответить с цитированием
Старый 16.02.2012, 14:24   #13
SSeVa
Member
 
Регистрация: Nov 2008
Сообщения: 50
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Ответ: Логические головоломки

реализация на лоджике во вложении, а вот в текстовом виде я бы написал так:

y=0;
if (x>0) y=1;
if (x<0) y=-1;
Вложения
Тип файла: msl Sign.msl (3.7 Кбайт, 31 просмотров)
SSeVa вне форума   Ответить с цитированием
Старый 16.02.2012, 14:27   #14
Sergey Cherevko
Senior Member
 
Аватара для Sergey Cherevko
 
Регистрация: Jul 2007
Адрес: Калининград
Сообщения: 422
Благодарил(а): 0 раз(а)
Поблагодарили: 1 раз в 1 сообщении
По умолчанию Ответ: Логические головоломки

Цитата:
Сообщение от SSeVa
предлагаю написать функцию знака числа (sign, сигнум): на входе имеем любое число, на выходе должны получить 1, если число положительное, 0 если число равно 0, и -1 если число отрицательное
Как-то так.
Для real пришлось использовать мультиплексор (недолюбливаю я их за прожорливость ресурсов).
Изображения
Тип файла: jpg 1.JPG (55.2 Кбайт, 160 просмотров)


__________________
Автомат АК - самый распространенный преобразователь стека в очередь
Sergey Cherevko вне форума   Ответить с цитированием
Старый 16.02.2012, 14:37   #15
Sergey Cherevko
Senior Member
 
Аватара для Sergey Cherevko
 
Регистрация: Jul 2007
Адрес: Калининград
Сообщения: 422
Благодарил(а): 0 раз(а)
Поблагодарили: 1 раз в 1 сообщении
По умолчанию Ответ: Логические головоломки

Цитата:
Сообщение от SSeVa
реализация на лоджике во вложении, а вот в текстовом виде я бы написал так:

y=0;
if (x>0) y=1;
if (x<0) y=-1;
Есть вариант с почти в 2 раза меньшим количеством FBD:
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
Sergey Cherevko вне форума   Ответить с цитированием
Старый 16.02.2012, 15:01   #16
Max2114
Senior Member
 
Регистрация: Jun 2007
Адрес: Tyumen
Сообщения: 2 052
Благодарил(а): 20 раз(а)
Поблагодарили: 21 раз(а) в 21 сообщениях
По умолчанию Ответ: Логические головоломки

Цитата:
Сообщение от Sergey Cherevko
Есть вариант с почти в 2 раза меньшим количеством FBD:
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 блоков.
Так это же обычный мультплексор + математика для вычисления пунктов с 3-го по 8-й...
И что делать с выходами "авария"?
Max2114 вне форума   Ответить с цитированием
Старый 16.02.2012, 15:04   #17
SSeVa
Member
 
Регистрация: Nov 2008
Сообщения: 50
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Ответ: Логические головоломки

что и при каких условиях должен давать селектор на выходе?
SSeVa вне форума   Ответить с цитированием
Старый 16.02.2012, 15:19   #18
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 117
Благодарил(а): 15 раз(а)
Поблагодарили: 660 раз(а) в 604 сообщениях
По умолчанию Ответ: Логические головоломки

Цитата:
Сообщение от LordN
v3 см.картинко
Можно проще: использовать выходы ">" и "<" - этого достаточно. Программа будет компактнее.


Цитата:
Сообщение от LordN
еслип в палитре фбд былип блоки шифратор-дешифратор, то многие такие функции выглядилип поизящней.
Простите, что шифровать-то? Код Хэмминга?


__________________
Программа делает то что написал программист, а не то что он хотел.

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie сейчас на форуме   Ответить с цитированием
Старый 16.02.2012, 15:27   #19
LordN
Senior Member
 
Регистрация: Dec 2007
Адрес: Томск
Сообщения: 4 163
Благодарил(а): 240 раз(а)
Поблагодарили: 165 раз(а) в 157 сообщениях
По умолчанию Ответ: Логические головоломки

Цитата:
Сообщение от Arsie
Можно проще: использовать выходы ">" и "<" - этого достаточно. Программа будет компактнее.




Простите, что шифровать-то? Код Хэмминга?
позицию старшего бита, например


__________________
C уважением, LordN
LordN вне форума   Ответить с цитированием
Старый 16.02.2012, 15:29   #20
Sergey Cherevko
Senior Member
 
Аватара для Sergey Cherevko
 
Регистрация: Jul 2007
Адрес: Калининград
Сообщения: 422
Благодарил(а): 0 раз(а)
Поблагодарили: 1 раз в 1 сообщении
По умолчанию Ответ: Логические головоломки

Цитата:
Сообщение от Max2114
Так это же обычный мультплексор + математика для вычисления пунктов с 3-го по 8-й...
И что делать с выходами "авария"?
Было бы просто - я бы не головоломку не задавал
Допустим вычисляется среднее по двум датчикам, а один датчик вдруг отвалился. На выходе должно быть корректное значение оставшегося работоспособным датчика. Вот для этого и нужны выходы аварии.


__________________
Автомат АК - самый распространенный преобразователь стека в очередь
Sergey Cherevko вне форума   Ответить с цитированием
Старый 16.02.2012, 15:30   #21
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 117
Благодарил(а): 15 раз(а)
Поблагодарили: 660 раз(а) в 604 сообщениях
По умолчанию Ответ: Логические головоломки

Цитата:
Сообщение от LordN
позицию старшего бита, например
Це ж не (де)кодеры делают...

Тем более, что позиция старшего бита известна в виде константы: 16 для инте и 32 для лонга


__________________
Программа делает то что написал программист, а не то что он хотел.

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie сейчас на форуме   Ответить с цитированием
Старый 16.02.2012, 15:35   #22
Sergey Cherevko
Senior Member
 
Аватара для Sergey Cherevko
 
Регистрация: Jul 2007
Адрес: Калининград
Сообщения: 422
Благодарил(а): 0 раз(а)
Поблагодарили: 1 раз в 1 сообщении
По умолчанию Ответ: Логические головоломки

Цитата:
Сообщение от SSeVa
что и при каких условиях должен давать селектор на выходе?
Корректные значения по работоспособным датчикам независимо от типа вычисления минимальное/максимальное/среднее.
Ну если совсем все датчики мертвые, то хотя бы 0 на выходе температуры и флажок фатальной невозможности выполнить вычисления.


__________________
Автомат АК - самый распространенный преобразователь стека в очередь
Sergey Cherevko вне форума   Ответить с цитированием
Старый 16.02.2012, 15:45   #23
Max2114
Senior Member
 
Регистрация: Jun 2007
Адрес: Tyumen
Сообщения: 2 052
Благодарил(а): 20 раз(а)
Поблагодарили: 21 раз(а) в 21 сообщениях
По умолчанию Ответ: Логические головоломки

Цитата:
Сообщение от Sergey Cherevko
Было бы просто - я бы не головоломку не задавал
Допустим вычисляется среднее по двум датчикам, а один датчик вдруг отвалился. На выходе должно быть корректное значение оставшегося работоспособным датчика. Вот для этого и нужны выходы аварии.
Понял надо было это уточнять.
А если я выбираю ноль (т.е. датчик Т1), а он "отвалился"? Что тогда надо делать?
Max2114 вне форума   Ответить с цитированием
Старый 16.02.2012, 16:00   #24
Sergey Cherevko
Senior Member
 
Аватара для Sergey Cherevko
 
Регистрация: Jul 2007
Адрес: Калининград
Сообщения: 422
Благодарил(а): 0 раз(а)
Поблагодарили: 1 раз в 1 сообщении
По умолчанию Ответ: Логические головоломки

Цитата:
Сообщение от Max2114
Понял надо было это уточнять.
А если я выбираю ноль (т.е. датчик Т1), а он "отвалился"? Что тогда надо делать?
Чуть ниже отвечал SSeVe:
Цитата:
Сообщение от Sergey Cherevko
Цитата:
Сообщение от SSeVa
что и при каких условиях должен давать селектор на выходе?

Корректные значения по работоспособным датчикам независимо от типа вычисления минимальное/максимальное/среднее.
Ну если совсем все датчики мертвые, то хотя бы 0 на выходе температуры и флажок фатальной невозможности выполнить вычисления.
То есть если невозможно вычислить - то 0 на выходе температуры и флажок фатальной невозможности выполнить вычисления.
Если вычислить возможно - то вычисляется с игнорированием неработоспособного датчика. На выходе должно быть корректное значение.
Например:
Вычисляется минимальная из температур от всех трех датчиков. Второй отвалился. На выходе - минимальная от первого и третьего датчика.
У меня при этом еще взводился флажок нефатальной тревоги. Фатальная авария - если совсем никак не вычислить. Нефатальная тревога - просто предупреждение.
Если работа по одному датчику и он отвалился - то конечно авария без вариантов.


__________________
Автомат АК - самый распространенный преобразователь стека в очередь
Sergey Cherevko вне форума   Ответить с цитированием
Старый 16.02.2012, 16:49   #25
SSeVa
Member
 
Регистрация: Nov 2008
Сообщения: 50
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Ответ: Логические головоломки

вот такой вот макрос с селектором получился, блоков 25 штук
макрос min_max взят отсюда: http://forum.segnetics.com/showpost....41&postcount=5
Вложения
Тип файла: msl TripleSensor.msl (34.3 Кбайт, 27 просмотров)
SSeVa вне форума   Ответить с цитированием
Старый 16.02.2012, 17:00   #26
Sergey Cherevko
Senior Member
 
Аватара для Sergey Cherevko
 
Регистрация: Jul 2007
Адрес: Калининград
Сообщения: 422
Благодарил(а): 0 раз(а)
Поблагодарили: 1 раз в 1 сообщении
По умолчанию Ответ: Логические головоломки

Цитата:
Сообщение от SSeVa
вот такой вот макрос с селектором получился, блоков 25 штук
макрос min_max взят отсюда: http://forum.segnetics.com/showpost....41&postcount=5
У меня на 2 блока больше получилось, зато гораздо функциональнее.
Хотя я тоже в итоге решил задачу "в лоб", не очень красиво...
Вложения
Тип файла: msl Селектор температуры.msl (38.7 Кбайт, 46 просмотров)


__________________
Автомат АК - самый распространенный преобразователь стека в очередь
Sergey Cherevko вне форума   Ответить с цитированием
Старый 16.02.2012, 17:31   #27
ujin
Senior Member
 
Аватара для ujin
 
Регистрация: May 2010
Адрес: Novosibirsk
Сообщения: 761
Благодарил(а): 1 раз(а)
Поблагодарили: 10 раз(а) в 10 сообщениях
По умолчанию Ответ: Логические головоломки

Для инт и лонг. Для реал надо подумать.
Изображения
Тип файла: jpg Знак инт_лонг.jpg (21.4 Кбайт, 143 просмотров)
ujin вне форума   Ответить с цитированием
Старый 16.02.2012, 17:37   #28
SSeVa
Member
 
Регистрация: Nov 2008
Сообщения: 50
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Ответ: Логические головоломки

Цитата:
У меня на 2 блока больше получилось, зато гораздо функциональнее. Хотя я тоже в итоге решил задачу "в лоб", не очень красиво...
не совсем понятно что происходит в вашем макросе при отказе одного из датчиков, а так же не совсем понятно назначение регистров в которых запоминаются значения температур, если в регистрах запоминается последнее правильное значение температуры датчика и оно участвует в дальнейших расчетах температуры, то в итоге вычисленное значение температуры может оказаться далеким от правильного.
SSeVa вне форума   Ответить с цитированием
Старый 16.02.2012, 17:40   #29
SSeVa
Member
 
Регистрация: Nov 2008
Сообщения: 50
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Ответ: Логические головоломки

ujin , шикарное решение. Вопрос только, почему для real не подойдет?
SSeVa вне форума   Ответить с цитированием
Старый 16.02.2012, 17:45   #30
ujin
Senior Member
 
Аватара для ujin
 
Регистрация: May 2010
Адрес: Novosibirsk
Сообщения: 761
Благодарил(а): 1 раз(а)
Поблагодарили: 10 раз(а) в 10 сообщениях
По умолчанию Ответ: Логические головоломки

для реал
Изображения
Тип файла: jpg реал.jpg (20.0 Кбайт, 160 просмотров)
ujin вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать свои сообщения

BB code is Вкл.
[IMG] код Вкл.
HTML код Выкл.



Часовой пояс GMT +4, время: 17:25.


Версия vBulletin: 3.8.7
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Segnetics 2005 - 2024