реклама на сайте
подробности

 
 
> мини PLC.
Jenya7
сообщение Jan 27 2016, 08:11
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



я хочу програмировать задачи - состояния на выходе в зависимости от условий на входе. этакий мини Programmable Logic Controller.
для примера код
Код
// условие на входе
If (temp > 30 && hum > 80 || input1 ==1)
{
    // условие на выходе
    output2 = 1;
}

Где temp, hum - глобальные переменные но задаваемые пользователем через теринал.
пользователь програмирует такое условие следующим образом.
Код
task 1 param 1 temp > 30 AND
task 1 param 2 hum > 80 OR
task 1 in 1 1
task 1 out 2 1

или так
Код
task 1 param 1 temp > 30
task 1 param 2 hum > 80
task 1 in 1 1
task 1 param 1 AND param 2 OR in 1
task 1 out 2 1

и я это сохраняю и потом проверяю и если условие выполняется - включаю\выключаю нужные выходы. вопрос есть ли какие то готовые библиотеки а-ля-PLC?

Сообщение отредактировал Jenya7 - Jan 27 2016, 08:18
Go to the top of the page
 
+Quote Post
6 страниц V  « < 4 5 6  
Start new topic
Ответов (75 - 84)
syoma
сообщение Jan 28 2016, 11:31
Сообщение #76


Профессионал
*****

Группа: Свой
Сообщений: 1 817
Регистрация: 14-02-07
Из: наших, которые работают за бугром
Пользователь №: 25 368



Цитата
оличное решение проблемы. я восхищен, не побоюсь этого слова.

Такое решение называется Look up table, где n - адрес, а магическое число - биты по этому адресу. Используется в ПЛИСах уже не знаю сколько.
Go to the top of the page
 
+Quote Post
adnega
сообщение Jan 28 2016, 12:41
Сообщение #77


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(syoma @ Jan 28 2016, 14:06) *
adnega, неужели в наше время, микропроцессорные ресурсы такие ценные, что пришлось так извращаться?

Конечно, нет. Просто я привык к таблицам истинности и для меня на порядок проще набросать ее, нежели городить пятиэтажные логические формулы.
Кста, иногда решаю обратную задачу - по таблице истинности написать и упростить логическое выражение.
И самая ирония в том, что затем рисую в схемном редакторе схему, соответствующую этой логической формуле на стандартных элементах,
а компилятор "упихивает" ее в LUT внутри ПЛИС ))

Вдогонку добавлю, что LUT замечен даже в gcc.
Делал машину состояний для энкодера на Си в лоб.
Переделал в LUT. Посмотрел листинги и (прошу прощения) офигел - gcc сотворил одинаковый LUT в обоих случаях.
Go to the top of the page
 
+Quote Post
=AK=
сообщение Jan 28 2016, 20:41
Сообщение #78


pontificator
******

Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483



Цитата(adnega @ Jan 28 2016, 20:04) *
Из значений переменных собираем индекс:
n = (param1 << 4) + (param2 << 3) + (input1 << 2) + (input 2 << 1) + (input3 << 0);
Затем получаем результат:
((0xFEF0EE00) >> n) & 1
Т.е. для вычисления (param1 && input1) || (param2 && (input2 || input3)) нам достаточно знать одно волшебное 32-битное число 0xFEF0EE00.

А теперь немножко расширим подход. Запланируем "таблицу" в 256 значений, соответственно, "волшебное число" будет состоять не из 4-битных полей, а из 8-битных, т.е из байт. "Bолшебное число" не будем ограничивать размерами, а запишем в байтовый массив произвольной длины. А в самой таблице будем держать адреса функций, которые будут выполняться, когда в массиве встретится соответствующий байт. В результате мы получим заготовку для простейшей Форт-машины, а байтовый массив будет содержать то, что называется "программой из байт-кодов".

Для того, чтобы окончательно оформить Форт-машину, сначала зададимся вопросом; а как функции, вызываемые по своим байт-кодам, будут обмениваться информацией друг с другом? И придем к выводу, что проще всего использовать стек, откуда функции будут брать исходные данные для вычислений, и куда они будут класть результаты. Затем задумаемся, а хорошо ли, что наши программы выполняются линейно, в порядке расположения байт-кодов в массиве? Нехорошо, надо бы предусмотреть возможность изменения порядка выполнения байт-кодов при помощи самих байт-кодов. Заведем байт-коды для условной и безусловной передачи управления в произвольное место программы, а также вызовы подпрограмм, состоящих из байт-кодов, и возврата из подпрограмм. Для хранения адресов возврата заведем еще один стек, назовем его "стек возвратов".

