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

 
 
6 страниц V  « < 3 4 5 6 >  
Reply to this topicStart new topic
> мини PLC.
jcxz
сообщение Jan 28 2016, 06:18
Сообщение #61


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Jenya7 @ Jan 28 2016, 12:08) *
у меня есть мощный камень и такой же язык программирования. и я думаю этих двух условий вполне хватает для решения задачи. тем более что она почти решена.

Самое необходимое (и достаточное) условие для решение любой задачи - не мощный камень или язык, а мощная голова... laughing.gif
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jan 28 2016, 07:14
Сообщение #62


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

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



Цитата(jcxz @ Jan 28 2016, 11:18) *
Самое необходимое (и достаточное) условие для решение любой задачи - не мощный камень или язык, а мощная голова... laughing.gif

это Вы свою имеете ввиду я так понимаю?
Go to the top of the page
 
+Quote Post
k155la3
сообщение Jan 28 2016, 07:31
Сообщение #63


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

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



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

В PLC системах, один из языков программирования - IL ( Instruction lang.) полностью соотв-ий ассемблеру.
Кроме ASM - есть ST - сильно похожий на C

Тоисть, ТС не следует изобретать очередной лисапет, а (если задача учебно-тренировочная)
разработать свой компилятор ассемблера (включающий парсер) на выходе которого будет сгенерирован
машинный код (это будет круто),

или
промежуточный код (как в Java) - для последующего исполнения вирт. машиной "MyPLC"

или
текст-код, например например на ASM MSP430 для последующей компиляции "настоящим" компилятором ASM430
и заливки реального кода в процессор, где уже "живет" "Операционная система MyPLC"
(тоже круто). Так работают реальные системы разработки для промышленных контроллеров.



Go to the top of the page
 
+Quote Post
adnega
сообщение Jan 28 2016, 07:42
Сообщение #64


Гуру
******

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



Цитата(Jenya7 @ Jan 27 2016, 18:06) *
о! вот в этом вся загвоздка! вот это я и пытаюсь решить. не то чобы я был зациклен на моей имплиментации. просто других альтернатив нет пока.
я думал сделать такую структуру

При разработке своего контроллера я подумал побольше и сделал так.
Любая логическая функция из N переменных описывается таблицей истинности из 2^N строк.
Если переменные пронумерованы, то и на результат можно ссылаться числом.
Например, для 5 переменных имеем 32 результата.
Зная значения всех 5 переменных, мы можем получить номер бита в 32-битном хранилище результата.

В байткодах это выгладит так:

TABLE5(result_value)
VAR0
VAR1
VAR2
VAR3
VAR4
GETRESULT

Компилятор должен преобразовать сложное логическое выражение к таблице истинности и получить правильный resul_value.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jan 28 2016, 07:54
Сообщение #65


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

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



честно говоря я мало что понял.

Сообщение отредактировал Herz - Jan 28 2016, 22:34
Причина редактирования: Избыточное цитирование
Go to the top of the page
 
+Quote Post
syoma
сообщение Jan 28 2016, 07:57
Сообщение #66


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

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



Цитата(Jenya7 @ Jan 28 2016, 08:08) *
мне бы не хотелось уходить в какие то специализированные среды разработки.
у меня есть мощный камень и такой же язык программирования. и я думаю этих двух условий вполне хватает для решения задачи. тем более что она почти решена.

Я так понял, что у вас задача "програмировать задачи - состояния на выходе в зависимости от условий на входе." в первом посте, а не разработка интерпретатора для своего языка программирования. Среда разработки выше была создана именно с целью решения задачи из вашего первого сообщения. По-моему вы больно ошибетесь, если будете думать, что она "почти решена". Помимо описанного выше - что насчет типов переменных? Как вы собираетесь описывать весь этот язык в документации? Для каких пользователей?
Go to the top of the page
 
+Quote Post
adnega
сообщение Jan 28 2016, 08:50
Сообщение #67


Гуру
******

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



Цитата(Jenya7 @ Jan 28 2016, 10:54) *
честно говоря я мало что понял.

Вы таблицу истинности представляете?
Go to the top of the page
 
+Quote Post
iosifk
сообщение Jan 28 2016, 09:02
Сообщение #68


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(syoma @ Jan 28 2016, 10:57) *
. По-моему вы больно ошибетесь, если будете думать, что она "почти решена". Помимо описанного выше - что насчет типов переменных? Как вы собираетесь описывать весь этот язык в документации? Для каких пользователей?

Просто это типичный случай, который я описал в "Гайке М3". ТС кажется, что как только он "определит гайку", то все остальное получится само по себе. Причем он даже не понимает, что он хочет делать интерпретатор или компилятор... Так же как и не понимает, почему ему хочется обрабатывать сложные скрипты а не простые, обработанные компилятором. Не понимает, что в любом случае, в системе управления будет хост. И еще лучше хост удаленный. А это значит, что валить компиляцию в микроконтроллер - не имеет смысла.
А уж его высказывания все это только и подтверждают. Я читаю эту переписку не как техническую, а как пример общения с глухим и диким, не вежливым и ужасно самонадеяным....


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jan 28 2016, 09:19
Сообщение #69


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(adnega @ Jan 28 2016, 13:42) *
Компилятор должен преобразовать сложное логическое выражение к таблице истинности и получить правильный resul_value.

