Современные технологии автоматизации» («СТА») —  журнал для квалифицированных специалистов по промышленной автоматизации Форум СТА — современные технологии автоматизации Домашняя страница
Домашняя страница форума CTA Домашняя страница форума CTA > II. АСУТП и SCADA > Архив
  Активные темы Активные темы
  FAQ FAQ  Искать в форуме   Зарегистрироваться Зарегистрироваться  Вход в систему Вход в систему

Средство для программирования контроллера: Си или МЭК 61131?

 Ответить Ответить Страница  <1 2122232425 53>
Автор
Сообщение
Sergey Sorokin Смотреть выпадающим
Действительный член
Действительный член


Присоединился: 27 Март 2003
Категория: Russian Federation
Online Status: Offline
Публикации: 240
Свойства публикации Свойства публикации   Ответить, цитируя автора - Sergey Sorokin Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Тема сообщения: Средство для программирования контроллера: Си или МЭК 61131?
    Опубликовано: 07 Октябрь 2003 00:51

Да. А а цифровое устройство любой сложности можно создать используя только элементы 2И-НЕ. :-) Но я спрашивал не об этом. Просто Вы говорили что IL выглядит как ассемблер, а "для некоторых моделей ПЛК фирмы Siemens является языком Ассемблера". Я и спрашивал, для какой конкретно аппаратной платформы (для какого микроконтроллера) IL является ассемблером. Если не знаете так и скажите.

У меня есть подозрение, что такого микроконтроллера не существует. Такой набор команд мог быть разве что у микропрограммных контроллеров конца 60х - начала 70х. Получается что ИДИОТИЗМ продолжается более 30 лет и ИДИОТЫ засели не только в крупнейших корпорациях, но и в национаьлных комитетах стран членов МЭК. 

А Sun - так это вообще сборище идиотов. Пытаются решить проблемы переносимости практически с помощью некого универсального ассемблера - байт-кода Java. :-)

С Уважением,

Сергей Сорокин

 

 

Первоначально опубликовано Владимир Е. Зюбин

Почему маловато? Может многовато?

Как известно, любой алгоритм можно описать посредством двух операторов DEC и JZ (декремент и переход по нулю).

Вот это по настоящему простой язык... Понять бы еще, кому он нужен... :-)

Серьезно: среди большинства специалистов в области ПЛК
IL ассоциируется с Сименсом, и только с Сименсом, что и
отражено в статье... А у каких других ассемблеров, кроме сименовского, есть родственные связи с IL, Вам лучше
подскажет доктор Q.

Первоначально опубликовано Sergey Sorokin

Первоначально опубликовано Владимир Е. Зюбин

Добиваться межплатформенной переносимости
с помощью ассемблера - ИДИОТИЗМ вдвойне.
Т.к. 1. ассемблер по определению отражает
архитектурные особенности вычислительной
платформы (если разговор идет о "железе" и
переносимости с одной "железки" на другую).
...


Владимир, а Вы не вспомните к архитектуре какого конкретно микропроцессора относится IL?


Я тут посмотрел последний драфт стандарта 61131-3 и в списке инструкций IL нашел всего 20 операторов. Мне показалось маловато. Даже для старенького микроконтроллера 8048 я насчитал в его ассемблере 96 команд. Может IL еще на ламповых контроллерах работал? :-)


С Уважением


Сергей Сорокин


 

Наверх
Владимир Е. Зюбин Смотреть выпадающим
Действительный член
Действительный член


Присоединился: 09 Сентябрь 2003
Категория: Russian Federation
Online Status: Offline
Публикации: 247
Свойства публикации Свойства публикации   Ответить, цитируя автора - Владимир Е. Зюбин Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 07 Октябрь 2003 10:49
Тут у меня действительно неточность, надо было
указать, что разговор идет не об IL, а об оригинале
(STEP5), из которого IL конструировался...

Спасибо за поправку. Несомненно ценную.

