1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

Помогите дилетанту

Обсуждение вопросов, не относящихся ни к одному из других подразделов

Модератор: kirillio

Ответить
Аватара пользователя

CHANt
эксперт
эксперт
Сообщения: 1465
Зарегистрирован: 25 июл 2008, 10:25
Имя: Эдуард Владимирович
Страна: СССР
город/регион: Оренбург
Благодарил (а): 45 раз
Поблагодарили: 104 раза

Re: Помогите дилетанту

Сообщение CHANt »

видео, если уж так нужно, можно сделать и отдельной системой, а уж впихнуть в скаду окошко activeX не сложно. Где-то видел у прософта (www.prosoft.ru) платы видеозахвата со средой разработки. Это будет специализированней и, кстати, дешевле, и с нужными Вам (написанными Вами) параметрами. Либо посмотреть на системы "машинного зрения".
Очень много слов, и Ваши вопросы звучат расплывчато...
--------------------------------------------------------------------------------------------
Аватара пользователя

aranea
знаток Eplan
знаток Eplan
Сообщения: 1136
Зарегистрирован: 21 сен 2012, 22:45
Имя: aranea
Благодарил (а): 30 раз
Поблагодарили: 165 раз

Re: Помогите дилетанту

Сообщение aranea »

Бурлак писал(а):>Предложили освоить Simatic PCS7 v7.1.
выбрав Сименс, а в частности PCS7, рекомендую вам играть по его правилам, а не пытаться реализовать старые_непонятно_на_чем_реализованные_и_как_работающие алгоритмы с помощью поиска ассемблера и прикручивания MS Visual Studio или C#

промышленная автоматизация имеет свои особенности
попробуйте скачать учебник Ганса Бергера и написать программу на конвейер допустим
найдите и изучите демо-примеры программ для Step7 и WinCC - не обязательно для PCS

у вас есть объект (агрегат) - манипулятор
он состоит из нескольких механизмов (пневмо-электро-приводов) и датчиков и еще вам только известно чего
первым делом вы определяете какие сигналы (IO) к какому механизму относятся и как механизмы между собой взаимодействуют
после этого пишите блоки управления (FB) для каждого механизма в РУЧНОМ режиме - входные сигналы состояния, положения, управления (РУЧНОГО от оператора) и выходные управления, индикации
дальше проверяете работу этого - жмете кнопку вверх и смотрите что манипулятор поехал вверх, ехал в течение определенного времени и остановился по конечнику или аварии - и так все направления и схваты-захваты и перемещения
следующий шаг - добавить в блок управления каждого механизма АВТОМАТИЧЕСКИЙ режим и входные сигналы управления/блокировки/разрешения от супервизорного блока управления
потом пишите отдельный блок ГРАФ автоматического режима, который будет оценивая состояние каждого механизма агрегата и других входных сигналов выдавать управляющие сигналы в блоки управления этих подчиненных механизмов и ждать их переход в новое состояние
и снова отладка и так далее

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

то, что у вас написано как код VB для WinCC также не поддается логике
для интереса или разнообразия посмотрите эту тему http://iadt.siemens.ru/forum/viewtopic.php?t=20186
Изображение

Василий Иванович
авторитет
авторитет
Сообщения: 878
Зарегистрирован: 21 авг 2009, 14:25
Имя: Василий Иванович
Благодарил (а): 1 раз
Поблагодарили: 3 раза

Re: Помогите дилетанту

Сообщение Василий Иванович »

Бурлак писал(а):Тридцать лет назад был запущен проект создания роботизированной линии сборки. 10 роботов.
Неотъемлемой составной частью являлась компьютерная система управления и телевизионная система наблюдения.
...
Так получилось, что пришлось блудному сыну вернутся в родное РОКБА. Предложили освоить Simatic PCS7 v7.1.
4-ре месяца назад впервые услышал об этом продукте. Нет лучшего способа освоить что-то, не иначе как применяя его.
Попытался реализовать в новой среде то, что отложилось в памяти.
Ух ты, это на самом деле не курсовик.
Владимир, Вам надо иметь в виду, что языки программирования, используемые в PCS7 достаточно мощны, чтобы перестать использовать архаичные структуры данных и прочее, унаследованное от старого ассемблерного кода, тем более, что особо экономить на памяти смысла в общем-то нет. Создавайте структуры, лепите массивы, и все станет намного удобней.
Имейте в виду, что код на SCL, написанный Вами, будет крутиться в контроллере замкнутого типа, то есть исполняться много раз в течении не то что минуты, но возможно и секунды. Использовать GOTO категорически не советую. Заведите переменную, описывающую состояние конечного автомата, скажем iState и проверяйте ее значение. Если нужно перейти к следующему шагу, напишите что-то вроде iState := iState + 1, и в следующем цикле не потеряетесь. Если хотите вывалиться в нештатную ситуацию - напишите iState := ALARM.
И, как я уже писал выше. Нарисуйте граф конечного автомата для системы. Я уверен, что предыдущие разработчики от этого графа тоже отталкивались. А реализовать этот граф можно, конечно, на SCL, но это геморрой - раз, трудно отлаживать - два, трудно другим в него въезжать - три. Если уж есть PCS7, то лучше, чем SFC, ничего для этого не будет. Там и пошаговый прогон, и ручной-автоматический режим, и визуализация - всё уже есть в системных возможностях. Успеха!
Аватара пользователя

