|
Язык Рефлекс - диалект Си для программирования ПЛК, обсуждение, критика, вопросы |
|
|
|
May 10 2006, 07:48
|
Частый гость
 
Группа: Свой
Сообщений: 97
Регистрация: 3-05-06
Из: Новосибирск
Пользователь №: 16 737

|
Цитата(Andrew2000 @ May 8 2006, 22:19)  Есть предложение - может Владимир Зюбин создаст на форуме отдельную ветку для обсуждения Рефлекса? У меня есть желание задать вопросы по языку. Возражений нет. Для более подробного ознакомления можно посетить http://reflex-language.narod.ru/"Язык Рефлекс, известный также под именем "Си с процессами", ориентирован на программирование управляющих алгоритмов в промышленной автоматизации и робототехнике: для систем, предполагающих активное взаимодействие с внешней средой, технологическим оборудованием, физическими процессами через датчики и органы управления."
--------------------
Владимир Е. Зюбин Язык Рефлекс -- Си-подобный язык программирования алгоритмов управления (ПЛК, встроенные системы, промавтоматизация) http://reflex-language.narod.ru/
|
|
|
|
|
 |
Ответов
|
May 16 2006, 07:41
|
Частый гость
 
Группа: Свой
Сообщений: 97
Регистрация: 3-05-06
Из: Новосибирск
Пользователь №: 16 737

|
Сразу должен сказать, спасибо Вам, Andrew2000, за эти вопросы. Глубоко копнули. А на хорошие вопросы всегда приятно отвечать. Цитата(Andrew2000 @ May 15 2006, 22:18)  В документации сказано: 1. "2.5.4 Адрес регистра в модуле IO может быть в диапазоне от 0 до 2;" Какой в этом смысл, если "2.5.5 Адрес модуля IO может быть в диапазоне от 0 до 0xFFFFF" Большое спасибо за замечание! Это проблема документа, который писался в пакете и во взаимоувязке с конкретной системой и конкретной библиотекой. На самом деле, это описывается интерпретация параметров для конкретной платформы (MicroPC+УСО UNIO): УСО типа UNIO просто сидят на XT магистрали и имеют три регистра, что относится к платформе, а не к транслятору языку. Транслятор языка проверяет только то, что это число (числовая константа). Ну и подставляет эти числа как параметры при вызове функции считывания (записи) значений в IO-модули. Разумеется, что функции считывания (записи), которые привязаны к платформе и описываемые отдельно при портировании, могут интерпретировать эти числа как угодно, например, как некий адрес в ОЗУ. Спасибо за замечание. Это моя вина, надо было внимательно просмотреть описание, перед публикацией. Файл подкорректировал и обновил на сервере. Цитата(Andrew2000 @ May 15 2006, 22:18)  2. "2.6.8 Возможны процессы, использующие пересекающиеся множества входных и выходных переменных." Кто последним установит выход, т.е. как определяется последовательность выпонения процессов? Строго говоря, эта ситуация действительно неопределена - процессы параллельны, и, возможно, даже исполняются на разных процессорах. Хотя конкретные реализации языка могут фиксировать последовательность выполнения, например, задаваемую порядком описания (что естественно). Т.е. в каждом конкретном цикле последовательность выполнения процессов определяется порядком их описания в программе. Использовать эту информацию, строго говоря, некорректно. Мы, по крайней мере, не используем. Цитата(Andrew2000 @ May 15 2006, 22:18)  3. "2.7 - в состояниях нет возможности организации циклов и переходов" Не совсем ясен смысл - 'for' и 'while' отсутствуют, или нет перехода сам в себя? Да. Конструкции типа for и while в языке отсутствуют. Вызвано это идеологическими причинами: в языке нет "естественной" возможности глобально "завалить" программу. Ну а если очень хочется, то конечно же, можно. И несколько вариантов, на выбор: на двух состояниях, с помощью инлайн подстановки Си-кода, с помощью выносной Си-функции. Первый вариант - самый безопасный. Последний - наименее удобный. Цитата(Andrew2000 @ May 15 2006, 22:18)  4. "2.11.5 Описание программы начинается с резервированного слова "Прогр"" А как задается точка входа (типа 'main')? Или нет главного процесса - все процессы стартуют вместе? Главный процесс - описанный первым. С него и начинается раскрутка алгоритма. По включению питания (по запуску). Все процессы, кроме описанного первым, находятся в пассивном состоянии. Типовая схема примерно такая: первый процесс инициализирует структуры, протоколы, драйверы, "взбадривает" железо, а затем уже переходит к собственно логике: начинает порождать параллельные потоки (запускать нужные процессы). Ну, или чего там ему сказано делать... Цитата(Andrew2000 @ May 15 2006, 22:18)  5. 'ТАКТ' един для всех процессов или каждому процессу можно назначить свой 'ТАКТ'? В текущем варианте языка - ТАКТ один для всех. Проработан вариант изменения синтаксиса в этом направлении, но по реальной надобности пока не ощущается. Кстати, даже и вариант реализаций проработан - очень простая и мощная идея распределения процессорной загрузки для реализаций типа round-robin, кооперативной многозадачности. Идея делителя базового такта для отдельных процессов. Если интересно, то этот вопрос обсуждается тут: Зюбин В.Е., Петухов А.Д. Распределение вычислительных ресурсов с многопоточной реализацией гиперавтомата // Труды III Международной конференции <Идентификация систем и задачи управления> SICPRO '04. Москва 28-30 января 2004 г. С. 446-463 (pdf 366Kb).
--------------------
Владимир Е. Зюбин Язык Рефлекс -- Си-подобный язык программирования алгоритмов управления (ПЛК, встроенные системы, промавтоматизация) http://reflex-language.narod.ru/
|
|
|
|
|
May 16 2006, 11:06
|
Местный
  