Что касается Sun, то там решается несколько отличная от
МЭК задача. Поэтому сравнение IL и байт-кода Java
не совсем корректно... Sun (в отличие от МЭК) прямо
декларирует ориентацию переносимость, поэтому
и была выдумана виртуальная машина и байт-код к ней...
Прямая интерпретация настолько ресурсопотребляющая, что
Sun вынужден всякие "хитрушки" придумывать... часть
трансляции (платформонезависимую часть) выносить в
отдельную фазу, а интерпретатор строить уже только для
байт-кода ("машинного кода" виртуальной машины).
Что несомненно дает некий выигрыш, достаточно
существенный по сравнению с "честным" интерпретатором,
но все равно ресурсов потребляет больше, чем если бы это
был нативный код выч. платформы.

Опять же, подход этот (2-х фазовой трансляции) имеет
не только плюсы, но и вполне очевидные минусы...
Например, в браузерах стоит "честный" транслятор
Java... А PLCopen дальше разговоров о виртуальной машины
под МЭК1131-3 так и не пошла... что тоже вполне
объяснимо. Не буду лить воду об отличиях архитектур,
специфики и подходов МЭК и Sun... считаю, такой анализ
труда не представляет... ключевые слова "переносимость
исходных текстов" и "модифицируемость"... Ну, и т.д.

Первоначально опубликовано Sergey Sorokin

Да. А а цифровое устройство любой сложности можно создать используя только элементы 2И-НЕ. :-) Но я спрашивал не об этом. Просто Вы говорили что IL выглядит как ассемблер, а "для некоторых моделей ПЛК фирмы Siemens является языком Ассемблера". Я и спрашивал, для какой конкретно аппаратной платформы (для какого микроконтроллера) IL является ассемблером. Если не знаете так и скажите.


У меня есть подозрение, что такого микроконтроллера не существует. Такой набор команд мог быть разве что у микропрограммных контроллеров конца 60х - начала 70х. Получается что ИДИОТИЗМ продолжается более 30 лет и ИДИОТЫ засели не только в крупнейших корпорациях, но и в национаьлных комитетах стран членов МЭК. 


А Sun - так это вообще сборище идиотов. Пытаются решить проблемы переносимости практически с помощью некого универсального ассемблера - байт-кода Java. :-)


С Уважением,


Сергей Сорокин


 


 


Первоначально опубликовано Владимир Е. Зюбин

Почему маловато? Может многовато?

Как известно, любой алгоритм можно описать посредством двух операторов DEC и JZ (декремент и переход по нулю).

Вот это по настоящему простой язык... Понять бы еще, кому он нужен... :-)

Серьезно: среди большинства специалистов в области ПЛК
IL ассоциируется с Сименсом, и только с Сименсом, что и
отражено в статье... А у каких других ассемблеров, кроме сименовского, есть родственные связи с IL, Вам лучше
подскажет доктор Q.

Первоначально опубликовано Sergey Sorokin


Первоначально опубликовано Владимир Е. Зюбин

Добиваться межплатформенной переносимости
с помощью ассемблера - ИДИОТИЗМ вдвойне.
Т.к. 1. ассемблер по определению отражает
архитектурные особенности вычислительной
платформы (если разговор идет о "железе" и
переносимости с одной "железки" на другую).
...



Владимир, а Вы не вспомните к архитектуре какого конкретно микропроцессора относится IL?



Я тут посмотрел последний драфт стандарта 61131-3 и в списке инструкций IL нашел всего 20 операторов. Мне показалось маловато. Даже для старенького микроконтроллера 8048 я насчитал в его ассемблере 96 команд. Может IL еще на ламповых контроллерах работал? :-)



С Уважением



Сергей Сорокин



 

Владимир Е. Зюбин
Язык Рефлекс -- Си-подобный язык программирования ПЛК
http://reflex-language.narod.ru/
Наверх
Доктор Q Смотреть выпадающим
Действительный член
Действительный член


Присоединился: 29 Сентябрь 2003
Категория: Isle Of Man
Online Status: Offline
Публикации: 119
Свойства публикации Свойства публикации   Ответить, цитируя автора - Доктор Q Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 07 Октябрь 2003 13:18