doza
завсегдатай
завсегдатай
Сообщения: 539
Зарегистрирован: 05 ноя 2012, 07:38
Имя: Дозморов Владимир Владимирович
Страна: Россия
город/регион: Северск
Благодарил (а): 1 раз
Поблагодарили: 25 раз

Re: Помогите дилетанту

Сообщение doza »

Владимир Николаевич (Бурлак) может вам поможет http://window.edu.ru/resource/405/63405 ... -step7.pdf
При желании можно еще найти много макулатуры по сименсу
Чебурашку видишь???? я тоже не вижу, а он есть.

Автор темы
Бурлак
здесь недавно
здесь недавно
Сообщения: 32
Зарегистрирован: 07 ноя 2012, 11:16
Имя: Моисеев Владимир Николаевич
Страна: Россия
город/регион: п. Редкино

Re: Помогите дилетанту

Сообщение Бурлак »

> doza » Вчера, 01:40
Спасибо за книгу. Макулатуры накачал с избытком.

> Василий Иванович » Вчера, 00:42
> ... Нарисуйте граф конечного автомата ...

Мда.
Мы никак не поймем друг друга. Беда в том, что я программист (не кодировщик), точнее, видимо системный аналитик. Моя основная задача - построить динамическую модель, развивающуюся в компьютерной среде, адекватную реальности. В основе копьютерной модели лежат данные - структурированная информация.

Ваш граф полностью погружен в статические вектора (каждая компонента соответствующего вектора в свою очередь есть битовый вектор, но в компьютере биты принято записывать в байты, слова и т.п.):

АУ - вектор допустимых управлений автоматического режима
ОС - вектор допустимых состояний автоматического режима
МС - вектор допустимых масок состояний автоматического режима
ТО - вектор допустимых времен timeout

> ... Заведите переменную, описывающую состояние конечного автомата ...

Текущее информационное состояние полностью описывается структурой данных контекст, где
wdTS - вектор текущего состояния (ТС)

В основе программной модели автомата лежит то факт, что при штатной ситуации следующий переход в другую точку графа осуществляется после достижения соответствующего состояния или выполняется условие синхронизации с другими автоматами (например с конвейером, питателем, возможен пропуск цикла, если предыдущий робот не смог выполнить штатно свою операцию)
При конструировании программной модели в среде Simatic PCS7 мы должны учитывать тот факт, что обязаны завершть FB при каждом запуске, передачей управления операционной системе. OB запускает FB всегда в одной точке - BEGIN

При каждом запуске программа FB:
1. выполняются некоторые системные действия
2. формируется вектор ТС
3. осуществляется обработка команды оператора
4. проверяется режим работы (и не устраненная не штатная ситуация)

> ... Если нужно перейти к следующему шагу ..

5. осуществляется переход к следующему программному действию.
Для этих целей служат две CASE переменные - intShag, intCase.
- intShag определяет шаг циклограммы (с него оператор может запустить автоматический режим)
- intCase определяет действие внутри шага
Привожу код:

//== Штатное состояние автоматического режима - выполнение шагов рабочего цикла
//-- Выбор
VBR:
CASE intShag OF
0: //-- Шаг 00 - В исходное положение
CASE intCase OF
0: //-- Команда роботу схват сжать
idxAU:=0; //-- Индекс вектора управления в векторе допустимых управлений
idxOS:=0; //-- Индекс вектора ожидаемого состояния в векторе допустимых состояний
idxMS:=0; //-- Индекс вектора масок состояния в векторе допустимых масок
idxTO:=0; //-- Индекс вектора Timeout
GOTO PEREHOD; //-- intCase++
1: //-- Ожидание состояния команды схват сжать
GOTO SOS; //-- intCase++,idxAU++,idxOS++

2: //-- Команда роботу схват вверх
idxMS:=1;
GOTO PEREHOD; //-- intCase++
3: //-- Ожидание состояния команды схват вверх
GOTO SOS; //-- intCase++,idxAU++,idxOS++

