Siemens AG
Список форумов SIEMENS, Россия. IA&DT
   FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Принципы программирования STL (Вопросы новичка)
На страницу 1, 2  След.
 
Начать новую тему   Ответить на тему    Список форумов SIEMENS, Россия. IA&DT -> Системы автоматизации SIMATIC
Предыдущая тема :: Следующая тема  
Автор Сообщение
Ser Jon



Зарегистрирован: 31.07.2009
Сообщения: 9

Сообщение Добавлено: Пт Янв 28, 2011 13:46    Заголовок сообщения: Принципы программирования STL (Вопросы новичка) Ответить с цитатой

Ребят помогайте, если не в лом.
Начал изучать программирование simatic в stl, по курсу PRO1 и тут началось.
До этого был иститутский опыт программирования микроконтроллеров и опыт программирования LOGO!
И если с микроконтроллерами и LOGO вроде бы все ясно, то вот с stl у меня пока не сложилось понимание всего происходящего.

В частности я не понимаю организацию памяти и где про это почитать тоже не нашел. Если в микроконтроллерах я могу сам по своему усмотрнию использовать доступную память просто обращаясь по адресу, а в лого об этом вообще не думаешь, то при программировании в stl я могу использовать те или иные биты, байты и пр., но абсолютно не понимаю как можно их адресовывать.
Возможно вопрос звучит сумбурно, но точнее его сформулировать не смог.

Еще вопрос:
Есть простая программа

O I 1.2
O I 1.4
R Q 4.0
O I 1.1
O I 1.3
S Q 4.0

Как она будет выполнятся к контроллере? Начнется с первой строчки - закончится на последней и так по кругу?
Если бы это было так то при одновременном нажатии и на I1.2 и на I1.1? на выходе Q появился бы сигнал, но не постоянный, а в идеале прямоугольный с постоянным включением и выключением по мере обработки этой программы.
Однако этого не происходит, а контроллер каким то образом понимает, что если последняя инструкция S то триггер имеет приоритет по установке, а если R то по сбросу. Как это сделано?

И последнее:
Если я использую несколько блоков, например OB1, FC1 и FC2
В ОВ1 идет вызов сначала FC1 а потом FC2.
В FC 1 написан код ручного режима работы, а в FC2 автоматического.
Каким образом идет обработка кода? Я так понимаю, что сначала читается ОВ1 и когда идет вызов FC1 начинается чтение из FC1, после возвращаемся в ОВ1 и переходим в FC2 и так по кругу или я не прав?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Conoscev
Писатель со стажем


Зарегистрирован: 17.06.2009
Сообщения: 970

Сообщение Добавлено: Пт Янв 28, 2011 14:19    Заголовок сообщения: Ответить с цитатой

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

Но есть также и возможность напрямую обращаться из цикла программы к периферийным портам (буковка PI/PIW)

Документация пока здесь
http://old.automation-drives.ru/as/support/documentation/
http://old.automation-drives.ru/as/products/doc.php?l1=%CF%F0%EE%E3%F0%E0%EC%EC%ED%EE%E5%20%EE%E1%E5%F1%EF%E5%F7%E5%ED%E8%E5&l2=%C1%E0%E7%EE%E2%EE%E5%20%CF%CE&l3=doc
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Ser Jon



Зарегистрирован: 31.07.2009
Сообщения: 9

Сообщение Добавлено: Пт Янв 28, 2011 14:35    Заголовок сообщения: Ответить с цитатой

На счет адресации принял к сведению, но пока еще не переварил, а вот как выполняется программа, в частности с триггером?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
il
Известный Писатель


Зарегистрирован: 02.11.2007
Сообщения: 444
Откуда: irk

Сообщение Добавлено: Сб Янв 29, 2011 5:28    Заголовок сообщения: Ответить с цитатой

Цитата:
а вот как выполняется программа, в частности с триггером?

как вы описали так и выполняется,
и про триггер вам ответили больше чем про адресацию ;)

не то вы читать начали,
скачайте "Программирование с помощью STEP 7 V5.3", сначала прочитайте приложение A2 полностью (особенно про системную память, и помните - что размер каждой адресной области в системной памяти зависит от конкретного плк и указан в его ттх), что б снять ваши вопросы, а потом остальное прочтите, еще и Бергера скачайте.

вкрадце, сначала реальное состояние входов записывается в образ процесса, потом исполняется OB1 , потом из образа процесса записывается реальное состояние выходов. и по кругу.