Владимир Е. Зюбин Если кратко - то транслятор пришлось писать из-за семантики и прагматики. Некоторые, действительно, макросы пишут, например, в "Авроре" Шалыто и Ко...

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

или Любченко, вот, тоже  секретные dll-ки создает... но это такая рутина, такая ненадега...

Из-за чего "ненадега"? Вы хотите сказать, что Ваш самопальный транслятор с "похожего-на-С" языка СПАРМ - более надежен, чем существующие С трансляторы?

а насчет Wiki, я там даже определения транслятора не
нашел...

Я уже говорил Вам, напоминаю: современное понимание терминов таково, что компилятор и транслятор являются синонимами.

Наверх
Доктор Q Смотреть выпадающим
Действительный член
Действительный член


Присоединился: 29 Сентябрь 2003
Категория: Isle Of Man
Online Status: Offline
Публикации: 119
Свойства публикации Свойства публикации   Ответить, цитируя автора - Доктор Q Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 07 Октябрь 2003 13:51

Владимир Е. Зюбин Вы, может, не понимаете, что
  LEA EBP, -4 [EBP] 
  MOV [EBP], EAX
это операции со стеком?

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

А как Вы думаете, кто в стек кладет числа?

Мне не надо гадать, я точно знаю "кто". Числа на стек кладут литеральные операторы. Т.е. при исполнении этих операторов интерпретатором Форта, на стеке появляются числа.

Теперь смотрите откуда эти литералы появляются:

: LIT, ( W -> )
  ['] DUP  MACRO,
  OPT_INIT
  SetOP 0B8 C,  , OPT  \ MOV EAX, #
  OPT_CLOSE
;

Это та часть компилятора Форта, которая создает (компилирует) эти литералы. Нетрудно видеть, что "байт-код" литерала является кодом одной единственной  команды:

   MOV EAX, #число

Когда этот "байт-код" исполняется интерпретатором, на стеке данных появляется число.

А кто считывает байты из исходного файла?

Компилятор, ессно.

а кто разбирается, что со считаным байтом дельше делать?

Компилятор.

А кто вызывает приведенные процедуры?

Интерпретатор

А кто определяет, корректен ли считаный байт вообще? :-)

В SPF - никто не определяет.

Во-во... это и называется трансляция... :-) Ищите трансляцию не в подпрограммах с машинным кодом операций, а там, где работа с исходным файлом идет. 

"Работа с исходным файлом" - дело КОМПИЛЯТОРА, которого в PLC НЕТ!
Вы что, правда не понимаете, или пытаетесь делать "хорошую мину при плохой игре"? Хорошо, объясняю еще раз.

Для большинства PLC исполняемая (т.е. интерпретируемая) программа подготавливается на кросс-системе, например, на РС. В состав кросс-системы входит компилятор. Компилятор обрабатывает исходный текст и ТРАНСЛИРУЕТ его в байт-код.

Байт-код загружается в память PLC и исполняется интерпретатором. Слышите, не "транслируется", а непосредстенно ИСПОЛНЯЕТСЯ. Поскольку интерпретатору не надо тратить время на трансляцию, он исполняется БЫСТРО, в пределе - так же быстро как "нативный код" сгенерированный С транслятором. Что Вам было продемонстрировано на примере SPF и его benchmarks.

Наверх
Sergey Sorokin Смотреть выпадающим
Действительный член
Действительный член


Присоединился: 27 Март 2003
Категория: Russian Federation
Online Status: Offline
Публикации: 240
Свойства публикации Свойства публикации   Ответить, цитируя автора - Sergey Sorokin Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 07 Октябрь 2003 13:52
Первоначально опубликовано Доктор Q

 

...

Я уже говорил Вам, напоминаю: современное понимание терминов таково, что компилятор и транслятор являются синонимами.

Это конечно интересная тема - терминология в Computer Sience. Но я думаю рядовой пользователь о ней редко задумывается.