4: //-- Команда роботу схват назад
idxMS:=2;
GOTO PEREHOD; //-- intCase++
5: //-- Ожидание состояния команды схват назад
GOTO SOS; //-- intCase++,idxAU++,idxOS++

6: //-- Команда роботу схват к питателю
idxMS:=3;
GOTO PEREHOD; //-- intCase++
7: //-- Ожидание состояния команды схват к питателю
GOTO SOS; //-- intCase++,idxAU++,idxOS++

8: //-- Завершение шага
GOTO ZSH;
ELSE:
RETURN;
END_CASE;

Рассмотрим пример. Надо перевести робот из состояния неопределенности в начальное состояние.
Значение вектора НС (начальное состояние) не важно.
Любые движения в если схват внизу запрещены.

Итак, зададим индексы векторов и выполним инструкцию PEREHOD. Она формирует параметры контекста и переходит к анализу блокировок. Если ок, то выдает вектор АУ в общеситемное поле вывода дискретной информации и заканчивает работу FB, предварительно увеличив intCase. Иначе стоп и код не штатной ситуации в контекст

В следующий раз автомат перейдет в точку {intShag=0,intCase=1}. В этой точке выполняем инструкцию SOS - анализируем текущее состояние и timeout. Если ок, то увеличиваем intCase,idxAU,idxOS, иначе стоп и код не штатной ситуации в контекст.
...
Инструкция Завершения шага (ZSH) анализирует флаг работы по шагам и при необходимости переводит автомат в ручной режим.


> aranea » 11 ноя 2012, 23:27
> ...читать ваши примеры кода... ...по крайней мере забавно... ...не принять реализацию задачи в таком виде...
Всё может быть, особенно если будете принимать Вы. Но жизнь сделала свой выбор. Данная схема эффективно работала и с роботами
и управляла периодическими процессами химической технологии.
Мне интересен момент, как это программист не заметил изменения BackColor в зависимости от Тик-Так - мигание батенька, не более того, и его квитирование.
Я привел код, Вы считаете его бякой. Приведите свой.
Имейте ввиду - GOTO не боле чем переход к другой последовательности кода без возврата.

С уважением, Владимир.

Михайло
почётный участник форума
почётный участник форума
Сообщения: 3575
Зарегистрирован: 10 ноя 2009, 04:58
Имя: Толмачев Михаил Алексеевич
город/регион: г. Чехов, МО
Благодарил (а): 6 раз
Поблагодарили: 271 раз

Re: Помогите дилетанту

Сообщение Михайло »

Теперь немного понятно стало. Бурлаку нужно рассказать про возможности тех или иных языков программирования и про оптимальные способы представления данных (типы данных). Остальное он догонит сам.
Естественно VisualBasic отметается, кроме того момента, который касается работы с видеографикой или чем-то там... У Сименса есть прекрасные языки программирования: паскалеподобный SCL (ST), графические SFC и CFC. Я до сих пор не понял, что там с железом. Будет ли программируемый логический контроллер, использование Step7?

Василий Иванович
авторитет
авторитет
Сообщения: 878
Зарегистрирован: 21 авг 2009, 14:25
Имя: Василий Иванович
Благодарил (а): 1 раз
Поблагодарили: 3 раза

Re: Помогите дилетанту

Сообщение Василий Иванович »

Ну так значит Вы делаете в целом правильно, если конечная модель у Вас уже тоже есть. Если делать на SCL, то оно примерно так и будет. Вот только GOTO всё-таки советую заменить на оператор присваивания типа boPerehod := intCase = 1; а на месте метки PEREHOD поставить сравнение IF boPerehod THEN. При этом можно будет вывести переменную boPerehod наружу, что поможет при отладке. Если делать на SFC, то там вообще просто получится. Нарисовал состояния, в которых выдаются команды наружу, между ними условия, в которых опрашиваются пришедшие данные и все. Грузим, запускаем - видим всё до бита онлайн.

Автор темы
Бурлак
здесь недавно
здесь недавно
Сообщения: 32
Зарегистрирован: 07 ноя 2012, 11:16
Имя: Моисеев Владимир Николаевич
Страна: Россия
город/регион: п. Редкино

Re: Помогите дилетанту

Сообщение Бурлак »

>Василий Иванович » Вчера, 17:17
> ...Вот только GOTO...

Если в точке

//== Штатное состояние автоматического режима - выполнение шагов рабочего цикла
//-- Выбор
VBR:

перейти на абстрактную машину (выполнение инстукций абстрактной машины управления) с её инструкциями :
//-- Коды инструкций абстрактной машины управления
//------------------------------------------------

