- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
Программирование ПЛК
Модератор: Глоб.модераторы
-
- не первый раз у нас
- Сообщения: 317
- Зарегистрирован: 08 апр 2015, 19:28
- Имя: Виктор
- Страна: Россия
- город/регион: Старый Оскол/Белгородская область
- Благодарил (а): 14 раз
- Поблагодарили: 2 раза
Программирование ПЛК
Вопрос такой, возможно глупый, но все-таки хотелось бы это выяснить, т.к. понимание этого облегчает процесс написания и чтения программ (для меня, по крайней мере): есть программа с последовательностью команд. Так вот, как выполняется каждая команда? А именно, что сначала процессор делает, что потом, куда записывает результаты. Интересует на примере программ Step 7, например: есть команда A I0.1. Какую последовательность действий выполняет процессор для выполнения этой команды? Что сначала, что потом? Можно ли найти доступное объяснение этого? Например, как это я понимаю: сначала часть программы загружается в рабочую память, потом выполняется каждая команда поочередно: сначала первая по списку, затем через адресный регистр процессор запрашивает значение входа (в данном примере, I0.1), далее выполняет операцию сравнения с 1 по логике И, результат записывается ... . Далее следующая команда и т. д. В таком виде, кто-нибудь может "разжевать" именно взаимосвязь между внутренними элементами структуры процессора, как они взаимодействуют друг с другом при выполнении программы? Заранее спасибо
-
- почётный участник форума
- Сообщения: 3971
- Зарегистрирован: 20 янв 2010, 22:23
- Имя: Никита
- Страна: РФ
- город/регион: Мурманск
- Благодарил (а): 21 раз
- Поблагодарили: 229 раз
Программирование ПЛК
Вряд-ли кто с такой подробностью расскажет, потому как устройство самого процессора лично мне подробно неизвестно. Хотя, не исключаю, что это просто "неуловимый Джо".
Это для 8086 литературы много было, какие регистры и какие флаги работают, а что у Сименса внутри - одному сименсу известно.
Собственно и вопрос Ваш не про программированию, а по устройству и работе процессора, а они разные. Найдете архитектуру своего процессора - найдете и ответ на свой вопрос)
Да и работает это не на уровне процессора, а на уровне ОС контроллера, она там таки есть, хотя и в непривычном виде.
Это для 8086 литературы много было, какие регистры и какие флаги работают, а что у Сименса внутри - одному сименсу известно.
Собственно и вопрос Ваш не про программированию, а по устройству и работе процессора, а они разные. Найдете архитектуру своего процессора - найдете и ответ на свой вопрос)
Да и работает это не на уровне процессора, а на уровне ОС контроллера, она там таки есть, хотя и в непривычном виде.
Опыт - это когда на смену вопросам: "Что? Где? Когда? Как? Почему?" приходит единственный вопрос: "Нахрена? "
-
- эксперт
- Сообщения: 3643
- Зарегистрирован: 10 ноя 2009, 04:58
- Имя: Толмачев Михаил Алексеевич
- город/регион: г. Чехов, МО
- Благодарил (а): 8 раз
- Поблагодарили: 286 раз
Программирование ПЛК
Процессоры из серии S7 оперируют так: они хранят текущее значение (бинарное) в аккумуляторе. Аккумулятор - это регистр, хранящий битовое значение.
После каждой операции значение оказывается в аккумуляторе. Операции типа AND, OR, XOR выполняются следующим образом: берётся значение аккумулятора, выполняется действие аккумулятора с указанным битом и затем результат операции снова записывается в аккумуляторе.
С операцией NOT всё гораздо проще: просто инвертируется значение аккумулятора.
После каждой операции значение оказывается в аккумуляторе. Операции типа AND, OR, XOR выполняются следующим образом: берётся значение аккумулятора, выполняется действие аккумулятора с указанным битом и затем результат операции снова записывается в аккумуляторе.
С операцией NOT всё гораздо проще: просто инвертируется значение аккумулятора.
-
- эксперт
- Сообщения: 1735
- Зарегистрирован: 06 янв 2016, 19:45
- Имя: Петров В.Л.
- Страна: Россия
- город/регион: Красноярск
- Благодарил (а): 78 раз
- Поблагодарили: 235 раз
Программирование ПЛК
Добрый день. Михайло изложил несколько упрощенную версию. Правильнее сказать, что 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 - сохраняем значение аккумулятора (сумму) в С
Разумеется это тоже грубая схема, действительность сложнее.
Тогда если у нас 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 - сохраняем значение аккумулятора (сумму) в С
Разумеется это тоже грубая схема, действительность сложнее.
-
- эксперт
- Сообщения: 1055
- Зарегистрирован: 11 ноя 2012, 18:21
- Имя: Нурисламов Руслан М.
- Страна: Казахстан
- город/регион: Алматы
- Благодарил (а): 23 раза
- Поблагодарили: 32 раза
Программирование ПЛК
Помоему у Семена ASIC ядро. И как он там это все делает - черный ящик. Из одного проекта было такое тестирование - по крайней мере, 60 ПИД регуляторов, опрос данных по шине, все данные свести к одному - и все работало в пределах цикла, 100мс, каждую секунду - изменения 10 раз.Никита писал(а): ↑31 май 2018, 17:34 Вряд-ли кто с такой подробностью расскажет, потому как устройство самого процессора лично мне подробно неизвестно. Хотя, не исключаю, что это просто "неуловимый Джо".
Это для 8086 литературы много было, какие регистры и какие флаги работают, а что у Сименса внутри - одному сименсу известно.
Собственно и вопрос Ваш не про программированию, а по устройству и работе процессора, а они разные. Найдете архитектуру своего процессора - найдете и ответ на свой вопрос)
Да и работает это не на уровне процессора, а на уровне ОС контроллера, она там таки есть, хотя и в непривычном виде.
И чихать что с плавающей точкой. Это делал и 313 контроллер, с памятью 64 кБ, и 315-2DP c ресурсами куда побольше...
Хотя... указанные моменты разместить в 64Кб было не так и просто. И редко редко, всеж как-то было такое что контроллер в стоп переходил.
//ну может в три-два месяца раз.
-
- освоился
- Сообщения: 248
- Зарегистрирован: 31 янв 2017, 08:44
- Имя: Маркушин Андрей Геннадьевич
- Страна: Россия
- город/регион: Нижегородская обл., Выкса
- Благодарил (а): 19 раз
- Поблагодарили: 64 раза
Программирование ПЛК
Не сочтите за занудство, но аккумуляторов таки может быть 4 (S7-400).
Какие флаги слова состояния устанавливаются и при каких командах подробно расписал дядюшка Бергер. Это если про STEP7.
Могу ошибаться, но в блоках регуляторов нет больших, так что ничего особо страшного для контроллера в их обработке нет, тем более что дискретность вызова блока вполне щадящая. 0.72 µs на операцию с плавающей точкой для CPU313 - вполне для этого достаточно. А вот с памятью, да, напряжёнка
-
- почётный участник форума
- Сообщения: 3971
- Зарегистрирован: 20 янв 2010, 22:23
- Имя: Никита
- Страна: РФ
- город/регион: Мурманск
- Благодарил (а): 21 раз
- Поблагодарили: 229 раз
Программирование ПЛК
Это ТС вроде и так понял. А вот кто может объяснить, как грузится память в аккумулятор? На уровне тактов?
Опыт - это когда на смену вопросам: "Что? Где? Когда? Как? Почему?" приходит единственный вопрос: "Нахрена? "
-
- эксперт
- Сообщения: 1055
- Зарегистрирован: 11 ноя 2012, 18:21
- Имя: Нурисламов Руслан М.
- Страна: Казахстан
- город/регион: Алматы
- Благодарил (а): 23 раза
- Поблагодарили: 32 раза
Программирование ПЛК
На уровне тактов знать должен леший и сам бог.
Сейчас студенты должны учить нас. Сказать эй, старперы, пришел хайп. Тут новое наваяли...
Подсмотрел программы для студентов на 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
-
- частый гость
- Сообщения: 404
- Зарегистрирован: 25 фев 2016, 12:18
- Имя: Жидков Игорь Алексеевич
- Страна: РФ
- город/регион: Королев/Фрязино
- Благодарил (а): 4 раза
- Поблагодарили: 12 раз
Программирование ПЛК
Я слышал что у 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 секунд:
А что там такого? Я конечно забыл все названия линий но всеже
В процессоре есть свой блок работы с памятью.
Процессор дешифрирует команду и видит что там например памяти по адресу ( 0хXXXX_XXXX например).
Ждет следующего такта внутреннего генератора, включает выходные каскады шины адреса и кладет в нее адрес.
Формирует на линии управления обменом по адресной шине сигнал готовности адреса и тип команды, т.е. что он читает. Ждет пока кеш-контроллер найдет память и выдаст ее на шину данных. Когда данные на шине кэш устанавливает линию "данные готовы". процессор читает эту линию и считывает данные с шины в тот регистр куда ему говорит инструкция.
(Для микроконтроллеров где нет кэша, микросхема памяти при получении сигнала на чтение сразу кладет данные на шину данных и процессор может ее считать сразу без анализа линии готовности данных)
Компилятор - лучший друг человека!
-
- почётный участник форума
- Сообщения: 3971
- Зарегистрирован: 20 янв 2010, 22:23
- Имя: Никита
- Страна: РФ
- город/регион: Мурманск
- Благодарил (а): 21 раз
- Поблагодарили: 229 раз
Программирование ПЛК
Так в этом вся загвоздка. Если на уровне 580-го процессора я это мог себе представить, более того, были учебные комплекты, которые позволяли кнопкой тактировать процессор и смотреть ноги, флаги и шины (ес-но не самого процессора, эмуляция), то как это сделано в том же 486 - уже вопрос. Начиная от нюансов защищенного режима, и заканчивая тем же кешем и, кстати, прерываниями. Про пентиумы и схемы предсказания переходов вообще лучше не вспоминать. Плюс, взаимодействие с ОС.
Так что для х86 в реальном режиме еще можно предстказывать, можно даже читать, того же Танненбаума, я в свое время еще Нортона читал, хотя там про сам процессор совсем немного, больше про обвязку и прерывания ОС.
А как происходит выполнение команды [ассемблера] в современных процах - этого, боюсь, даже сами разработчики процессора уже могут не знать, ибо новые процессоры компонуются не из транзисторов, а из готовых блоков.
Так что для х86 в реальном режиме еще можно предстказывать, можно даже читать, того же Танненбаума, я в свое время еще Нортона читал, хотя там про сам процессор совсем немного, больше про обвязку и прерывания ОС.
А как происходит выполнение команды [ассемблера] в современных процах - этого, боюсь, даже сами разработчики процессора уже могут не знать, ибо новые процессоры компонуются не из транзисторов, а из готовых блоков.
Опыт - это когда на смену вопросам: "Что? Где? Когда? Как? Почему?" приходит единственный вопрос: "Нахрена? "
-
- частый гость
- Сообщения: 404
- Зарегистрирован: 25 фев 2016, 12:18
- Имя: Жидков Игорь Алексеевич
- Страна: РФ
- город/регион: Королев/Фрязино
- Благодарил (а): 4 раза
- Поблагодарили: 12 раз
Программирование ПЛК
Также и происходит. Есть у AMD в открытом доступе мануал по архитектуре x64. Можно читать сколько влезет - подробно описано "как, соклько чего и где". Только вот в таких подробностях оно интересно только разработчику операционной системы. Да и психически здровому человеку опасно открывать этот 2000 страничный технический документ)
Компилятор - лучший друг человека!
-
- эксперт
- Сообщения: 1055
- Зарегистрирован: 11 ноя 2012, 18:21
- Имя: Нурисламов Руслан М.
- Страна: Казахстан
- город/регион: Алматы
- Благодарил (а): 23 раза
- Поблагодарили: 32 раза
Программирование ПЛК
Идея не новая. Раньше еще союз не развалился, были разработки матричных процессоров. Как то же эта штука обрабатывала дикие объемы информации? Задачи 3D сейсмики считали. Нет тут никого, кто бы в Киеве в конце 80-х по данной теме чему нибудь учился?