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

Программирование ПЛК

Модератор: Глоб.модераторы

Ответить

Автор темы
bah
не первый раз у нас
не первый раз у нас
Сообщения: 317
Зарегистрирован: 08 апр 2015, 19:28
Имя: Виктор
Страна: Россия
город/регион: Старый Оскол/Белгородская область
Благодарил (а): 14 раз
Поблагодарили: 2 раза

Программирование ПЛК

Сообщение bah »

Вопрос такой, возможно глупый, но все-таки хотелось бы это выяснить, т.к. понимание этого облегчает процесс написания и чтения программ (для меня, по крайней мере): есть программа с последовательностью команд. Так вот, как выполняется каждая команда? А именно, что сначала процессор делает, что потом, куда записывает результаты. Интересует на примере программ Step 7, например: есть команда A I0.1. Какую последовательность действий выполняет процессор для выполнения этой команды? Что сначала, что потом? Можно ли найти доступное объяснение этого? Например, как это я понимаю: сначала часть программы загружается в рабочую память, потом выполняется каждая команда поочередно: сначала первая по списку, затем через адресный регистр процессор запрашивает значение входа (в данном примере, I0.1), далее выполняет операцию сравнения с 1 по логике И, результат записывается ... . Далее следующая команда и т. д. В таком виде, кто-нибудь может "разжевать" именно взаимосвязь между внутренними элементами структуры процессора, как они взаимодействуют друг с другом при выполнении программы? Заранее спасибо
Аватара пользователя

Никита
почётный участник форума
почётный участник форума
Сообщения: 3971
Зарегистрирован: 20 янв 2010, 22:23
Имя: Никита
Страна: РФ
город/регион: Мурманск
Благодарил (а): 21 раз
Поблагодарили: 229 раз

Программирование ПЛК

Сообщение Никита »

Вряд-ли кто с такой подробностью расскажет, потому как устройство самого процессора лично мне подробно неизвестно. Хотя, не исключаю, что это просто "неуловимый Джо".
Это для 8086 литературы много было, какие регистры и какие флаги работают, а что у Сименса внутри - одному сименсу известно.
Собственно и вопрос Ваш не про программированию, а по устройству и работе процессора, а они разные. Найдете архитектуру своего процессора - найдете и ответ на свой вопрос)
Да и работает это не на уровне процессора, а на уровне ОС контроллера, она там таки есть, хотя и в непривычном виде.
Опыт - это когда на смену вопросам: "Что? Где? Когда? Как? Почему?" приходит единственный вопрос: "Нахрена? "

Михайло
эксперт
эксперт
Сообщения: 3643
Зарегистрирован: 10 ноя 2009, 04:58
Имя: Толмачев Михаил Алексеевич
город/регион: г. Чехов, МО
Благодарил (а): 8 раз
Поблагодарили: 286 раз

Программирование ПЛК

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

Процессоры из серии S7 оперируют так: они хранят текущее значение (бинарное) в аккумуляторе. Аккумулятор - это регистр, хранящий битовое значение.
После каждой операции значение оказывается в аккумуляторе. Операции типа AND, OR, XOR выполняются следующим образом: берётся значение аккумулятора, выполняется действие аккумулятора с указанным битом и затем результат операции снова записывается в аккумуляторе.
С операцией NOT всё гораздо проще: просто инвертируется значение аккумулятора.
Аватара пользователя

petr2off
эксперт
эксперт
Сообщения: 1735
Зарегистрирован: 06 янв 2016, 19:45
Имя: Петров В.Л.
Страна: Россия
город/регион: Красноярск
Благодарил (а): 78 раз
Поблагодарили: 235 раз

Программирование ПЛК

Сообщение petr2off »