Вот теперь мы получили вполне функциональную Форт-машину. Для того, чтобы она была полной по Тьюрингу, достаточно задать всего пару десятков байт-кодов. То есть, на такой машине можно выполнить любые вычисления, хоть искусственный интеллект создать.

Окончательно эта Форт-машина превратится в настоящий Форт после того, как (при помощи программ, написанных в байт-кодах) будет добавлен ввод-вывод, написан транслятор из исходного текста (или клавиатурного ввода) в байт-код, добавлены средства для организации и вызова программ в виде словарей.
Go to the top of the page
 
+Quote Post
Kopa
сообщение Jan 28 2016, 21:36
Сообщение #79


Знающий
****

Группа: Участник
Сообщений: 598
Регистрация: 22-08-05
Пользователь №: 7 861



Цитата(=AK= @ Jan 29 2016, 00:41) *
Окончательно эта Форт-машина превратится в настоящий Форт после того, как (при помощи программ, написанных в байт-кодах) будет добавлен ввод-вывод, написан транслятор из исходного текста (или клавиатурного ввода) в байт-код, добавлены средства для организации и вызова программ в виде словарей.

"Скелет" этого варианта? sm.gif
Кросс Форт на C: FVM factory

Сообщение отредактировал Kopa - Jan 28 2016, 21:36
Go to the top of the page
 
+Quote Post
=AK=
сообщение Jan 28 2016, 22:27
Сообщение #80


pontificator
******

Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483



Цитата(Kopa @ Jan 29 2016, 08:06) *
Кросс Форт на C: FVM factory


Ну да. Жаль, автор давно забросил этот проект. rolleyes.gif Был бы он в нормальной форме, то задача создания встроенного интерпретатора решалась бы за 5 минут. А так его полдня чистить и править надо, прежде чем заработает, скажем, под CodeBlocks.
Go to the top of the page
 
+Quote Post
Kopa
сообщение Jan 28 2016, 22:46
Сообщение #81


Знающий
****

Группа: Участник
Сообщений: 598
Регистрация: 22-08-05
Пользователь №: 7 861



Цитата(=AK= @ Jan 29 2016, 02:27) *
Ну да. Жаль, автор давно забросил этот проект. rolleyes.gif Был бы он в нормальной форме, то задача создания встроенного интерпретатора решалась бы за 5 минут. А так его полдня чистить и править надо, прежде чем заработает, скажем, под CodeBlocks.

Всегда есть надежда и вероятность вернуться к "допиливанию" заброшенных (или отложенных для продвижения будущих целей) авторских идей. (на том же sourceforge)
В тематике Форт их достаточно много, даже при "отсутствии" Форт программистов, как одной из движущих сил IT сообщества. sm.gif

P.S. На sourceforge мне был интересен из Форт с С в связке F-- проект.

Сообщение отредактировал Kopa - Jan 28 2016, 22:59
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Jan 29 2016, 02:44
Сообщение #82


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



был бы весьма интересен проект под шарп
и причем, если это будет таки интерпретатор, то с выполнением бинарника от i86, чтобы не замарачиваться с кросс-компиляцией
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jan 29 2016, 02:58
Сообщение #83


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Одно не пойму - если автор не знает, чего он хочет, чем не устраивает интерпретатор бэйсика?


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
=AK=
сообщение Jan 29 2016, 07:59
Сообщение #84


pontificator
******

Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483



Цитата(Dog Pawlowa @ Jan 29 2016, 13:28) *
Одно не пойму - если автор не знает, чего он хочет, чем не устраивает интерпретатор бэйсика?

А что такое Бэйсик или Форт против языков PLC или даже просто голой LUT? "Это как плотник супротив столяра" (с). Не надо его ни в чем убеждать, он и сам "таких советов может каждый день выдавать пачками". laughing.gif Вот Изаграф ему бы наверное подошел, но только бесплатный.
Go to the top of the page
 
+Quote Post
syoma
сообщение Jan 29 2016, 10:52
Сообщение #85


Профессионал
*****

Группа: Свой
Сообщений: 1 817
Регистрация: 14-02-07
Из: наших, которые работают за бугром
Пользователь №: 25 368



Цитата
Вот Изаграф ему бы наверное подошел, но только бесплатный.

Изаграф = Codesys = TwinCAT = Beremiz = среда разработки/интерпретатор/парсер/отладчик/исполнитель языков МЭК 61131-3 на различных платформах.
Go to the top of the page
 
+Quote Post

6 страниц V  « < 4 5 6
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 16:34
Рейтинг@Mail.ru


Страница сгенерированна за 0.01475 секунд с 7
ELECTRONIX ©2004-2016