Код: Выделить всё

  CONST
    IAMU_PrNSoShag := BYTE#16#1; //-- Инструкция АМ - Проверка начального состояния шага
    IAMU_Perehod   := BYTE#16#2; //-- Инструкция АМ - Переход в другое состояние
    IAMU_SosPer    := BYTE#16#3; //-- Инструкция АМ - Проверка состояния перехода
    IAMU_EndShag   := BYTE#16#4; //-- Инструкция АМ - Завершение шага
    IAMU_Zader     := BYTE#16#5; //-- Инструкция АМ - Задержка
    IAMU_All       := BYTE#16#6; //-- Инструкция АМ - Установка параметров АУ,ОС,МС,ТО контекста
    IAMU_MS        := BYTE#16#7; //-- Инструкция АМ - Установка параметра МС контекста
    IAMU_TO        := BYTE#16#8; //-- Инструкция АМ - Установка параметра ТО контекста
    IAMU_WaitKonv  := BYTE#16#9; //-- Инструкция АМ - Ждем запроса конвейера на работу
    IAMU_SetOkKonv := BYTE#16#A; //-- Инструкция АМ - Конвейеру: штатное завершение работы
    IAMU_SetErrKonv:= BYTE#16#B; //-- Инструкция АМ - Конвейеру: не штатное завершение работы
    IAMU_WaitMeh   := BYTE#16#C; //-- Инструкция АМ - Ждем робота
    IAMU_SetMeh    := BYTE#16#D; //-- Инструкция АМ - Команда механизму - дай 
  END_CONST    

то программа управления роботом вылядит так:

Код: Выделить всё

      //== Шаг 00 - В исходное положение 
      //-- Переход Схват сжать
      IAMU_All,       //-- 00 - Установка АУ,ОС,МС,ТО в контексте
      0,              //-- 01 - Индекс вектора АУ 
      0,              //-- 02 - Индекс вектора ОС
      0,              //-- 03 - Индекс вектора МС
      0,              //-- 04 - Индекс вектора ТО
      IAMU_Perehod,   //-- 05 - Схват сжать
      IAMU_SosPer,    //-- 06 - Ожидание состояния Схват сжат
      //-- Переход Схват вверх
      IAMU_MS,        //-- 07 - Установка маски состояния
      1,              //-- 08 - Индекс вектора МС
      IAMU_Perehod,   //-- 09 - Схват вверх
      IAMU_SosPer,    //-- 10 - Ожидание состояния Схват вверху, сжат
      //-- Переход Схват назад
      IAMU_MS,        //-- 11 - Установка маски состояния
      2,              //-- 12 - Индекс вектора МС
      IAMU_Perehod,   //-- 13 - Схват назад
      IAMU_SosPer,    //-- 14 - Ожидание состояния Схват вверху, сзади, сжат
      //-- Переход Схват к питателю
      IAMU_MS,        //-- 15 - Установка маски состояния
      3,              //-- 16 - Индекс вектора МС
      IAMU_Perehod,   //-- 17 - Схват к питателю 
      IAMU_SosPer,    //-- 18 - Ожидание состояния Схват вверху, сзади, к питателю, сжат 
      IAMU_EndShag,   //-- 19 - Завершение шага 
       
      //== Шаг 01 = Схват вверх, вперед, к питателю,  сжать   - Схват над питателем
      IAMU_WaitKonv,  //-- 20 - Ждем конвейер 
      0,              //-- 21 - Индекс механизма
      IAMU_PrNSoShag, //-- 22 - Проверка начального состояния
      3,              //-- 23 - Индекс ОС
      IAMU_SetMeh,    //-- 24 - Питателю: работай
      1,              //-- 25 - Индекс механизма
      IAMU_All,       //-- 26 - Установка АУ,ОС,МС,ТО в контексте
      4,              //-- 27 - Индекс вектора АУ 
      4,              //-- 28 - Индекс вектора ОС
      3,              //-- 29 - Индекс вектора МС
      0,              //-- 30 - Индекс вектора ТО
      IAMU_Perehod,   //-- 31 - Схват вверх, вперед, к питателю,  сжать
      IAMU_SosPer,    //-- 32 - Ожидание состояния Схват вверху, впереди, к питателю, сжат
      IAMU_EndShag,   //-- 33 - Завершение шага
       
      //== Шаг 02 = Схват вниз, вперед, к питателю, сжать   - Схват в кассете 
      IAMU_WaitMeh,   //-- 34 - Ждем питатель 
      1,              //-- 35 - Индекс механизма
      IAMU_PrNSoShag, //-- 36 - Проверка начального состояния
      4,              //-- 37 - Индекс ОС
      IAMU_All,       //-- 38 - Установка АУ,ОС,МС,ТО в контексте
      5,              //-- 39 - Индекс вектора АУ 
      5,              //-- 40 - Индекс вектора ОС
      3,              //-- 41 - Индекс вектора МС
      0,              //-- 42 - Индекс вектора ТО
      IAMU_Perehod,   //-- 43 - Схват вниз, вперед, к питателю, сжать
      IAMU_SosPer,    //-- 44 - Ожидание состояния Схват внизу, впереди, к питателю, сжат
      IAMU_EndShag,   //-- 45 - Завершение шага
   
      //== Шаг 03 = Схват вниз, вперед, к питателю, расжать - Схват берет  
      IAMU_PrNSoShag, //-- 46 - Проверка начального состояния
      5,              //-- 47 - Индекс ОС
      IAMU_All,       //-- 48 - Установка АУ,ОС,МС,ТО в контексте
      6,              //-- 49 - Индекс вектора АУ 
      6,              //-- 50 - Индекс вектора ОС
      3,              //-- 51 - Индекс вектора МС
      0,              //-- 52 - Индекс вектора ТО
      IAMU_Perehod,   //-- 53 - Схват вниз,  вперед, к питателю,  расжать
      IAMU_SosPer,    //-- 54 - Ожидание состояния Схват внизу, впереди, к питателю, расжат
      IAMU_EndShag,   //-- 55 - Завершение шага
     
     . . .  Дальнейшие шаги по маске третьего.