Есть ли все таки какой то сухой остаток насчет "чего в супе не хватает"? В том же МЭК ведь есть альтернативный стандарт на функциональные блоки, где вводится некая событийная модель взаимодействия. Есть и вполне успешные графические языки програмирования типа Labview (там по моему можно и блоки данных обрабатывать). Можно ли взять что из одного места, что то из другого, что то из стандартных языков что бы Пользователь испытал чувство глубокого удовлетворения от работы с таким инструментом независимо от того нужна пользователю простота или гибкость?

С Уважением,

Сергей Срокин

 

Наверх
Доктор Q Смотреть выпадающим
Действительный член
Действительный член


Присоединился: 29 Сентябрь 2003
Категория: Isle Of Man
Online Status: Offline
Публикации: 119
Свойства публикации Свойства публикации   Ответить, цитируя автора - Доктор Q Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 07 Октябрь 2003 13:56

Владимир Е. Зюбин ...разговор идет не об IL, а об оригинале
(STEP5), из которого IL конструировался

Приведите источник информации, который бы подтверждал, что IL "конструировался" из STEP5. Если такого источника нет, то перестаньте повторять эту выдумку.

Наверх
Дмитрий Теркель Смотреть выпадающим
Новичок
Новичок


Присоединился: 26 Сентябрь 2003
Категория: Russian Federation
Online Status: Offline
Публикации: 22
Свойства публикации Свойства публикации   Ответить, цитируя автора - Дмитрий Теркель Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 07 Октябрь 2003 14:12
Первоначально опубликовано Максим Ананских

Первоначально опубликовано Дмитрий Теркель


И я про то же. Нет других возможностей при использовании агрегатов. А те, что есть, заставляют руками писать программы преобразования, как Вы справедливо заметили. Которые ничего не делают, но писать их надо. Собственно, этого и хочется избежать.


У Вас есть какие-то предложения по этому поводу?


Собственно, мое исходное предложение по поводу "агрегатных" или "множественных" связей и было таким предложением. Пользователь сам создает определенный ТИП СВЯЗИ, соединяющий определенные ТИПЫ БЛОКОВ. Затем он может протянуть одну единственную агрегатную связь (это как жгут проводов, если хотите), содержащую некоторое множество элементарных. Тогда агрегация самих данных в структуры или массивы ДЛЯ ЭТОЙ ЦЕЛИ будет не нужна.

Первоначально опубликовано Максим Ананских


Первоначально опубликовано Дмитрий Теркель


Представьте себе диаграмму из двух блоков, у каждого один вход и один выход. Оба блока расположены на диаграмме строго один под другим. Выход одного замкнут на вход другого и наоборот (этакая восьмерка).
Стандарт ВООБЩЕ НЕ ОПРЕДЕЛЯЕТ, в каком порядке блоки будут выполняться, а значит, не определяет, какая из двух связей прямая, а какая обратная. Теперь сдвигаем нижний блок на миллиметр влево. Он будет выполнен первым. А на миллиметр вправо - наоборот. Здорово! Семантика языка зависит от точности движения рисовальщика! (только по "grid" не стоит говорить, мы же стандарт обсуждаем :)


Ну, начнем с того, что большинство пакетов программирования просто не дадут так разместить блоки.



А что в этом незаконного? Вполне корректная с точки зрения стандарта конструкция. Если я не cмогу, скажем, на Microsoft Visual C++ реализовать какую-либо законную конструкцию языка С, я им это сообщу как баг компилятора, а они мне пообещают его исправить :)

Первоначально опубликовано Максим Ананских


Далее, читаем текст стандарта:


It shall be possible for the user to define the order of execution of the elements in an explicit loop, for instance by selection of feedback variables to form an implicit loop as shown in figure 23b).


То есть, как раз в стандарте-то написано, что этот порядок должен определяться пользователем.


Не совсем точно. Настоятельно рекомендуется, чтобы пользователю была предоставлена ТАКАЯ ВОЗМОЖНОСТЬ.
Он может ею не воспользоваться - имеет право.
Первоначально опубликовано Максим Ананских


