- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
Помогите дилетанту
Модератор: kirillio
-
- здесь недавно
- Сообщения: 32
- Зарегистрирован: 07 ноя 2012, 11:16
- Имя: Моисеев Владимир Николаевич
- Страна: Россия
- город/регион: п. Редкино
Помогите дилетанту
Коллеги, помогите дилетанту.
Имею Simatic PCS7 v7.1 sp4 и необходимое "железо".
Задача: создать систему управления манипулятором.
Манипулятор имеет "руку", движения которой: 1.Вверх, 2.Вниз, 3.Вперед, 4.Назад, 5.Поворот к конвейеру, 6. Поворот к питателю.
На руке закреплен схват, действия: 1. Сжать, 2. Расжать.
Все движения и действия по принципу "до упора".
Вероятность отказа механики не нулевая.
Циклограмму работы делим на шаги. Основной режим работы - автоматическое выполнение шагов циклограммы (АУ) = штатный режим.
При нарушении условий штатного режима, останов и мигающий красный фонарь.
В любой момент оператор может перейти на ручное управление (РУ). Здесь доступны все движения и действия манипулятора, видно его текущее состояние.
Переход на АУ допускается как с текущего шага, так и с любого шага циклограммы по выбору.
В автомате можно пройти всю циклограмму или только конкретный шаг (полуавтомат).
Обычно (но не всегда - выход на исходную позицию), шаг имеет начальное состояние (НС) и конечное (ожидаемое) состояние (ОС).
Переход в АУ с конкретного шага возможен, если текушее состояние = начальному состоянию. Оператор должен видеть НС, чтобы "подогнать" к нему состояние манипулятора.
С чего начать решение задачи? На каком языке писать ПО для контроллера? На чем создавать ПО операторской станции?
С уважением, Владимир.
Имею Simatic PCS7 v7.1 sp4 и необходимое "железо".
Задача: создать систему управления манипулятором.
Манипулятор имеет "руку", движения которой: 1.Вверх, 2.Вниз, 3.Вперед, 4.Назад, 5.Поворот к конвейеру, 6. Поворот к питателю.
На руке закреплен схват, действия: 1. Сжать, 2. Расжать.
Все движения и действия по принципу "до упора".
Вероятность отказа механики не нулевая.
Циклограмму работы делим на шаги. Основной режим работы - автоматическое выполнение шагов циклограммы (АУ) = штатный режим.
При нарушении условий штатного режима, останов и мигающий красный фонарь.
В любой момент оператор может перейти на ручное управление (РУ). Здесь доступны все движения и действия манипулятора, видно его текущее состояние.
Переход на АУ допускается как с текущего шага, так и с любого шага циклограммы по выбору.
В автомате можно пройти всю циклограмму или только конкретный шаг (полуавтомат).
Обычно (но не всегда - выход на исходную позицию), шаг имеет начальное состояние (НС) и конечное (ожидаемое) состояние (ОС).
Переход в АУ с конкретного шага возможен, если текушее состояние = начальному состоянию. Оператор должен видеть НС, чтобы "подогнать" к нему состояние манипулятора.
С чего начать решение задачи? На каком языке писать ПО для контроллера? На чем создавать ПО операторской станции?
С уважением, Владимир.
-
- знаток Eplan
- Сообщения: 1136
- Зарегистрирован: 21 сен 2012, 22:45
- Имя: aranea
- Благодарил (а): 30 раз
- Поблагодарили: 165 раз
Re: Помогите дилетанту
хороша задача для дилетанта...
если у вас PCS7 то откуда вопросы о языке и ПО?
Step7 с его LAD/FBD/STL, SCL, CFC, GRAPH и WinCC для АРМ
на чем умеете на том и пишите
начать надо с реализации ручного режима
если у вас PCS7 то откуда вопросы о языке и ПО?
Step7 с его LAD/FBD/STL, SCL, CFC, GRAPH и WinCC для АРМ
на чем умеете на том и пишите
начать надо с реализации ручного режима
-
- администратор
- Сообщения: 4727
- Зарегистрирован: 25 июл 2008, 07:12
- Имя: Диев Александр Васильевич
- Страна: Россия
- город/регион: г. Сегежа, Карелия
- Благодарил (а): 225 раз
- Поблагодарили: 392 раза
Re: Помогите дилетанту
Насчёт "поворот к конвейеру" и "поворот к питателю" - насчёт "до упора" есть некоторые сомнения. Да и для остальных операций - тоже. Чем, кстати "упор" определяется? Концевые выключатели? Ток двигателя?Бурлак писал(а):Манипулятор имеет "руку", движения которой: 1.Вверх, 2.Вниз, 3.Вперед, 4.Назад, 5.Поворот к конвейеру, 6. Поворот к питателю.
На руке закреплен схват, действия: 1. Сжать, 2. Расжать.
Все движения и действия по принципу "до упора".
Повторное использование кода не отменяет повторного использования мозга при его повторном использовании.
-
- здесь недавно
- Сообщения: 32
- Зарегистрирован: 07 ноя 2012, 11:16
- Имя: Моисеев Владимир Николаевич
- Страна: Россия
- город/регион: п. Редкино
Re: Помогите дилетанту
>VADR » Сегодня, 10:06
>Насчёт "поворот к конвейеру" ...
Химия и электричество обычно не дружат. Воздух. Демферы. До концевика.
С уважением, Владимир.
>Насчёт "поворот к конвейеру" ...
Химия и электричество обычно не дружат. Воздух. Демферы. До концевика.
С уважением, Владимир.
-
- здесь недавно
- Сообщения: 32
- Зарегистрирован: 07 ноя 2012, 11:16
- Имя: Моисеев Владимир Николаевич
- Страна: Россия
- город/регион: п. Редкино
Re: Помогите дилетанту
> aranea » Сегодня, 09:55
> ... откуда вопросы о языке ...
Меня не интересуют простые перечисления возможностей.
Меня интересуют "кочки и овраги" и возможные "шишки" того или иного подхода.
Реальный опыт.
"Мордочка" приложения может выглядеть как то так:
Как прикрепить изображение на локальном компьютере к ответу?
С уважением, Владимир
> ... откуда вопросы о языке ...
Меня не интересуют простые перечисления возможностей.
Меня интересуют "кочки и овраги" и возможные "шишки" того или иного подхода.
Реальный опыт.
"Мордочка" приложения может выглядеть как то так:
Как прикрепить изображение на локальном компьютере к ответу?
С уважением, Владимир
-
- эксперт
- Сообщения: 1465
- Зарегистрирован: 25 июл 2008, 10:25
- Имя: Эдуард Владимирович
- Страна: СССР
- город/регион: Оренбург
- Благодарил (а): 45 раз
- Поблагодарили: 104 раза
Re: Помогите дилетанту
А Вам и не перечисляли подходы!Бурлак писал(а):> aranea » Сегодня, 09:55
> ... откуда вопросы о языке ...
Меня не интересуют простые перечисления возможностей.
Меня интересуют "кочки и овраги" и возможные "шишки" того или иного подхода.
"На чем создавать ПО операторской станции " aranea Вам и сказал, что выбора у Вас нет - WinCC.
ПО одно - PCS7.
Языки, по хорошему, лучше использовать несколько. Так как есть расчеты (текстовые языки) и есть дискретная логика (подойдут и SFC/FBD/LAD). Да и никуда не денетесь от CFC, это основа PCS7.
Задачу Вам декомпозировали, почти, в задании. Да еще и указали что надо делать в виде Автоматов и как. Вот и начинайте продумывать единичные куски отвечающие за каждое действие. Затем управление от оператора этим куском. Затем как выполнять их по циклограмме в автомате и полуавтомате. Расчетная часть циклограммы, так как там и должно быть задание в виде цифирек)))
Вряд-ли за Вас кто-то делать будет Вашу работу.Да и свой тон стоит по умерить.Бурлак писал(а):"Меня не интересуют простые перечисления возможностей. ...Мордочка" приложения может выглядеть как то так:....
P.S. Скачайте в интернете курсы по PCS7, очень пригодятся
Последний раз редактировалось CHANt 09 ноя 2012, 14:59, всего редактировалось 1 раз.
--------------------------------------------------------------------------------------------
-
- администратор
- Сообщения: 4727
- Зарегистрирован: 25 июл 2008, 07:12
- Имя: Диев Александр Васильевич
- Страна: Россия
- город/регион: г. Сегежа, Карелия
- Благодарил (а): 225 раз
- Поблагодарили: 392 раза
Re: Помогите дилетанту
Нажать кнопку "Ответить" для полной формы ответа (быстрый ответ внизу страницы не имеет функции добавления вложений). Ниже поля ответа - вторая вкладка "добавить вложения". Выбрать файл, добавить, и если он имеет графический формат - вставится в текст, как картинка.Бурлак писал(а):Как прикрепить изображение на локальном компьютере к ответу?
Повторное использование кода не отменяет повторного использования мозга при его повторном использовании.
-
- здесь недавно
- Сообщения: 32
- Зарегистрирован: 07 ноя 2012, 11:16
- Имя: Моисеев Владимир Николаевич
- Страна: Россия
- город/регион: п. Редкино
Re: Помогите дилетанту
>CHANt » Сегодня, 14:42
>...Да и свой тон стоит по умерить..
Извините, никого не хотел обидеть.
Внешний вид: С уважением, Владимир
>...Да и свой тон стоит по умерить..
Извините, никого не хотел обидеть.
Внешний вид: С уважением, Владимир
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- здесь недавно
- Сообщения: 32
- Зарегистрирован: 07 ноя 2012, 11:16
- Имя: Моисеев Владимир Николаевич
- Страна: Россия
- город/регион: п. Редкино
-
- эксперт
- Сообщения: 1465
- Зарегистрирован: 25 июл 2008, 10:25
- Имя: Эдуард Владимирович
- Страна: СССР
- город/регион: Оренбург
- Благодарил (а): 45 раз
- Поблагодарили: 104 раза
Re: Помогите дилетанту
Насколько я понимаю задание, при разработке алгоритмов единичных движений, необходимо ввести контроль с помощью таймера, между начальным состоянием и срабатыванием концевика в конце движения, соответственно и возврат обратно контролировать. В случае истечения таймера и отсутствия концевика - блокировка алгоритма, с выдачей сигнала неисправности. Есс-но, циклограмма должна также тормозится в режимах автомат/полуавтомат при неисправности.Вероятность отказа механики не нулевая.
Составляйте алгоритмы и структуру программы. На первом этапе работы программирование не требуется.
--------------------------------------------------------------------------------------------
-
- здесь недавно
- Сообщения: 32
- Зарегистрирован: 07 ноя 2012, 11:16
- Имя: Моисеев Владимир Николаевич
- Страна: Россия
- город/регион: п. Редкино
Re: Помогите дилетанту
> CHANt » Сегодня, 19:20
Видимо не туда попал.
Меня интересуют мнения профессионалов по Simatic PCS7, сам же не имею достаточного опыта.
Это задача чисто программистская и её надо решить средствами PCS7.
Прикладное ПО контроллера разработал на S7-SCL, ПО АРМ - Visual Basic скрипт WinCC.
Но туда ли гребу? Нет ли инструментария разработки ПО для получения более элегантного решения в данной области?
У меня получается достаточно коряво. Для примера привожу реализацию шага циклограммы
//== Штатное состояние автоматического режима - выполнение шагов рабочего цикла
//-- Выбор
VBR:
CASE intShag OF
0: //-- Шаг 00 - В исходное положение
CASE intCase OF
. . .
1: //-- Шаг 01 = Схват вверх, вперед, к питателю, сжать - Схват над питателем
CASE intCase OF
0: //--Синхронизация с конвейером
//..
intCase := intCase + 1; //-- Заглушка на месте синхронизации
//..
1:
//-- Команда питателю
//..
//-- Проверка начального состояния
idxNS :=3;
GOTO PrNS; //-- intCase := intCase+1;
2:
idxAU:=4;
idxOS:=4;
idxMS:=3;
idxTOShagi:=0;
GOTO PSH;
3: //-- Ожидание состояния
GOTO SOS;
4: //-- Завершение шага
GOTO ZSH;
END_CASE;
2: //-- Шаг 02 = Схват вниз, вперед, к питателю, сжать - Схват в кассете
CASE intCase OF
0: //.. Синхронизация с питателем
intCase := intCase + 1; //-- Заглушка на месте синхронизации
. . .
Извините за многословие.
С уважением, Владимир
Видимо не туда попал.
Меня интересуют мнения профессионалов по Simatic PCS7, сам же не имею достаточного опыта.
Это задача чисто программистская и её надо решить средствами PCS7.
Прикладное ПО контроллера разработал на S7-SCL, ПО АРМ - Visual Basic скрипт WinCC.
Но туда ли гребу? Нет ли инструментария разработки ПО для получения более элегантного решения в данной области?
У меня получается достаточно коряво. Для примера привожу реализацию шага циклограммы
//== Штатное состояние автоматического режима - выполнение шагов рабочего цикла
//-- Выбор
VBR:
CASE intShag OF
0: //-- Шаг 00 - В исходное положение
CASE intCase OF
. . .
1: //-- Шаг 01 = Схват вверх, вперед, к питателю, сжать - Схват над питателем
CASE intCase OF
0: //--Синхронизация с конвейером
//..
intCase := intCase + 1; //-- Заглушка на месте синхронизации
//..
1:
//-- Команда питателю
//..
//-- Проверка начального состояния
idxNS :=3;
GOTO PrNS; //-- intCase := intCase+1;
2:
idxAU:=4;
idxOS:=4;
idxMS:=3;
idxTOShagi:=0;
GOTO PSH;
3: //-- Ожидание состояния
GOTO SOS;
4: //-- Завершение шага
GOTO ZSH;
END_CASE;
2: //-- Шаг 02 = Схват вниз, вперед, к питателю, сжать - Схват в кассете
CASE intCase OF
0: //.. Синхронизация с питателем
intCase := intCase + 1; //-- Заглушка на месте синхронизации
. . .
Извините за многословие.
С уважением, Владимир
-
- авторитет
- Сообщения: 878
- Зарегистрирован: 21 авг 2009, 14:25
- Имя: Василий Иванович
- Благодарил (а): 1 раз
- Поблагодарили: 3 раза
Re: Помогите дилетанту
Владимир, как я понял, Вы на курсе где-то третьем учитесь. PCS7 - это вообще-то process control system. Т.е. предназначен для управления непрерывным технологическим процессом, но уж никак не роботом. Ну уж если на то пошло - то для поставленной Вам задачи лучше всего будет воспользоваться не SCL (тем более, что со структурным программированием Вы не очень дружите), а SFC - оно самое то для реализации конечного автомата на примере Вашей циклограммы. Нарисовал квадратики-стрелочки - и порядок.
-
- эксперт
- Сообщения: 1465
- Зарегистрирован: 25 июл 2008, 10:25
- Имя: Эдуард Владимирович
- Страна: СССР
- город/регион: Оренбург
- Благодарил (а): 45 раз
- Поблагодарили: 104 раза
Re: Помогите дилетанту
Все же останусь при своем мнение - научитесь проектировать программу, потом, будете просто выбирать язык реализации, который Вам удобен, либо который требует заказчик.
Достаточно современная книжка - http://is.ifmo.ru/books/_book.pdf Попробуйте вчитаться и вдуматься со второй главы. По крайней мере там приведены примеры как структурировать программу, как ее проектировать в виде конечных автоматов. А не мешать все в кучу как в Вашем листинге.
К способам реализации дойдете самостоятельно.
И еще поворчать хотел - по Вашему заданию в первом посте, циклограмма это некий алгоритм, в который можно ввести задание в виде последовательности выполнения простых движений, хошь 6-5-1-4-2-3, хочешь 3-5-1-4-6-2 и т.д. В Вашем же примере реализации четко выставлена очередь движений, т.е. все привязано к конкретной технологической операции. Ну некрасиво а? Конкретика то проще ведь, чем разработка абстрактно-универсального "монстрика" :D
Василий Иванович дело говорит, GRAPH (SFC) еще и в реал-тайме отлаживать гораздо наглядней будет, чем тыкатся с точками останова в SCL.
Достаточно современная книжка - http://is.ifmo.ru/books/_book.pdf Попробуйте вчитаться и вдуматься со второй главы. По крайней мере там приведены примеры как структурировать программу, как ее проектировать в виде конечных автоматов. А не мешать все в кучу как в Вашем листинге.
К способам реализации дойдете самостоятельно.
И еще поворчать хотел - по Вашему заданию в первом посте, циклограмма это некий алгоритм, в который можно ввести задание в виде последовательности выполнения простых движений, хошь 6-5-1-4-2-3, хочешь 3-5-1-4-6-2 и т.д. В Вашем же примере реализации четко выставлена очередь движений, т.е. все привязано к конкретной технологической операции. Ну некрасиво а? Конкретика то проще ведь, чем разработка абстрактно-универсального "монстрика" :D
Василий Иванович дело говорит, GRAPH (SFC) еще и в реал-тайме отлаживать гораздо наглядней будет, чем тыкатся с точками останова в SCL.
--------------------------------------------------------------------------------------------
-
- почётный участник форума
- Сообщения: 3572
- Зарегистрирован: 10 ноя 2009, 04:58
- Имя: Толмачев Михаил Алексеевич
- город/регион: г. Чехов, МО
- Благодарил (а): 6 раз
- Поблагодарили: 270 раз
Re: Помогите дилетанту
Уж ЧАНт-то знает, как это делается... ;)CHANt писал(а):Все же останусь при своем мнение - научитесь проектировать программу, потом, будете просто выбирать язык реализации, который Вам удобен, либо который требует заказчик.
Составляйте список входов и выходов, человеко-машинный интерфейс (если он есть) также рассматривайте как систему, которая имеет входа и выхода. В основе автоматного программирования лежит системный подход, а не "давайте-ка напишем программку".Бурлак писал(а):Имею Simatic PCS7 v7.1 sp4 и необходимое "железо".
Задача: создать систему управления манипулятором.
А пока у вас даже элементы всей системы неясны. Что значит "необходимое железо"? Чертите прямоугольники и связи между ними. У Вас, значит, есть ПЛК, операторская станция, какой-то красный фонарь, концевики. Перечисляйте все это с конкретикой.
Потом, когда появится некий набросок, нарисуете на бумаге последовательность шагов (граф) и потом установите Step7 и WinCC Flexible (которые необходимы для программирования ПЛК и операторской станции соответственно) и будете писать программу. На любом языке.
Сначала сделайте АУ или лучше РУ (последнее - для освоения азов программирования самое то). Потом соедините оба режима в единое целое.
Нештатные ситуации - это уже после составления последовательности шагов автомата в штатном режиме. Проведете анализ рисков и анализ неисправностей мозговым штурмом. Так появится у вас подсистема диагностики и все такое.Бурлак писал(а):Вероятность отказа механики не нулевая.
-
- завсегдатай
- Сообщения: 539
- Зарегистрирован: 05 ноя 2012, 07:38
- Имя: Дозморов Владимир Владимирович
- Страна: Россия
- город/регион: Северск
- Благодарил (а): 1 раз
- Поблагодарили: 25 раз
Re: Помогите дилетанту
Взаимодействие контроллер или модуль усо, концевик, мотор, реле подводные камни: выход контроллера или модуля усо; мотор под нагрузкой перестал крутить; концевик не выдал сигнал о том что манипулятор завершил цикл или во время начало работы цикла не выдал сигнал об отрыве манипулятора; залипание или не контакт выходных реле контроллера или модуля усо. Вам надо было просмотреть все эти варианты не на стадии создания по, а как только пришло в голову поставить манипулятор.
Ну да ладно начнем выход контроллера или модуль усо если фантазии хватит квиктируем вторым контроллером или модулем усо, лучше использовать полноценный контроллер без скада для выполнения основной задачи.
Выход из строя концевика или мотора в манипуляторе, создание вторую программу которая будет следить за первой программой, выполнение заданного цикла к привязке текущего во времени, начало цикла время останавливается прибавляется к нему выдержка с учетом +-5%, получаем отрезок времени в котором должен закончится цикл, в случае когда это не произошло ну там остановка заживание лампочки на ваше усмотрение.
Выходное реле контроллера или модуля усо снизить на него нагрузку дополнив террористом хотя лучше симистором который в свою очередь можно квиктировать 2 симистором дополнив индикацией работы оных.
Подводные камни Simatic PCS7 v7.1 sp4 программное обеспечение затачивалось не 1 год.
Выбор языка программирования все цело в вашей фантази, если не очень сильны в программировании выберите фбд хотя ст дает больше возможностей, можно и гибрид все равно после компиляции разницы никакой в чем был написан алгоритм.
Ну да ладно начнем выход контроллера или модуль усо если фантазии хватит квиктируем вторым контроллером или модулем усо, лучше использовать полноценный контроллер без скада для выполнения основной задачи.
Выход из строя концевика или мотора в манипуляторе, создание вторую программу которая будет следить за первой программой, выполнение заданного цикла к привязке текущего во времени, начало цикла время останавливается прибавляется к нему выдержка с учетом +-5%, получаем отрезок времени в котором должен закончится цикл, в случае когда это не произошло ну там остановка заживание лампочки на ваше усмотрение.
Выходное реле контроллера или модуля усо снизить на него нагрузку дополнив террористом хотя лучше симистором который в свою очередь можно квиктировать 2 симистором дополнив индикацией работы оных.
Подводные камни Simatic PCS7 v7.1 sp4 программное обеспечение затачивалось не 1 год.
Выбор языка программирования все цело в вашей фантази, если не очень сильны в программировании выберите фбд хотя ст дает больше возможностей, можно и гибрид все равно после компиляции разницы никакой в чем был написан алгоритм.
Чебурашку видишь???? я тоже не вижу, а он есть.
-
- авторитет
- Сообщения: 878
- Зарегистрирован: 21 авг 2009, 14:25
- Имя: Василий Иванович
- Благодарил (а): 1 раз
- Поблагодарили: 3 раза
Re: Помогите дилетанту
GRAPH и SFC - это разные и несовместимые продукты, хотя и имеют схожие принципы построения. PCS7 не поддерживает GRAPH, и чтобы переделать в SFC, придется переписать программу.CHANt писал(а):, GRAPH (SFC)
-
- эксперт
- Сообщения: 1465
- Зарегистрирован: 25 июл 2008, 10:25
- Имя: Эдуард Владимирович
- Страна: СССР
- город/регион: Оренбург
- Благодарил (а): 45 раз
- Поблагодарили: 104 раза
Re: Помогите дилетанту
Да, да, мои извинения, вечно забываю что S7-Graph отдельное приложение, со своими ... Имел ввиду конечно же SFC в PCS7.Василий Иванович писал(а):GRAPH и SFC - это разные и несовместимые продукты, хотя и имеют схожие принципы построения. PCS7 не поддерживает GRAPH, и чтобы переделать в SFC, придется переписать программу.
--------------------------------------------------------------------------------------------
-
- здесь недавно
- Сообщения: 32
- Зарегистрирован: 07 ноя 2012, 11:16
- Имя: Моисеев Владимир Николаевич
- Страна: Россия
- город/регион: п. Редкино
Re: Помогите дилетанту
>CHANt » Сегодня, 00:48
Большое спасибо за книгу, жаль что не видел раньше.
> ... чем разработка абстрактно-универсального "монстрика".
Это Вы в точку, в самое яблочко. Цель именно в этом - написать прототип ("рыбу", эскизный проект) этого "монстрика", но с заданными ограничениями по реализации - Simatic PCS7 v7.1.
> ... циклограмма это некий алгоритм, в который можно ввести задание в виде последовательности выполнения простых движений ... и действий технологической головки.
Да, именно так, и нужно уметь аккуратно и эффективно записывать эту последовательность в рамках реализации.
1. Уходим от конкретики управлений-состояний и переходим к индексам.
Имеем:
а) Некоторое множество допустимых, реально необходимых, а не математически возможных действий. Именно множество, а не последовательность.
Формируем статический вектор (массив) управлений (битовый вектор типа WORD, например). Порядок в векторе вообще говоря не связан с последовательностью движений и действий.
Пример:
б) Некоторое множество технологически допустимых состояний.
Формируем статический вектор состояний.
в) Перевод механизма из состояния неопределенности в исходное состояние требует маскирования некоторых состояний.
Формируем статический вектор масок состоляний (МС).
г) Необходимо задать временные ограничения (timeout)
Формируем статический вектор timeout (ТО)
д) Создаем динамический компонент - контекст механизма.
Содержит : компоненты векторов - начальное состояние (НС), управления (АУ), текущее состояние (ТС), ожидаемое состояние (ОС), маску состояния, режим (и состояние режима) работы. Struct. Tag.
е) Команда оператора. Пока WORD. Tag.
2. Реализуем набор неодходимых инструкций (команд).
а) Проверка начального состояния. Параметр - индекс вектора ОС
б) Выдать вектор управления. Параметры - индексы АУ, ОС, МС, ТО
г) Ждем состояние. Информация в контексте.
д) Завершения шага. В случае полуавтомата, переход в ручной режим.
3) Реализуем обработку команд оператора.
С уважением, Владимир.
p.s. Есть ли ассемблер в PCS7?
Большое спасибо за книгу, жаль что не видел раньше.
> ... чем разработка абстрактно-универсального "монстрика".
Это Вы в точку, в самое яблочко. Цель именно в этом - написать прототип ("рыбу", эскизный проект) этого "монстрика", но с заданными ограничениями по реализации - Simatic PCS7 v7.1.
> ... циклограмма это некий алгоритм, в который можно ввести задание в виде последовательности выполнения простых движений ... и действий технологической головки.
Да, именно так, и нужно уметь аккуратно и эффективно записывать эту последовательность в рамках реализации.
1. Уходим от конкретики управлений-состояний и переходим к индексам.
Имеем:
а) Некоторое множество допустимых, реально необходимых, а не математически возможных действий. Именно множество, а не последовательность.
Формируем статический вектор (массив) управлений (битовый вектор типа WORD, например). Порядок в векторе вообще говоря не связан с последовательностью движений и действий.
Пример:
б) Некоторое множество технологически допустимых состояний.
Формируем статический вектор состояний.
в) Перевод механизма из состояния неопределенности в исходное состояние требует маскирования некоторых состояний.
Формируем статический вектор масок состоляний (МС).
г) Необходимо задать временные ограничения (timeout)
Формируем статический вектор timeout (ТО)
д) Создаем динамический компонент - контекст механизма.
Содержит : компоненты векторов - начальное состояние (НС), управления (АУ), текущее состояние (ТС), ожидаемое состояние (ОС), маску состояния, режим (и состояние режима) работы. Struct. Tag.
е) Команда оператора. Пока WORD. Tag.
2. Реализуем набор неодходимых инструкций (команд).
а) Проверка начального состояния. Параметр - индекс вектора ОС
б) Выдать вектор управления. Параметры - индексы АУ, ОС, МС, ТО
г) Ждем состояние. Информация в контексте.
д) Завершения шага. В случае полуавтомата, переход в ручной режим.
3) Реализуем обработку команд оператора.
С уважением, Владимир.
p.s. Есть ли ассемблер в PCS7?
-
- здесь недавно
- Сообщения: 32
- Зарегистрирован: 07 ноя 2012, 11:16
- Имя: Моисеев Владимир Николаевич
- Страна: Россия
- город/регион: п. Редкино
Re: Помогите дилетанту
Извините, забыл примеры, а Simatic PCS7 другой виртуальной машине.
Исправляю недочет.
//== Матрица управлений
// |---------------- схват разжать
// | |-------------- схват сжать
// | | |------------ схват к питателю
// | | | |---------- схват к конвейеру
// | | | | |-------- схват назад
// | | | | | |------ схват вперед
// | | | | | | |---- схват вниз
// | | | | | | | |-- схват вверх
// --------- ---------
// |7|6|5|4| |3|2|1|0|
// --------- ---------
//-- Шаг 00 = Схват вверх, назад, к питателю, сжать - В исходное положение
// |0|1|0|0| |0|0|0|0| - B#16#40 00 - Шаг 00 = Схват сжать
// |0|1|0|0| |0|0|0|1| - B#16#41 01 - Шаг 00 = Схват вверх, сжать
// |0|1|0|0| |1|0|0|1| - B#16#49 02 - Шаг 00 = Схват вверх, назад, сжать
// |0|1|1|0| |1|0|0|1| - B#16#69 03 - Шаг 00 = Схват вверх, назад,к питателю, сжать
// |0|1|1|0| |0|1|0|1| - B#16#65 04 - Шаг 01 = Схват вверх, вперед, к питателю, сжать - Схват над питателем
// |0|1|1|0| |0|1|1|0| - B#16#66 05 - Шаг 02 = Схват вниз, вперед, к питателю, сжать - Схват в кассету
// |1|0|1|0| |0|1|1|0| - B#16#A6 06 - Шаг 03 = Схват вниз, вперед, к питателю, расжать - Схват берет
// |1|0|1|0| |0|1|0|1| - B#16#A5 07 - Шаг 04 = Схват вверх, вперед, к питателю, расжать - над питателем
// |1|0|1|0| |1|0|0|1| - B#16#A9 08 - Шаг 05 = Схват вверх, назад, к питателю, расжать - к питателю
// |1|0|0|1| |1|0|0|1| - B#16#99 09 - Шаг 06 = Схват вверх, назад, к конвейеру, расжать - к конвейеру
// |1|0|0|1| |0|1|0|1| - B#16#95 10 - Шаг 07 = Схват вверх, вперед, к конвейеру, расжать - над конвейером
// |1|0|0|1| |0|1|1|0| - B#16#96 11 - Шаг 08 = Схват вниз, вперед, к конвейеру, расжать - в полусборке
// |0|1|0|1| |0|1|1|0| - B#16#56 12 - Шаг 09 = Схват вниз, вперед, к конвейеру, сжать - Вставить
// |0|1|0|1| |0|1|0|1| - B#16#55 13 - Шаг 10 = Схват вверх, вперед, к конвейеру, сжать - Схват над конвейером
// |0|1|0|1| |1|0|0|1| - B#16#59 14 - Шаг 11 = Схват вверх, назад, к конвейеру, сжать - Схват к конвейеру
aAU :ARRAY[0..14] OF WORD :=
//-- Шаг 00 = Схват вверх, назад, к питателю, сжать - В исходное положение
W#16#40, //-- 00 - Шаг 00 = Схват сжать
W#16#41, //-- 01 - Шаг 00 = Схват вверх, сжать
W#16#49, //-- 02 - Шаг 00 = Схват вверх, назад, сжать
W#16#69, //-- 03 - Шаг 00 = Схват вверх, назад, к питателю, сжать
W#16#65, //-- 04 - Шаг 01 = Схват вверх, вперед, к питателю, сжать - Схват над питателем
W#16#66, //-- 05 - Шаг 02 = Схват вниз, вперед, к питателю, сжать - Схват в кассету
W#16#A6, //-- 06 - Шаг 03 = Схват вниз, вперед, к питателю, расжать - Схват берет
W#16#A5, //-- 07 - Шаг 04 = Схват вверх, вперед, к питателю, расжать - над питателем
W#16#A9, //-- 08 - Шаг 05 = Схват вверх, назад, к питателю, расжать - к питателю
W#16#99, //-- 09 - Шаг 06 = Схват вверх, назад, к конвейеру, расжать - к конвейеру
W#16#95, //-- 10 - Шаг 07 = Схват вверх, вперед, к конвейеру, расжать - над конвейером
W#16#96, //-- 11 - Шаг 08 = Схват вниз, вперед, к конвейеру, расжать - в полусборке
W#16#56, //-- 12 - Шаг 09 = Схват вниз, вперед, к конвейеру, сжать - Вставить
W#16#55, //-- 13 - Шаг 10 = Схват вверх, вперед, к конвейеру, сжать - Схват над конвейером
W#16#59; //-- 14 - Шаг 11 = Схват вверх, назад, к конвейеру, сжать - Схват к конвейеру
DATA_BLOCK DBmZrd1
//-- Контекст манипулятора установки внешнего ряда
//-------------------------------------------------------
//== Структура wdAU
//-- 0 бит (16#01) - схват вверх
//-- 1 бит (16#02) - схват вниз
//-- 2 бит (16#04) - схват вперед
//-- 3 бит (16#08) - схват назад
//-- 4 бит (16#10) - схват к конвейеру
//-- 5 бит (16#20) - схват к питателю
//-- 6 бит (16#40) - схват сжать
//-- 7 бит (16#80) - схват разжать
//
//== Структура wdTS, wdOS, wdMS
//-- 0 бит (16#01) - схват вверху
//-- 1 бит (16#02) - схват внизу
//-- 2 бит (16#04) - схват впереди
//-- 3 бит (16#08) - схват сзади
//-- 4 бит (16#10) - схват к конвейеру
//-- 5 бит (16#20) - схват к питателю
//-- 6 бит (16#40) - схват сжат
//-- 7 бит (16#80) - схват разжат
//
//== Структура wdDTS - Дополнение текущего состояния:
//-- 15 бит (W#16#8000) - режим работы (1 - автоматический, 0 - ручной)
//-- 14 бит (W#16#4000) - рабочий цикл (1 - да, 0 - завершён)
//-- 13 бит (W#16#2000) - не штатная ситуация (1 - да, 0 - нет)
//-- 12 бит (W#16#1000) - состояние конвейера (1 - рабочий ход, 0 - стоит)
//-- Расшифровка не штатной ситуации
//-- 0 бит (W#16#0001) - TimeOut шага
//-- 1 бит (W#16#0002) - Блокировка по рабочему ходу конвейера
//
STRUCT
wdAU :WORD; //-- Вектор управления
wdTS :WORD; //-- Текущее состояние
wdNS :WORD; //-- Шаг: Начальное состояние
wdOS :WORD; //-- Ожидаемое состояние
wdMS :WORD; //-- Маска состояния
wdDTS :WORD; //-- Дополнение текущего состояния
wdShag :WORD; //-- Номер шага
wdTOShag :WORD; //-- TimeOut шага
END_STRUCT
BEGIN
END_DATA_BLOCK
//== Команда оператора
// ---------------------------------
// |F|E|D|C|B|A|9|8|7|6|5|4|3|2|1|0|
// ---------------------------------
// Бит F=1 - требование выполнения команды оператора
// Биты ЕВС - код команды оператора
// Биты B..0 - параметры
// EBC=
// 000 - Переход на автоматический режим с заданного шага
// 001 - Переход на автоматический режим с текущего шага
// 010 - Переход на ручной режим
// 011 - Резерв
// 100 - Выполнить заданный шаг
// 101 - Выполнить текущий шаг
// 110 - Получить начальное состояние определенного шага
// 111 - Выполнить команду управления заданную оператором (биты B..0)
//== Реализация абстрактных инструкций
//---------------------------------------------------
//-- Шаг: Проверка начального состояния
PrNS:
DBmZrd1.wdNS := aOS[idxNS];
IF (((aOS[idxNS] XOR DBmZrd1.wdTS) AND aMS[idxMS]) = 0) THEN //-- Есть начальное состояние
intCase := intCase+1;
GOTO VBR;
END_IF;
DBmZrd1.wdDTS := DBmZrd1.wdDTS OR W#16#02 OR dtsErr; //-- Установить флажок не штатной ситуации (Начальное состояние)
RETURN;
//-- Задание параметров для автоматического управления
PSH:
intCase := intCase+1; //-- К следующей точке CASE
DBmZrd1.wdAU := aAU[idxAU]; //-- Вектор управления
DBmZrd1.wdOS := aOS[idxOS]; //-- Вектор ожидаемого состояния
DBmZrd1.wdMS := aMS[idxMS]; //-- Вектор маски состояния
DBmZrd1.wdShag := INT_TO_WORD(intShag); //-- Номер шага циклограммы робота
rlToShag := INT_TO_REAL(aToShagi[idxTOShagi]); //-- Timeout
DBmZrd1.wdTOShag := INT_TO_WORD(aToShagi[idxTOShagi]);
GOTO BAR; //-- Блокировки автоматического режима
//-- Ожидание состояния выполнения команды автоматического управления
SOS:
IF ((DBmZrd1.wdOS XOR DBmZrd1.wdTS) <> 0) THEN //-- Нет ожидаемого состояния
rlToShag := rlToShag - SAMPLE_T; //-- Счетчик TimeOut
DBmZrd1.wdTOShag := INT_TO_WORD(REAL_TO_INT(rlToShag));
IF (rlToShag <= 0) THEN //-- Ошибка TimeOut
rlToShag := 0;
DBmZrd1.wdDTS := DBmZrd1.wdDTS OR W#16#00 OR dtsErr; //-- Установить флажок не штатной ситуации (Timeout)
END_IF;
ELSE //-- Есть ожидаемое состояние
intCase := intCase+1; //-- К следующей точке CASE
idxAU := idxAU+1; //-- Следующий компонента вектора управления
idxOS := idxOS+1; //-- Следующий компонента вектора ожидаемого состояния
END_IF;
RETURN;
//-- Завершение шага
ZSH:
intShag := intShag+1;
intCase:=0;
DBmZrd1.wdNS := DBmZrd1.wdOS; //-- Начальное состояние - Конечное состояние
//-- Если выполнить только один шаг, то стоп
IF fPSHR <> 0 THEN //-- Да
fPSHR := 0;
wdCMD := wdCMD AND cmdMRU;
DBmZrd1.wdDTS := DBmZrd1.wdDTS AND (NOT dtsRabCikl); //-- Шаг рабочего цикла выполнен
DBmZrd1.wdDTS := DBmZrd1.wdDTS AND (NOT dtsErr); //-- ошибок нет
RETURN;
END_IF;
GOTO VBR;
//-- Задержка
ZDR:
rlToShag := rlToShag - SAMPLE_T; //-- Счетчик
DBmZrd1.wdTOShag := INT_TO_WORD(REAL_TO_INT(rlToShag/1000));
IF (rlToShag <= 0) THEN
intCase := intCase+1; //-- К следующей точке CASE
END_IF;
RETURN;
С уважением, Владимир
Исправляю недочет.
//== Матрица управлений
// |---------------- схват разжать
// | |-------------- схват сжать
// | | |------------ схват к питателю
// | | | |---------- схват к конвейеру
// | | | | |-------- схват назад
// | | | | | |------ схват вперед
// | | | | | | |---- схват вниз
// | | | | | | | |-- схват вверх
// --------- ---------
// |7|6|5|4| |3|2|1|0|
// --------- ---------
//-- Шаг 00 = Схват вверх, назад, к питателю, сжать - В исходное положение
// |0|1|0|0| |0|0|0|0| - B#16#40 00 - Шаг 00 = Схват сжать
// |0|1|0|0| |0|0|0|1| - B#16#41 01 - Шаг 00 = Схват вверх, сжать
// |0|1|0|0| |1|0|0|1| - B#16#49 02 - Шаг 00 = Схват вверх, назад, сжать
// |0|1|1|0| |1|0|0|1| - B#16#69 03 - Шаг 00 = Схват вверх, назад,к питателю, сжать
// |0|1|1|0| |0|1|0|1| - B#16#65 04 - Шаг 01 = Схват вверх, вперед, к питателю, сжать - Схват над питателем
// |0|1|1|0| |0|1|1|0| - B#16#66 05 - Шаг 02 = Схват вниз, вперед, к питателю, сжать - Схват в кассету
// |1|0|1|0| |0|1|1|0| - B#16#A6 06 - Шаг 03 = Схват вниз, вперед, к питателю, расжать - Схват берет
// |1|0|1|0| |0|1|0|1| - B#16#A5 07 - Шаг 04 = Схват вверх, вперед, к питателю, расжать - над питателем
// |1|0|1|0| |1|0|0|1| - B#16#A9 08 - Шаг 05 = Схват вверх, назад, к питателю, расжать - к питателю
// |1|0|0|1| |1|0|0|1| - B#16#99 09 - Шаг 06 = Схват вверх, назад, к конвейеру, расжать - к конвейеру
// |1|0|0|1| |0|1|0|1| - B#16#95 10 - Шаг 07 = Схват вверх, вперед, к конвейеру, расжать - над конвейером
// |1|0|0|1| |0|1|1|0| - B#16#96 11 - Шаг 08 = Схват вниз, вперед, к конвейеру, расжать - в полусборке
// |0|1|0|1| |0|1|1|0| - B#16#56 12 - Шаг 09 = Схват вниз, вперед, к конвейеру, сжать - Вставить
// |0|1|0|1| |0|1|0|1| - B#16#55 13 - Шаг 10 = Схват вверх, вперед, к конвейеру, сжать - Схват над конвейером
// |0|1|0|1| |1|0|0|1| - B#16#59 14 - Шаг 11 = Схват вверх, назад, к конвейеру, сжать - Схват к конвейеру
aAU :ARRAY[0..14] OF WORD :=
//-- Шаг 00 = Схват вверх, назад, к питателю, сжать - В исходное положение
W#16#40, //-- 00 - Шаг 00 = Схват сжать
W#16#41, //-- 01 - Шаг 00 = Схват вверх, сжать
W#16#49, //-- 02 - Шаг 00 = Схват вверх, назад, сжать
W#16#69, //-- 03 - Шаг 00 = Схват вверх, назад, к питателю, сжать
W#16#65, //-- 04 - Шаг 01 = Схват вверх, вперед, к питателю, сжать - Схват над питателем
W#16#66, //-- 05 - Шаг 02 = Схват вниз, вперед, к питателю, сжать - Схват в кассету
W#16#A6, //-- 06 - Шаг 03 = Схват вниз, вперед, к питателю, расжать - Схват берет
W#16#A5, //-- 07 - Шаг 04 = Схват вверх, вперед, к питателю, расжать - над питателем
W#16#A9, //-- 08 - Шаг 05 = Схват вверх, назад, к питателю, расжать - к питателю
W#16#99, //-- 09 - Шаг 06 = Схват вверх, назад, к конвейеру, расжать - к конвейеру
W#16#95, //-- 10 - Шаг 07 = Схват вверх, вперед, к конвейеру, расжать - над конвейером
W#16#96, //-- 11 - Шаг 08 = Схват вниз, вперед, к конвейеру, расжать - в полусборке
W#16#56, //-- 12 - Шаг 09 = Схват вниз, вперед, к конвейеру, сжать - Вставить
W#16#55, //-- 13 - Шаг 10 = Схват вверх, вперед, к конвейеру, сжать - Схват над конвейером
W#16#59; //-- 14 - Шаг 11 = Схват вверх, назад, к конвейеру, сжать - Схват к конвейеру
DATA_BLOCK DBmZrd1
//-- Контекст манипулятора установки внешнего ряда
//-------------------------------------------------------
//== Структура wdAU
//-- 0 бит (16#01) - схват вверх
//-- 1 бит (16#02) - схват вниз
//-- 2 бит (16#04) - схват вперед
//-- 3 бит (16#08) - схват назад
//-- 4 бит (16#10) - схват к конвейеру
//-- 5 бит (16#20) - схват к питателю
//-- 6 бит (16#40) - схват сжать
//-- 7 бит (16#80) - схват разжать
//
//== Структура wdTS, wdOS, wdMS
//-- 0 бит (16#01) - схват вверху
//-- 1 бит (16#02) - схват внизу
//-- 2 бит (16#04) - схват впереди
//-- 3 бит (16#08) - схват сзади
//-- 4 бит (16#10) - схват к конвейеру
//-- 5 бит (16#20) - схват к питателю
//-- 6 бит (16#40) - схват сжат
//-- 7 бит (16#80) - схват разжат
//
//== Структура wdDTS - Дополнение текущего состояния:
//-- 15 бит (W#16#8000) - режим работы (1 - автоматический, 0 - ручной)
//-- 14 бит (W#16#4000) - рабочий цикл (1 - да, 0 - завершён)
//-- 13 бит (W#16#2000) - не штатная ситуация (1 - да, 0 - нет)
//-- 12 бит (W#16#1000) - состояние конвейера (1 - рабочий ход, 0 - стоит)
//-- Расшифровка не штатной ситуации
//-- 0 бит (W#16#0001) - TimeOut шага
//-- 1 бит (W#16#0002) - Блокировка по рабочему ходу конвейера
//
STRUCT
wdAU :WORD; //-- Вектор управления
wdTS :WORD; //-- Текущее состояние
wdNS :WORD; //-- Шаг: Начальное состояние
wdOS :WORD; //-- Ожидаемое состояние
wdMS :WORD; //-- Маска состояния
wdDTS :WORD; //-- Дополнение текущего состояния
wdShag :WORD; //-- Номер шага
wdTOShag :WORD; //-- TimeOut шага
END_STRUCT
BEGIN
END_DATA_BLOCK
//== Команда оператора
// ---------------------------------
// |F|E|D|C|B|A|9|8|7|6|5|4|3|2|1|0|
// ---------------------------------
// Бит F=1 - требование выполнения команды оператора
// Биты ЕВС - код команды оператора
// Биты B..0 - параметры
// EBC=
// 000 - Переход на автоматический режим с заданного шага
// 001 - Переход на автоматический режим с текущего шага
// 010 - Переход на ручной режим
// 011 - Резерв
// 100 - Выполнить заданный шаг
// 101 - Выполнить текущий шаг
// 110 - Получить начальное состояние определенного шага
// 111 - Выполнить команду управления заданную оператором (биты B..0)
//== Реализация абстрактных инструкций
//---------------------------------------------------
//-- Шаг: Проверка начального состояния
PrNS:
DBmZrd1.wdNS := aOS[idxNS];
IF (((aOS[idxNS] XOR DBmZrd1.wdTS) AND aMS[idxMS]) = 0) THEN //-- Есть начальное состояние
intCase := intCase+1;
GOTO VBR;
END_IF;
DBmZrd1.wdDTS := DBmZrd1.wdDTS OR W#16#02 OR dtsErr; //-- Установить флажок не штатной ситуации (Начальное состояние)
RETURN;
//-- Задание параметров для автоматического управления
PSH:
intCase := intCase+1; //-- К следующей точке CASE
DBmZrd1.wdAU := aAU[idxAU]; //-- Вектор управления
DBmZrd1.wdOS := aOS[idxOS]; //-- Вектор ожидаемого состояния
DBmZrd1.wdMS := aMS[idxMS]; //-- Вектор маски состояния
DBmZrd1.wdShag := INT_TO_WORD(intShag); //-- Номер шага циклограммы робота
rlToShag := INT_TO_REAL(aToShagi[idxTOShagi]); //-- Timeout
DBmZrd1.wdTOShag := INT_TO_WORD(aToShagi[idxTOShagi]);
GOTO BAR; //-- Блокировки автоматического режима
//-- Ожидание состояния выполнения команды автоматического управления
SOS:
IF ((DBmZrd1.wdOS XOR DBmZrd1.wdTS) <> 0) THEN //-- Нет ожидаемого состояния
rlToShag := rlToShag - SAMPLE_T; //-- Счетчик TimeOut
DBmZrd1.wdTOShag := INT_TO_WORD(REAL_TO_INT(rlToShag));
IF (rlToShag <= 0) THEN //-- Ошибка TimeOut
rlToShag := 0;
DBmZrd1.wdDTS := DBmZrd1.wdDTS OR W#16#00 OR dtsErr; //-- Установить флажок не штатной ситуации (Timeout)
END_IF;
ELSE //-- Есть ожидаемое состояние
intCase := intCase+1; //-- К следующей точке CASE
idxAU := idxAU+1; //-- Следующий компонента вектора управления
idxOS := idxOS+1; //-- Следующий компонента вектора ожидаемого состояния
END_IF;
RETURN;
//-- Завершение шага
ZSH:
intShag := intShag+1;
intCase:=0;
DBmZrd1.wdNS := DBmZrd1.wdOS; //-- Начальное состояние - Конечное состояние
//-- Если выполнить только один шаг, то стоп
IF fPSHR <> 0 THEN //-- Да
fPSHR := 0;
wdCMD := wdCMD AND cmdMRU;
DBmZrd1.wdDTS := DBmZrd1.wdDTS AND (NOT dtsRabCikl); //-- Шаг рабочего цикла выполнен
DBmZrd1.wdDTS := DBmZrd1.wdDTS AND (NOT dtsErr); //-- ошибок нет
RETURN;
END_IF;
GOTO VBR;
//-- Задержка
ZDR:
rlToShag := rlToShag - SAMPLE_T; //-- Счетчик
DBmZrd1.wdTOShag := INT_TO_WORD(REAL_TO_INT(rlToShag/1000));
IF (rlToShag <= 0) THEN
intCase := intCase+1; //-- К следующей точке CASE
END_IF;
RETURN;
С уважением, Владимир
Последний раз редактировалось Бурлак 11 ноя 2012, 02:06, всего редактировалось 1 раз.
-
- здесь недавно
- Сообщения: 32
- Зарегистрирован: 07 ноя 2012, 11:16
- Имя: Моисеев Владимир Николаевич
- Страна: Россия
- город/регион: п. Редкино
Re: Помогите дилетанту
>Михайло » Вчера, 18:24
>...Чем мы должны помочь Вам?
Вопрос так ставить нельзя. Помогите, помогите вот в чем, смотрите.
Пользовательская часть пока реализована на VBS, имеем:
Sub OnObjectChanged(ByVal Item)
Dim oX,oY,i,j,vx
'-- Объект изменил ширину - пришло время опроса тегов контроллера
If Item.Width=puls_rr Then Exit Sub '-- Еще не время опроса тегов контроллера
puls_rr=Item.Width
'-- Тик-Так (Мигание) режима
If ((iTikTak_rr > 0) And (iTikTak_rr < 4)) Then '-- Тик-Так есть и не квитирован
iTikTak_rr = iTikTak_rr Xor 1
If (iTikTak_rr Mod 2) = 0 Then
Item.BackColor = colTak_rr
Else '-- Так
Item.BackColor = colTik_rr
End If
End If
On Error Resume Next '-- Обработка ошибок программистским кодом
'== Обработка команд оператора
'-- Читаем и анализируем тег команд оператора
If fGetTag(TGP_CMD,wdCmd) <> 128 Then '-- Ошибка связи с контроллером
If iTikTak_sv=0 Then '-- Тик-Так не запущен
colTik_sv=colNSK
iTikTak_sv=3
End If
Exit Sub
End If
'-- Связь есть
'colTik_sv=colButton
'iTikTak_sv=0
ObrCmd() '-- Обработка состояния исполнения команд оператора
'-- Читаем и анализируем тег контекста робота
If fGetTag(TGP_CON,aCon) <> 128 Then '-- Ошибка связи с контроллером
If iTikTak_sv=0 Then '-- Тик-Так не запущен
colTik_sv=colNSK
iTikTak_sv=3
End If
Exit Sub
End If
. . .
Программировать не очень удобно и не очень эффективно. Хотелось бы C# использовать, но как? Что-то у меня WinCC разваливается, как только запускаю Visual Studio. Visual Basic 6 еще держит.
Хотелось бы иметь и графическую динамику и/или изображение видеокамеры поручить в Image на форме и пр. пр. пр.
Научите как подружить WinCC с Visual Studio.
С уважением, Владимир.
>...Чем мы должны помочь Вам?
Вопрос так ставить нельзя. Помогите, помогите вот в чем, смотрите.
Пользовательская часть пока реализована на VBS, имеем:
Sub OnObjectChanged(ByVal Item)
Dim oX,oY,i,j,vx
'-- Объект изменил ширину - пришло время опроса тегов контроллера
If Item.Width=puls_rr Then Exit Sub '-- Еще не время опроса тегов контроллера
puls_rr=Item.Width
'-- Тик-Так (Мигание) режима
If ((iTikTak_rr > 0) And (iTikTak_rr < 4)) Then '-- Тик-Так есть и не квитирован
iTikTak_rr = iTikTak_rr Xor 1
If (iTikTak_rr Mod 2) = 0 Then
Item.BackColor = colTak_rr
Else '-- Так
Item.BackColor = colTik_rr
End If
End If
On Error Resume Next '-- Обработка ошибок программистским кодом
'== Обработка команд оператора
'-- Читаем и анализируем тег команд оператора
If fGetTag(TGP_CMD,wdCmd) <> 128 Then '-- Ошибка связи с контроллером
If iTikTak_sv=0 Then '-- Тик-Так не запущен
colTik_sv=colNSK
iTikTak_sv=3
End If
Exit Sub
End If
'-- Связь есть
'colTik_sv=colButton
'iTikTak_sv=0
ObrCmd() '-- Обработка состояния исполнения команд оператора
'-- Читаем и анализируем тег контекста робота
If fGetTag(TGP_CON,aCon) <> 128 Then '-- Ошибка связи с контроллером
If iTikTak_sv=0 Then '-- Тик-Так не запущен
colTik_sv=colNSK
iTikTak_sv=3
End If
Exit Sub
End If
. . .
Программировать не очень удобно и не очень эффективно. Хотелось бы C# использовать, но как? Что-то у меня WinCC разваливается, как только запускаю Visual Studio. Visual Basic 6 еще держит.
Хотелось бы иметь и графическую динамику и/или изображение видеокамеры поручить в Image на форме и пр. пр. пр.
Научите как подружить WinCC с Visual Studio.
С уважением, Владимир.
-
- авторитет
- Сообщения: 878
- Зарегистрирован: 21 авг 2009, 14:25
- Имя: Василий Иванович
- Благодарил (а): 1 раз
- Поблагодарили: 3 раза
Re: Помогите дилетанту
Как чем? Помочь написать курсовик на заказ!Михайло писал(а):Упс, математики из МГУ.. Чем мы должны помочь Вам?
-
- эксперт
- Сообщения: 1465
- Зарегистрирован: 25 июл 2008, 10:25
- Имя: Эдуард Владимирович
- Страна: СССР
- город/регион: Оренбург
- Благодарил (а): 45 раз
- Поблагодарили: 104 раза
Re: Помогите дилетанту
Есть. Называется STL.Бурлак писал(а): Есть ли ассемблер в PCS7?
Граф. динамика лишняя в нашем деле. Попробуйте поставить себя на место оператора и смотреть всю смену на мультики :)Бурлак писал(а): Хотелось бы иметь и графическую динамику и/или изображение видеокамеры поручить в Image на форме и пр. пр. пр.
Научите как подружить WinCC с Visual Studio.
--------------------------------------------------------------------------------------------
-
- не первый раз у нас
- Сообщения: 323
- Зарегистрирован: 26 сен 2010, 10:18
- Имя: Artur
- Страна: Russia
- Поблагодарили: 2 раза
Re: Помогите дилетанту
Подправлю чуток. Удобнее и лучше в PCS будет SCL.Есть ли ассемблер в PCS7?
Есть. Называется STL.
Подружить можно через Wincc ODK.Научите как подружить WinCC с Visual Studio.
-
- здесь недавно
- Сообщения: 32
- Зарегистрирован: 07 ноя 2012, 11:16
- Имя: Моисеев Владимир Николаевич
- Страна: Россия
- город/регион: п. Редкино
Re: Помогите дилетанту
>CHANt » Сегодня, 17:26
> ... Попробуйте поставить себя на место оператора ...
Тридцать лет назад был запущен проект создания роботизированной линии сборки. 10 роботов.
Неотъемлемой составной частью являлась компьютерная система управления и телевизионная система наблюдения.
ТВ-Камеры показывали на мониторах изображения всех рабочих зон и были постоянно включены, все смены. Вот такие мультики.
Это принципиально важно, иначе трудно, точнее, невозможно выйти из нештатной ситуации.
В помещении, где работали механизмы, люди отсутствовали.
Все рабочее управление (не наладка), АУ и РУ, только через компьютер.
Было бы удобнее, если бы изображение рабочей зоны робота (ов), транслировалсь прямо на экранную форму управления.
По определенным соображениям фото рабочих зон не привожу, слайд обрезан по вертикали.
Принципиальным моментом является то, что разработкой компьютерной системы управления занимались профессиональные программисты.
Без промежуточных инстанций.
"Железо" - RPT-80, процессор INTEL-8080, 16KB RAM, 32KB ROM.
Создали свою операционную систему (прототип имелся).
Разработали свой метод описания функционирования механизмов - элементы приведены выше - статические структуры данных и динамический контекст
Мы пошли еще дальше - создали релиз абстрактной машины с функциями, заточенными на управление механизмами, примеры даны выше.
В контекст добавили указатель инструкций абстратной машины, набор регистров и стек.
Там где в выше приведенном фрагменте листинга находится двойное CASE, у нас переход к программе абстрактой (логической) машины.
Прервать работу инструкции аб. маш. внутри и перейти к другой невозможно - атомарность.
Код инструкции - байт, размерность параметров в большинстве случаев - байт (индексы). Программа управления роботом очень компактна.
Реализция - библиотека подпрограмм на ассемблере.
Проект "отпахал" своё в течении 5 лет, до момента че, и отбыл в небытие.
Так получилось, что пришлось блудному сыну вернутся в родное РОКБА. Предложили освоить Simatic PCS7 v7.1.
4-ре месяца назад впервые услышал об этом продукте. Нет лучшего способа освоить что-то, не иначе как применяя его.
Попытался реализовать в новой среде то, что отложилось в памяти.
Реально, программа управления конкретным роботом, куда сложнее - появляются подпрограммы -
иначе нельзя описать ситуацию выхода из неш. сит. при резьбовым соединениям - иногда головка с элементом шлифует резьбу.
Приходилось: несколько раз (обратное вращение, потом прямое), не получается - стоп, головку вверх, головку вниз и опять
несколько раз первое. Нет - не штатная ситуация - сигнал оператору.
Еще сложнее описание процесса передачи полусборки от одного робота - другому. Синхроницация. Роботы работают асинхронно.
С уважением, Владимир.
> ... Попробуйте поставить себя на место оператора ...
Тридцать лет назад был запущен проект создания роботизированной линии сборки. 10 роботов.
Неотъемлемой составной частью являлась компьютерная система управления и телевизионная система наблюдения.
ТВ-Камеры показывали на мониторах изображения всех рабочих зон и были постоянно включены, все смены. Вот такие мультики.
Это принципиально важно, иначе трудно, точнее, невозможно выйти из нештатной ситуации.
В помещении, где работали механизмы, люди отсутствовали.
Все рабочее управление (не наладка), АУ и РУ, только через компьютер.
Было бы удобнее, если бы изображение рабочей зоны робота (ов), транслировалсь прямо на экранную форму управления.
По определенным соображениям фото рабочих зон не привожу, слайд обрезан по вертикали.
Принципиальным моментом является то, что разработкой компьютерной системы управления занимались профессиональные программисты.
Без промежуточных инстанций.
"Железо" - RPT-80, процессор INTEL-8080, 16KB RAM, 32KB ROM.
Создали свою операционную систему (прототип имелся).
Разработали свой метод описания функционирования механизмов - элементы приведены выше - статические структуры данных и динамический контекст
Мы пошли еще дальше - создали релиз абстрактной машины с функциями, заточенными на управление механизмами, примеры даны выше.
В контекст добавили указатель инструкций абстратной машины, набор регистров и стек.
Там где в выше приведенном фрагменте листинга находится двойное CASE, у нас переход к программе абстрактой (логической) машины.
Прервать работу инструкции аб. маш. внутри и перейти к другой невозможно - атомарность.
Код инструкции - байт, размерность параметров в большинстве случаев - байт (индексы). Программа управления роботом очень компактна.
Реализция - библиотека подпрограмм на ассемблере.
Проект "отпахал" своё в течении 5 лет, до момента че, и отбыл в небытие.
Так получилось, что пришлось блудному сыну вернутся в родное РОКБА. Предложили освоить Simatic PCS7 v7.1.
4-ре месяца назад впервые услышал об этом продукте. Нет лучшего способа освоить что-то, не иначе как применяя его.
Попытался реализовать в новой среде то, что отложилось в памяти.
Реально, программа управления конкретным роботом, куда сложнее - появляются подпрограммы -
иначе нельзя описать ситуацию выхода из неш. сит. при резьбовым соединениям - иногда головка с элементом шлифует резьбу.
Приходилось: несколько раз (обратное вращение, потом прямое), не получается - стоп, головку вверх, головку вниз и опять
несколько раз первое. Нет - не штатная ситуация - сигнал оператору.
Еще сложнее описание процесса передачи полусборки от одного робота - другому. Синхроницация. Роботы работают асинхронно.
С уважением, Владимир.