Добрый день. Михайло изложил несколько упрощенную версию. Правильнее сказать, что S7 поддерживает архитектуру с регистрами аккумуляторами (их 2 на самом деле). Есть в природе и другие архитектуры, нажим,пример стековая. Смысл архитектурных изысков - сократить размер команды. В идеале до одного слова, что бы она считывалась за 1 такт. Предположим, что слово у нас 32 бита, а адрес, пусть будет 24 бита. Тема формирования адреса - это отдельная тема.
Тогда если у нас 3-х операндная архитектура (1-й операнд, 2-й операнд и результат), т.е. команда смотрится как OP A,B,C ( C = A OP B) для формировании команды нам потребуется (при условии, что на команду мы отведем 8 бит) 8 + 24 + 24 + 24 = 80 бит, т.е. 3 слова - команда будет выбираться из памяти 3 такта. Для 2-х операндной архитектуры (B = A OP B) мы имеем 8 + 24 + 24 = 54 бит, т.е. 2 слова - команда будет выбираться 2 такта. Ну и аккумуляторная машина, один из операндов - это всегда аккумулятор, естественно появляется необходимость в 2-х доп командах загрузка аккумулятора (ЗА) и сохранения аккумулятора (СА). Команда получается однооперандная и выбирается за один такт. Т.е. С = A + B будет выглядеть как
ЗА А - загружаем А в аккумулятор
ADD B - складываем B с аккумуляторами
СА C - сохраняем значение аккумулятора (сумму) в С
Разумеется это тоже грубая схема, действительность сложнее.

ASUTP_PLC
эксперт
эксперт
Сообщения: 1055
Зарегистрирован: 11 ноя 2012, 18:21
Имя: Нурисламов Руслан М.
Страна: Казахстан
город/регион: Алматы
Благодарил (а): 23 раза
Поблагодарили: 32 раза

Программирование ПЛК

Сообщение ASUTP_PLC »

Никита писал(а): 31 май 2018, 17:34 Вряд-ли кто с такой подробностью расскажет, потому как устройство самого процессора лично мне подробно неизвестно. Хотя, не исключаю, что это просто "неуловимый Джо".
Это для 8086 литературы много было, какие регистры и какие флаги работают, а что у Сименса внутри - одному сименсу известно.
Собственно и вопрос Ваш не про программированию, а по устройству и работе процессора, а они разные. Найдете архитектуру своего процессора - найдете и ответ на свой вопрос)
Да и работает это не на уровне процессора, а на уровне ОС контроллера, она там таки есть, хотя и в непривычном виде.
Помоему у Семена ASIC ядро. И как он там это все делает - черный ящик. Из одного проекта было такое тестирование - по крайней мере, 60 ПИД регуляторов, опрос данных по шине, все данные свести к одному - и все работало в пределах цикла, 100мс, каждую секунду - изменения 10 раз.
И чихать что с плавающей точкой. Это делал и 313 контроллер, с памятью 64 кБ, и 315-2DP c ресурсами куда побольше...
Хотя... указанные моменты разместить в 64Кб было не так и просто. И редко редко, всеж как-то было такое что контроллер в стоп переходил.
//ну может в три-два месяца раз.

winb
освоился
освоился
Сообщения: 248
Зарегистрирован: 31 янв 2017, 08:44
Имя: Маркушин Андрей Геннадьевич
Страна: Россия
город/регион: Нижегородская обл., Выкса
Благодарил (а): 19 раз
Поблагодарили: 64 раза

Программирование ПЛК

Сообщение winb »

petr2off писал(а): 01 июн 2018, 06:55 их 2 на самом деле
Не сочтите за занудство, но аккумуляторов таки может быть 4 (S7-400).
Какие флаги слова состояния устанавливаются и при каких командах подробно расписал дядюшка Бергер. Это если про STEP7.
ASUTP_PLC писал(а): 01 июн 2018, 08:02 60 ПИД регуляторов
Могу ошибаться, но в блоках регуляторов нет больших, так что ничего особо страшного для контроллера в их обработке нет, тем более что дискретность вызова блока вполне щадящая. 0.72 µs на операцию с плавающей точкой для CPU313 - вполне для этого достаточно. А вот с памятью, да, напряжёнка :ges_hmm:
Аватара пользователя

Никита
почётный участник форума
почётный участник форума
Сообщения: 3971
Зарегистрирован: 20 янв 2010, 22:23
Имя: Никита
Страна: РФ
город/регион: Мурманск
Благодарил (а): 21 раз
Поблагодарили: 229 раз

Программирование ПЛК

Сообщение Никита »