то есть ваш Q из программы - это не реальный выход, а бит в образе процесса, который попадет на реальный выход (с зеленым диодом) после исполнения об1. естественно последнее изменение сохраниться в образе до вывода.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Eugene1974
Это точно не человек


Зарегистрирован: 16.02.2006
Сообщения: 3446
Откуда: Украина, HTEng

Сообщение Добавлено: Сб Янв 29, 2011 6:20    Заголовок сообщения: Ответить с цитатой

Небольшое уточнение.
Цикл начинается с записи значений из образа выходов процесса в выходные модули.
Затем данные входных модулей копируются во образ входов процесса.
И только после этого выполняется пользовательская программа, OB1 и всё остальное.
В конце цикла операционная система выполняет служебные задачи, например, контролирует время цикла.



Цитата:
Еще вопрос:
Есть простая программа

O I 1.2
O I 1.4
R Q 4.0
O I 1.1
O I 1.3
S Q 4.0

Как она будет выполнятся к контроллере? Начнется с первой строчки - закончится на последней и так по кругу?
Если бы это было так то при одновременном нажатии и на I1.2 и на I1.1? на выходе Q появился бы сигнал, но не постоянный, а в идеале прямоугольный с постоянным включением и выключением по мере обработки этой программы.
Однако этого не происходит, а контроллер каким то образом понимает, что если последняя инструкция S то триггер имеет приоритет по установке, а если R то по сбросу. Как это сделано?

Если не учитывать разного рода прерываний, то программа выполняется так, как Вы написали - циклически. А вот с поведением триггера Ваше предположение ошибочно. При "одновременном нажатии и на I1.2 и на I1.1" выход Q4.0 будет постоянно взведен именно из-за присутствия механизма области процесса. Команда "S Q 4.0" ведь стоит после команды "R Q 4.0", имеет место RS-триггер. Если бы не было образа процесса, выход чисто теоретически сбрасывался условно на доли микросекунды (исправленному - верить:), а потом взводился бы снова. Но какой модуль успевал бы отрабатывать такое?


Последний раз редактировалось: Eugene1974 (Сб Янв 29, 2011 10:26), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
il
Известный Писатель


Зарегистрирован: 02.11.2007
Сообщения: 444
Откуда: irk

Сообщение Добавлено: Сб Янв 29, 2011 7:27    Заголовок сообщения: Ответить с цитатой

Programming with STEP 7 писал(а):
One of the internal tasks of the operating system (OS) is to read the status of inputs into the
process image input table (PII). Once this step is complete, the user program is executed with all
blocks that are called in it. The cycle ends with writing the process image output table (PIQ) to the
outputs for the modules.

И вообще вам не кажется что это непринципиальное дело?*
хотя реально в ос плк по вашей детальной доке , но для начала - смысл понятнее по моей вводной доке ;). а, не важно

вот еще одно непринципиальное уточнение
Цитата:
выход чисто теоретически сбрасывался условно на доли наносекунды


битовая инструкция даже в 417** исполняется 30 нс, итого 0,1 мкс ;)))
-----------------------
* при ответах на заданные топикстартером вопросы
** 6ES7417-4XL04-0AB0
;)


Последний раз редактировалось: il (Сб Янв 29, 2011 11:29), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Eugene1974
Это точно не человек


Зарегистрирован: 16.02.2006
Сообщения: 3446
Откуда: Украина, HTEng

Сообщение Добавлено: Сб Янв 29, 2011 10:24    Заголовок сообщения: Ответить с цитатой

il писал(а):
И вообще вам не кажется что это непринципиальное дело?
Мне - кажется. А вот разработчикам PLC - нет, раз они в один прекрасный момент перешли на такую схему.

il писал(а):
битовая инструкция даже в 417 исполняется 30 нс, итого 0,1 мкс ;)))
Давайте будем до конца непринципиальными:-) Не 30, а 18. У 319-го - и того меньше - 4 (по другим сведениям - 10).
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Вадим Налимов
Известный Писатель


Зарегистрирован: 16.04.2005
Сообщения: 196

Сообщение Добавлено: Пн Янв 31, 2011 0:03    Заголовок сообщения: Ответить с цитатой

Друзья, надо быть проще!
Почему-то всегда самый простой вопрос вызывает такую ожесточенную полемику :)

Предлагаю ответить по сути и доступно для начинающего:

****В частности я не понимаю организацию памяти и где про это почитать тоже не нашел.*****