Группа: Свой
Сообщений: 421
Регистрация: 25-12-04
Пользователь №: 1 675

|
Цитата(Владимир Е. Зюбин @ May 16 2006, 11:41)  Хотя конкретные реализации языка могут фиксировать последовательность выполнения, например, задаваемую порядком описания (что естественно). Т.е. в каждом конкретном цикле последовательность выполнения процессов определяется порядком их описания в программе. Использовать эту информацию, строго говоря, некорректно. Мы, по крайней мере, не используем. А ISaGRAF и CoDeSys, например, используют. Как раз "некорректно" будет, если я (пользователь) не знаю, что там внутри творится. Запишем в минусы текущей реализации. Цитата(Владимир Е. Зюбин @ May 16 2006, 11:41)  Да. Конструкции типа for и while в языке отсутствуют. Вызвано это идеологическими причинами: в языке нет "естественной" возможности глобально "завалить" программу. Ну, на двух состояниях я ее также "завалю". И еще забыл спросить - что выполняется за такт? Т.е. с чего такт начинается и чем заканчивается - где "водораздел" - операторы перехода в след. состояние выполняются в этом такте или в начале нового? Спасибо за ответы
|
|
|
|
|
May 17 2006, 10:26
|
Частый гость
 
Группа: Свой
Сообщений: 97
Регистрация: 3-05-06
Из: Новосибирск
Пользователь №: 16 737