Это ТС вроде и так понял. А вот кто может объяснить, как грузится память в аккумулятор? На уровне тактов?
Опыт - это когда на смену вопросам: "Что? Где? Когда? Как? Почему?" приходит единственный вопрос: "Нахрена? "

ASUTP_PLC
эксперт
эксперт
Сообщения: 1055
Зарегистрирован: 11 ноя 2012, 18:21
Имя: Нурисламов Руслан М.
Страна: Казахстан
город/регион: Алматы
Благодарил (а): 23 раза
Поблагодарили: 32 раза

Программирование ПЛК

Сообщение ASUTP_PLC »

Никита писал(а): 01 июн 2018, 08:43 Это ТС вроде и так понял. А вот кто может объяснить, как грузится память в аккумулятор? На уровне тактов?
На уровне тактов знать должен леший и сам бог.
Сейчас студенты должны учить нас. Сказать эй, старперы, пришел хайп. Тут новое наваяли...
Подсмотрел программы для студентов на VHDL.
Одна программка на исключение дребезга кнопки. //явно где-нибудь в Key - panel стоит.
http://www.fpga4student.com/2017/08/vhd ... -fpga.html
Вот пример реализации 8 бит микроконтроллера.
http://www.fpga4student.com/2016/12/a-c ... -vhdl.html
Значит добавить ALU которое с вещественными числами считает. Не хочу его FPU называть, хотя может с таким названием правильнее. В Сименсе оно неплохое, но школьный Pascal c типами double и exteneded задвинет по точности.
Один аккумулятор вмещает 32 разрядное число в вещественном типе. Значит в 4 раза пошире сетка, чем в примере.
Говорят что у Krone на 64 бит числа микроконтроллеры считают. Поэтому их любят для обсчета нефти и газа использовать.

Отправлено спустя 9 минут 10 секунд:
Вот еще нашел. Отсюда уже видно, какие области есть предназначенные для данных
http://www.fpga4student.com/2017/04/ver ... essor.html
Аватара пользователя

izhidkov
частый гость
частый гость
Сообщения: 404
Зарегистрирован: 25 фев 2016, 12:18
Имя: Жидков Игорь Алексеевич
Страна: РФ
город/регион: Королев/Фрязино
Благодарил (а): 4 раза
Поблагодарили: 12 раз

Программирование ПЛК

Сообщение izhidkov »

ASUTP_PLC писал(а): 01 июн 2018, 08:02 Помоему у Семена ASIC ядро.
Я слышал что у S7-300 база 80486 процы )

По теме вопроса: В любом случае стоит читать Таненбаума "Архитектура ПК". в части вычислений ARM, x86, AVR - для понимания принципа работы проца разницы особой нет.
Ну да в таком духе: процессор имеет стек с программой и указатель стека программы IP вроде. Считывает инструкцию, увеличивает свой IP. После считывания команды процессор делает то что написано в инструкции. Вообще говоря инструкций в x86 может быть под сотню, но основные это загрузка регистров процессора из памяти, перемещение данных в регистрах, математические операции в регистрах (включая операции с счетчиком команд).
Таким образом имя команду A I0.1 , мы имеем команду AND которая в семене(s7) работает с предыдущим RLO т.е. с результатом предыдушей логической операции.
Значит вероятнее всего проц делает следующее: (в случае 8 битной памяти, но с большей разрядностью там аналогично все)
1) считывает в аккумулятор2 из памяти которая ответственна за адрес I0 байт в память (предварительно весь образ входов/выходов в начале такта уже считан с входов/выходов)
2) сдвигает аккумулятор2 на число битов вправопо номеру бита который ты записал т.е. на 1 бит влево
3) делает маску на младший бит, т.е. логически умножает аккумулятор2 на 0x01 (b0000_0001)
4) логически умножает аккумулятор1 на аккумулятор2 и кладет результат аккумулятор1, т.е там теперь хранится RLO от операции A I0.1
Вообще же все сильно упрощено, т.к. все зависит от конкретного типа процессора, режима его работы и от программиста, который делал компилирование из IL в ASM.

Все сказанное выше мое сугубо личное мнение и может отличаться от действительности

