На форуме обязательно:
  1. Заполнить свой профиль НА РУССКОМ ЯЗЫКЕ КИРИЛЛИЦЕЙ. См. Правила, п.2.d.
  2. Не писать свой вопрос в первую попавшуюся тему, а вместо этого создать свою. См. Правила, п.3.a.

Дублирование сообщений приравнивается к спаму. Рекламу мы не размещаем ни на каких условиях.

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

Ответить

Автор темы
bah
осмотрелся
осмотрелся
Сообщения: 163
Зарегистрирован: 08 апр 2015, 19:28
Имя: Бахвалов Виктор Викторович
Благодарил (а): 11 раз
Поблагодарили: 1 раз

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

Сообщение bah » 22 май 2018, 11:25

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

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

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

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

Сообщение Никита » 31 май 2018, 17:34

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


Михайло
почётный участник форума
почётный участник форума
Сообщения: 2656
Зарегистрирован: 10 ноя 2009, 04:58
Имя: Толмачев Михаил Алексеевич
Благодарил (а): 1 раз
Поблагодарили: 78 раз
Контактная информация:

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

Сообщение Михайло » 31 май 2018, 23:12

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

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

petr2off
частый гость
частый гость
Сообщения: 426
Зарегистрирован: 06 янв 2016, 19:45
Имя: Петров В.Л.
Благодарил (а): 6 раз
Поблагодарили: 15 раз

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

Сообщение petr2off » 01 июн 2018, 06:55

Добрый день. Михайло изложил несколько упрощенную версию. Правильнее сказать, что 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
эксперт
эксперт
Сообщения: 1011
Зарегистрирован: 11 ноя 2012, 17:21
Имя: Нурисламов Руслан М.
Благодарил (а): 23 раза
Поблагодарили: 28 раз

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

Сообщение ASUTP_PLC » 01 июн 2018, 08:02

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


winb
осмотрелся
осмотрелся
Сообщения: 163
Зарегистрирован: 31 янв 2017, 08:44
Имя: Маркушин Андрей Геннадьевич
Благодарил (а): 6 раз
Поблагодарили: 26 раз

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

Сообщение winb » 01 июн 2018, 08:20

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

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

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

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

Сообщение Никита » 01 июн 2018, 08:43

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


ASUTP_PLC
эксперт
эксперт
Сообщения: 1011
Зарегистрирован: 11 ноя 2012, 17:21
Имя: Нурисламов Руслан М.
Благодарил (а): 23 раза
Поблагодарили: 28 раз

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

Сообщение ASUTP_PLC » 01 июн 2018, 10:11

Никита писал(а):
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
не первый раз у нас
не первый раз у нас
Сообщения: 314
Зарегистрирован: 25 фев 2016, 12:18
Имя: Жидков Игорь Алексеевич
Благодарил (а): 1 раз
Поблагодарили: 7 раз
Контактная информация:

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

Сообщение izhidkov » 01 июн 2018, 10:41

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 например).
Ждет следующего такта внутреннего генератора, включает выходные каскады шины адреса и кладет в нее адрес.
Формирует на линии управления обменом по адресной шине сигнал готовности адреса и тип команды, т.е. что он читает. Ждет пока кеш-контроллер найдет память и выдаст ее на шину данных. Когда данные на шине кэш устанавливает линию "данные готовы". процессор читает эту линию и считывает данные с шины в тот регистр куда ему говорит инструкция.
(Для микроконтроллеров где нет кэша, микросхема памяти при получении сигнала на чтение сразу кладет данные на шину данных и процессор может ее считать сразу без анализа линии готовности данных)
Компилятор - лучший друг человека!

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

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

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

Сообщение Никита » 01 июн 2018, 11:07

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

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

izhidkov
не первый раз у нас
не первый раз у нас
Сообщения: 314
Зарегистрирован: 25 фев 2016, 12:18
Имя: Жидков Игорь Алексеевич
Благодарил (а): 1 раз
Поблагодарили: 7 раз
Контактная информация:

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

Сообщение izhidkov » 01 июн 2018, 11:25

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


ASUTP_PLC
эксперт
эксперт
Сообщения: 1011
Зарегистрирован: 11 ноя 2012, 17:21
Имя: Нурисламов Руслан М.
Благодарил (а): 23 раза
Поблагодарили: 28 раз

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

Сообщение ASUTP_PLC » 01 июн 2018, 13:39

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

Ответить

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