А ТС-у нужны только логические функции? Или и арифметические тоже?
Я когда-то давно, когда писал свой типа компилятор wink.gif ну и парсер выражений для него, реализовал поддержку всех операций, что есть в си (с таким-же синтаксисом).
Ничего сложного там нет. Сложно стало когда я попытался сделать ещё фазу оптимизации полученного кода после этого sm.gif
У меня в выражениях поддерживались все сишные операции, скобки, переменные (были только численно-логические (только одного типа), или строковые (с меньшим списком операций)),
константы числовые/строковые, константы литеральные.
Мой компилятор компилил текстовые выражения в байт-код, который выполнялся на этапе выполнения.
Это для я делал скриптовый компилируемый на лету после старта ПО язык в одной из своих программ. sm.gif
Go to the top of the page
 
+Quote Post
iosifk
сообщение Jan 28 2016, 09:23
Сообщение #70


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(jcxz @ Jan 28 2016, 12:19) *
Мой компилятор компилил текстовые выражения в байт-код, который выполнялся на этапе выполнения.
Это для я делал скриптовый компилируемый на лету после старта ПО язык в одной из своих программ. sm.gif

Об этом объяснено еще пару страниц назад, да только все бесполезно...


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
adnega
сообщение Jan 28 2016, 09:34
Сообщение #71


Гуру
******

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



Цитата(Jenya7 @ Jan 28 2016, 10:54) *
честно говоря я мало что понял.

Утверждается, что (param1 && input1) || (param2 && (input2 || input3)) соответствует таблица истинности из вложенного файла.
Из значений переменных собираем индекс:
n = (param1 << 4) + (param2 << 3) + (input1 << 2) + (input 2 << 1) + (input3 << 0);
Затем получаем результат:
((0xFEF0EE00) >> n) & 1
Т.е. для вычисления (param1 && input1) || (param2 && (input2 || input3)) нам достаточно знать одно волшебное 32-битное число 0xFEF0EE00.
Причем, для меня важным моментом было время вычисления логической функции любой сложности из максимум 5 переменных.
При таком подходе оно фиксировано и минимально (не зависит от вида функции и от значений переменных).
А самое главное, легко описывается байт-кодом и элементарно вычисляется.

Теперь понятно?
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jan 28 2016, 09:52
Сообщение #72


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

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



да. это интересно.
но условие (param1 && input1) || (param2 && (input2 || input3)) не статическое, оно может поменяться на скажем (param2 || input3) && (param4 || (input5 || input6))
или скажем переменных будет больше 5

ааа...понимаю.. с ростом параметров наша таблица серьезно вырастает…
да. это круто. интересный подход. а как мы заполняем результат функции в true table - 0xFEF0EE00?

Сообщение отредактировал Herz - Jan 28 2016, 22:35
Go to the top of the page
 
+Quote Post
adnega
сообщение Jan 28 2016, 10:43
Сообщение #73


Гуру
******

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



Цитата(Jenya7 @ Jan 28 2016, 12:52) *
да. это интересно.
но условие (param1 && input1) || (param2 && (input2 || input3)) не статическое, оно может поменяться на скажем (param2 || input3) && (param4 || (input5 || input6))
или скажем переменных будет больше 5

ааа...понимаю.. с ростом параметров наша таблица серьезно вырастает…
да. это круто. интересный подход. а как мы заполняем результат функции в true table - 0xFEF0EE00?

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

Насчет логических условий с бОльшим числом переменных могу сказать, что я за долгие годы с такими не встречался (максимум 4).
Но кто сказал, что таблицы нельзя каскадировать? wink.gif
Go to the top of the page
 
+Quote Post
syoma
сообщение Jan 28 2016, 11:06
Сообщение #74


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

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



adnega, неужели в наше время, микропроцессорные ресурсы такие ценные, что пришлось так извращаться?
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jan 28 2016, 11:22
Сообщение #75


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

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



Цитата(adnega @ Jan 28 2016, 15:43) *
При изменении условия меняется и результат.
Как вы по условию будете получать "магическое число" - это ваши проблемы. Главное, что это возможно.
В моем случае исходный текст компилятором преобразуется в байт код, и в задачи компилятора входит данное преобразование.

Насчет логических условий с бОльшим числом переменных могу сказать, что я за долгие годы с такими не встречался (максимум 4).
Но кто сказал, что таблицы нельзя каскадировать? wink.gif

оличное решение проблемы. я восхищен, не побоюсь этого слова.
правда не знаю смогу ли я победить некоторые недостатки:
при 8 параметрах наша таблица станет монструозной
програмно получать получать "магическое число"
но тем не менее - сильное решение. спасибо.

как правильно заметил товарищ jcxz - мощная голова - и можно найти элегантное решение без фортов и джэсонов.

Сообщение отредактировал Jenya7 - Jan 28 2016, 11:37
Go to the top of the page
 
+Quote Post

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

 


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


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