Ни каких GOTO.
Примерно так и выглядели наши программы в Нелидово, Редкино, Навои, Чебоксарах в 1975-1990. Только в названиях инструкций абстрактной машины было больше сленга, иногда не переводимого на другие языки.

С уважением, Владимир

Василий Иванович
авторитет
авторитет
Сообщения: 878
Зарегистрирован: 21 авг 2009, 14:25
Имя: Василий Иванович
Благодарил (а): 1 раз
Поблагодарили: 3 раза

Re: Помогите дилетанту

Сообщение Василий Иванович »

Так у Вас вообще ни одной инструкции в программе уже не найдёшь, одни коды. Не только GOTO нет, ничего другого тоже нет.

Автор темы
Бурлак
здесь недавно
здесь недавно
Сообщения: 32
Зарегистрирован: 07 ноя 2012, 11:16
Имя: Моисеев Владимир Николаевич
Страна: Россия
город/регион: п. Редкино

Re: Помогите дилетанту

Сообщение Бурлак »

>Василий Иванович » 39 минут назад
Принцип построения простейшего процессора не меняется:
1. Создается множество инструкций - код+параметры
2. Создается набор регистров. Одним из регистров является Регистр Адреса Инструкции (РАИ)
3. Реализуется механизм выполнения инструкций (обычно это подпрограммы на ассемблере или соответствующих языках)
4. Используя инструкции пишется программа и помещается в подходящую информационную структуру
5. РАИ устанавливается в начало программы
Исполнение программы:
1. По РАИ читается код инструкции (КИ) и РАИ++
2. Код инструкции дешифруется и выполняется
CASE КИ
1:
Подпрограмма 1
Если нужен параметр, то выбирается по РАИ и РАИ++

В среде Simstic PCS7 как правило, инструкция должна завершаться и завершением функционального блока, хотя и не факт.

ВНИМАНИЕ !!!
По завершению обработки инструкции РАИ указывает на код следующей инструкции.

С уважением, Владимир

Василий Иванович
авторитет
авторитет
Сообщения: 878
Зарегистрирован: 21 авг 2009, 14:25
Имя: Василий Иванович
Благодарил (а): 1 раз
Поблагодарили: 3 раза

Re: Помогите дилетанту

Сообщение Василий Иванович »

Это уже некий макроязык получается. Вы кодируете команды набором данных, которые затем переводите обратно в команды по мере исполнения. Чем это лучше, чем если бы все писать просто на SCL - пока не могу понять.

Автор темы
Бурлак
здесь недавно
здесь недавно
Сообщения: 32
Зарегистрирован: 07 ноя 2012, 11:16
Имя: Моисеев Владимир Николаевич
Страна: Россия
город/регион: п. Редкино

Re: Помогите дилетанту

Сообщение Бурлак »

>Василий Иванович » Сегодня, 18:01
> ...Чем это лучше ...
Только опыт может дать ответ.
Жаль, что нельзя называть инструкции по-русски - сильно теряется наглядность и восприимчивость текста.

С уважением, Владимир.
Аватара пользователя

aranea
знаток Eplan
знаток Eplan
Сообщения: 1136
Зарегистрирован: 21 сен 2012, 22:45
Имя: aranea
Благодарил (а): 30 раз
Поблагодарили: 165 раз

Re: Помогите дилетанту

Сообщение aranea »