Да, действительно, в SIMATIC нет единого адресного пространства. Точнее оно есть, но на уровне операционной системы и пользователь не имеет туда доступа.
Для пользователя все сделано просто - есть много кусочков памяти, каждый из которых имеет свое имя, например I, Q, M, DBxx и т.д.
Да, I и Q которые Вы используете в программе это не более чем биты в памяти, такие же как и все остальные.

То есть при работе с памятью вы указываете имя нужного Вам кусочка памяти, а далее указываете адрес нужного Вам байта и при необходимости бита (если хотите работать с битом).
Примеры:
IB0 - первый байт (буква B) области памяти входов (буква I);
Q3.4 - пятый бит четвертого байта области памяти выходов;
МD8 - двойное слово (буква D), начинающееся с байта №8 и занимающее 4 байта до байта №11 включительно.

****Как она будет выполнятся к контроллере? Начнется с первой строчки - закончится на последней и так по кругу? ****
Абсолютно правильно! Ваша программа выполняется циклически, после того, как процессор выполнил все, что Вы написали - операционка делает свою работу: включает транзисторы цифровых выходов в зависимости от состояния области памяти Q, смотрит на состояния цифровых входов и переносит их состояние в область памяти I, и так далее.
После чего опять сначала выполняет Вашу программу.

**** Однако этого не происходит, а контроллер каким то образом понимает, что если последняя инструкция S то триггер имеет приоритет по установке, а если R то по сбросу. Как это сделано? ****

Здесь все просто! Ваша программа сбрасывает и устанавливает бит Q4.0 в памяти и не более того. После того, как Ваша программа закончилась контроллер в зависимости от состояния этого бита включает или выключает цифровой выход. На следующем цикле все повторяется заново.

**** Каким образом идет обработка кода? Я так понимаю, что сначала читается ОВ1 и когда идет вызов FC1 начинается чтение из FC1, после возвращаемся в ОВ1 и переходим в FC2 и так по кругу или я не прав?****

Да, Вы правы! OB1 это и есть тот кусок программы, который циклически вызывается операционкой. FC1 и FC2 - это аналог функций в С или подпрограмм в ассемблере. Кто из них будет вызываться и в какой последовательности определяете вы сами!
Например, можно смотреть выбранный режим и вызывать или FC1 или FC2.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Conoscev
Писатель со стажем


Зарегистрирован: 17.06.2009
Сообщения: 970

Сообщение Добавлено: Пн Янв 31, 2011 9:05    Заголовок сообщения: Ответить с цитатой

Самое смешное, что через несколько лет работы с контроллёрами начинаешь писать программы на ассемблере для микроконтроллеров в стиле как LAD для контроллеров.
Вчера для дорожников набросал такую бумажно-электронную схему
http://www.youtube.com/watch?v=38ozq_N9HZQ
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Ser Jon



Зарегистрирован: 31.07.2009
Сообщения: 9

Сообщение Добавлено: Пн Янв 31, 2011 16:23    Заголовок сообщения: Ответить с цитатой

Ребят, всем спасибо, но самый правильный совет был, это скачать Программирование с помощью STEP 7 V5.3. Сижу изучаю, многое на места встает.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Ser Jon



Зарегистрирован: 31.07.2009
Сообщения: 9

Сообщение Добавлено: Вт Апр 26, 2011 15:39    Заголовок сообщения: Ответить с цитатой

Не стал новую тему плодить, тут вопрос задам.

Сейчас изучаю аналоговые модули, скачал себе доку
SM331; AI 8 x 12 Bit Первые шаги
И вроде бы все хорошо, но в доке пример приводят на основе исходника с таким именем GSSM331T2DE.AWL, но мне его нигде не найти. Может есть у кого, скинте на почту или на обменник.

И второй вопрос, могу ли я в PLCSIM симулировать аналоговый сигнал (менять амплитуду)? А то мне аналоговые модули блишайшее время не видеть, как всоих ушей.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
valkov
Начинающий писатель


Зарегистрирован: 25.02.2011
Сообщения: 81

Сообщение Добавлено: Вт Апр 26, 2011 16:13    Заголовок сообщения: Ответить с цитатой

Ser Jon писал(а):
Сейчас изучаю аналоговые модули, скачал себе доку
SM331; AI 8 x 12 Bit Первые шаги
И вроде бы все хорошо, но в доке пример приводят на основе исходника с таким именем GSSM331T2DE.AWL, но мне его нигде не найти. Может есть у кого, скинте на почту или на обменник.