Хотя бы с помощью создания вспомогательной переменной. То же, о чем Вы говорите - это недостаток реализации этого механизма в рамках конкретной реализации, и не более того.


Первоначально опубликовано Дмитрий Теркель


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


Принцип "слева направо" - это тоже не более чем фантазия. В стандарте говорится следующее:


No element of a network shall be evaluated until the states of all of its inputs have been evaluated.


А вот выходы-то находятся справа, а входы слева.




"...изловить и повесить. ... - Здесь не сказано повесить!... - Не всякое слово в строку пишется!"
(А.С.Пушкин "Борис Годунов")

"Implicit feedback paths can also be created by using connectors that link the output parameters from blocks on the ***RIGHT*** of the network to inputs of preceeding blocks."
(R.W.Lewis/ Programming industrial control systems using iec 1131-3).

Итак, мы с Льюисом оказались в приятной компании фантазеров. ТО есть на самом деле никаких "лево-право" в стандарте нет, и evaluation rules не придают никакого значения расположению графических элементов на диаграмме. За исключением того, что при изображении блока на диаграмме у него на левой стороне квадратика входы, а на правой - выходы. А сами квадратики мы можем перемещать как хотим, и смысл от этого не меняется. Этого бы очень хотелось. Даже более того, формально Вы правы, про справа-налево явно ничего не говориться. Но..

A feedback path is said to exist in a network when the output of a function or function block is used as the input to a function or function
block which _PRECEDES_ it in the network; the associated variable is called a feedback variable.

Интересно, что такое "precedes"? Имеются ввиду "evaluation rules", которые в случае с обратными связями в чистом виде не работают, то есть, будучи применены буквально, вообще делают невозможным вычисление диаграммы с обратными связями? Вряд ли. Или все же старое доброе слева-направо?

Кроме того, стандарт прямо не запрещает создавать обратные связи без явных feedback-переменных. В этом случае, кроме слева-направо, никаких разумных правил нет.

Далее, предположим, сделано так, как на рисунке
23a (explicit loop) Как мы тогда отличим feedback-переменную от просто промежуточной переменной? Feedback-переменная находится правее блока-приемника? А как еще? Я не понимаю, как еще. Значит, все-таки ПРАВЕЕ!
     
Ну а в целом Вы правы, все не так уж сумрачно. Стандарт действительно настоятельно рекомендует (It shall be possible for the user), как Вы совершенно справедливо заметили, дать юзеру возможность явно указывать обратные связи. И рекомендует несколько вариантов такого указания. По крайней мере один из них (если не оба) неявно основан на расположении элементов диаграммы на листе :). Но самое главное, он не запрещает это делать каким-либо другим образом. Чем, по моему мнению, и надо воспользоваться. Правда, про совместимость и переносимость лучше не вспоминать.. но стандарту это действительно не противоречит.



Первоначально опубликовано Максим Ананских


Но все-таки, поясните, пожалуйста, мысль о "неважно-каких" связях. Быть может, это действительно интересное решение, до которого пока еще никто не додумался? Мне, действительно, очень интересно...



Имелось ввиду ситуация, когда разработчику алгоритма по смыслу неважно, берется значение переменной с текущего шага или с прошлого, достаточно, чтобы это значение было достаточно "актуально", то есть относилось к моменту, не очень древнему. Собственно, очень многие управляющие алгоритмы на самом деле нечувствительны к замене некоторых прямых связей на "неважно какие". В принципе коммуникации между разными задачами и коммуникации между узлами сети в мэке предствляются именно такими связями Их только не изображают линиями на "единой диаграмме сетевой системы", но, наверное, изображали бы, если бы в мэке (61131, я не имею ввиду 499) такая диаграмма была возможна. Но это уже другая история - о представлении распределенного алгоритма имено как алгоритма, без обязательной привязки к узлам, ресурсам и т.п. ...
Чего в мэке 61131 нет.
С уважением,
Дмитрий Теркель
Наверх
Доктор Q Смотреть выпадающим
Действительный член
Действительный член