|
Цитата(Andrew2000 @ May 16 2006, 17:06)  Цитата(Владимир Е. Зюбин @ May 16 2006, 11:41)  Хотя конкретные реализации языка могут фиксировать последовательность выполнения, например, задаваемую порядком описания (что естественно). Т.е. в каждом конкретном цикле последовательность выполнения процессов определяется порядком их описания в программе. Использовать эту информацию, строго говоря, некорректно. Мы, по крайней мере, не используем.
А ISaGRAF и CoDeSys, например, используют. Как раз "некорректно" будет, если я (пользователь) не знаю, что там внутри твориться. Запишем в минусы текущей реализации. Ну, наверное, все же не ISaGRAF использует, а пользователи ISaGRAF-а. И тут видится нехороший момент: в стандарте МЭК-61131-3, насколько я знаю, это не прописано. Также и документации на ISaGRAF я этих вещей не припомню. Хотя, действительно, порядок определен. Но использование этой информации - это область трюков, усложняющих программу. К примеру, Вы написали работающую программу на FBD, а завтра кто-нибудь просто переформатирует программу, для лучшего эстетического восприятия, и она перестанет работать. В связи с этим повторюсь: При программировании на Рефлексе тоже можно использовать информацию о реализации. Но приводит к усложнению сопровождения программы (снижение читаемости, понимаемости, модифицируемости и т.д.) и снижение ее надежности. Поэтому конкретно мы, сами не используем такие трюки, ну и другим не советуем. Но информация о реализации доступна: можно, что уровень Си-посмотреть, что так могу сказать: последовательность исполнения определена порядком описания. Цитата(Andrew2000 @ May 16 2006, 17:06)  Цитата(Владимир Е. Зюбин @ May 16 2006, 11:41)  Да. Конструкции типа for и while в языке отсутствуют. Вызвано это идеологическими причинами: в языке нет "естественной" возможности глобально "завалить" программу.
Ну, на двух состояниях я ее также "завалю". Ну, вроде как, не получается. "Завалить" программу локальными операциями языка Рефлекс невозможно (вроде б). Можно либо выходя в Си, либо глобальными операциями типа остановить все процессы, а потом остановить и себя. Цитата(Andrew2000 @ May 16 2006, 17:06)  И еще забыл спросить - что выполняется за такт? Т.е. с чего такт начинается и чем заканчивается - где "водораздел" - операторы перехода в след. состояние выполняются в этом такте или в начале нового? За такт выполняется стандартный набор действий "ввод-обработка-вывод". Насчет операторов перехода - вопрос глубокий и серьезный. Прям в точку. Если честно, то ситуация у нас получилась такая: алгоритм обработки может настроить пользователь, через библиотеки. Такая вот петрушка. Ну а вообще. Исторически, в одной из первых реализаций для платформы х86+VME, была реализован алгоритм такой: операторы смены состояния вступали в действие только по окончанию такта. А потом поработали с этим, поработали, да и отказались. Смысла нуль. Так что в текущих системных библиотеках оператор смены состояния вступает в действие сразу. Как встретился, так и отработал. Ну, а если привязывать этот вопрос к предыдущему Вашему вопросу о порядке исполнения, то в типовом варианте оператор смены состояния вступает в силу: а) для уже обработанных (и текущего) процессов только на следующем такте, б) для еще необработанных - уже на этом. Ну а в общем, дело вкуса.
--------------------
Владимир Е. Зюбин Язык Рефлекс -- Си-подобный язык программирования алгоритмов управления (ПЛК, встроенные системы, промавтоматизация) http://reflex-language.narod.ru/
|
|
|
|
Сообщений в этой теме
Владимир Е. Зюбин Язык Рефлекс - диалект Си для программирования ПЛК May 10 2006, 07:48 Andrew2000 А вопросы такие:
1. История возникновения языка -... May 10 2006, 13:35 Владимир Е. Зюбин Цитата(Andrew2000 @ May 10 2006, 19:35) А... May 11 2006, 05:53  Kopa Цитата(Владимир Е. Зюбин @ May 11 2006, 08... May 11 2006, 12:23   Владимир Е. Зюбин Цитата(Kopa @ May 11 2006, 18:23) Цитата(... May 11 2006, 14:09    Kopa Цитата(Владимир Е. Зюбин @ May 11 2006, 17... May 12 2006, 02:46     Владимир Е. Зюбин Цитата(Kopa @ May 12 2006, 08:46) Меня, в... May 12 2006, 04:09      Kopa [quote name='Владимир Е. Зюбин' date=... May 12 2006, 04:50       Владимир Е. Зюбин Цитата(Kopa @ May 12 2006, 10:50) Цитата(... May 12 2006, 11:25        Kopa Цитата(Владимир Е. Зюбин @ May 12 2006, 14... May 13 2006, 20:12         Владимир Е. Зюбин Цитата(Kopa @ May 14 2006, 02:12) Не умол... May 15 2006, 12:52          Kopa Цитата(Владимир Е. Зюбин @ May 15 2006, 15... May 15 2006, 17:33           Kopa Вот еще одна интересная ссылка по затронутой мной... May 15 2006, 18:22           Владимир Е. Зюбин Цитата(Kopa @ May 15 2006, 23:33) Цитата(... May 16 2006, 08:27            Kopa [quote name='Владимир Е. Зюбин' date=... May 16 2006, 09:52             Владимир Е. Зюбин Цитата(Kopa @ May 16 2006, 15:52) Цитата(... May 17 2006, 04:20              Kopa Цитата(Владимир Е. Зюбин @ May 17 2006, 07... May 17 2006, 05:34               Владимир Е. Зюбин Цитата(Kopa @ May 17 2006, 11:34) Цитата(... May 17 2006, 11:55                Kopa [quote name='Владимир Е. Зюбин' date=... May 18 2006, 02:45                 Владимир Е. Зюбин Цитата(Kopa @ May 18 2006, 08:45) Цитата(... May 18 2006, 11:53                  Kopa Цитата(Владимир Е. Зюбин @ May 18 2006, 14... May 18 2006, 12:23                   Владимир Е. Зюбин Цитата(Kopa @ May 18 2006, 18:23) Цитата(... May 20 2006, 06:41                    Kopa Цитата(Владимир Е. Зюбин @ May 20 2006, 09... May 24 2006, 04:00                     locas Цитата(Kopa @ May 24 2006, 08:00) P.S. Чт... May 24 2006, 12:05                      Владимир Е. Зюбин Цитата(locas @ May 24 2006, 18:05) Цитата... May 26 2006, 09:39                       locas Цитата(Владимир Е. Зюбин @ May 26 2006, 13... May 28 2006, 14:06                        Владимир Е. Зюбин Цитата(locas @ May 28 2006, 20:06) Цитата... May 29 2006, 04:51                        Andrew2000 Цитата(locas @ May 28 2006, 18:06) Цитата... May 29 2006, 09:35                         Владимир Е. Зюбин Цитата(Andrew2000 @ May 29 2006, 15:35) В... May 30 2006, 11:47                          Andrew2000 Цитата(Владимир Е. Зюбин @ May 30 2006, 15... Jun 5 2006, 22:55                           Владимир Е. Зюбин Цитата(Andrew2000 @ Jun 6 2006, 04:55) Ци... Jun 6 2006, 09:24                            Andrew2000 Цитата(Владимир Е. Зюбин @ Jun 6 2006, 13... Jun 6 2006, 10:16                             Kopa Попалась интересная статья по генерации нативного
... Jun 7 2006, 16:38                             Владимир Е. Зюбин Цитата(Andrew2000 @ Jun 6 2006, 16:16) Ци... Jun 9 2006, 11:57                              Andrew2000 Цитата(Владимир Е. Зюбин @ Jun 9 2006, 15... Jun 9 2006, 17:02                               Владимир Е. Зюбин Цитата(Andrew2000 @ Jun 9 2006, 23:02) Ци... Jun 10 2006, 09:03                                Владимир Е. Зюбин Информационное сообщение:
Среди статей по языку Р... Jul 11 2006, 05:21                      Kopa Цитата(locas @ May 24 2006, 12:05) Цитата... Feb 12 2007, 06:53  Andrew2000 Цитата(Владимир Е. Зюбин @ May 11 2006, 09... May 11 2006, 14:16 vxzxc Как добавить Рефлекс в свой контроллер? Как Вы вид... May 12 2006, 12:46 Владимир Е. Зюбин Цитата(vxzxc @ May 12 2006, 18:46) Как до... May 12 2006, 15:12
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|