И второй вопрос, могу ли я в PLCSIM симулировать аналоговый сигнал (менять амплитуду)? А то мне аналоговые модули блишайшее время не видеть, как всоих ушей.

http://support.automation.siemens.com/WW/view/en/18971030
и там иконка INFO со стрелкой
указывает на архив примера (это относится ко всем примерам к докам - но только на нерусских страницах)
https://support.automation.siemens.com/WW/llisapi.dll/csfetch/18971030/awl_e.zip

Ser Jon писал(а):
И второй вопрос, могу ли я в PLCSIM симулировать аналоговый сигнал (менять амплитуду)?

Можешь - выбери инструмент Ползунок для плавного изменения значения мышью, или вводи конкретные значения в поле ввода.
Не забывай, что аналоговые входы/выходы должны быть забиты в таблицу символов как целые числа со знаком типа INT.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Ser Jon



Зарегистрирован: 31.07.2009
Сообщения: 9

Сообщение Добавлено: Ср Апр 27, 2011 7:00    Заголовок сообщения: Ответить с цитатой

Большое спасибо. А с ползунком я так понимаю максимум 8 бит можно получить, а модули ввода и 12 и 14 бывают.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
fil74
Начинающий писатель


Зарегистрирован: 04.03.2011
Сообщения: 98

Сообщение Добавлено: Ср Апр 27, 2011 7:25    Заголовок сообщения: Ответить с цитатой

Ser Jon писал(а):
Большое спасибо. А с ползунком я так понимаю максимум 8 бит можно получить, а модули ввода и 12 и 14 бывают.
Поставь в поле адреса MW512 и увидишь ещё 8 бит
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Ser Jon



Зарегистрирован: 31.07.2009
Сообщения: 9

Сообщение Добавлено: Ср Апр 27, 2011 7:48    Заголовок сообщения: Ответить с цитатой

А почему именно 512? Ну да ладно

Сейчас другая проблема вылезла.

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

Примеры

L #RawValue;
L #UnderFlow;
<=I ;
SPB m_uf; Syntax error

или

// Channel 5 -> Data block
L PEW 266; Syntax error
T DB1.DBW 10;
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
valkov
Начинающий писатель


Зарегистрирован: 25.02.2011
Сообщения: 81

Сообщение Добавлено: Ср Апр 27, 2011 10:22    Заголовок сообщения: Ответить с цитатой

В оригинальных примерах в книжках часто приводятся куски программ на немецком диалекте STL,
поэтому когда набиваешь куски программы из книжки переводи мнемоники на интернациональный диалект
L PEW 266 ===>L PIW 266
SPB ===> JC Jumps Jump if RLO = 1
Таблица соответствия есть в справке STL = нажми F1
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Ser Jon



Зарегистрирован: 31.07.2009
Сообщения: 9

Сообщение Добавлено: Ср Апр 27, 2011 12:17    Заголовок сообщения: Ответить с цитатой

Спасибо, я бы не догадался )
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
ldar
Новый писатель


Зарегистрирован: 30.07.2009
Сообщения: 19

Сообщение Добавлено: Пт Май 06, 2011 6:36    Заголовок сообщения: Ответить с цитатой

Думаю эта темая сгодится...Разъясните пожалуйста новичку, что такое MCR (Главное управляющее реле) и для чего оно нужо? Если возможно с примером...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Негатив
Написал больше чем Вы читали


Зарегистрирован: 26.02.2006
Сообщения: 1059
Откуда: Липецк, ОАО "НЛМК"

Сообщение Добавлено: Пт Май 06, 2011 6:48    Заголовок сообщения: Ответить с цитатой

Никогда не пользовался. Из описания получается, что это что-то вроде постоянно действующего "аккумулятора" в 8 бит для логических функций, с несколькими особенностями.
Во встроенном "хелпе" описано. Вам перевести надо?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора ICQ Number
ldar
Новый писатель


Зарегистрирован: 30.07.2009
Сообщения: 19

Сообщение Добавлено: Пт Май 06, 2011 7:36    Заголовок сообщения: Ответить с цитатой

Спасибо, не не надо, хотелось бы примерчик с разьяснением. Просто не пойму его назначение...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов SIEMENS, Россия. IA&DT -> Системы автоматизации SIMATIC Часовой пояс: GMT + 3
На страницу 1, 2  След.
Страница 1 из 2

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB 2.0.11 © 2001, 2002 phpBB Group