Присоединился: 29 Сентябрь 2003
Категория: Isle Of Man
Online Status: Offline
Публикации: 119
Свойства публикации Свойства публикации   Ответить, цитируя автора - Доктор Q Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 07 Октябрь 2003 14:17

Sergey Sorokin Есть ли все таки какой то сухой остаток насчет "чего в супе не хватает"?

С моей точки зрения, "сухой остаток" очень простой:

-- Разговоры про "принципиально медленное исполнение кода интерпретаторами" происходят от невежества. Признание этого факта выбивает краеугольный камень из позиции критиков МЭК, поэтому они так упираются.

-- Развитие самих МЭК языков, вероятно, для начала стоило бы вести в направлении, указанном ув. Дмитрием Теркелем.

-- В более далекой перспективе языки FBD и LD хорошо бы наделить свойствами, которые сделают их по-настоящему (т.е. без оговорок) функциональными.

-- Дискуссию о путях дальнейшего развития МЭК языков надо продолжить. Особенно важно услышать слова прогрраммистов, которые на повседневно практике применяют эти языки. Без такой обратной связи выработать правильное понимание путей развития МЭК языков очень трудно, если вообще возможно.

Наверх
Владимир Е. Зюбин Смотреть выпадающим
Действительный член
Действительный член


Присоединился: 09 Сентябрь 2003
Категория: Russian Federation
Online Status: Offline
Публикации: 247
Свойства публикации Свойства публикации   Ответить, цитируя автора - Владимир Е. Зюбин Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 07 Октябрь 2003 16:45
1. Любой алгоритм можно программировать не то, что
макросами или библиотеками, но и прямо на ассемблере...
как в МЭК 61131-3 предлагается.. :-)

От безысходности много чего можно сделать и сложность/простота тут не при чем... :-)))

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

3. Насчет wiki: Вы бы им подсказали статью о трансляторах все же тиснуть... :-) Честно признаться,
wiki производит впечатление очень слабого толкового словаря, полного наивной и противоречивой отсебятины...
Хотя, опять повторюсь, даже не очень хорошие толковые словари читать полезно...

Первоначально опубликовано Доктор Q

<SPAN class=bold>Владимир Е. Зюбин </SPAN>Если кратко - то транслятор пришлось писать из-за семантики и прагматики. Некоторые, действительно, макросы пишут, например, в "Авроре" Шалыто и Ко...


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


или Любченко, вот, тоже  секретные dll-ки создает... но это такая рутина, такая ненадега...


Из-за чего "ненадега"? Вы хотите сказать, что Ваш самопальный транслятор с "похожего-на-С" языка СПАРМ - более надежен, чем существующие С трансляторы?


а насчет Wiki, я там даже определения транслятора не
нашел...


Я уже говорил Вам, напоминаю: современное понимание терминов таково, что компилятор и транслятор являются синонимами.

Владимир Е. Зюбин
Язык Рефлекс -- Си-подобный язык программирования ПЛК
http://reflex-language.narod.ru/
Наверх
Владимир Е. Зюбин Смотреть выпадающим
Действительный член
Действительный член


Присоединился: 09 Сентябрь 2003
Категория: Russian Federation
Online Status: Offline
Публикации: 247
Свойства публикации Свойства публикации   Ответить, цитируя автора - Владимир Е. Зюбин Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 07 Октябрь 2003 17:23
Первоначально опубликовано Доктор Q

Владимир Е. Зюбин Вы, может, не понимаете, что
  LEA EBP, -4 [EBP] 
  MOV [EBP], EAX
это операции со стеком?


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




Так это что за код? По мне, так это типичный
ассемблер процессора х86 архитектуры... При чем тут
Форт неясно. Или Вы считаете, что стеком только Форт пользуется?

Первоначально опубликовано Доктор Q


А как Вы думаете, кто в стек кладет числа?


Мне не надо гадать, я точно знаю "кто". Числа на стек кладут литеральные операторы. Т.е. при исполнении этих операторов интерпретатором Форта, на стеке появляются числа.