Бурлак, вы заваливаете форум готовыми кусками кода и выдержками из описаний алгоритмов, при этом конкретных вопросов не задаете
у вас что-то не работает из вами вышенаписанного?
Изображение

Автор темы
Бурлак
здесь недавно
здесь недавно
Сообщения: 32
Зарегистрирован: 07 ноя 2012, 11:16
Имя: Моисеев Владимир Николаевич
Страна: Россия
город/регион: п. Редкино

Re: Помогите дилетанту

Сообщение Бурлак »

>Михайло » 10 ноя 2012, 18:24
>Упс, математики из МГУ.. Чем мы должны помочь Вам?

Да. Нужна помощь.
У меня нет опыта работы с гарвардской архитектурой.
При построении абстрактной машины требуется поместить программу абстрактной машины в память, где допускается понятие АДРЕСА и УКАЗАТЕЛЯ, содержащего адрес.
Нужно аккуратно реализовать переход к подпрограмме и инструкцию JMP.
Это последнее, что на данный момент меня интересует в SCL. Если понимаете, о чем речь, помогите, и могу переходить к изучению других языков и возможностей.

С уважением, Владимир.

Василий Иванович
авторитет
авторитет
Сообщения: 878
Зарегистрирован: 21 авг 2009, 14:25
Имя: Василий Иванович
Благодарил (а): 1 раз
Поблагодарили: 3 раза

Re: Помогите дилетанту

Сообщение Василий Иванович »

Чего-то слишком заумно всё на мой взгляд. Зачем тут абстрактная машина нужна, для переносимости, что ли... Автор даже сам не знает, в чем преимущество использования этих старинных концепций. Ну разве что "раньше работало - значит потом тоже будет работать". :ext_sleep:
Аватара пользователя

CHANt
эксперт
эксперт
Сообщения: 1465
Зарегистрирован: 25 июл 2008, 10:25
Имя: Эдуард Владимирович
Страна: СССР
город/регион: Оренбург
Благодарил (а): 45 раз
Поблагодарили: 104 раза

Re: Помогите дилетанту

Сообщение CHANt »

Бурлак писал(а):Нужно аккуратно реализовать переход к подпрограмме и инструкцию JMP.
В языке STL, я уже его упоминал, помимо стандартных JMP, есть и инструкция распределенного перехода JL (есть ли в SCL не знаю). Вместе с JMP автомат выглядит так:

Код: Выделить всё

L STATE_WORD \\Загрузить номер шага, тип переменной Integer
JL GO_6 \\Загрузить инструкции перехода, при STATE_WORD >5 уйти на метку GO_6
JU ST_0 \\Если STATE_WORD=:0 переход на метку ST_0
JU ST_1 \\Если STATE_WORD=:1 переход на метку ST_1
JU ST_2 \\Если STATE_WORD=:2 переход на метку ST_2
JU ST_3 \\Если STATE_WORD=:3 переход на метку ST_3
JU ST_4 \\Если STATE_WORD=:4 переход на метку ST_4
JU ST_5  \\Если STATE_WORD=:5 ит.д. макс=255
GO_6: JU Err \\Если число в STATE_WORD >5 уйти на метку обработки ошибок
-------------------------------------------------------------------
ST_0: код
завершаем записью в STATE_WORD нужного шага
JU End \\в конец блока
-------------------------------------------------------------------
ST_1: код
завершаем записью в STATE_WORD нужного шага
JU End \\в конец блока
--------------------------------------------------
ST_2: код
завершаем записью в STATE_WORD нужного шага
JU End \\в конец блока
-------------------------------------------------------------------
ST_3: код
завершаем записью в STATE_WORD нужного шага
JU End \\в конец блока
-------------------------------------------------------------------
ST_4: код
завершаем записью в STATE_WORD нужного шага
JU End \\в конец блока
-------------------------------------------------------------------
ST_5: код
завершаем записью в STATE_WORD нужного шага
JU End \\в конец блока
--------------------------------------------------
Err: нужные действия по сбросу
     L 0 \\ в регистр 0
     T STATE_WORD \\обнуляем номер шага
     JU End Уходим в конец
--------------------------------------------------
End: NOP 0 \\ пустая инструкция NOP 0 если будут действия после автомата, либо инструкция BE - безусловный конец блока и выход. Можно ограничится NOP 0
--------------------------------------------------------------------------------------------

Автор темы
Бурлак
здесь недавно
здесь недавно
Сообщения: 32
Зарегистрирован: 07 ноя 2012, 11:16
Имя: Моисеев Владимир Николаевич
Страна: Россия
город/регион: п. Редкино

Re: Помогите дилетанту

Сообщение Бурлак »

>Василий Иванович » 14 ноя 2012, 23:33

Закончил почти(?) окончательный вариант абстрактной машины для робота.

> ... этих старинных концепций ...
Это не старинные концепции - это стиль мышления.
Есть множество целых чисел. Ввели операцию - +. Старинная конструкция?

Есть граф, с вершинами и ребрами. Вводим множество допустимых состояний и множество допустимых мультикоманд.
Оформляем эти множества в статические вектора (матрицы):
aOS - вектор допустимых состояний (начальных и ожидаемых),
aAU - вектор допустимых управлений,
aТО - вектор допустимых timeout-ов,
aMS - вектор допустимых масок состояния.

Доступ реализуем индексами:
idxOS - индекс вектора OS (для ожидаемого состояния)
idxNS - индекс вектора OS (для начального состояния)
idxAU - индекс вектора AU
idxTO - индекс вектора TO
idxMS - индекс вектора MS

Динамически узел -> ребро -> узел определяется контекстом абстрактной машины
wdNS - начальное состояние,
wdAU - управление,
wdTS - текущее состояние,
wdOS - ожидаемое состояние,
wdMS - маска состояния,
rlТО - timeout.

Пример перехода в инструкциях:

//== Шаг 03 = Схват вниз, вперед, к питателю, разжать - Схват берет
shag03: ARRAY[0..14] OF BYTE :=
IAMU_SetIdxAll, //-- #00 - Установка индексов idxNS,idxAU,idxOS,idxMS,idxTO в контексте
5, //-- #01 - Индекс idxNS
6, //-- #02 - Индекс idxAU
6, //-- #03 - Индекс idxOS
3, //-- #04 - Индекс idxMS
0, //-- #05 - Индекс idxTO
IAMU_PrNSoShag, //-- #06 - Проверка начального состояния
IAMU_Perehod, //-- #07 - Схват вниз, вперед, к питателю, сжать
IAMU_SosPer, //-- #08 - Ожидание состояния Схват внизу, впереди, к питателю, сжат
IAMU_EndShag, //-- #09 - Завершение шага
IAMU_Nop, //-- #10 - Нет операции
IAMU_Nop, //-- #11 - Нет операции
IAMU_Nop, //-- #12 - Нет операции
IAMU_Nop, //-- #13 - Нет операции
IAMU_Nop; //-- #14 - Нет операции

Если не штатная ситуация (нет ожидаемого состояния в течении timeout-а) - абстрактная машина стоп и сообщение оператору.
Переход в АУ - только с шага.
Инструкция "IAMU_EndShag - Завершение шага" проверяет флаг полуавтомата и при необходимости переходит на РУ.

> ... Зачем тут абстрактная машина нужна ...
Для меня - это вариант аккуратного, компактного, читабельного, переносимого, минимизированного по смысловым конструкциям
программирования периодических процессов и роботов 1-го поколения (до концевика)

Нам пришлось переносить абстрактную машину с 1010B на RPT-80.
Сейчас перенес на Simatic PCS7.
Реализация абстрактной машины в микроконтроллере не есть сверхсложная задача.
Отладку системы управления роботом или тех.процессом можно и нужно вести на персональном компьютере на языке абстрактной машины.

С уважением, Владимир.

Михайло
почётный участник форума
почётный участник форума
Сообщения: 3575
Зарегистрирован: 10 ноя 2009, 04:58
Имя: Толмачев Михаил Алексеевич
город/регион: г. Чехов, МО
Благодарил (а): 6 раз
Поблагодарили: 271 раз

Re: Помогите дилетанту

Сообщение Михайло »

А вы уверены, что языки программирования МЭК 61131-3 имеют что-то общее с Гарвардской структурой? Тут своя идеология в плане цикличности выполнения программы. И нормальные программеры здесь инструкции JMP и GOTO не используют.

Автор темы
Бурлак
здесь недавно
здесь недавно
Сообщения: 32
Зарегистрирован: 07 ноя 2012, 11:16
Имя: Моисеев Владимир Николаевич
Страна: Россия
город/регион: п. Редкино

Re: Помогите дилетанту

Сообщение Бурлак »

> А вы уверены ...
Я не являюсь специалистом по Гарвардской архитектуре. Для меня здесь данные отделены от кодов. В блоке данных метка указывает на содержимое, а то что это есть адрес умалчивается. В блоке кодов - метка есть адрес, но здесь нет возможности поместить данные. Выше приведена ссылка на книгу по процессору S7.
> ... И нормальные программеры ...
Посмотрите еще раз на архитектуру процессора Siemens S7 и его систему команд.

С уважением, Владимир.

Ryzhij
почётный участник форума
почётный участник форума
Сообщения: 5632
Зарегистрирован: 07 окт 2011, 09:12
Имя: Гаско Вячеслав Эриевич
Страна: Россия
город/регион: Рязань
Благодарил (а): 600 раз
Поблагодарили: 756 раз

Re: Помогите дилетанту

Сообщение Ryzhij »

Да кто ж Вам сказал, что "Семён" с его утончённой структурой - образец и идеал?
Только из-за своего положения на рынке там плюют на МЭК и стандарты. Пока что..
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может.» (Жан-Поль Сартр)
"Ту пустоту, которая остаётся в душе, когда в ней нет Бога, и весь мир не может заполнить." (святитель Николай Сербский)

Василий Иванович
авторитет
авторитет
Сообщения: 878
Зарегистрирован: 21 авг 2009, 14:25
Имя: Василий Иванович
Благодарил (а): 1 раз
Поблагодарили: 3 раза

Re: Помогите дилетанту

Сообщение Василий Иванович »

Бурлак писал(а):> ... Зачем тут абстрактная машина нужна ...
Для меня - это вариант аккуратного, компактного, читабельного, переносимого, минимизированного по смысловым конструкциям
программирования периодических процессов и роботов 1-го поколения (до концевика)

Нам пришлось переносить абстрактную машину с 1010B на RPT-80.
Сейчас перенес на Simatic PCS7.
Реализация абстрактной машины в микроконтроллере не есть сверхсложная задача.
Отладку системы управления роботом или тех.процессом можно и нужно вести на персональном компьютере на языке абстрактной машины.
Переносимым бывает код, а не программирование. Вы же для любой платформы пишете новый интерпретатор. Поэтому о переносимости я бы здесь не стал категорически утверждать. Пусть это "не есть сверхсложная задача", но в плане затрат - довольно трудоемкая, и если роботов там окажется всего с десяток - не самая выгодная. Не хотите переписывать заново программу для робота - так и скажите, а все остальные разговоры про аккуратность, компактность и читаемость - это лишнее.

Автор темы
Бурлак
здесь недавно
здесь недавно
Сообщения: 32
Зарегистрирован: 07 ноя 2012, 11:16
Имя: Моисеев Владимир Николаевич
Страна: Россия
город/регион: п. Редкино

Re: Помогите дилетанту

Сообщение Бурлак »

>Ryzhij » Сегодня, 09:29
>Да кто ж Вам сказал ...
Понятия не имею, да и эти вопросы не интересуют в принципе. Использование "Семён" пропедалировано сверху.
Лично сам с превеликим удовольствием построил бы распределенную систему на базе Faz Panda c программированием на С#
и построенной абстрактной машины.

>Василий Иванович » Сегодня, 10:44
> ... а все остальные разговоры ...
Ранее приводил фрагменты листингов узловых моментов ПО управления роботом, их можно сравнить и понять что программа на языке инструкций выглядит аккуратнее чем на SCL, нет множеств не нужных по смыслу и затеняющих его IF-THEN-ELSE, CASE; инструкции занимают всего 225 байт, адресное пространство инструкций контролируется, стек контролируется; на SCL запрещен русский язык в идентификаторах, если записать мнемонику инструкций на русском языке, то программа очень хорошо читается и понимается.
Набор инструкции не фиксирован, а зависит от области приложения.
То что рассматривается не есть таблетка на все случаи, да и применять эту таблетку надо аккуратно.

С уважением, Владимир.

Василий Иванович
авторитет
авторитет
Сообщения: 878
Зарегистрирован: 21 авг 2009, 14:25
Имя: Василий Иванович
Благодарил (а): 1 раз
Поблагодарили: 3 раза

Re: Помогите дилетанту

Сообщение Василий Иванович »

выглядит аккуратнее чем на SCL
Но не аккуратнее, чем на SFC. Можно конечно и плоскогубцами гвозди забивать, но уж если молоток в наборе имеется...
Аватара пользователя

RSA
здесь недавно
здесь недавно
Сообщения: 41
Зарегистрирован: 13 ноя 2012, 20:56
Имя: Роман Сергеевич
Страна: Россия
город/регион: Уфа/Башкортостан
Благодарил (а): 4 раза
Поблагодарили: 2 раза

Re: Помогите дилетанту

Сообщение RSA »

Это крайне неправильно использовать PCS 7 для таких задач.
"Lass die Finger von Maschinen, die Du selbst nicht kannst bedienen!"
Аватара пользователя

aranea
знаток Eplan
знаток Eplan
Сообщения: 1136
Зарегистрирован: 21 сен 2012, 22:45
Имя: aranea
Благодарил (а): 30 раз
Поблагодарили: 165 раз

Re: Помогите дилетанту

Сообщение aranea »

RSA, отчего же? что из функционала PCS накладывает такие ограничения для создания системы управления манипулятором?
Изображение
Ответить

Вернуться в «Общие вопросы»