Отправлено спустя 11 минут 9 секунд:
ASUTP_PLC писал(а): 01 июн 2018, 10:21 На уровне тактов знать должен леший и сам бог.
А что там такого? Я конечно забыл все названия линий но всеже
В процессоре есть свой блок работы с памятью.
Процессор дешифрирует команду и видит что там например памяти по адресу ( 0хXXXX_XXXX например).
Ждет следующего такта внутреннего генератора, включает выходные каскады шины адреса и кладет в нее адрес.
Формирует на линии управления обменом по адресной шине сигнал готовности адреса и тип команды, т.е. что он читает. Ждет пока кеш-контроллер найдет память и выдаст ее на шину данных. Когда данные на шине кэш устанавливает линию "данные готовы". процессор читает эту линию и считывает данные с шины в тот регистр куда ему говорит инструкция.
(Для микроконтроллеров где нет кэша, микросхема памяти при получении сигнала на чтение сразу кладет данные на шину данных и процессор может ее считать сразу без анализа линии готовности данных)
Компилятор - лучший друг человека!
Аватара пользователя

Никита
почётный участник форума
почётный участник форума
Сообщения: 3971
Зарегистрирован: 20 янв 2010, 22:23
Имя: Никита
Страна: РФ
город/регион: Мурманск
Благодарил (а): 21 раз
Поблагодарили: 229 раз

Программирование ПЛК

Сообщение Никита »

Так в этом вся загвоздка. Если на уровне 580-го процессора я это мог себе представить, более того, были учебные комплекты, которые позволяли кнопкой тактировать процессор и смотреть ноги, флаги и шины (ес-но не самого процессора, эмуляция), то как это сделано в том же 486 - уже вопрос. Начиная от нюансов защищенного режима, и заканчивая тем же кешем и, кстати, прерываниями. Про пентиумы и схемы предсказания переходов вообще лучше не вспоминать. Плюс, взаимодействие с ОС.
Так что для х86 в реальном режиме еще можно предстказывать, можно даже читать, того же Танненбаума, я в свое время еще Нортона читал, хотя там про сам процессор совсем немного, больше про обвязку и прерывания ОС.
А как происходит выполнение команды [ассемблера] в современных процах - этого, боюсь, даже сами разработчики процессора уже могут не знать, ибо новые процессоры компонуются не из транзисторов, а из готовых блоков.
Опыт - это когда на смену вопросам: "Что? Где? Когда? Как? Почему?" приходит единственный вопрос: "Нахрена? "
Аватара пользователя

izhidkov
частый гость
частый гость
Сообщения: 404
Зарегистрирован: 25 фев 2016, 12:18
Имя: Жидков Игорь Алексеевич
Страна: РФ
город/регион: Королев/Фрязино
Благодарил (а): 4 раза
Поблагодарили: 12 раз

Программирование ПЛК

Сообщение izhidkov »

Никита писал(а): 01 июн 2018, 11:07 А как происходит выполнение команды [ассемблера] в современных процах - этого, боюсь, даже сами разработчики процессора уже могут не знать, ибо новые процессоры компонуются не из транзисторов, а из готовых блоков.
Также и происходит. Есть у AMD в открытом доступе мануал по архитектуре x64. Можно читать сколько влезет - подробно описано "как, соклько чего и где". Только вот в таких подробностях оно интересно только разработчику операционной системы. Да и психически здровому человеку опасно открывать этот 2000 страничный технический документ)
Компилятор - лучший друг человека!

ASUTP_PLC
эксперт
эксперт
Сообщения: 1055
Зарегистрирован: 11 ноя 2012, 18:21
Имя: Нурисламов Руслан М.
Страна: Казахстан
город/регион: Алматы
Благодарил (а): 23 раза
Поблагодарили: 32 раза

Программирование ПЛК

Сообщение ASUTP_PLC »

Идея не новая. Раньше еще союз не развалился, были разработки матричных процессоров. Как то же эта штука обрабатывала дикие объемы информации? Задачи 3D сейсмики считали. Нет тут никого, кто бы в Киеве в конце 80-х по данной теме чему нибудь учился?
Ответить

Вернуться в «Вопросы от студентов»