Теперь смотрите откуда эти литералы появляются:


: LIT, ( W -> )
  ['] DUP  MACRO,
  OPT_INIT
  SetOP 0B8 C,  , OPT  \ MOV EAX, #
  OPT_CLOSE
;


Это та часть компилятора Форта, которая создает (компилирует) эти литералы. Нетрудно видеть, что "байт-код" литерала является кодом одной единственной  команды:


  <FONT color=#008000> MOV EAX, #число


Когда этот "байт-код" исполняется интерпретатором, на стеке данных появляется число.




В каком месте стека? сверху? нет не сверху, для этого
есть команда PUSH... толкается число куда-то в середину.
Что за число толкается? Откуда оно берется? Кто
определяет куда толкать число (кто задает адрес
загрузки)? и т.д.

Первоначально опубликовано Доктор Q


А кто считывает байты из исходного файла?


Компилятор, ессно.


а кто разбирается, что со считаным байтом дельше делать?


Компилятор.


А кто вызывает приведенные процедуры?


Интерпретатор


А кто определяет, корректен ли считаный байт вообще? :-)


В SPF - никто не определяет.


Во-во... это и называется трансляция... :-) Ищите трансляцию не в подпрограммах с машинным кодом операций, а там, где работа с исходным файлом идет. 


"Работа с исходным файлом" - дело КОМПИЛЯТОРА, которого в PLC НЕТ!
Вы что, правда не понимаете, или пытаетесь делать "хорошую мину при плохой игре"? Хорошо, объясняю еще раз.


Для большинства PLC исполняемая (т.е. интерпретируемая) программа подготавливается на кросс-системе, например, на РС. В состав кросс-системы входит компилятор. Компилятор обрабатывает исходный текст и ТРАНСЛИРУЕТ его в байт-код.


Байт-код загружается в память PLC и исполняется интерпретатором. Слышите, не "транслируется", а непосредстенно ИСПОЛНЯЕТСЯ. Поскольку интерпретатору не надо тратить время на трансляцию, он исполняется БЫСТРО, в пределе - так же быстро как "нативный код" сгенерированный С транслятором. Что Вам было продемонстрировано на примере SPF и его benchmarks.



Все правильно. Байт-код записывается в память PLC,
а потом интерпретируется... то есть побайтно считывается
ИНТЕРПРЕТАТОРОМ, транслируется ИНТЕРПРЕТАТОРОМ в
машинный код и исполняется ПРОЦЕССОРОМ...

операция трансляции ИНТЕРПРЕТАТОРОМ (считывания,
анализа, передачи управления, заталкивание в стек и т.д.
и т.п.) - это операции, которые могут быть сокращены.
Что и делается, когда используется компилятор.
Поэтому компиляционная модель (трансляция в машинный код
процессора) ВСЕГДА потребляет меньше выч. ресурсов, чем
интерпретационная модель.

Что тут Вам непонятно?

Я уже не говорю о том, что разговор изначально шел об IL,
а Вы тут какой-то Форт пытаетесь приплести...

Вот Вам строка на ассемблере х86

MOV AX, BX

занимает два машинных такта времени
и один байт памяти...

напишите на Форте или там на байт-коде ЛЮБОМ
эквивалентную конструкцию,
переведите ее потом в
машинный код/ассемблер, поймайте мальчика на улице
и убеждайте его, что Вы получили более быстродейственный
и более компактный код...

Мальчик должен быть не старше пяти лет - иначе не поверит...

детский сад, ей-богу... :-)






Владимир Е. Зюбин
Язык Рефлекс -- Си-подобный язык программирования ПЛК
http://reflex-language.narod.ru/
Наверх
 Ответить Ответить Страница  <1 2122232425 53>

Переход на форум Права доступа на форуме Смотреть выпадающим

Bulletin Board Software by Web Wiz Forums® version 9.64
Powered by Web Wiz Forums Free Express Edition
Copyright ©2001-2009 Web Wiz