Просмотр полной версии : Прошу помощи в программировании логической функции
Ballentrajs
10.09.2015, 23:06
Здравствуйте, уважаемые форумчане. Кому не лень, помогите решить задачку. Был у меня один автомат, собранный на Ардуино и обвязке - оптроны по входам, реле на выходах. Три входа, два выхода. Выполнял он такую функцию
Х1..Х2..Х3...Y1..Y2
0....0....0.....0...0
0....0....1.....1...0
0....1....0.....1...0
1....0....0.....1...0
0....1....1.....0...1
1....0....1.....0...1
1....1....0.....0...1
1....1....1.....1...1
Тут на днях эта конструкция погорела из-за броска по питанию, да и на стороннее обслуживание это нужно отдать. Контроллер для самоделок, как то не комильфо, да ещё с навесным монтажём обвязки. Самое недорогое решение, я думаю, программируемое реле. Но я голову сломал, исполняя это на логике. Помогите в решении, пожалуйста. Кто-то заодно пооттачивает мастерство:)
Самое простое использовать макрос ППЗУ ,записать в него эти значения (в свойствах) 0,2,2,2,1,1,1,3
Еще был макрос Bool, тоже выполняет подобную функцию.
упс, на нем один выход только, так что ошибся.
Хотя используя два штуки все работает.
Во вложении файлик для помощи в расчете. ставите на выходе 1 когда вам нужно 1 на выходе, это биты 32-х разрядного числа. Потом на калькуляторе пробиваете и вносите в десятичном виде в свойство макроса.
Вот нашел 5минут перед сном :rolleyes:на 3 макросах готовых ...
rovki а у AI! все гораздо лаконичнее получилось, правда требует небольшого расчета :)
rovki а у AI! все гораздо лаконичнее получилось, правда требует небольшого расчета :)
Что именно
Ballentrajs
10.09.2015, 23:52
Я наверное выберу вариант на элементах. Так мне будет проще, залил и забыл. Только в схеме участвует 4-й вход. ?
rovki возможность включать выход в различных комбинациях входов.
Стек сравните из примера на макросе AI! и на 3-х макросах вашего первого примера.
Там у вас в табличке ошибка во входах (4,5 строчка) ,но это не страшно ,поменяйте в ППзу число и все ....
rovki возможность включать выход в различных комбинациях входов.
Стек сравните из примера на макросе AI! и на 3-х макросах вашего первого примера.
Какой пример ,их тыщя дайте ссылку .зачем забивать новичку голову стеком ....
rovki пример добавил в пост №3.
Я наверное выберу вариант на элементах. Так мне будет проще, залил и забыл. Только в схеме участвует 4-й вход. ?
Так любой проект залил и забыл....Зато если нужно будет поменять комбинации ,заменил числа в ППзу и все ,а с элементами нужно всю схему переделывать ,что не сложно если владеешь темой..
Ballentrajs
11.09.2015, 00:04
Уважаемые Специалисты, есть ли в ваших постах файл, который я загружу в п.реле, и оно заработает как мне нужно? Я не специалист в этой тематике, и многие ваши фразы, звучат для меня, как заклинания :)
Или на элементах
Не правильно работает, относительно первого поста, а в вариантах с макросами как-то через чур наварочено, но это сугубо моё мнение :)
Тоже предложу вариант19899
Ballentrajs
11.09.2015, 00:25
Так, для примера, как это реализованно в ардуине:
const int inputPinA = 3;
const int inputPinB = 4;
const int inputPinC = 5;
const int outputPinA = 6;
const int outputPinB = 7;
void setup() {
digitalWrite(outputPinA, OUTPUT);
digitalWrite(outputPinB, OUTPUT);
digitalWrite(inputPinA, INPUT);
digitalWrite(inputPinB, INPUT);
digitalWrite(inputPinC, INPUT);
}
void loop() {
int A = digitalRead(inputPinA);
int B = digitalRead(inputPinB);
int C = digitalRead(inputPinC);
if (A + B + C == 1) {
digitalWrite(outputPinA, HIGH);
digitalWrite(outputPinB, LOW);
} else if (A + B + C == 2) {
digitalWrite(outputPinA, LOW);
digitalWrite(outputPinB, HIGH);
} else if (A + B + C == 3) {
digitalWrite(outputPinA, HIGH);
digitalWrite(outputPinB, HIGH);
} else {
digitalWrite(outputPinA, LOW);
digitalWrite(outputPinB, LOW);
}
}
Ballentrajs
11.09.2015, 00:32
ААА1, а можно пример в виде файла? Сегодня закажу п.реле и попробую все варианты.
Василий Кашуба
11.09.2015, 09:33
ААА1, а можно пример в виде файла? Сегодня закажу п.реле и попробую все варианты.
Все варианты не нужно пробовать, вам же залить и забыть. Возьмите пример от ААА1 он самый простой, его просто скопировать даже с картинки. Найдите в библиотеке такие же функции и сложите, как пазл по готовой картинке.
Ballentrajs
11.09.2015, 10:50
Спасибо всем за участие. Позвольте я напомню о себе, когда буду эту железяку программировать. Наверняка у меня появятся вопросы.
Eugene.A
11.09.2015, 11:23
19902
Ещё вариант.
Овен лоджик у меня не установлен, извиняюсь, поэтому в CS.
19902
Ещё вариант.
Овен лоджик у меня не установлен, извиняюсь, поэтому в CS.Порядок исполнения надо "подрихтовать" чтобы гонок было меньше.
ИМХО, когда стоит узкая задача, можно нарисовать и логикой, когда задача видоизменяется (например надо изменить комбинации включения по входам), лучше применять макросы.
Выбор макросов имеется.
AI! когда-то и написал макрос Bool по моей просьбе, так как с таким элементом столкнулся в Zelio Logic и он оказался очень удобным инструментом, когда выходом надо управлять комбинаторно.
Eugene.A
11.09.2015, 11:49
Порядок исполнения надо "подрихтовать" чтобы гонок было меньше.
Если перебивать в Овен лоджик, то там уже и делать всё путём. Главное - работает. Специально использовал минимум разных ФБ (ИЛИ-НЕ, NOT).
Есть теорема, доказывающая, что логическую функцию любой сложности можно построить на любом логическом элементе, например, алгебраическом сложении или умножении, и отрицании. Т.е. Элемента 2И-НЕ достаточно, чтобы спроектировать, например, процессор. Или контроллер.
Кстати, такой порядок выстроился именно после упорядочивания.
Есть теорема, доказывающая, что логическую функцию любой сложности можно построить на любом логическом элементе,Не на любом, а либо только на 2ИЛИ-НЕ (стрелка Пирса), либо только на 2И-НЕ (штрих Шеффера).
Это теорема (критерий) Поста (https://ru.wikipedia.org/wiki/%D0%9A%D1%80%D0%B8%D1%82%D0%B5%D1%80%D0%B8%D0%B9_% D0%9F%D0%BE%D1%81%D1%82%D0%B0).
Eugene.A
11.09.2015, 14:22
Не на любом, а либо только на 2ИЛИ-НЕ (стрелка Пирса), либо только на 2И-НЕ (штрих Шеффера).
А на 3ИЛИ-НЕ, 4ИЛИ-НЕ, 5ИЛИ-НЕ?
А просто на одних "НЕ"?
На одних просто "И"?
На одних просто "ИЛИ" ?
;)
Стрелка Пирса или штрих Шеффера - элементарные частицы из которых можно собрать всё, что угодно.
В том числе и 3ИЛИ-НЕ, 4ИЛИ-НЕ, 5ИЛИ-НЕ
Eugene.A
11.09.2015, 14:41
В нашем универе аудитория была им. Мальцева. Того самого.
В нашем универе аудитория была им. Мальцева. Того самого.Я не в теме насчёт Мальцева. И свой институт заканчивал за 30 лет до того, как тот стал универом ;)
ААА1, а можно пример в виде файла? Сегодня закажу п.реле и попробую все варианты.
Можно-то можно, но проще как Василий Кашуба сказал. Или пишите в какой версии ОЛ Вам он нужен и для какой модели ПР, там делов на несколько минут.
Eugene.A
11.09.2015, 15:01
Я не в теме насчёт Мальцева
А вы по своей ссылке сходите. Насчёт критерия.
"Анатолий Иванович Мальцев (14 (27) ноября 1909 — 7 июля 1967) — советский математик, основоположник сибирской школы алгебры и логики."
А вы по своей ссылке сходите. Насчёт критерия.
"Анатолий Иванович Мальцев (14 (27) ноября 1909 — 7 июля 1967) — советский математик, основоположник сибирской школы алгебры и логики."
Спасибо, как-то пропустил ;)
Ballentrajs
11.09.2015, 22:04
Можно-то можно, но проще как Василий Кашуба сказал. Или пишите в какой версии ОЛ Вам он нужен и для какой модели ПР, там делов на несколько минут.
ААА1, версия ОЛ 1.8.3 build 92beta, модель ПР110-220.8ДФ.4Р
Изменений в логике работы и назначениях выходов-входов, не предвидеться.
Здравствуйте, уважаемые форумчане. Кому не лень, помогите решить задачку. Был у меня один автомат, собранный на Ардуино и обвязке - оптроны по входам, реле на выходах. Три входа, два выхода. Выполнял он такую функцию
Х1..Х2..Х3...Y1..Y2
0....0....0.....0...0
0....0....1.....1...0
0....1....0.....1...0
1....0....0.....1...0
0....1....1.....0...1
1....0....1.....0...1
1....1....0.....0...1
1....1....1.....1...1
Тут на днях эта конструкция погорела из-за броска по питанию, да и на стороннее обслуживание это нужно отдать. Контроллер для самоделок, как то не комильфо, да ещё с навесным монтажём обвязки. Самое недорогое решение, я думаю, программируемое реле. Но я голову сломал, исполняя это на логике. Помогите в решении, пожалуйста. Кто-то заодно пооттачивает мастерство:)
я вот заметил что Y2 повторяет X1, поэтому остается только собрать схемку для Y1, у меня получилось так
ААА1, версия ОЛ 1.8.3 build 92beta, модель ПР110-220.8ДФ.4Р
Изменений в логике работы и назначениях выходов-входов, не предвидеться.
Пожалуйста.
я вот заметил что Y2 повторяет X1, поэтому остается только собрать схемку для Y1, у меня получилось так
Несколько раз перечитал. Y2 повторяет Х1, или Вы ошиблись, или я чего не понял. Посмотрел файл, точно ошибочка получилась у Вас.
Несколько раз перечитал. Y2 повторяет Х1, или Вы ошиблись, или я чего не понял. Посмотрел файл, точно ошибочка получилась у Вас.
ошибочка у меня появилась, потому что повелся на
Там у вас в табличке ошибка во входах (4,5 строчка) ,но это не страшно ,поменяйте в ППзу число и все ....
сейчас перелистнул вторую страничку, нашел http://www.owen.ru/forum/showthread.php?t=22168&p=180462&viewfull=1#post180462 попробую переделать
ЗЫ таблица соответствия должна писаться правильно, чтоб небыло поводов сомневаться что она ошибочна
в двух случаях Y2 не повторяет X1
Так, для примера, как это реализованно в ардуине:
const int inputPinA = 3;
const int inputPinB = 4;
const int inputPinC = 5;
const int outputPinA = 6;
const int outputPinB = 7;
void setup() {
digitalWrite(outputPinA, OUTPUT);
digitalWrite(outputPinB, OUTPUT);
digitalWrite(inputPinA, INPUT);
digitalWrite(inputPinB, INPUT);
digitalWrite(inputPinC, INPUT);
}
void loop() {
int A = digitalRead(inputPinA);
int B = digitalRead(inputPinB);
int C = digitalRead(inputPinC);
if (A + B + C == 1) {
digitalWrite(outputPinA, HIGH);
digitalWrite(outputPinB, LOW);
} else if (A + B + C == 2) {
digitalWrite(outputPinA, LOW);
digitalWrite(outputPinB, HIGH);
} else if (A + B + C == 3) {
digitalWrite(outputPinA, HIGH);
digitalWrite(outputPinB, HIGH);
} else {
digitalWrite(outputPinA, LOW);
digitalWrite(outputPinB, LOW);
}
}
прочитав этот пост, понял свою ошибку и слепил из простых элементов, вобщем то ни чем не отличающийся вариант как и у остальных внимательных форумчан
tagor4444
01.10.2015, 14:23
20208 Cj, собственно еще один пример на XOR
spectrum48k
01.10.2015, 16:12
Вставлю 5 копеек)) Похоже на схему с паритетом)) Если сработал один датчик -то предупреждение Y1, если сработало два датчика, то авария Y2. Итого один элемент OR на три входа (или 2 по 2) и три элемента AND (X1&X2, X1&X3, X2&X3). Всё. Я - художник, я так вижу)))
UPD: Примеры не видел, нет у меня OwL. Если боян, то понять и простить.
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot